Тема: Как построить 3D-траекторию для выдавливания по ней объекта?

Вот такая задача: необходимо отрисовать короб прямоугольного сечения для разводки сетей слаботочной сигнализации. Основная трудность - отрисовка в пространстве траектории выдавливания (короб может располагаться вдоль осей X, Y, Z). Можно и вручную отрисовать траекторию, но много операций с переносом и поворотом UCS (ПСК). Как бы эти операции упростить до элементарных запросов "Направление/Длина"?

Re: Как построить 3D-траекторию для выдавливания по ней объекта?

Для начала хотелось бы понять, что происходит при переносе UCS (ПСК) по оси Z. Если воспользоваться вот таким макросом:

^C^C^P_UCS;_M;_Z;\

то почему-то система координат на экране переносится куда попало. Это хорошо видно при включенной сетке. AutoCAD 2005.

Re: Как построить 3D-траекторию для выдавливания по ней объекта?

И уж совсем не понимаю, что происходит при выполнении такого макроса:

^C^C_UCS;_N;_ZA;\

Протокол:

Команда: _UCS
Текущая ПСК:  *МИРОВАЯ*
Задайте опцию
[НОвая/Перенести/ОРтогональная/преДыдущая/ВОсстановить/Сохранить/Удалить/прИмени
ть/?/Мир] <Мир>: _N
Укажите начало новой ПСК или [ZОсь/3точки/Объект/Грань/Вид/X/Y/Z] <0,0,0>: _ZA
Новое начало координат <0,0,0>: 0,0,0
Точка на положительном луче оси Z <0,0,1>: 0,0,1000

Такое впечатление, что ничего не происходит.
В справке написано:
Zось
Задание ПСК по положительному направлению оси Z.
Новое начало координат <0,0,0>: Указать точку
Точка на положительном луче оси Z <текущая>: Указать точку

В плане я не могу указать точку и задаю координаты этой точки. Но ведь в протоколе записано <0,0,1>. Как я понимаю, это направление вектора, а не координаты точки.

Re: Как построить 3D-траекторию для выдавливания по ней объекта?

Со вторым макросом разобрался, там ничего и не должно происходить. Это с головой что-то произошло (гангрена?). Но если задать для нового положения UCS, например, 0,0,1000, то получается такая же картина, как и в первом макросе. Вообще-то, я эти макросы исследую для дальнейшего возможного применения опций команды "_UCS" ("ПСК") при построении траектории выдавливания. И что-то встал в тупик.
Это странно, IMHO.

Re: Как построить 3D-траекторию для выдавливания по ней объекта?

> [Re:] Владимир Громов
В качестве идеи.
Замкнутую полилинию можно экструдировать даже если она лежит в плоскости, не компланарной плоскости XY текущей ПСК. В этом случае экструзия будет происходить в направлении вектора нормали полилинии на указанное положительное расстояние. Поскольку электроканальный короб - это по сути своей прямоугольный параллелепипед, то достаточно, например, с помощью entmake построить профиль-полилинию и экструдировать его. При этом "крутить" ПСК не потребуется.
А исходные данные для построения профиля и направления экструзии (в плюс или в минус) запрашивать точками на экране, что так-же не требует поворотов и перемещений ПСК.
P.S.
Профиль можно строить отрезками, что программно проще, чем полилинию, а затем отрезки объединить в REGION и его уже экструдировать

Re: Как построить 3D-траекторию для выдавливания по ней объекта?

> Пастух
В отношении построения профиля я пока ничего не говорю. Это несложная задача. И выдавить его на определенное расстояние не трудно. Но вот, например, короб должен начинаться от пола, идти вверх на 1000 мм, потом вдоль стены горизонтально на 2000 мм, потом вверх на 2000 мм, потом горизонтально на 2000 мм, затем перейти на другую (перпендикулярную) стену, протянутся вдоль этой стены по горизонтали на 3000 мм и уйти вниз на 3000 мм. Это пример наугад, траектория может быть и сложнее. Отрисовав как-то траекторию, можно перенести и направить ось Z новой ПСК (UCS) вдоль первого сегмента траектории с помощью макроса:

