|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
AutoLISP. Как функцией entmake нарисовать сплайн?
Регистрация: 28.09.2010
Сообщений: 55
|
||
Просмотров: 3787
|
|
||||
Регистрация: 28.09.2010
Сообщений: 55
|
Не получается. Как пользоваться вашей функцией? Ее аргумент это список ((x1 y1 z1) (x2 y2 z2) ...)?
(defun entmake-spline (lst / plst) (entmake (append (list '(0 . "SPLINE") '(100 . "AcDbEntity") '(100 . "AcDbSpline") (cons 90 (length (setq plst (mapcar '(lambda (x) (cons 11 x)) lst))) ) ) plst ) ) ) (defun c:spl_prob (/ n) (setq n 0 list_for_spl (list )) (while (< n 3) (setq list_for_spl (append list_for_spl (list (getpoint)))) (setq n (1+ n)) ) (entmake-spline list_for_spl) ) И ничего. |
|||
![]() |
|
||||
Регистрация: 28.09.2010
Сообщений: 55
|
Гомер, ты наверно больше ломаешь чем строишь. Все равно не получается, в твоем примере создается список lst, например !lst ((89.2985 62.88) (44.3199 56.2198) (22.6634 29.5788)). А сплайн не рисуется. Я примерно так и использовал аргумент-список, только трехмерный.
|
|||
![]() |
|
||||
Регистрация: 28.09.2010
Сообщений: 55
|
Нет, я лучше сначала попробую вот так:
(defun c:1 (/ ) (entmake '((0 . "POLYLINE") ; Object type (66 . 1) ; Vertices follow ) ) (entmake '((0 . "VERTEX") ; Object type (10 1.0 1.0 0.0) ; Start point ) ) (entmake '((0 . "VERTEX") ; Object type (10 4.0 6.0 0.0) ; Second point ) ) (entmake '((0 . "VERTEX") ; Object type (10 3.0 2.0 0.0) ; Third point ) ) (entmake '((0 . "SEQEND"))) ; Sequence end ) Отпокал из справки по VisualLisp, глава Creating Complex Entities По крайней мере работает на плоской полилинии. Сплайн это по ощущению объект где-то близкий полилинии. Тоже составной сложный длинный объект. Смысл в том, что составные объекты генерятся вложенными командами entmake. Может я ошибаюсь, но интуитивно это правильно. Для окончания ввода точек есть SEQEND. А в ваших примерах все время встречается мешанина из лямбда-выражения, не знаю откуда вы это взяли |
|||
![]() |
|
||||
Программист-энтузиаст Регистрация: 17.07.2009
Воронеж
Сообщений: 575
|
Цитата:
__________________
cadtools |
|||
![]() |
|
||||
Регистрация: 28.09.2010
Сообщений: 55
|
TararykovDG, спасибо тебе! Получилось наконец-то, а этот код из справки автокада только на плоской полилинии работает. Там было написано что-то типа old... , как я понял это старая форма задания полилинии. Пытался сделать из этого кода вариант для трехмерной (3DPOLYLINE), ничего не вышло
Спасибо за внимание Еще вопрос - как ввести касательные к сплайну? Код 12 и 13. С касательными не знаю как быть Последний раз редактировалось Иванов Дмитрий, 25.09.2013 в 17:47. |
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
|
|||
![]() |
|
||||
Регистрация: 28.09.2010
Сообщений: 55
|
У меня тоже брикскад дома, а на работе акад. Проверил, твой код из #2 работает в брикскаде, но зато у инженера-энтузиаста код работает и там и там. Я не забиваю на акад, программу делаю универсальной
Вот если бы с касательными разобраться , то этого решения по отрисовке сплайнов хватит на всю жизнь Все, разобрался, вот так это делается: (defun c:1 (/ lst n) (setq n 0) (setq lst (list '(1257.71 526.504 131.137) '(1322.59 546.226 133.436) '(1390.58 547.768 130.097) '(1457.5 536.9 123.087) '(1521.67 516.119 113.252)) ) (entmake (append (list '(0 . "SPLINE") '(100 . "AcDbEntity") '(100 . "AcDbSpline") '(71 . 3) (list 12 0.87776 0.470142 0.0922135); начальная касательная (list 13 0.913997 -0.371616 -0.162821); конечная касательная ) (mapcar '(lambda (x) (cons 11 x)) lst) ) ) (princ) ) Последний раз редактировалось Иванов Дмитрий, 26.09.2013 в 09:53. |
|||
![]() |
|
||||
Регистрация: 28.09.2010
Сообщений: 55
|
Доброго дня снова! А какой будет в автолиспе код, чтобы нарисовать функцией entmake 3d-полилинию? Так же как и со сплайном, чтобы аргумент был список координат вершин ((x1 y1 z1) (x2 y2 z2) ...). Пытаюсь изобрести примерно такое,
(defun ris_lw_entmake_neud (lst / ) (entmake (append (list '(0 . "POLYLINE") '(100 . "AcDbEntity") '(100 . "AcDb3dPolyline") '(66 . 1)) (mapcar '(lambda (x) (cons 11 x)) lst))) (princ) ) и не получается. Подскажите |
|||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как нарисовать сплайн либо полилинию на сложной поверхности (например на поверхности цилиндра)? | perfy | AutoCAD | 5 | 11.04.2013 13:05 |
Как нарисовать садовые дорожки заданой ширины (Какой функцией) | ADZUMA | AutoCAD | 10 | 15.06.2012 14:24 |
entmake, как создать призму (autolisp entmake)? | baaba | LISP | 4 | 25.01.2011 12:40 |