Здравствуйте!
Подскажите пожалуйста как преобразовать 3d грань в отрезки (или другие 2d примитивы)?
Команда flatten не помогла. Файл чертежа с гранями в приложении.
Здравствуйте!
Подскажите пожалуйста как преобразовать 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?
Эта команда разбивает НЕ с первого раза, иногда грани остаются.
Спасибо,
макрос работает, но создает дубли отрезков. Видимо грань разрушается так.
Дубли отрезков - это неизбежное зло при разбивке влоб. Кстати, в этом макросе Не создаются отрезки 0-длины, если в грани 3 точки, а не 4 (такое тоже может быть). В отличие от вышеупомянутой EXPLODEGEOPMETRY (не заморачивается на 3-х и 4-хточечную реализацию).
Удаление дублей - отдельная тема с непонятным эффектом на производительность. Хороший задел в том, что создаваемые отрезки находятся под контролем скрипта. Соответственно, при формировании набора не требуется фильтрация объектов. Может, получится даже в лоб командой OVERKILL.