^C^C_UCS;_N;_ZA

в этой системе координат построить прямоугольник и потом выдавить его по предварительно построенной траектории. Поскольку рисовать объекты мы можем только в плоскости XY, то и приходится при переходе на другую стену поворачивать ПСК (UCS), или же менять положение горизонтальной плоскости XY вдоль оси Z.
Вот здесь:
https://www.caduser.ru/forum/topic21092.html
{Smirnoff} предложил программу отрисовки трубопроводов вдоль разных траекторий, только вопрос построения самой траектории остался за кадром.

Re: Как построить 3D-траекторию для выдавливания по ней объекта?

Я думаю для этого есть специальные довески по электросетям или трубопроводам, посмотрите на www.dwg.ru

Re: Как построить 3D-траекторию для выдавливания по ней объекта?

Хотелось бы сразу строить в пространстве в режиме "ORTHO" 3D полилинию. Но если в плоскости XY можно указать направление и длину сегмента, то нарисовать сегмент 3D полилинии перпендикулярно плоскости XY указанием направления не получится. Надо задавать координаты точки с помощью @, чего не хотелось бы. С помощью Лисп-программы @ можно спрятать и рисовать в цикле отдельные сегменты 3D полилинии, только потом объединить их нельзя ни с помощью опции "_join" ("добавить") команды редактирования полилинии, ни с помощью команды "_JOIN" ("СОЕДИНИТЬ") в AutoCAD 2006...
Видимо, остается только строить точки в пространстве, накапливать координаты точек в список, потом по этим точкам отрисовывать 3D полилинию и точки стирать, и еще что-то предусмотреть для визуального контроля построенных точек на экране. Тупо.

Re: Как построить 3D-траекторию для выдавливания по ней объекта?

Pancake, никак из плоскости не вылезти. И это называется - "Трехмерные построения в AutoCAD", черт бы его побрал.

Re: Как построить 3D-траекторию для выдавливания по ней объекта?

Я про это спрашивал. Но внятного ответа не получил. Я предлагал сделать поворот ПСК на 90 по оси Х и оси У при нажатии одной клавиши(для каждой оси своя клавиша) направление поворота неважно т.к. это для построения линий и др. примитивов. Сейчас я пользуюсь стандартными  командами Акада ortogrophic UCS, сделал себе кнопачки с картинкой и доволен, но если это можно будет делать при помощи клавиши - просто щик, да ещё если при том когда её (клавишку) отпускаешь ПСК возращается в прежнее положение тогда ваще будет круто!! =)

Re: Как построить 3D-траекторию для выдавливания по ней объекта?

ДА за был самое главное всё это должно происходить как при выполняемой команде так и без выполнения, на подобии клавиши Shift используемой для добавления или удаления объектов к выделениям.

Re: Как построить 3D-траекторию для выдавливания по ней объекта?

Вот Владимир ссылка вы сами там что то писали https://www.caduser.ru/forum/topic18443.html

Re: Как построить 3D-траекторию для выдавливания по ней объекта?

> Teodor_2000
Как давно это было...

Re: Как построить 3D-траекторию для выдавливания по ней объекта?

> Владимир Громов
Можно соенинять 3Д-линейные йелементы в одинаковую 3Д-полилинию. Попытайте
PEDIT3D на  www.black-cad.de
[rus]
privet [/rus]
Jochen

Re: Как построить 3D-траекторию для выдавливания по ней объекта?

