Тема: Извлечение координат вержин 3Dsolid

У меня вдруг возникла необходимость узнать координаты объекта типа 3Dsolid. Но у VLA-объекта таких свойств нет.
Может кто-нибудь решил эту проблему?

Re: Извлечение координат вержин 3Dsolid

Вот, нашел у себя в закромах:

(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

В результате получишь дешифрованный список. Его уже и анализируй.

Re: Извлечение координат вержин 3Dsolid

Один момент. Лисп не мой, автор - Эдуард.

Re: Извлечение координат вержин 3Dsolid

Реализация. А идею подбросил VK

Re: Извлечение координат вержин 3Dsolid

> 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"

Re: Извлечение координат вержин 3Dsolid

Дык ента...

(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))

Эдуард, скорее всего, найдет очередные мои ошибки и глюки :)

Re: Извлечение координат вержин 3Dsolid

> Andrey
https://www.caduser.ru/forum/topic23682.html

Re: Извлечение координат вержин 3Dsolid

Вот програмка http://autolisp.ru/dwlsp/27
(http://dwg.ru/forum/viewtopic.php?t=10126)