Программирование под вертикальные решения автокада
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Программирование под вертикальные решения автокада

Программирование под вертикальные решения автокада

Ответ
Поиск в этой теме
Непрочитано 07.06.2008, 12:02 #1
Программирование под вертикальные решения автокада
Mazai
 
Москва
Регистрация: 04.04.2008
Сообщений: 97

Здрасвтуйте.
Суть в следующем. Например в AutoCAD Civil 3D есть масса новых иснтрументов и элементов для работы в нём. Многие элементы создаются с помощью диалогового окна, в котором задаются все параметры. Через ХЭЛП можно узнать команды для вызова этих окон. Но хочется многие действия выполнять автоматически, программно, например в АвтоЛиспе. Но мне не понятно как это всё можно задать, изменить.
Об этом вообще можно где-нибудь узнать? Передоваемые параметры для этих команд, возможные изменения некоторых переменных в них. Или это надо пытаться понять самостоятельно, тогда какой алгоритм исследования в данном случае может быть?

P.S.: Для примера я задумал создание в цивиле структурной линии (Командная строка: AddSurfaceBreaklines) типа "Стена" с пошаговым изменением точки смещения всех отметок. Хочу программно создать структурную линию и передавать требуемые смещения без вызова соответсвующего диалога для пользователя.
Просмотров: 4071
 
Непрочитано 07.06.2008, 14:50
#2
ShaggyDoc

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 так сделано. Есть "команды" - просто имя, как в Автокаде. И команда что-то делает. Но сама команда опубликована в исходном тексте и она состоит из вызова функций с кучей аргументов. Тысяча "команд" представляет выполнение одной функции с разным сочетанием аргументов. И это всё открыто. Вот тут пожалуйста - делайте какие угодно "структурные линии".
ShaggyDoc вне форума  
 
Непрочитано 07.06.2008, 23:15
#3
Кулик Алексей aka kpblc
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-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 10.06.2008, 10:21
#4
P_S


 
Регистрация: 09.10.2006
Санкт-Петербург
Сообщений: 99


Если сравнить с предыдущими выступлениями, то в LDD все не так плохо - и документация кое-какая есть, и достаточно хорошо налажено взаимодействие с объектами через COM; а Civil, вроде, ему родня (или ошибаюсь?)
P_S вне форума  
 
Непрочитано 10.06.2008, 10:38
#5
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406


Документация-то и под ADT есть, только иногда ее недостаточно.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 10.06.2008, 22:26
#6
Sync02


 
Регистрация: 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 правда на английском.
Sync02 вне форума  
 
Непрочитано 10.06.2008, 23:54
#7
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406


Для примеру: в документации по ADT достаточно подробно описан объект AecDbWall (стена). Но ни слова не сказано, откуда брать толщины компонентов.
Например, необходимо определить все стены, проходящие одной из своих граней через определенную точку. Для этого необходимо знать реальные толщины стен. И реальные смещения стен от базовой линии (грубо говоря, оси). Эти данные хранятся в стиле стен, который практически не описан.
Откровенно говоря, я подозреваю, что и в Сivil'e аналогичная ситуация - чуть копнешь и все, занимайся исследованиями "вслепую".
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 11.06.2008, 06:26
#8
ShaggyDoc

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 будет и документация. Только на китайском языке.
ShaggyDoc вне форума  
 
Автор темы   Непрочитано 26.06.2008, 12:06
#9
Mazai


 
Регистрация: 04.04.2008
Москва
Сообщений: 97


