|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
05.10.2016, 08:34 | #1 | |
VBA AUTOCAD помогите новичку понять алгоритмы взаимодействия VBA и Autocad
Регистрация: 18.09.2015
Сообщений: 120
|
||
Просмотров: 11460
|
|
||||
КЖ; C# Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,589
|
Цитата:
Схема самой объектной модели есть в справке к автокаду, вот ее фрагмент: В той же справке очень подробно и с примерами расписаны свойства и методы каждого объекта модели и их взаимодействие между собой. В книгах и статьях слабо отражен аспект написание программ на VBA под Autocad именно по причине наличия очень, ОЧЕНЬ, подробной справки. (подробной, до определенной границы) Так же, на скудность книг, влияет тот факт, что IDE VBA, имеет достаточно продвинутый отладчик и потому в режиме пошаговой отладки, можно и без справки разобраться что , да как. По поводу Вашего алгоритма. Мой совет, начните писать код, пробуйте, и предметно, с кусками кода спрашивайте. Вот прямо по списку и начните: Обновите информацию о принтерах загрузите список принтеров в переменную Укажите текущим принтер из списка в переменной... ну и далее.. |
|||
|
||||
Регистрация: 18.09.2015
Сообщений: 120
|
да, по ней и изучал, очень удобно. код есть
Код:
Вроде и работает, но не во всех чертежах, как писал выше. Просто не знаю, что тут можно еще добавить для стабильности. Ну автоповорот листов - это уже потом, после отладки. Последний раз редактировалось zenija2007, 05.10.2016 в 10:13. |
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,049
|
В свое время начинал тоже на VBA писать в Акаде 2012. Пока была 32 битная версия - все работало прекрасно, потом дали взамен комп помощнее - и там уже 64 битная версия акада и VBA. Получил массу "удовольствия" от непредсказуемой работы/не работы VBA макросов. И когда среда VBA стала сообщать, что она не знает функций типа MID - плюнул и зарекся иметь дело с VBA в акаде)
|
|||
|
||||
Регистрация: 18.09.2015
Сообщений: 120
|
Проблема как бы решена. Меняем местами строки actlay.PlotType = acWindow и actlay.SetWindowToPlot t1, t2, помня что t1 - нижний левый угол, а t2 - верхний правый, и все должно заработать.
Остальные проблемы решены в теме http://forum.dwg.ru/showthread.php?t=122509, очень помогло разобраться. Последний раз редактировалось zenija2007, 09.10.2016 в 15:30. |
|||
|
||||
Координаты следует передавать не в МСК (WCS) и не в ПСК (UCS), а в ДСК (DCS).
Код:
__________________
Сообщество программистов Autodesk в СНГ - техническая поддержка |
||||
|
||||
Цитата:
мне помогла функция leaut.RefreshPlotDeviceInfo после изменений некоторых параметров печати для лейаута надо обновлять информацию. иначе она не применялась. |
||||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,049
|
А чем вам готовые решения не угодили то - бесплатные и платные?
|
|||
|
||||
Регистрация: 18.09.2015
Сообщений: 120
|
Раз вы вникли в тонкости печати, можете подсказать одну вещь? Скрипт работает, но вот после отправки листа на печать функцией plottodevice его обработка занимает довольно много времени. Скрипт почти тот же, что и выше. При печати штатными средствами это лишь небольшая задержка. Возможно, стоит печатать через видовой экран?
|
|||
|
||||
я сделал так.
изначально формируется пользовательская настройка принтера для конкретного формата листа. обзывается должным образом и хранится это дело конечно же в файле. потом, на листе ищутся форматы, определяется их размер, по этому размеру из сохранённых пользовательских настроек принтеров ищется такой же формат, далее текущей настройке лейаута на печать присваиваются значения именованной настройки, только граница печати задаётся из габаритов найденной форматки. и далее печать. вот так передаётся настройка и далее на печать: Код:
|
||||
|
||||
на самом деле это набор программ, которые так или иначе использую в оформлении. Есть мои, есть много сторонних. не стал выделать именно код про печать отдельно, думаю найдёте.
сделан установщик, но по сути он просто разархивирует файл куда то на диске и добавляет потом путь поддержки к папке (причем по моему только путь, который по умолчанию), а потом подгружает файл меню. Т.е. можно разархивировать куда угодно, добавить в пути поддержки и загрузить файл меню. винда 64 (в 32 часть функций не будет работать, надо править) там есть нюанс по настройке печати (про который я писал, что надо бы переделать, но руки не доходят), надеюсь разберётесь как добавлять форматы программой )) |
||||
|
||||
Регистрация: 18.09.2015
Сообщений: 120
|
как выбирать листы, особо не разбирался - просто нет времени, рабочий день на вахте 10-ичасовой. Посмотрел, как Вы настраиваете параметры печати - в принципе же все как у всех, но вот только именно в моей программе подготовка к отправке на принтер в фоне после выполнения команды plottodevice занимает ну очень много времени. перерыл интернет - о такой проблеме даже нигде не упоминается. Вы сталкивались с подобным при написании своей программы? При просмотре кода каких-то особых решений не увидел. Возможно, где-то уже обсуждалось, какие операции выполняет автокад так долго в фоне и как ускорить этот процесс?
|
|||
|
||||
я с такой проблемой не сталкивался.
а мой код выполняется тоже долго? возможно... разница в том, что я даю переменным значения, которые ранее задаются в самом автокаде. т.е. нельзя ошибиться с синтаксисом. а вы, как я понял, назначаете текстом. может по этому? |
||||
|
||||
zenija2007,
Версия и разрядность AutoCAD?
__________________
Сообщество программистов Autodesk в СНГ - техническая поддержка |
||||
|
||||
Регистрация: 18.09.2015
Сообщений: 120
|
работа не зависит от разрядности, проверял на обеих версиях. autocad 2014.
----- добавлено через ~52 мин. ----- если верить справке, то ошибок в синтаксисе нет, я обновляю данные о принтерах, устанавливаю нужный принтер, потом для него выбираю стиль печати и формат листа из поддерживаемых, скорее, проблема в том, что какой-то параметр печати не установил, поэтому он так долго думает, но я не смогу найти, что это за такой параметр, потому что нельзя посмотреть, чем занят автокад во время подготовки листа к печати в фоне. много людей до меня писали подобные программы, наверняка все они в начале сталкивались с долгой подготовкой к печати, но почему-то никто из них не отписался на форуме об этом. решение наверное очень простое, но вот я его никак не вижу, во всяком случае пытался назначать или убирать различные параметры печати, но они никак не влияют на ситуацию. разобрал программу !Plot_U, и опять не нашел никаких отличий от своей, кроме ненужных мне наворотов и огромного количества повторов одних и тех же блоков кода в разных подпрограммах, что только затрудняет его чтение. одна из причин, почему не хочу взять за основу готовую программу - тяжело читаемый код. единственное, вот эти строки - они для чего вообще нужны, если печать идет из пространства модели, а не видового экрана? Код:
oPlot.PlotToDevice IIf(usePrinter = 1, Plot_U.CB_PRINTNAME.Value, Plot_U.CB_PRINTNAME2.Value) выбор области печати - через SetWindowToPlot. Последний раз редактировалось zenija2007, 21.10.2016 в 06:24. |
|||
|
||||
мой код тоже вроде как печатает быстро. бывает, медленно ищет рамки, если много на листе объектов, это да.
но, я и не сталкивался с проблемой долгой печати. у меня была проблема назначения параметров переменным для печати. пока мне не подсказали, что после назначения некоторым свойствам нового значения надо обновить информацию специальной командой (leaut.RefreshPlotDeviceInfo). и после это все заработало. |
||||
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Восстановление *.DWG | Солидворкер | AutoCAD | 5265 | сегодня 20:35 |
Помогите разобраться с подсчетом количества болтов в AutoCAD Plant 3d | April | Вертикальные решения на базе AutoCAD | 1 | 01.12.2015 08:29 |
Пропали инструменты и панели, помогите, AutoCAD 2008 | LBA | AutoCAD | 1 | 19.11.2012 11:13 |
AutoCad 2010 + СПДС GraphiCS 7.1.1064 Зависает всё, помогите... | Львиное сердце | ПО от CSoft | 2 | 03.07.2012 16:19 |
Проблема с XREF в Autocad 2005(2004). Помогите, кто знает. | 0leg | AutoCAD | 10 | 13.01.2006 17:53 |