Тема: Извлечение координат вержин 3Dsolid
У меня вдруг возникла необходимость узнать координаты объекта типа 3Dsolid. Но у VLA-объекта таких свойств нет.
Может кто-нибудь решил эту проблему?
Информационный портал для профессионалов в области САПР
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Форумы CADUser → Программирование → LISP → Извлечение координат вержин 3Dsolid
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
У меня вдруг возникла необходимость узнать координаты объекта типа 3Dsolid. Но у VLA-объекта таких свойств нет.
Может кто-нибудь решил эту проблему?
Вот, нашел у себя в закромах:
(defun 3ddecode (/ obj) (if (and (setq obj (car (entsel))) (member (cdr (assoc 0 (setq obj (entget obj)))) '("3DSOLID" "REGION" "BODY") ) ;_ end of member ) ;_ end of and (progn (setq obj (mapcar '(lambda (b) (read (strcat "(" b ")"))) (mapcar 'vl-list->string (mapcar '(lambda (y) (subst 10 127 (mapcar '(lambda (z / s) (if (< (setq s (boole 6 z 95)) 33) (+ s 64) s ) ;_ end of if ) ;_ end of lambda y ) ;_ end of mapcar ) ;_ end of subst ) ;_ end of lambda (mapcar 'vl-string->list (mapcar 'cdr (vl-remove 'nil (vl-remove-if-not '(lambda (x) (= (car x) 1)) obj) ) ;_ end of vl-remove ) ;_ end of mapcar ) ;_ end of mapcar ) ;_ end of mapcar ) ;_ end of mapcar ) ;_ end of mapcar ) ;_ end of setq ) ;_ end of progn ) ;_ end of if ) ;_ end of defun
В результате получишь дешифрованный список. Его уже и анализируй.
Один момент. Лисп не мой, автор - Эдуард.
Реализация. А идею подбросил VK
> kpblc
Список то я получил, спасибо. Но проанализировать его не такто просто. Может кто нибудь знает про DXF код объектов 3Dsolid.
В хелпе приведено следующее:
"100 Subclass marker (AcDbModelerGeometry)
70 Modeler format version number (currently = 1)
1 Proprietary data (multiple lines < 255 characters each)
3 Additional lines of proprietary data (if previous group 1 string is greater than 255 characters) (optional)
100 Subclass marker (AcDb3dSolid)
350 Soft-owner ID/handle to history object"
Дык ента...
(setq lst (3ddecode))
Список слишком длинный, я его не показываю.
А список точек получить уже, похоже, надо через
(mapcar '(LAMBDA(x) (vl-remove-if '(LAMBDA(q) (member q (list 'point '$-1 '-1 '$-1 '#))) x)) (vl-remove-if '(LAMBDA(x) (/= (car x) 'point)) lst))
Эдуард, скорее всего, найдет очередные мои ошибки и глюки :)
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Форумы CADUser → Программирование → LISP → Извлечение координат вержин 3Dsolid
Форум работает на PunBB, при поддержке Informer Technologies, Inc