Преобразовать 3D-грань

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

Подскажите пожалуйста как преобразовать 3d грань в отрезки (или другие 2d примитивы)?

Команда flatten не помогла. Файл чертежа с гранями в приложении.

Добрый день. Интересует тот же вопрос. Есть у кого-то решение?

Штатных средств навскидку не нашел.

В качестве костыля предлагаю скриптец

(defun c:3dface->lines (/ nab i el eld)
  (setq nab (ssget (list (cons 0 "3DFACE"))))
  (setq i 0)
  (repeat (sslength nab)
    (setq el (ssname nab i) i (1+ i))
    (3dface_burst el)
    )
  (setq nab nil)
  (prin1)
  )
 
(defun 3dface_burst (el / p1 p2 p3 p4 eld lay)
  (setq eld (entget el) lay (assoc 8 eld)
      p1 (cdr (assoc 10 eld))
      p2 (cdr (assoc 11 eld))
      p3 (cdr (assoc 12 eld))
      p4 (cdr (assoc 13 eld)))
  (entmakex (list (cons 0 "LINE") lay (cons 10 p1) (cons 11 p2)))
  (entmakex (list (cons 0 "LINE") lay (cons 10 p2) (cons 11 p3)))    
  (if (not (equal p3 p4))
    (entmakex (list (cons 0 "LINE") lay (cons 10 p3) (cons 11 p4))))
  (entmakex (list (cons 0 "LINE") lay (cons 10 p4) (cons 11 p1)))
  (entdel el)
  )

Код без обвязки типа проверки пустого набора и отмены. Отдельно выделена функция преобразования единичной грани (единственный аргумент - имя этой грани) в 3 или 4 отрезка.

ЗЫ. Не совсем понимаю практическую ценность такой операции. Какой смысл в такой куче отрезков, да еще с последующим “приземлением” через FLATTEN?

EXPLODEGEOMETRY?

1 лайк

Эта команда разбивает НЕ с первого раза, иногда грани остаются.

Спасибо,
макрос работает, но создает дубли отрезков. Видимо грань разрушается так.

Дубли отрезков - это неизбежное зло при разбивке влоб. Кстати, в этом макросе Не создаются отрезки 0-длины, если в грани 3 точки, а не 4 (такое тоже может быть). В отличие от вышеупомянутой EXPLODEGEOPMETRY (не заморачивается на 3-х и 4-хточечную реализацию).
Удаление дублей - отдельная тема с непонятным эффектом на производительность. Хороший задел в том, что создаваемые отрезки находятся под контролем скрипта. Соответственно, при формировании набора не требуется фильтрация объектов. Может, получится даже в лоб командой OVERKILL.