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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Подскажите свойство объектов, возвращающее их тип

Подскажите свойство объектов, возвращающее их тип

Ответ
Поиск в этой теме
Непрочитано 15.08.2009, 21:16 #1
Подскажите свойство объектов, возвращающее их тип
Зойберг
 
Регистрация: 25.02.2008
Сообщений: 9

Здравствуйте. Проблема такая.

Нужно импортировать в Дельфи все объекты из Автокада и потом их обработать. И при обработке нужно знать, что за тип объекта - линия, квадрат и т.д. В хелпах вот не могу найти свойство, возвращающее тип.

P. S.
Можно, конечно, работать "вслепую", заключив работу в try...except. Но это извращение... по всем законам логики, свойство вроде "ClassType" или "ClassName" должно быть.
Просмотров: 3592
 
Непрочитано 15.08.2009, 23:39
#2
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,413
Отправить сообщение для Александр Ривилис с помощью Skype™


ObjectName
Александр Ривилис вне форума  
 
Непрочитано 29.08.2014, 19:04
#3
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


Что-то никак не могу сообразить, как на LISP получить список всех типов объектов, присутствующих в чертеже (размеры, тексты, блоки...)?
Например, если в чертеже есть полилинии, отрезки и мультивыноски, то список должен быть '("POLYLINE" "LINE" "MULTILEADER"). Можно, конечно, получить его посредством (ssget "_X") с фильтрами, и я знаю, как. Но что-то мне подсказывает, что его можно как-то вытащить из свойств объекта Document или ModelSpace одним махом. Или нет?
skkkk вне форума  
 
Непрочитано 29.08.2014, 19:17
1 | #4
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,413
Отправить сообщение для Александр Ривилис с помощью Skype™


Цитата:
Сообщение от skkkk Посмотреть сообщение
Или нет?
Нет. Только просканировать весь чертеж.
Александр Ривилис вне форума  
 
Непрочитано 29.08.2014, 19:29
#5
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


Спасибо, Александр.
А как в таком случае правильней поступить? Пройтись по каждому объекту, и при появлении нового типа добавлять его в список, или запускать
(ssget "_X" '((0 . <ТипОбъекта>))) с фильтром по каждому из типов и добавлять в список, если не nil?
skkkk вне форума  
 
Непрочитано 29.08.2014, 19:36
1 | #6
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


через entnext
gomer вне форума  
 
Непрочитано 29.08.2014, 19:40
1 | #7
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,413
Отправить сообщение для Александр Ривилис с помощью Skype™


Думаю что первый вариант предпочтителен.
1) Не все примитивы фильтруются через (ssget "_X" '((0 . <ТипОбъекта>))) - насколько мне не изменяет память была проблема с объектами СПДС GraphiCS.
2) Нужно пройтись по всем блокам. В том числе Пространство Модели, Листы и т.д.
На lisp никак иначе. На ObjectARX/.NET можно напрямую просканировать чертеж. А можно получить и список классов всех объектов примитивов чертежа. Но не обязательно, что для каждого класса будут экземпляры.
Александр Ривилис вне форума  
 
Непрочитано 29.08.2014, 21:00
1 | #8
nolte

спринклеры, сантехника
 
Регистрация: 26.01.2010
Сообщений: 190
Отправить сообщение для nolte с помощью Skype™


[quote=skkkk;1305615]... то список должен быть '("POLYLINE" "LINE" "MULTILEADER"). ...
ежли поможет. Одно из первых "творений"
Код:
[Выделить все]
 
(defun c:802 ( / ss_1 ss_len i lst_pr obj pr)
(setq	ss_1 (ssget "_X")
		ss_len (sslength ss_1)
		i 0
)
(repeat ss_len
	(setq	obj (ssname ss_1 i)
			pr (cdr (assoc 0 (entget obj)))
	)
	(if (not (member pr lst_pr)) (setq lst_pr (cons pr lst_pr)))
	(setq i (1+ i))
)
(foreach n lst_pr (print n))
(princ)
)
__________________
Знание лисп: со справочником Н. Полещука
nolte вне форума  
 
Непрочитано 29.08.2014, 22:51
#9
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


nolte, хотел садиться писать, хорошо на форум заглянул. Благодарствую премного - самое то!
skkkk вне форума  
 
Непрочитано 30.08.2014, 01:07
#10
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Другой алгоритм:
Код:
[Выделить все]
 (vl-remove-if-not
  '(lambda (x) (ssget "_x" (list (cons 0 x))))
  '("LINE"
    ...
    )
)
gomer вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Подскажите свойство объектов, возвращающее их тип



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Непонятки со связями bezo Расчетные программы 8 06.06.2010 12:34
Подскажите как поменять тип системы в СКАДе Yurez SCAD 2 31.03.2009 00:38
Подскажите алгоритм поиска объектов замкнутого контура pashik Программирование 13 24.02.2009 14:19
Подскажите какой тип утеплителя применить в трехслойной кирпичной стене oolliiyy Прочее. Архитектура и строительство 13 15.02.2009 12:04
FILTER / фильтр BM60 Справочник команд 0 08.07.2008 15:35