Может кто чего подскажет? Я Всё-таки пытаюсь влезть поглубже.
В AutoCAD Civil 3D есть некоторые инструменты, в которых есть возможность сохранить произведённые настройки для какой-нибудь операции.
Например, есть команда "mapclean", которая позволяет произвести различные преобразования над линиями. Здесь подразумевается, что чертёж карты состоит из полилиний, отрезков, дуг и т.п. И у нас есть механизм комплексно "чистить" карты от лишних объектов или наоборт чего-то там дорисовывать. Всё это производится путём выбора соответсвующих действий, которые должны совершиться над выбранными объектами и установки необходимых параметров для выбранных действий. Здесь есть возможность сохранить эти настройки, что бы потом применить их к аналогичным картам. Эти настройки сохраняются в файле с расширением *.DPF. И их потом можно загрузить при следующем вызове команды (например при тихом вызове _-mapclean)
По сути - действия - это набор глобальных команд с соответсвующими параметрами, которые мы выбираем в диалоговом окне. И если попытаться открыть файл настройки, то там можно увидеть название команд-действий, которые совершаются над объетками. Но как их вызвать в актокаде или лиспе - я не знаю.
В настройках естесственно не сохраняются элементы над которыми нужно произвести те или иные действия. И если я к примеру загружу сохранённые настройки, то выбранные действия будут применены ко всему чертежу. А этого мне не очень хочеться. Вот я и задумался, чего тут можно придумать? Попытаться передать выбранные элементы в файл настройки? Или же, зная названия самих команд, всё-таки попробовать докапаться до них в лиспе? Но как? - я с подобным ещё не сталкивался.

Кому интересно, могу выслать файл настройки, в котром, к примеру, сохранены параметры для выполнения операции "simplifylinearobjsaction".
Mazai вне форума  
 
Непрочитано 26.06.2008, 12:11
#10
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406


ИМХО: чтобы хоть чем-то помочь, надо:
  1. Уметь работать в Civil, чтобы понимать, про что разговор
  2. Иметь сильную необходимость выполнять то же самое.
Я б и рад, но не обладаю ни первым, ни вторым.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 26.06.2008, 12:31
#11
Mazai


 
Регистрация: 04.04.2008
Москва
Сообщений: 97


Я просто задал такой вопрос в надежде, что может не обязательно в Цивиле, а где-нибудь в других вертикальных решениях, но есть аналогичная ситуёвина. Ведь разработчкик один. И логика работы должна быть одинаковой. Просто хотя бы банально если забыть про цивил, то задачу можно сормулировать по другому - как ещё можно запустить внутреннии команды Автокада (ведь название уже известно) или взглянув на файл настройки - попытаться внести туда свои данные (тут надо знать специфику этого фалй)...
Вот кусок из этого файла - может кто-нибудь что-то похожее уже видел:
Код:
[Выделить все]
<mapcleanup version="8.0">
<cmapcleanselecteobjsdlg>
	<objectsincluded>
		<autoselect>1</autoselect>
		<layers>GRANITSA_DOROGI_MODIFY</layers>
		<features>*</features>
	</objectsincluded>
	<objectsanchored>
		<layers></layers>
		<features></features>
	</objectsanchored>
</cmapcleanselecteobjsdlg>
<cmapcleanactionsdlg><option>
	<interactive>0</interactive>
	<smarttolerance>0</smarttolerance></option><selectedactions><action id="1">
	  <simplifylinearobjsaction>
		<settings>
		  <tolerance>0.010000000000000</tolerance>
		  <points>1</points>
		  <blocks>0</blocks>
		  <text>0</text>
		  <mtext>0</mtext>
		  <linearobjects>1</linearobjects>
		  <mpolygons>0</mpolygons>
		  <zvalue>0</zvalue>
		  <rotation>0</rotation>
		  <direction>0</direction>
		  <breaktargetobj>1</breaktargetobj>
		  <createarc>0</createarc>
		  <angle>4.000000000000000</angle>
		  <bulge>1.000000000000000</bulge>
		  <weeddistance>15.000000000000000</weeddistance>
		  <supplementdistance>100.000000000000000</supplementdistance>
		  <snap2node>1</snap2node>
		  <snap2link>0</snap2link>
		</settings>
	  </simplifylinearobjsaction></action></selectedactions></cmapcleanactionsdlg>
<cmapcleanconvertobjsdlg>

...
</mapcleanup>
Mazai вне форума  
 
Непрочитано 26.06.2008, 14:55
#12
ShaggyDoc

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, если надо, можно сделать и свое "вертикальное" решение, например в виде диалога.

А буржуи пока документировать или не хотят, или не могут, или деньги проели. Да и оно им надо?
ShaggyDoc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Программирование под вертикальные решения автокада



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
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