Как программно задать видовому экрану именованный вид?

Автор Тема: Как программно задать видовому экрану именованный вид?  (Прочитано 22534 раз)

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

Оффлайн D_TRex

  • ADN OPEN
  • ***
  • Сообщений: 104
  • Карма: 0
Александр Ривилис, Видел несколько Ваших постов и пробовал применить. Я новичёк тут и вообще на форумах, так что не совсем понял про форматирование, точнее вставил в тег code.

Но увидел видео, впредь если доведётся то буду форматировать как нужно, мой пост то Вы поправили

По сути вопроса, я же скинул картинку и вроде описал, мне хотелось бы создавать листы с нужным мне содержимым видового экрана, либо клонировать один и указывать что именно он будет отображать. Я Инженер по ВК со стажем почти 20 лет и вот эта рутина когда надо чертежи раскладывать по листам очень удручает.

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

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

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Собственно говоря у тебя в строке:
Код - vb.net [Выбрать]
  1. CadVport = CadDoc.PaperSpace.AddPViewport(CadCenter, 420, 297)
следует задать правильный CadCenter, который бы указывал на центр вида в ModelSpace. Да и не 420 и 297 должно быть, а ширина и высота листа в ModelSpace, а не на бумаге.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн D_TRex

  • ADN OPEN
  • ***
  • Сообщений: 104
  • Карма: 0
CopyFrom я находил по моему даже на этом форуме, но и там решилось всё созданием просто нового Layout с указанием индекса.

"только свойство Center" вот тут то собака и зарыта, изменением свойства Center я двигаю область печати но в Layout, то есть белый контур который выводится на печать, но ни как не содержимое которое должно выводиться на печать. Поэтому в коде я вхожу в редактирование модели через область листа, а вот дальше к кому обратиться не знаю.

Как вариант (я тоже так делаю - руками) тут тоже встречалось, что я растягиваю рамку до нужных размеров в сторону (что бы нужная область чертежа попала в видовой экран) и потом видовой экран возвращаю на "белый лист" для печати.
http://www.normativ.go.kg/organ/%d0%9b%d0%b8%d1%81%d1%82%d1%8b.dwg не нашёл как загрузить файл

Оффлайн D_TRex

  • ADN OPEN
  • ***
  • Сообщений: 104
  • Карма: 0
следует задать правильный CadCenter, который бы указывал на центр вида в ModelSpace. Да и не 420 и 297 должно быть, а ширина и высота листа в ModelSpace, а не на бумаге.
Получается я на листе создаю PViewport не где мне заблагорассудится, а именно там где у меня в модели находится нужное содержимое. Размер листа верен тут тысячный масштаб и печать один к одному, с этим проблем нет

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

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

Оффлайн D_TRex

  • ADN OPEN
  • ***
  • Сообщений: 104
  • Карма: 0
Это вопрос или утверждение?
Это вопрос. Сегодня уже не проверю, завтра попробую и отпишу. Скорее всего это решение так как у меня первый лист встаёт идеально, потому что он совпадает координатами с моделью. Блин я неделю рыл и книгу уже Полищюка (тут нашёл ссылку) штудировал. Пока спасибо, по результатам отпишу и наверное закину разкомментированный код - хоть я самоучка, но реально мало информации по этому делу.
По поводу CopyFrom если попадётся пример кода скиньте пожалуйста
Спасибо Вам за помощь.

Оффлайн D_TRex

  • ADN OPEN
  • ***
  • Сообщений: 104
  • Карма: 0
Код - vb.net [Выбрать]
  1. CadCenter(0) = 210 : CadCenter(1) = 148.5 : CadCenter(2) = 0
  2. CadVport = CadDoc.PaperSpace.AddPViewport(CadCenter, 420, 297)
  3.  
  4. CadCenter(0) = 630 : CadCenter(1) = 148.5 : CadCenter(2) = 0
  5. CadVport = CadDoc.PaperSpace.AddPViewport(CadCenter, 420, 297)
  6.  
  7. CadCenter(0) = 210 : CadCenter(1) = -148.5 : CadCenter(2) = 0
  8. CadVport = CadDoc.PaperSpace.AddPViewport(CadCenter, 420, 297)
  9.  
  10. CadCenter(0) = 630 : CadCenter(1) = -148.5 : CadCenter(2) = 0
  11. CadVport = CadDoc.PaperSpace.AddPViewport(CadCenter, 420, 297)
