| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > spline to plyline

spline to plyline

Ответ
Поиск в этой теме
Непрочитано 25.11.2003, 16:03 #1
spline to plyline
Сметанка
 
Москва
Регистрация: 14.10.2003
Сообщений: 25

Народ, подсажите, можно как-нибудь перевести spline в polyline не перерисовывая все заново?!
Просмотров: 9321
 
Непрочитано 25.11.2003, 21:42
#2
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


Хитрый способ описал Startrek на своей страничке
Цитата:
HOW TO CHANGE A SPLINE INTO A POLYLINE (by Garry Fisher)
WBlock the Spline
Open the Spline dwg and Save it as an R12 dwg
Save the Spline as a DXF file
Insert the DXF into your new file
Explode the DXF
Pedit the segments as a Pline.
В 2002 "Save as" DWG вроде бы только до 13 минимум... Однако, работает, если сразу в R12 DXF
vk вне форума  
 
Автор темы   Непрочитано 26.11.2003, 09:10
#3
Сметанка


 
Регистрация: 14.10.2003
Москва
Сообщений: 25
<phrase 1=


Все оказалось гораздо проще..))
Сметанка вне форума  
 
Непрочитано 26.11.2003, 10:40
#4
Belka

архитектор
 
Регистрация: 21.08.2003
Москва
Сообщений: 92
<phrase 1=


Функция которая переводит сплайны в линии называется Flatten и находится в Экспрессах (Modify > Flatten). Извините, если что... только надо учитывать, что она уплощает и преобразует в полилинии и линии параллельно плоскости текущего вида и уничтожает исходные объекты.
PS Кстати в 2002 Flatten есть в Экспрессах, а в 2004 - в Экспрессах нет, зато вызывается из ком. строки %)))
хм... и еще у меня почему -то оные сконвертились в дуги
__________________
слово - серебро, молчанье - ...... ?
:))))))))))))))))))))))))))))))))))))))))
Belka вне форума  
 
Автор темы   Непрочитано 26.11.2003, 14:11
#5
Сметанка


 
Регистрация: 14.10.2003
Москва
Сообщений: 25
<phrase 1=


команда spl2pl по крайней мере в AutoCADe 2004..!
Сметанка вне форума  
 
Непрочитано 26.11.2003, 14:21
#6
Dmitri

Строительные конструкции
 
Регистрация: 21.10.2003
Москва
Сообщений: 174
<phrase 1=


Command: _SPL2PL
Unknown command "SPL2PL". Press F1 for help.

Command: spl2pl
Unknown command "SPL2PL". Press F1 for help.
?????

"Flatten" работает, только полилиния получилась уж больно ломаная.
Dmitri вне форума  
 
Непрочитано 26.11.2003, 15:03
#7
Belka

архитектор
 
Регистрация: 21.08.2003
Москва
Сообщений: 92
<phrase 1=


Хм... и у меня не знает такого зверя.
__________________
слово - серебро, молчанье - ...... ?
:))))))))))))))))))))))))))))))))))))))))
Belka вне форума  
 
Непрочитано 26.11.2003, 16:05
#8
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


Это не из Тулпака, случайно?
vk вне форума  
 
Непрочитано 26.11.2003, 16:49
#9
Dmitri

Строительные конструкции
 
Регистрация: 21.10.2003
Москва
Сообщений: 174
<phrase 1=


А с командой "flatten" у меня вот такая бяка получается.
На рисунке справа - увеличенное изображение того что в кружке слева.
И никаких дуг не получается - одни прямолинейные сегменты.
[ATTACH]1069913791.jpg[/ATTACH]
Dmitri вне форума  
 
Автор темы   Непрочитано 27.11.2003, 08:54
#10
Сметанка


 
Регистрация: 14.10.2003
Москва
Сообщений: 25
<phrase 1=


для того, чтоб работала spl2pl нужна программка... зато flatten - unknow..( нажмите F1 for help...
Сметанка вне форума  
 
Непрочитано 27.11.2003, 11:44
#11
Belka

архитектор
 
Регистрация: 21.08.2003
Москва
Сообщений: 92
<phrase 1=


Вот загадочные души ... "нужна программка".. народ знаете ли Вам пытается помочь, советует сам, сам пробует, его ведь это тож волнует - а Вы разобрались и отделались общими фразами.
Некрасиво.
__________________
слово - серебро, молчанье - ...... ?
:))))))))))))))))))))))))))))))))))))))))
Belka вне форума  
 
Непрочитано 27.11.2003, 18:31
#12
Vova

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» то есть предлог «К» Вот и получается, что команда конвертирует сплайн к полилинии и делает это вполне корректно
Vova вне форума  
 
Непрочитано 03.12.2003, 13:23 spline to plyline
#13
ABoltrushko

Инженер
 
Регистрация: 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
ABoltrushko вне форума  
 
Непрочитано 03.12.2003, 14:38
#14
Torino


 
Регистрация: 21.08.2003
Штаб
Сообщений: 943
<phrase 1=


Спасибо, программа работает, но есть один недостаток: невозможно прервать команду, если не выделен сплайн.
Может кто знает как это решить?
Torino вне форума  
 
Непрочитано 03.12.2003, 15:26
#15
Arkady

AutoCad Development and Support
 
Регистрация: 21.08.2003
Israel
Сообщений: 183
Отправить сообщение для Arkady с помощью Skype™


(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)
)
Arkady вне форума  
 
Непрочитано 03.12.2003, 16:21
#16
Torino


 
Регистрация: 21.08.2003
Штаб
Сообщений: 943
<phrase 1=


А вот эта прога вообще не работает.
На картинке слева - исходный сплайн, на картинке справа - то, что получилось (при различных значениях длины):
[ATTACH]1070457681.gif[/ATTACH]
Torino вне форума  
 
Непрочитано 06.12.2003, 17:24
#17
Arkady

AutoCad Development and Support
 
Регистрация: 21.08.2003
Israel
Сообщений: 183
Отправить сообщение для Arkady с помощью Skype™


Отключи Osnap
Arkady вне форума  
 
Непрочитано 06.12.2003, 18:21
#18
Vova

Engineer
 
Регистрация: 05.09.2003
New-York
Сообщений: 10,288


ABoltrushko>
Arkady>
Программа станет лучше, если в ЛИСПы добавить Pedit с опцией Spline и с опцией Width. У Arkady остается и по желанию сохраняется или удаляется исходный сплайн, по которому можно сравнить то что получилось, и это хорошо. А еще лучше было бы если бы количество сегментов можно было менять по ходу, просматривая что получается. А исходную сплайн подкрасить бы в другой, чем текущий цвет. Возможно ли это?
Нашел ссылку на toolPac: http://autokad.ru/forum/viewtopic.php?t=281
Там кроме spl2pl есть очень много интересного
Vova вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > spline to plyline

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск