|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Программирование под вертикальные решения автокада
Москва
Регистрация: 04.04.2008
Сообщений: 97
|
||
Просмотров: 4071
|
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Вопрос интересный. На мой взгляд, Autodesk с некоторого времени начала продвигать эти "вертикальные решения" совсем не для того, чтобы всякие бродяги, наподобие меня, могли расширять эти решения "в ширину". Бабки они хотят иметь монопольно. Если бы не было так, то каждый "десктоп" сопровождался бы подробной документацией. Да и построены систем были бы не на уровне "команд", а на уровне функций.
Возможно это мои ложные измышления. Ради справедливости - документировать всё это тяжкий труд. Много времени и денег. И ради чего? Чтобы где-то в России десяток разработчиков мог воспользоваться? Да и инструментальные средства используют такие, что и десятка не наберется. Исследовать такие вертикальные решения очень сложно. Они сделаны на ObjectARX и без документирования тут ничего не сделаешь. Если же есть какая-то часть на COM-технологиях, то тут можно поковыряться в библиотеках типов (TLB-файлы). Из них можно многое понять, но не всё. А вот в некоторых наших компаниях наоборот, всячески способствуют разработчикам. У них нет сотен лбов, работают обычно несколько разработчиков, сил у них не хватает. Вот и делают открытые интерфейсы, позволяющие всем желающим самим расширять системы. Многое потом и включают в поставку. PS. Про "уровень функций" чтобы понятно было. Вот у нас в ruCAD так сделано. Есть "команды" - просто имя, как в Автокаде. И команда что-то делает. Но сама команда опубликована в исходном тексте и она состоит из вызова функций с кучей аргументов. Тысяча "команд" представляет выполнение одной функции с разным сочетанием аргументов. И это всё открыто. Вот тут пожалуйста - делайте какие угодно "структурные линии". |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
Про Civil ничего не скажу, работать приходится под ADT. Там не все так радужно, как хотелось бы.
Во-первых, документации действительно очень мало (но нельзя сказать, что ее нет совсем). Во-вторых, зачастую легче попытаться разобраться со штатными средствами и методами, чем изобретать велосипед. Например, настройки стилей объектов (в том числе и их визуальные представления) хранятся в словарях - а данные "от балды" туда вносить нельзя. Файл падает "на ура" и уже фиг поднимешь обратно. Вносить изменения в некоторые типы объектов приходится сразу по нескольким параметрам в пределах одной функции (транзакции, пользуясь терминологией ObjectARX). Что определяет третье: стилистику программирования выдержать практически нереально. Вечно жуткая смесь ent- и vla-кодов, причем один без другого работать не будет. К примеру: для модификации примитивов вертикального решения (стены, окна, двери, многовидовые блоки, таблицы...) надо использовать subst с последующим entupd, т.к. попытка применения vla-кода моментально выполняет обновление примитива независимо от желания программиста (возможно, я что-то не учел при своих экспериментах, но у меня вечно такое было). А доступ до примитива иногда можно получить только через vla-указатель ![]() Теперь по основному вопросу. Лично я при необходимости выполняю построение элемента штатными средствами, потом (setq var01 (entget (entlast) '("*"))). Изменение примитива (или копирование с последующим изменением, неважно) и снова (setq var02 (entget (car (entsel)) '("*"))). Потом сравниваются полученные списки и анализ разницы. Иногда проще подобные задачи решать через vlax-dump-object, но это скорее исключение, чем правило.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
Документация-то и под ADT есть, только иногда ее недостаточно.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 07.12.2007
Брест
Сообщений: 243
|
Под civil есть довольно подробные мануалы по программированию на VBA, немного сложнее c ObjectARX - там с документацией туговато но разобраться не так уж сложно.
(есть примеры в папке "AutoCAD Civil 3D 2009\Sample\Civil 3D API" или в папке Help есть девелопергуид.pdf) Неплохой сайт http://through-the-interface.typepad..._3d/index.html правда на английском. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
Для примеру: в документации по ADT достаточно подробно описан объект AecDbWall (стена). Но ни слова не сказано, откуда брать толщины компонентов.
Например, необходимо определить все стены, проходящие одной из своих граней через определенную точку. Для этого необходимо знать реальные толщины стен. И реальные смещения стен от базовой линии (грубо говоря, оси). Эти данные хранятся в стиле стен, который практически не описан. Откровенно говоря, я подозреваю, что и в Сivil'e аналогичная ситуация - чуть копнешь и все, занимайся исследованиями "вслепую".
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Вот и я про то же. "Не дают мужику дохтуром стать" (С)
Писал про подробную документацию. Кое-что есть, для разных "десктопов" по-разному. Зависит, видимо, от команды. Даже для АРХ дополнительные библиотеки бывают. А по сути работать серьезно нельзя. Должно быть как в базовом Автокаде. Есть объектная модель в десктопе - дайте справку наподобие acadauto.chm! Впрочем, так же было и с Автолисп поначалу. Самый минимум и только в Автокад-12 появилась качественная подробная документация. А сейчас вообще всё есть. Но с LISP проще - имея базовые сведения можно свою фантазию подключать. С "вертикальными" решениями так нельзя. Особенно с учётом принципа: всё, что не документировано официально - можем менять как вздумается. Но лет через 20 будет и документация. Только на китайском языке. |
|||
![]() |
|
||||
Регистрация: 04.04.2008
Москва
Сообщений: 97
|
Может кто чего подскажет? Я Всё-таки пытаюсь влезть поглубже.
В AutoCAD Civil 3D есть некоторые инструменты, в которых есть возможность сохранить произведённые настройки для какой-нибудь операции. Например, есть команда "mapclean", которая позволяет произвести различные преобразования над линиями. Здесь подразумевается, что чертёж карты состоит из полилиний, отрезков, дуг и т.п. И у нас есть механизм комплексно "чистить" карты от лишних объектов или наоборт чего-то там дорисовывать. Всё это производится путём выбора соответсвующих действий, которые должны совершиться над выбранными объектами и установки необходимых параметров для выбранных действий. Здесь есть возможность сохранить эти настройки, что бы потом применить их к аналогичным картам. Эти настройки сохраняются в файле с расширением *.DPF. И их потом можно загрузить при следующем вызове команды (например при тихом вызове _-mapclean) По сути - действия - это набор глобальных команд с соответсвующими параметрами, которые мы выбираем в диалоговом окне. И если попытаться открыть файл настройки, то там можно увидеть название команд-действий, которые совершаются над объетками. Но как их вызвать в актокаде или лиспе - я не знаю. В настройках естесственно не сохраняются элементы над которыми нужно произвести те или иные действия. И если я к примеру загружу сохранённые настройки, то выбранные действия будут применены ко всему чертежу. А этого мне не очень хочеться. Вот я и задумался, чего тут можно придумать? Попытаться передать выбранные элементы в файл настройки? Или же, зная названия самих команд, всё-таки попробовать докапаться до них в лиспе? Но как? - я с подобным ещё не сталкивался. Кому интересно, могу выслать файл настройки, в котром, к примеру, сохранены параметры для выполнения операции "simplifylinearobjsaction". |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
ИМХО: чтобы хоть чем-то помочь, надо:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 04.04.2008
Москва
Сообщений: 97
|
Я просто задал такой вопрос в надежде, что может не обязательно в Цивиле, а где-нибудь в других вертикальных решениях, но есть аналогичная ситуёвина. Ведь разработчкик один. И логика работы должна быть одинаковой. Просто хотя бы банально если забыть про цивил, то задачу можно сормулировать по другому - как ещё можно запустить внутреннии команды Автокада (ведь название уже известно) или взглянув на файл настройки - попытаться внести туда свои данные (тут надо знать специфику этого фалй)...
Вот кусок из этого файла - может кто-нибудь что-то похожее уже видел: Код:
|
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Так про то и разговор - нет полной документации.
Конкретно с этим XML-файлом настройки еще как-то можно разобраться - благодаря структуре и "человеческим" узлам элементов. Но это будет опять же угадывание. Можно программно прочитать эти настройки, извлечь пары имя-значение, а дальше? Про команды зачем говорить? Команда это для пользователя, это обертка внутренних функций или методов. Если бы их имена, аргументы и результаты работы знать, то можно было бы использовать. А гадать бесполезно. Вот, например, Александр Ривилис сделал полезное "микровертикально-горизонатльное" решение ExplodeProxy. Он предусмотрел и команды, и функции для вызова из LISP, и приложил краткую (полстраницы), но исчерпывающую документацию по функциям (имена, аргументы, возвращаемые значения). Вот к этом ARX, если надо, можно сделать и свое "вертикальное" решение, например в виде диалога. А буржуи пока документировать или не хотят, или не могут, или деньги проели. Да и оно им надо? |
|||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
1. AutoCAD | Кулик Алексей aka kpblc | FAQ: Часто задаваемые вопросы | 25 | 27.09.2016 13:29 |
Настрой будущую версию Автокада под себя (AutoCAD Wish List) | Кочетков Андрей | AutoCAD | 3 | 22.06.2007 20:25 |
Печать из под Автокада | Суханов | AutoCAD | 15 | 23.12.2005 13:05 |
Постановка задачи и программирование под AutoCAD | kos | Программирование | 11 | 20.12.2004 13:44 |