|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
25.11.2003, 16:03 | #1 | |
spline to plyline
Москва
Регистрация: 14.10.2003
Сообщений: 25
|
||
Просмотров: 9323
|
|
||||
сисадмин Регистрация: 26.08.2003
Самара
Сообщений: 1,022
|
Хитрый способ описал Startrek на своей страничке
Цитата:
|
|||
|
||||
архитектор Регистрация: 21.08.2003
Москва
Сообщений: 92
|
Функция которая переводит сплайны в линии называется Flatten и находится в Экспрессах (Modify > Flatten). Извините, если что... только надо учитывать, что она уплощает и преобразует в полилинии и линии параллельно плоскости текущего вида и уничтожает исходные объекты.
PS Кстати в 2002 Flatten есть в Экспрессах, а в 2004 - в Экспрессах нет, зато вызывается из ком. строки %))) хм... и еще у меня почему -то оные сконвертились в дуги
__________________
слово - серебро, молчанье - ...... ? :)))))))))))))))))))))))))))))))))))))))) |
|||
|
||||
Строительные конструкции Регистрация: 21.10.2003
Москва
Сообщений: 174
|
А с командой "flatten" у меня вот такая бяка получается.
На рисунке справа - увеличенное изображение того что в кружке слева. И никаких дуг не получается - одни прямолинейные сегменты. [ATTACH]1069913791.jpg[/ATTACH] |
|||
|
||||
архитектор Регистрация: 21.08.2003
Москва
Сообщений: 92
|
Вот загадочные души ... "нужна программка".. народ знаете ли Вам пытается помочь, советует сам, сам пробует, его ведь это тож волнует - а Вы разобрались и отделались общими фразами.
Некрасиво.
__________________
слово - серебро, молчанье - ...... ? :)))))))))))))))))))))))))))))))))))))))) |
|||
|
||||
Engineer Регистрация: 05.09.2003
New-York
Сообщений: 10,288
|
Про команду Flatten ничего сказать не могу кроме того, что перевод слова означает делать объект плоским. В HELP говорится, что она служит для конвертации 3D в 2D. По команде spl2pl. Такой команды нет в автокаде. Есть в ToolPac. Где то была ссылка скачать. Но правильное имя команды такое: DSTP_CVSPL2PL Интересно происхождение аббревиатуры. CV от Convert, преобразовать. SPL-spline, сплайн. PL-polyline, полилиния. a цифра 2 по английски Two, что звучит как «To» то есть предлог «К» Вот и получается, что команда конвертирует сплайн к полилинии и делает это вполне корректно
|
|||
|
||||
Инженер Регистрация: 02.11.2003
Мурманская обл.
Сообщений: 2
|
;;CADALYST 12/03 AutoLISP Solutions SPLINE-TO-PLINE.LSP
;;(c) 2003 Tony Hotchkiss (defun spline-to-pline (/ i) (vl-load-com) (setq *thisdrawing* (vla-get-activedocument (vlax-get-acad-object) ) ;_ end of vla-get-activedocument *modelspace* (vla-get-ModelSpace *thisdrawing*) ) ;_ end of setq (setq spline-list (get-spline)) (setq i (- 1)) (if spline-list (progn (setq msg "\nNumber of segments <100>: ") (initget 6) (setq num (getint msg)) (if (or (= num 100) (= num nil)) (setq num 100) ) ;_ end of if (repeat (length spline-list) (setq splobj (nth (setq i (1+ i)) spline-list)) (convert-spline splobj num) ) ;_ end of repeat ) ;_ end of progn ) ;_ end of if ) ;_ end of spline-to-pline (defun get-spline (/ spl-list obj spline no-ent i) (setq spl-list nil obj nil spline "AcDbSpline" selsets (vla-get-selectionsets *thisdrawing*) ss1 (vlax-make-variant "ss1") ) ;_ end of setq (if (= (vla-get-count selsets) 0) (setq ssobj (vla-add selsets ss1)) ) ;_ end of if (vla-clear ssobj) (setq no-ent 1) (while no-ent (prompt "\nSelect splines: ") (vla-Selectonscreen ssobj) (if (> (vla-get-count ssobj) 0) (progn (setq no-ent nil) (setq i (- 1)) (repeat (vla-get-count ssobj) (setq obj (vla-item ssobj (vlax-make-variant (setq i (1+ i))) ) ;_ end of vla-item ) ;_ end of setq (cond ((= (vlax-get-property obj "ObjectName") spline) (setq spl-list (append spl-list (list obj)) ) ;_ end of setq ) ) ;_ end-of cond ) ;_ end of repeat ) ;_ end of progn (prompt "\nNo entities selected, try again.") ) ;_ end of if (if (and (= nil no-ent) (= nil spl-list)) (progn (setq no-ent 1) (prompt "\nNo splines selected.") (quit) ) ;_ end of progn ) ;_ end of if ) ;_ end of while (vla-delete (vla-item selsets 0)) spl-list ) ;_ end of get-spline (defun convert-spline (splobj n / i) (setq point-list nil 2Dpoint-list nil z-list nil spl-lyr (vlax-get-property splobj 'Layer) startSpline (vlax-curve-getStartParam splobj) endSpline (vlax-curve-getEndParam splobj) i (- 1) ) ;_ end of setq (repeat (+ n 1) (setq i (1+ i)) (setq p (vlax-curve-getPointAtParam splobj (* i (/ (- endspline startspline) n) ) ;_ end of * ) ;_ end of vlax-curve-getPointAtParam ) ;_ end of setq (setq 2Dp (list (car p) (cadr p)) 2Dpoint-list (append 2Dpoint-list 2Dp) point-list (append point-list p) z (caddr p) z-list (append z-list (list z)) ) ;_ end of setq ) ;_ end of repeat (setq summ (apply '+ z-list)) (setq arraySpace (vlax-make-safearray vlax-vbdouble ; element type (cons 0 (- (length point-list) 1) ) ; array dimension ) ;_ end of vlax-make-safearray ) ;_ end of setq (setq vert-array (vlax-safearray-fill arraySpace point-list)) (vlax-make-variant vert-array) (if (and (= :vlax-true (vlax-get-property splobj 'IsPLanar)) (= summ 0.0) ) ;_ end of and (setq plobj (add-polyline 2Dpoint-list vla-AddLightweightPolyline ) ;_ end of add-polyline ) ;_ end of setq (setq plobj (add-polyline point-list vla-Add3DPoly ) ;_ end of add-polyline ) ;_ end of setq ) ;_ end of if (vlax-put-property plobj 'Layer spl-lyr) (vla-delete splobj) (vlax-release-object splobj) ) ;_ end of convert-spline (defun add-polyline (pt-list poly-func) (setq arraySpace (vlax-make-safearray vlax-vbdouble (cons 0 (- (length pt-list) 1) ) ; array dimension ) ;_ end of vlax-make-safearray ) ;_ end of setq (setq vertex-array (vlax-safearray-fill arraySpace pt-list) ) ;_ end of setq (vlax-make-variant vertex-array) (setq plobj (poly-func *modelspace* vertex-array ) ;_ end of poly-func ) ;_ end of setq ) ;_ end of add-polyline (defun c:s2p () (spline-to-pline) (princ) ) ;_ end of c:s2p (prompt "SPLINE-TO-PLINE by Tony Hotchkiss. Enter S2P to start" ) ;_ end of prompt |
|||
|
||||
(defun dxf (code elist / ret)
(cond ((= (type elist) 'LIST) (setq ret (cdr (assoc code elist)))) ((= (type elist) 'ENAME) (setq ret (cdr (assoc code (entget elist)))) ) (T (setq ret nil)) ) ret ) (defun c:spl2pl () (setq spl (entsel "\nPick spline :")) (if spl (progn (if (= (dxf 0 (car spl)) "SPLINE") (progn (setq spl_el (entget (car spl))) (setq po1 (dxf 10 spl_el)) (setq ll (length spl_el)) (setq no 0) (repeat ll (setq item (nth no spl_el)) (setq no (1+ no)) (if (= (car item) 10) (setq po_last (cdr item)) ) ) (command "AREA" "E" spl) (setq spl_len (getvar "PERIMETER")) (if (not l_seg) (setq l_seg 1.0) ) (setq tmp (getreal (strcat "\nLength of this spline is " (rtos spl_len 2 2) ";Enter Segment length for making POLYLINE" " <" (rtos l_seg 2 2) "> :" ) ) ) (if tmp (setq l_seg tmp) ) (setq spl (list (car spl) po1)) (setq blp_mode (getvar "BLIPMODE")) (setvar "BLIPMODE" 0) (command "UNDO" "GROUP") (command "MEASURE" spl l_seg) (setq ssl (ssget "P")) (setq ll (sslength ssl)) (setq no 0) (setq po_lst (list po1)) (repeat ll (setq item (ssname ssl no)) (setq no (1+ no)) (setq po_lst (append po_lst (list (dxf 10 item)))) ) (setq po_lst (append po_lst (list po_last))) (command "ERASE" ssl "") (command "PLINE") (foreach n po_lst (command n)) (command "") (setvar "BLIPMODE" blp_mode) (initget "Yes No") (setq word (getkword "\nErase Spline object ? No/<Yes>")) (if (/= word "No") (command "ERASE" spl "") ) (command "UNDO" "END") ) ) ) ) (princ) ) |
||||
|
||||
Engineer Регистрация: 05.09.2003
New-York
Сообщений: 10,288
|
ABoltrushko>
Arkady> Программа станет лучше, если в ЛИСПы добавить Pedit с опцией Spline и с опцией Width. У Arkady остается и по желанию сохраняется или удаляется исходный сплайн, по которому можно сравнить то что получилось, и это хорошо. А еще лучше было бы если бы количество сегментов можно было менять по ходу, просматривая что получается. А исходную сплайн подкрасить бы в другой, чем текущий цвет. Возможно ли это? Нашел ссылку на toolPac: http://autokad.ru/forum/viewtopic.php?t=281 Там кроме spl2pl есть очень много интересного |
|||