> scj
Ну, так это FAS-файл...:(

Re: Как построить 3D-траекторию для выдавливания по ней объекта?

Пробная программа без обработчика ошибок. Строится траектория выдавливания (3D полилиния) и по ней выдавливается прямоугольник. Есть одна неприятность - на некоторых участках размеры короба по X и по Y меняются местами.

;************************ trakt.lsp **********************************************
;        Построение траектории выдавливания в виде непрерывной
;        3D полилинии и перенос ПСК (UCS) в начало траектории.
;        Выдавливание короба (прямоугольника) вдоль трактории.
;        Автор Владимир Громов
(defun C:TRAKT ( / pp0 pt napr rast pp1 pln pln1 pt1 lay ss tr dx dy rect echo osm)
(setq echo (getvar "CMDECHO"))
(setvar "CMDECHO" 0)
(setq lay (getvar "CLAYER"))
(setq osm (getvar "OSMODE"))
(setvar "OSMODE" 0)
(setq pp0 (getpoint "\n Укажите начальную точку <Enter-Отказ>: "))
(if pp0
    (progn
    (setq pt pp0)
    (setq pln (cons 'vl-cmdf pln)
          pln (cons '"_3DPOLY" pln)
          pln (cons (cons 'list (list (nth 0 pp0) (nth 1 pp0) (nth 2 pp0))) pln)
    )
    (setq napr T)
    (while napr
        (initget "X Y Z")
        (setq napr (getkword "\n Направление [X/Y/Z] <Enter-Конец>: "))
        (if napr
            (progn
                 (vl-cmdf "_-LAYER" "_M" "tmp" "_C" 4 "" "")
                 (initget 3)
                 (setq rast (getreal "\n Расстояние (мм): "))
                 (cond
                     ((= napr "X")
                     (setq pp1 (list (+ (car pp0) rast) (cadr pp0) (caddr pp0)))
                     (vl-cmdf "_line" pp0 pp1 "")
                     (setq pp0 pp1)
                     (setq pln
                     (cons (cons 'list (list (nth 0 pp1) (nth 1 pp1) (nth 2 pp1))) pln))
                     )
                     ((= napr "Y")
                     (setq pp1 (list (car pp0) (+ (cadr pp0) rast) (caddr pp0)))
                     (vl-cmdf "_line" pp0 pp1 "")
                     (setq pp0 pp1)
                     (setq pln
                     (cons (cons 'list (list (nth 0 pp1) (nth 1 pp1) (nth 2 pp1))) pln))
                     )
                     ((= napr "Z")
                     (setq pp1 (list (car pp0) (cadr pp0) (+ (caddr pp0) rast)))
                     (vl-cmdf "_line" pp0 pp1 "")
                     (setq pp0 pp1)
                     (setq pln
                     (cons (cons 'list (list (nth 0 pp1) (nth 1 pp1) (nth 2 pp1))) pln))
                     )
                 ); cond
            ); progn
        ); if
    ); while
    (vl-cmdf "_-layer" "_M" "Траектория" "_C" 1 "" "")
    (setq pln (cons "" pln))
    (setq pln (reverse pln))
    (setq pln1 pln)
    (setq pt1 (cdr (nth 3 pln1)))
    (eval pln)
    (setq tr (entlast))
    (vl-cmdf "_UCS" "_ZA" pt pt1)
    (vl-cmdf "_-layer" "_M" "Короб" "_C" 42 "" "")
    (setq dx (getreal "\n Размер короба по X (мм): "))
    (setq dy (getreal "\n Размер короба по Y (мм): "))
    (vl-cmdf "_rectang" '(0 0) (list dx dy))
    (setq rect (entlast))
    (vl-cmdf "_EXTRUDE" rect "" "_P" tr)
    ); progn
); if
(setvar "CLAYER" lay)
(setq lay "tmp")
(setq ss (ssget "_X" (list (cons 8 lay)))) ; объекты на слое "tmp"
(vl-cmdf "_ERASE" ss "")
(vl-cmdf "_PURGE" "_LA" "tmp" "_N")
(vl-cmdf "_UCS" "_W")
(setvar "CMDECHO" echo)
(setvar "OSMODE" osm)
(princ)
)

Re: Как построить 3D-траекторию для выдавливания по ней объекта?

Возможное средство построения 3D траектории:
https://www.caduser.ru/forum/topic23745.html