下面是acad的方法,你可以在中望中试试; U; U% I# I; g/ B" v7 i9 M6 W
5 X _ { {# S$ d9 h: Q* K1.普通方法. }) n6 \0 c0 O5 ]) Y9 J
样条曲线转换成多段线的方法AutoCAD本身携带的ET工具(Express tool)有一个命令可以直接实现此功能:FLATTEN命令可以完成此项,前提是AutoCAD安装的时候已经安装了ET工具。
1 Y+ i) \6 L' H1 G. C" i 方法1:直接输入“FLATTEN”
& R& u: p# w4 _ 方法2:用菜单——Express——Modify——Flatten objects
1 G; X2 g! F5 r. G- f j" P( d f8 B% \& Q
2.把样条曲线转换成多段线另类方法9 o! i% T% ]1 x7 A) X
方法1:将要转换的样条曲线复制在一新图中,用“另存为”命令将图纸保存为“AutoCAD R12/L12 DXF (*.dxf)”格式,再“打开”命令选择打开刚才保存的“DXF (*.dxf)”格式文件即可。4 J* T- _* T W) h6 |
方法2:用WMFOUT命令选择要要转换的样条后,将所选对象保存为“图元文件 (*.wmf)”格式文件,再用WMFIN命令打开刚才保存的“图元文件 (*.wmf)”文件,按提示输入相应参数后炸开图形,就得到了所要转换的多段线了。. F" r: o! `& Y" C& ^/ Q- ?2 P/ P7 s
2 H/ j/ c4 P* s$ K9 o$ O0 W) s/ N
3.用lsp程序
4 H% A( b% @* A3 i. D& t8 V) g0 t) @将如下代码存为lsp格式,用CAD加载后输入命令ee即可转换。- (princ "+++ 曲线或圆弧到多线段 - Chris. [email protected] 2012-1-3 +++\n")$ s/ i/ j. E5 c
- (princ "+++++ 输入命令"ee"进行操作 +++++\n")
4 W9 X7 v5 M4 d. F - (defun c:ee () ;任意曲线变多段线一般只用于椭圆、圆弧和样条曲线 ]7 S- U( X0 Q6 O! f/ k9 {+ M/ E
- (VL-LOAD-COM)(setvar "cmdecho" 0)
3 A- W* [* p8 j: w: n, ~; O - (setq ss (ssget '((0 . "ARC,*LINE,ELLIPSE"))))
% y) p& b/ e4 e/ i3 f1 y - (princ "\n")
5 Q5 p( r! l$ a, Q1 ^' P) x9 w - (setq jj (getint "设置间距(1):"))
# O5 n; e; O/ v' Z( Z3 Q* C - (if (= jj nil) (setq jj 1))
. {( e8 `( k, ?( C; C6 o - (setq lenss (sslength ss)" `' }6 V6 _' w1 b+ i3 R: A
- i 0 eelist '()
0 f" {$ L! f! A8 Y - )
5 S! W- U$ D& r0 Y4 Z- H& ] - (repeat lenss;外循环开始
3 F5 `% t8 R4 l - (setq en (ssname ss i);取得图元名
/ T* y# Q8 t2 H8 } - obj (vlax-ename->vla-object en);转换为vla对象
# K8 D" n8 k( w% }, F0 i0 \ - )
% h6 Y) @6 M0 u8 B. n( [ - (setq ;zc (vlax-curve-getendparam obj)
* D/ s- |+ p0 ?3 t, e - j 1 );求得图元周长
& \* C7 {+ K# g; h# Q/ I4 V+ ~ - (setq zc(vlax-curve-getDistAtPoint obj (vlax-curve-getEndPoint obj)))- ~( i X" H* Y
-
w/ u, }) ^6 U - ;(setq j (- zc (* (fix(/ zc jj)) jj)));取第一段长度
+ Q. F$ G- v; ] c9 D - (setq lst1(vlax-curve-getPointAtDist obj 0));取开始点* W) K- E# V( @" F
- (repeat (fix (/ zc jj));循环周长取整次刚好到端点
/ s5 w$ y; M& b: {& v* _; A - ;(setq ePt (vlax-safearray->list (vlax-variant-value (vla-get-coordinate obj j))))( L' A6 @1 [! t' r3 F/ }3 g
- (setq lst (vlax-curve-getPointAtDist obj j);取距开始点为j的点4 w3 p0 h2 I4 W, f& p! [; f6 s
- ; lstlen (vlax-curve-getDistAtPoint obj lst);测量开始点到j点的距离) Y. ?6 L _$ `/ L
- )
1 v5 ^$ X" g" I& t! o; S - (setq eelist (append eelist (list lst)));加入到点集
0 Q+ j% l: c M/ s; w! t$ _/ W( M - (setq j (+ jj j));递增jj. ^, Z8 n4 I$ n$ X8 `5 B5 I) S
- );内循环结束$ J" q4 M+ j! ?( k/ s ?& A
- ;(setq eelist(reverse eelist))
- X: E! X$ E4 ?% u5 D5 ? - (setq eelist (append eelist (list (vlax-curve-getEndPoint obj))))
& b7 w* U1 z5 l7 x' s - (command ".pline" "non" lst1);开始描点
% k; k1 b$ n% b9 L, R4 f2 T - (foreach n eelist (command "non" n)(grdraw lst1 n 1) (setq lst1 n));模拟描红& ^% y+ e/ L& {+ z* Q7 m4 g
- (COMMAND "");描点结束( H" ]* O" @4 Y) [) N Y- T
- (setq eelist '());清空点集+ d- ]' g' J, C2 E( s% w2 I
- (setq i (1+ i));下一个图元9 s6 m' x5 J) M" K
- );外循环结束! [. }4 R- O; r2 R/ S
- (princ "\n转换结束.")
' r$ F' \6 k! c4 {( m) W - )
复制代码 |