Запоминает установки печати, распространяя их на то что не нужно

Автор Тема: Запоминает установки печати, распространяя их на то что не нужно  (Прочитано 19550 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Еще один вариант. Попробуй выполнить перед печатью команду _ZOOM _Window p1 p2
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн ДамирАвтор темы

  • ADN Club
  • **
  • Сообщений: 94
  • Карма: 1
А в какой последовательности ее применять?
Как ни пробовал - везде ошибки связанные либо с типом данных либо с лишней координатой. В точках добавил третью координату для Translate...

Вариант 1:
 p1 = array(Cdbl(100), Cdbl(100), Cdbl(0))
 p2 = array(Cdbl(5000), Cdbl(5000), Cdbl(0))
 p1 = Draw.Utility.TranslateCoordinates(p1, acWorld, acDisplayDCS, False) 'ОШИБКА: недопустимый аргумент Point1 в Translate Coordinates
 p2 = Draw.Utility.TranslateCoordinates(p2, acWorld, acDisplayDCS, False)
 ReDim Preserve p1(2)
 ReDim Preserve p2(2)
 p1 = ThisApplication.Utility.VariantToArray(p1)
 p2 = ThisApplication.Utility.VariantToArray(p2)
 Draw.Utility.CreateTypedArray s, vbDouble, 0.0, 0.0
 Draw.Utility.CreateTypedArray e, vbDouble, 500.0, 500.0
 olayt.SetWindowToPlot p1, p2

Вариант 2:

p1 = ThisApplication.Utility.VariantToArray(array(Cdbl(100), Cdbl(100), Cdbl(0)))
p2 = ThisApplication.Utility.VariantToArray(array(Cdbl(5000), Cdbl(5000), Cdbl(0)))
p1 = Draw.Utility.TranslateCoordinates(p1, acWorld, acDisplayDCS, False)
p2 = Draw.Utility.TranslateCoordinates(p2, acWorld, acDisplayDCS, False)
ReDim Preserve p1(2) ОШИБКА: несоответствие типа p1
ReDim Preserve p2(2)
olayt.SetWindowToPlot p1, p2

Сколько голов, столько умов. Но голов больше

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Второй вариант ближе. Но Redim здесь не проходит. Тебе нужно создать новый двумерный массив (например p11), взяв для него из p1 x и y
Заодно распечатай полученные значения.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн ДамирАвтор темы

  • ADN Club
  • **
  • Сообщений: 94
  • Карма: 1
Код - Visual Basic [Выбрать]
  1. p1 = ThisApplication.Utility.VariantToArray(array(Cdbl(100), Cdbl(100), Cdbl(0)))
  2. p2 = ThisApplication.Utility.VariantToArray(array(Cdbl(5000), Cdbl(5000), Cdbl(0)))
  3. p1 = Draw.Utility.TranslateCoordinates(p1, acWorld, acDisplayDCS, False)
  4. p2 = Draw.Utility.TranslateCoordinates(p2, acWorld, acDisplayDCS, False)
  5. Dim p11(2)
  6. Dim p22(2)
  7. p11(0) = p1(0) ОШИБКА: несоответствие типа p1
  8. p11(1) = p1(1)
  9. p22(0) = p2(0)
  10. p22(1) = p2(1)

ругается думаю потому что не понимает измененный тип. Если делать 2 координаты вместо 3, не даст осуществить TranslateCoordinates
Сколько голов, столько умов. Но голов больше

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Увы, но это тот редкий случай, когда я ничем помочь не могу. Ошибка явно связана с неправильными данными, передаваемыми в AutoCAD, а как их правильно подготовить для VBS я не подскажу.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн ДамирАвтор темы

  • ADN Club
  • **
  • Сообщений: 94
  • Карма: 1
В любом случае весьма вам благодарен. Опубликую решение, если его найду
Сколько голов, столько умов. Но голов больше

Отмечено как Решение Александр Ривилис 19-11-2015, 18:11:16

Оффлайн ДамирАвтор темы

  • ADN Club
  • **
  • Сообщений: 94
  • Карма: 1
Итак, нашел причину!
Дело было в непонимании vbs'ом констант принятых в AutoCAD. Поменял вместо acWindow цифру 4. Т.е. vbs не понимал что acWindow это константа отвечающая за тип Plot  - Рамка. Остальные методы вроде как адекватно работают с константами.

Код - Visual Basic [Выбрать]
  1. olayt.SetWindowToPlot p1, p2
  2. olayt.PlotType = 4 'acWindow
  3. olayt.CenterPlot = True
  4. olayt.PlotRotation = ac0degrees '0
  5. olayt.StandardScale = acScaleToFit  '0
  6. olayt.RefreshPlotDeviceInfo
  7.  
Всем спасибо! Главное не сдаватья)
Сколько голов, столько умов. Но голов больше

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Всем спасибо! Главное не сдаватья)
Это точно! А попробуй распечатать значение acWindow. Я смотрю что остальные константы у тебя равны 0. Может и эта воспринимается как 0.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн ДамирАвтор темы

  • ADN Club
  • **
  • Сообщений: 94
  • Карма: 1
Результат распечатки всех констант - пустое множество. Оно и верно, откуда знать внешнему vbs'у о константах имеющихся внутри стороннего Автокада. Все перевел в цифры)
Сколько голов, столько умов. Но голов больше

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Интересно. А такую константу он тоже не знает: AcPlotType.acWindow ?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн ДамирАвтор темы

  • ADN Club
  • **
  • Сообщений: 94
  • Карма: 1
vbs потребовал объект AcPlotType. Ну тоже верно. Он ей тоже не известен. Думаю надо так: AutoCADApplication.ПолучитьКонстанты.AcPlotType.acWindow - утрированный пример. Т.е. от автокада он знает только приложение как объект. Но зачем эти ветки если можно указать цифрой нужное свойство
Сколько голов, столько умов. Но голов больше

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Но зачем эти ветки если можно указать цифрой нужное свойство
Увы, но в разных версиях AutoCAD эти константы могут отличаться. Если работа идёт с одной версией, то это не проблема...
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Впрочем, я проверил, что как минимум с AutoCAD 2006 до 2016 acWindow имеет постоянное значение 4.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн ДамирАвтор темы

  • ADN Club
  • **
  • Сообщений: 94
  • Карма: 1
Вы как всегда правы - методы действительно меняются. Я читаю справку к 2015 внутри VBA модуля
Сколько голов, столько умов. Но голов больше

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Кстати, теперь стало совершенно понятно почему мы видели в pdf-файле именно то, что было на экране AutoCAD. Т.к. значение acWindow не находилось и заменялось на 0, то фактически применялось значение acDisplay (равное 0) и соотвественно печаталось то, что было видно на экране.
Код - C++ [Выбрать]
  1. enum AcPlotType
  2. {  acDisplay    = 0,                /* 0 */
  3.    acExtents    = acDisplay + 1,    /* 1 */
  4.    acLimits     = acExtents + 1,    /* 2 */
  5.    acView       = acLimits + 1,     /* 3 */
  6.    acWindow     = acView + 1,       /* 4 */
  7.    acLayout     = acWindow + 1      /* 5 */
  8. }  AcPlotType;
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение