下面是acad的方法,你可以在中望中试试
{6 s f7 K2 y( l
5 q5 j7 N6 H8 P/ s8 w% q1.普通方法
J$ a7 P* h% u8 o: h4 i 样条曲线转换成多段线的方法AutoCAD本身携带的ET工具(Express tool)有一个命令可以直接实现此功能:FLATTEN命令可以完成此项,前提是AutoCAD安装的时候已经安装了ET工具。% F# v7 Y3 m4 c1 |! [" N
方法1:直接输入“FLATTEN”
5 K' M- e1 w8 R* S 方法2:用菜单——Express——Modify——Flatten objects3 K0 R+ {! o; B+ A- L2 P- w
! h( \8 I. x( m! M! _
2.把样条曲线转换成多段线另类方法
3 `, v% n. j$ b 方法1:将要转换的样条曲线复制在一新图中,用“另存为”命令将图纸保存为“AutoCAD R12/L12 DXF (*.dxf)”格式,再“打开”命令选择打开刚才保存的“DXF (*.dxf)”格式文件即可。% O9 V6 f/ M; Z, w. `4 V
方法2:用WMFOUT命令选择要要转换的样条后,将所选对象保存为“图元文件 (*.wmf)”格式文件,再用WMFIN命令打开刚才保存的“图元文件 (*.wmf)”文件,按提示输入相应参数后炸开图形,就得到了所要转换的多段线了。
. y! F; p/ Q" ]$ U* L4 q* _6 f' H8 a% N4 R! G. \: W; O& ?+ Z
3.用lsp程序
0 c/ N8 F: a3 i t+ c8 E6 r将如下代码存为lsp格式,用CAD加载后输入命令ee即可转换。- (princ "+++ 曲线或圆弧到多线段 - Chris. [email protected] 2012-1-3 +++\n")4 x# B D9 @0 ?
- (princ "+++++ 输入命令"ee"进行操作 +++++\n")
$ e* V! o+ b7 @4 b3 B0 z. ^ - (defun c:ee () ;任意曲线变多段线一般只用于椭圆、圆弧和样条曲线3 q0 B t L0 F+ i4 q) x+ \1 M
- (VL-LOAD-COM)(setvar "cmdecho" 0)+ x5 q8 c( `6 t. U
- (setq ss (ssget '((0 . "ARC,*LINE,ELLIPSE"))))
( @6 Q7 ]9 p8 n# p - (princ "\n")" l' L& T$ D2 n# |. v# f# [( u7 N
- (setq jj (getint "设置间距(1):"))
, Z: y7 Y8 ^/ W. g3 V$ Q - (if (= jj nil) (setq jj 1))) E! u7 z! g+ s' {+ F
- (setq lenss (sslength ss)
8 z j5 Z* q0 F$ I$ T, X1 k0 Q. j$ R - i 0 eelist '() y- ?4 M- G7 ~) m* v' n
- )' i! ^. T+ h, \$ }( k
- (repeat lenss;外循环开始
" a' ?6 |2 I, e/ G8 O& o s$ i, m - (setq en (ssname ss i);取得图元名! Z! c! E1 b5 x
- obj (vlax-ename->vla-object en);转换为vla对象" t9 x5 g8 q# `. R8 c$ l
- )
0 M: j' r- W5 C - (setq ;zc (vlax-curve-getendparam obj)
( p+ |2 b! y1 ?" `. \' d* M - j 1 );求得图元周长
" m2 g8 n$ @. P2 D: E1 d# j - (setq zc(vlax-curve-getDistAtPoint obj (vlax-curve-getEndPoint obj)))2 _& H. J0 P. k% L( _: s
- 3 j9 W7 R- d _ r& \" r, @
- ;(setq j (- zc (* (fix(/ zc jj)) jj)));取第一段长度/ r: s+ L1 k$ v. e9 B
- (setq lst1(vlax-curve-getPointAtDist obj 0));取开始点
- o, z( r4 O$ H9 J% F. u( s - (repeat (fix (/ zc jj));循环周长取整次刚好到端点4 V \! v1 Y9 y( R+ L' J u* c
- ;(setq ePt (vlax-safearray->list (vlax-variant-value (vla-get-coordinate obj j))))
: \2 x; _2 k' Q+ L3 |5 J1 n - (setq lst (vlax-curve-getPointAtDist obj j);取距开始点为j的点" ^% i/ t1 m6 @- v1 `5 X
- ; lstlen (vlax-curve-getDistAtPoint obj lst);测量开始点到j点的距离
. d4 r% ]5 F, l/ ^4 z - )% c9 C: {* e' [9 |
- (setq eelist (append eelist (list lst)));加入到点集5 n1 ]4 K" [7 f4 C
- (setq j (+ jj j));递增jj
6 M& A. c. T( | - );内循环结束7 }# R* L3 w. Q( L% U
- ;(setq eelist(reverse eelist))
W3 U0 W5 ~5 j* {- Z1 r; m - (setq eelist (append eelist (list (vlax-curve-getEndPoint obj))))2 H. W4 A" _6 Q6 I
- (command ".pline" "non" lst1);开始描点
7 G0 n6 ^% M+ [ - (foreach n eelist (command "non" n)(grdraw lst1 n 1) (setq lst1 n));模拟描红# _% X7 C+ l! X+ H k( T7 z( ~( @: d) Y
- (COMMAND "");描点结束" I; m. s P# z. a2 x
- (setq eelist '());清空点集" \. T1 }/ D* p: ?) w+ U/ k v+ @
- (setq i (1+ i));下一个图元3 s9 R& x! F. |' ]9 k+ R: b/ e W( j
- );外循环结束
3 C% F3 T7 q) Q, @% |) F - (princ "\n转换结束.") K7 N) t6 V0 k3 ], u( ~
- )
复制代码 |