Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.06.2010, 13:04   #1
AnTe
Форумчанин
 
Регистрация: 25.09.2008
Сообщений: 209
По умолчанию AutoCAD

Здравствуйте.

Возникла задача, в первом варианте: перебор всех ПОЗИЦИЙ, в автокаде-механиксе, принимается свойство позиции "зона", принимается "обозначение", затем "обозначение" должно быть отредактировано.

При обдумывании вариантов, остановился писать всё на Delphi, с использованием Automation, т.к. программа для редактирования обозначений позиций написана на Delphi, и организовывать связку акадовский ЛИСП - мой редактор - обратно, если я правильно понимаю, будет крайне затруднительно.

попробовал начать, методом тыка, использовать Automation, дошёл примерно до такого:
Код:
 AcadDoc: IAcadDocument;
 SelCount: integer; 
 ObjName: string;
......
  AcadDoc := AcadApp.ActiveDocument;
  lblName.Caption := AcadDoc.Name;

  SelCount := AcadDoc.ActiveSelectionSet.Count;
  {не нашёл свойства, содержащего ВСЕ объекты документа :(
   взял кол-во выделенных} 


  for i := 0 to SelCount - 1 do
  begin
    ObjName := AcadDoc.ActiveSelectionSet.Item(i).ObjectName;
    if ObjName = 'mcsDbObjectSpcLeader' then
      ... {не знаю, что теперь делать с объектом}
  end;
Подскажите, если кто сталкивался - каким образом правильно перебирать объекты, как делать приведение типа, и читать свойство.

Второе - объект "позиция" - объект MechaniCS !
Не возникнет ли при этом каких-нибудь очевидных проблем? Даётся ли доступ к объектам MechaniCS, через automation ?

Ну и третье, порекомендуйте, что можно прочитать, для "быстрого старта", Automation в AutoCAD. Желательно на русском, и поменьше

задачу, в первом варианте, нужно сделать срочно
AnTe вне форума Ответить с цитированием
Старый 09.06.2010, 13:14   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
каким образом правильно перебирать объекты
Проясни ситуацию: "зона", "обозначение" - это ведь ты сейчас говоришь о полях штампа чертежа?

Цитата:
Даётся ли доступ к объектам MechaniCS, через automation ?
Это нужно читать в его мануалах. Насколько я знаю Механикс это примочка, создающая обычнейшие объекты Автокада, так что к ним можно подцепиться обычным способом.

Цитата:
что можно прочитать
У меня дома книженция есть по-моему Поляков писал, там про программирование для Автокада, если не забуду посмотрю автора и название поточнее. А вообще литературы о этом очень мало. Проще хелп поштудировать.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 10.06.2010, 11:47   #3
AnTe
Форумчанин
 
Регистрация: 25.09.2008
Сообщений: 209
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Проясни ситуацию: "зона", "обозначение" - это ведь ты сейчас говоришь о полях штампа чертежа?
Нет, это для сборочного чертежа. На нём кучка деталей, которые должны быть отмечены ПОЗИЦИЯМИ. Позиция - это модифицированный MechaniCS-ом объект "выноска". На чертеже у позиции есть только номер, MechaniCS позволяет задать его прочие атрибуты (обозначение, наименование, кол-во, примечание, которые на чертеже не показываются), затем он позволяет сформировать спецификацию, и, в соответствии с нею, автоматом перенумеровать позиции (на чертеже), а так же в самой спецификации отобразить обозначения и прочее, и зону взять с чертежа.

Мне нужно подменить их вызов, или редактировать позиции самостоятельно. т.е. программа - полная замена "спецификации" MechaniCS-а, для реализации функционала необходимо и достаточно:
1. Получить все позиции, для каждой считать идентифицирующее поле, лучше всего обозначение , и, обязательно, зону, на чертеже.
2. Задать номер, для нужной позиции (после того, как я их пронумерую в своей спецификации - переберу все, и раздам новые номера).

В принципе, практически всё. Остальное - дело моей программы, и замена СП MechaniCS-а, с реализацией необходимого (улучшенного) функционала, готова.

Цитата:
Это нужно читать в его мануалах. Насколько я знаю Механикс это примочка, создающая обычнейшие объекты Автокада, так что к ним можно подцепиться обычным способом.
Хорошо бы... Полагаю, к ним нет как минимум хелпа. По крайней мере, сходу я не нашёл


Цитата:
У меня дома книженция есть по-моему Поляков писал, там про программирование для Автокада, если не забуду посмотрю автора и название поточнее. А вообще литературы о этом очень мало. Проще хелп поштудировать.
посмотри, плиз, и, если не сложно - есть ли там пара слов про MechaniCS..

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

а вот то, что я нашёл интересненького
http://www.delphimaster.ru/articles/autocad/index.html
http://dwg.ru/pub/8

Пара примеров, с разными подходами, простенькие. Но в них только СТРОЯТСЯ новые объекты, а мне нужно анализировать имеющиеся.

Пролистал документацию - с ходу не могу понять, как же делать приведение типов. Перебираю все объекты, для примера, ищу ЛИНИЮ, у неё хочу найти координату точки:

Код:
var ov: OleVariant;
...
for i := 0 to AcadDoc.ModelSpace.Count - 1 do
begin
  sObjName := AcadDoc.ModelSpace.Item(i).ObjectName;
  lbMainInfo.Items.Add(sObjName);
    if sObjName = 'AcDbLine' then
    begin
     ov := (AcadDoc.ModelSpace.Item(i) as IAcadLine).StartPoint;
     // Как брать координаты точки - не понятно.
    end;
end;

AcadDoc.ModelSpace.Item(i) as IAcadLine - компилятор принимает, даёт StartPoint, которая имеет тип OleVariant, а как загружать координаты точки - не понятно

upd: как загружать координаты точки - нашёл. Это простой массив.
ov[0], ov[1], ov[2] - вот три координаты.

Наверное, основной вопрос, где же взять описание на типы данных MechaniCS-а:

Код:
    if sObjName = 'mcsDbObjectSpcLeader' then
    begin
      .... ??

Последний раз редактировалось AnTe; 10.06.2010 в 12:31.
AnTe вне форума Ответить с цитированием
Старый 10.06.2010, 12:32   #4
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

На сколько я понял ваш MechaniCS - это все-равно что наш SPDS. А если это так - дело дрянь. Серьезно. Сколько не пытались выципить из СПДС-объектов их свойства ниче не получалось. У меня один очень хороший знакомый плотно занимается программированием под AutoCAD. Он этот AutoCAD как шар вертит, а СПДС объекты как черный ящик. Читаются только свойства группы General, 3D Visualization и т.п.. Остальных как-будто и нет вовсе. При работе с ними возникает ощущение, что значения его свойств находятся вообще не в области памяти самого приложения ACAD.
Sibedir вне форума Ответить с цитированием
Старый 10.06.2010, 13:10   #5
AnTe
Форумчанин
 
Регистрация: 25.09.2008
Сообщений: 209
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
У меня дома книженция есть по-моему Поляков
Наверное, Полищук?
"Николай Полещук AutoCad2004 Разработка и адаптация приложений"
Вчера довольно долго пытался найти эл.версию, безуспешно. Сегодня, после твоего поста, удвоил усилия, и вот... что-то качаю!

Sibedir, спасибо! Прогноз, конечно, грустный, однако, надеюсь, не на столько.

Знакомая программирует на AutoLisp, и в отладчике видны все свойства некоторых объектов MechaniCS (по крайней мере "основную надпись" читала, и изменяла, программно). т.е. из AutoLISP оттуда она может доступиться к полям объектов MechaniCS. Не знаю пока, как "перевести" всё это в объекты ActiveX, т.к. мне, по всей видимости, гораздо удобнее, если получится редактировать поля из Delphi, а не вызывать моё приложение из акада.

Последний раз редактировалось AnTe; 10.06.2010 в 13:14.
AnTe вне форума Ответить с цитированием
Старый 10.06.2010, 13:12   #6
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Любопытный факт. С одной стороны AutoCAD знает о свойствах СПДС-объектов. Вы можете менять их не только в диалоговых окнах, вызываемых из дополнительных библиотек, но и в стандартном окне Properties (аналог инспектора объектов в Delphi). Хотя закрадываются сомнения, когда понимаешь, что в этом окне отоброжены не все свойства. Но это еще не все. При работе с фильтром (функция qselect) для всех СПДС-объектов нам доступны лишь свойства из вышеуказанных групп General, 3D Visualization и т.п.. Этими свойствами обладает любой объект в AutoCAD (в силу наследования от общего предка). Остальных свойств объекта AutoCAD не видит.
По всей видимости разработчики фирмы Consistent Software намеренно разместили свойства своих объектов в "отдельном месте", а функцию просмотра свойств в окне Properties просто подменили. Хотя я в этом вопросе не компетентен, это только мое предположение.
Sibedir вне форума Ответить с цитированием
Старый 11.06.2010, 13:12   #7
AnTe
Форумчанин
 
Регистрация: 25.09.2008
Сообщений: 209
По умолчанию

В отладчике VisualBasic свойств не видно

Беру первый выделенный объект, вывожу его ObjectName
(.ActiveDocument.ActiveSelectionSet .Item(0).ObjectName)

Скриншот, отладчика, затем результат, если выделена линия, и если выделен объект MechaniCS "позиция"

Насколько я понимаю, полный абзац.
Вообще, если я правильно понимаю, если вдруг будут известны имена свойств объектов - к ним можно попробовать доступиться?

В отладчике LISP-а идентификаторы свойств видны... Нельзя ли к ним перейти к св-вам VBA, или, похоже, доступа к объектам нет, в принципе?

Похоже, после праздников начинаю спешное изучение LISP, и делать вызов своей проги, оттуда...
Изображения
Тип файла: jpg 1.jpg (12.1 Кб, 129 просмотров)
Тип файла: jpg 2.jpg (39.5 Кб, 127 просмотров)
Тип файла: jpg 3.jpg (37.9 Кб, 129 просмотров)
AnTe вне форума Ответить с цитированием
Старый 11.06.2010, 13:24   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
"Николай Полещук AutoCad2004 Разработка и адаптация приложений"
точно точно... он самый. Но про Механикс там точно ничего нет.
Я вообще очень мало встречал литературы по программированию CAD/CAM/CAE/PLM... Такое впечатление что их писали партизаны...

Цитата:
AnTe
Я, когда наши проставляют Механиксовские шероховатости на чертеже, нисколечки не стесняясь разбиваю это все командой Explode на элементы, и тогда уже можно добраться до текста (там зачастую компонент MText если не ошибаюсь)
Хотя конечно мозго%№%№ та еще...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.06.2010, 13:34   #9
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

"САПР на базе AutoCAD - как это делается" Зуев С. и тот самый Полещук Н. - 1092 стр. в djvu - 29.7МВ.
http://www.knigka.info/2008/02/27/sa...delaetsja.html
Sibedir вне форума Ответить с цитированием
Старый 12.06.2010, 17:37   #10
AnTe
Форумчанин
 
Регистрация: 25.09.2008
Сообщений: 209
По умолчанию

Цитата:
Сообщение от Sibedir Посмотреть сообщение
"САПР на базе AutoCAD - как это делается" Зуев С. и тот самый Полещук Н. - 1092 стр. в djvu - 29.7МВ.
Да, тоже неплохая книга. В ней встречается даже тот же текст, но чуть поподробней, чем в "AutoCad2004 Разработка и адаптация приложений". Но принципиально ничего нового нет

у меня какая-то косячная версия, некоторые страницы перепутаны, некоторых нехватает, в самых интересных местах а вот тут брать нельзя:
при нажатии "скачать" выкидывает, похоже на клон депозита "http://depositfille.com/", и закачивается exe непонятного происхождения.

с СПДС-объектами интересное замечание. Похоже, меня ожидает какая-то схожая песня.

Цитата:
Сообщение от Stilet
Я, когда наши проставляют Механиксовские шероховатости на чертеже, нисколечки не стесняясь разбиваю это все командой Explode на элементы, и тогда уже можно добраться до текста (там зачастую компонент MText если не ошибаюсь)
Хотя конечно мозго%№%№ та еще...
Explode - это команда AutoLISP? (просто не начинал ещё его изучать)

Вообще, интересует вопрос, может, можно из имён процедур autolisp получить имена процедур, для доступа через автоматизацию? или этого доступа там, скорее всего, нет, в принципе? Похоже, придётся писать часть на лиспе, и регить свой com-сервер, для связи с моей программой. Для моей задачи - извращение, однако...

ps про партизанов - верное замечание, у меня сложилось точно такое же впечатление

Последний раз редактировалось AnTe; 12.06.2010 в 17:46.
AnTe вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с AutoCad KarolinaVlad Помощь студентам 1 11.03.2010 09:05
Мульти текст в AutoCad M17 Помощь студентам 3 07.08.2008 13:03
Delphi и Autocad LaNNC Общие вопросы Delphi 0 29.05.2008 18:41
Delphi и AutoCAD Roof Общие вопросы Delphi 3 28.07.2007 23:04