下面是acad的方法,你可以在中望中试试
) p* c7 t. J8 M5 y. B( q" O, O" T" v
1.普通方法
& l5 T6 i# e$ p, t% A% F2 M 样条曲线转换成多段线的方法AutoCAD本身携带的ET工具(Express tool)有一个命令可以直接实现此功能:FLATTEN命令可以完成此项,前提是AutoCAD安装的时候已经安装了ET工具。 i. N+ @% U* p. {, Q) w
方法1:直接输入“FLATTEN”$ d& ~2 c- q& \+ K* A' ?, R
方法2:用菜单——Express——Modify——Flatten objects9 }+ w3 O1 l6 {# M/ P3 k
& B9 X: I; D( `) |8 O) G& d2.把样条曲线转换成多段线另类方法
2 R1 k& x( E4 s7 E v# z 方法1:将要转换的样条曲线复制在一新图中,用“另存为”命令将图纸保存为“AutoCAD R12/L12 DXF (*.dxf)”格式,再“打开”命令选择打开刚才保存的“DXF (*.dxf)”格式文件即可。3 u+ _( Z& x! T5 ?4 S/ V/ S/ d& V
方法2:用WMFOUT命令选择要要转换的样条后,将所选对象保存为“图元文件 (*.wmf)”格式文件,再用WMFIN命令打开刚才保存的“图元文件 (*.wmf)”文件,按提示输入相应参数后炸开图形,就得到了所要转换的多段线了。
3 v, z& \) a1 s' o8 Z: O! N+ E3 u7 V7 @
3.用lsp程序1 x0 T, J* [. O
将如下代码存为lsp格式,用CAD加载后输入命令ee即可转换。- (princ "+++ 曲线或圆弧到多线段 - Chris. [email protected] 2012-1-3 +++\n")
4 r4 ^; S% G( i' z3 i9 L - (princ "+++++ 输入命令"ee"进行操作 +++++\n")% J* W+ Y2 x- L6 @' F% I3 R
- (defun c:ee () ;任意曲线变多段线一般只用于椭圆、圆弧和样条曲线
; _& G1 W3 h9 j- H5 d! D0 \ - (VL-LOAD-COM)(setvar "cmdecho" 0)$ Q; D9 k9 k1 t C# }( ], V
- (setq ss (ssget '((0 . "ARC,*LINE,ELLIPSE")))). r, r" `- ^( x; @5 ?
- (princ "\n")
% Q0 x$ v- E- ] p - (setq jj (getint "设置间距(1):"))$ u. m. Z& }# _ s9 F
- (if (= jj nil) (setq jj 1)) n) K+ g8 z+ K$ m) J3 N
- (setq lenss (sslength ss)
" y5 t; [" [4 X7 m" k, W7 x - i 0 eelist '()! d3 V3 k: E/ q! U9 K+ A
- ); w* e' H. J1 K
- (repeat lenss;外循环开始/ a& L/ w; {% z2 {
- (setq en (ssname ss i);取得图元名* y; o6 \3 C" Z/ @, q' I
- obj (vlax-ename->vla-object en);转换为vla对象
' f' g+ [' A* u6 F. ^$ p. V4 D) { - )$ ^4 ~/ T' u6 ^; E+ w5 W
- (setq ;zc (vlax-curve-getendparam obj)( r% n! j+ u0 y2 B* n
- j 1 );求得图元周长) H* V! d6 [6 q& O& O# I/ c! K3 o) _, i
- (setq zc(vlax-curve-getDistAtPoint obj (vlax-curve-getEndPoint obj)))
" [3 l, ^/ ^; A* I/ _ -
. B \/ e8 D+ T0 ?; T i8 P - ;(setq j (- zc (* (fix(/ zc jj)) jj)));取第一段长度
2 H1 m: r( B; Z* v# [2 h" o - (setq lst1(vlax-curve-getPointAtDist obj 0));取开始点7 Q Q5 t. [8 L2 w. s- n; t
- (repeat (fix (/ zc jj));循环周长取整次刚好到端点0 D O5 U* k: i) z! E8 `
- ;(setq ePt (vlax-safearray->list (vlax-variant-value (vla-get-coordinate obj j))))
7 }* o5 @' D8 ] - (setq lst (vlax-curve-getPointAtDist obj j);取距开始点为j的点
# ~# f+ o% Z, N' Q* p7 h& f - ; lstlen (vlax-curve-getDistAtPoint obj lst);测量开始点到j点的距离
0 n g# K1 A1 \6 p8 \ - )
2 G) R- s% \; s1 D& T - (setq eelist (append eelist (list lst)));加入到点集+ i9 v3 U4 C; F
- (setq j (+ jj j));递增jj
7 j1 L3 ]0 C5 W - );内循环结束4 ^3 ?2 b5 c+ s" w' n: P5 H+ B
- ;(setq eelist(reverse eelist))- k2 Z& }/ {, o, t1 _' G8 r
- (setq eelist (append eelist (list (vlax-curve-getEndPoint obj))))3 E6 e" C1 m0 h
- (command ".pline" "non" lst1);开始描点. A/ V+ J& q8 P# Z& ^6 T2 e
- (foreach n eelist (command "non" n)(grdraw lst1 n 1) (setq lst1 n));模拟描红
$ v' }$ j1 |' C+ A - (COMMAND "");描点结束) n; `3 i7 e7 S( p
- (setq eelist '());清空点集, U- `5 C5 o0 V% A: {
- (setq i (1+ i));下一个图元
! F a2 I! w, h2 ~5 z8 ^& A - );外循环结束
8 B# C: H1 K) K8 C - (princ "\n转换结束.")# R8 \# _4 {0 d4 t/ l
- )
复制代码 |