Нет чего то не хватает.

Вот так выглядит в модели и что бы не засорять я все скрины не буду скидывать, но кроме того что видовой экран не в печатаемой области, так ещё и видит он одну и ту же область чертеж, номер один только на месте.

Ну и соответственно третий лист стоит под белой областью, а четвёртый по диагонали, но отображают все только рамку номер 1 из чертежа.

С перемещение белой области решил с помощью CadLayot.SetWindowToPlot, а вот с областью печати уже вторую неделю бьюсь

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
У меня нет возможности сейчас проверять, поэтому попробую в виде рекомендации:
1. Создаёшь лист
2. Создаешь видовой экран в листе.
3. Переключаешься в пространство модели внутри листа.
4. Выполняешь ZoomCenter с центром в центре твоего прямоугольника в модели (можно также попробовать и ZoomWindow)
Главное, что пункт 4. следует выполнять в пространстве модели:
Код - Visual Basic [Выбрать]
  1. ThisDrawing.ActiveSpace = acPaperSpace
  2. ThisDrawing.mspace = True
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн D_TRex

  • ADN OPEN
  • ***
  • Сообщений: 104
  • Карма: 0
Код - vb.net [Выбрать]
  1. CadDoc.MSpace = True ' вошёл в редактирование модели в окне листа
  2. ' скорее всего не сработает, потом удали
  3. CadVP = CadDoc.Viewports.Item(0) ' CadDoc.ActiveViewport не находит вид
  4. XY1(0) = grdList.Rows(X).Cells(8).Value : XY1(1) = grdList.Rows(X).Cells(9).Value
  5. CadVP.Center = XY1



Вот эти параметры надо поменять, они в каде закрыты для редактирования. То что Вы занят ни чего страшного, я сам неделю не работал - короче навёрстывать надо. Буду ждать подсказок, как вариант ещё думаю зайти с другой стороны, создать надо именованный вид и попробую его редактировать, так как по умолчанию нет активного вида, но лишь бы он редактировался не динамически, так как не охото засорять чертёж - хотя где то я находил макрос и по моему именно так там было написано, команду на отключение создания видовых экранов в листах только утратил.

На слово Zoom нет вариантов.

Пробовал создать экран сразу на все возможные листы (думал в крайнем случае потом руками подгоню) но центр видового экрана как будто где то в чертеже прописан - я изменял все вводимые цифры.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
На слово Zoom нет вариантов.
Плохо искал: https://help.autodesk.com/view/OARX/2019/FRA/?guid=GUID-16BDEA18-4555-4EA7-A426-9A9E5683AC9B
Должно быть как-то так:
Код - vb.net [Выбрать]
  1. CadDoc.MSpace = True
  2. CadDoc.Application.ZoomCenter(XY1,1.0) ' Возможно масштаб потребуется изменить.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн D_TRex

  • ADN OPEN
  • ***
  • Сообщений: 104
  • Карма: 0
Вы просто гуру, не понятно почему масштаб видового экрана становится 297, но дело поправимое, к сожалению не вижу кнопку "Решение", ну и по результатам тестов и упорядочивания кода - закину. Я просто рыл в сторону View, а оказалось в Application.ZoomCenter, да и избегаю я API так как это привязка в библиотеке - хотя вроде уже не такая жёсткая как раньше

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Вы просто гуру, не понятно почему масштаб видового экрана становится 297
Можешь тогда попробовать вместо ZoomCener:
Код - Visual Basic [Выбрать]
  1. CadDoc.Application.ZoomWindow(pt1, pt2)
где pt1 - нижняя левая точка прямоугольника, а pt2 - правая верхняя точка прямоугольника.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

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

Оффлайн D_TRex

  • ADN OPEN
  • ***
  • Сообщений: 104
  • Карма: 0
Код - vb.net [Выбрать]
  1. CadDoc.MSpace = True
  2. CadDoc.Application.ZoomCenter(XY1,1.0) ' Возможно масштаб потребуется изменить.
Тогда это решение, ну а я постараюсь собрать код и закину, сейчас работать надо, не когда кодить, потом соберу и закину в тему, реально в просторах инета нет решения по этому поводу