下面是acad的方法,你可以在中望中试试
, B# ~! f5 {% A7 [
' F8 X' I2 \/ G( _8 i* s7 u: w5 Z' L* @1.普通方法6 W8 U2 K" R: N. J$ F( i
样条曲线转换成多段线的方法AutoCAD本身携带的ET工具(Express tool)有一个命令可以直接实现此功能:FLATTEN命令可以完成此项,前提是AutoCAD安装的时候已经安装了ET工具。( a7 a4 r1 Y0 z! m# b' `: v
方法1:直接输入“FLATTEN”
/ M, l% P9 \$ y" t, p- E 方法2:用菜单——Express——Modify——Flatten objects
; t" d; C8 u& J1 b
' |- C% c1 H- \: Q2.把样条曲线转换成多段线另类方法
' T- }* B4 W) Y7 U2 m: k 方法1:将要转换的样条曲线复制在一新图中,用“另存为”命令将图纸保存为“AutoCAD R12/L12 DXF (*.dxf)”格式,再“打开”命令选择打开刚才保存的“DXF (*.dxf)”格式文件即可。
# c; S, ?% y& a/ A5 V* y 方法2:用WMFOUT命令选择要要转换的样条后,将所选对象保存为“图元文件 (*.wmf)”格式文件,再用WMFIN命令打开刚才保存的“图元文件 (*.wmf)”文件,按提示输入相应参数后炸开图形,就得到了所要转换的多段线了。
$ B. G4 |9 _: i
M2 B: y/ j5 C3.用lsp程序; o9 I1 F0 @$ V4 ?
将如下代码存为lsp格式,用CAD加载后输入命令ee即可转换。- (princ "+++ 曲线或圆弧到多线段 - Chris. [email protected] 2012-1-3 +++\n")
4 Z0 ~! U- Y3 R2 y- K - (princ "+++++ 输入命令"ee"进行操作 +++++\n"); r& C3 K* L* [- m
- (defun c:ee () ;任意曲线变多段线一般只用于椭圆、圆弧和样条曲线$ B+ O: z" y; p2 z% M9 Z5 h
- (VL-LOAD-COM)(setvar "cmdecho" 0)- _. ?1 t. w: y) q B0 l' m
- (setq ss (ssget '((0 . "ARC,*LINE,ELLIPSE"))))
/ ]/ K) W7 x- ? - (princ "\n")
' Z- Z: Y& [8 W" a( I, C9 u - (setq jj (getint "设置间距(1):"))( [8 ?- R4 X1 q" j$ Y3 o6 d+ R
- (if (= jj nil) (setq jj 1))
5 h+ }# ?, K7 M: U; [9 z - (setq lenss (sslength ss)
`% s5 I& t2 A1 x3 N - i 0 eelist '()
' \# S s7 m3 ~" e; _' W - )" X& Z' r' _. Y) e& N0 b
- (repeat lenss;外循环开始3 n# y& s: g/ {1 n7 w, I6 D; O
- (setq en (ssname ss i);取得图元名2 }6 f1 X9 u: ^1 b3 N8 c
- obj (vlax-ename->vla-object en);转换为vla对象
) z% R, k# q5 j7 m- q" R6 N( I* g - )
. n, J; ~4 i) d/ v1 R! D - (setq ;zc (vlax-curve-getendparam obj)
1 z8 k# w" n; r8 G4 I% q% F - j 1 );求得图元周长
# ^7 q9 _0 h# l! m) ^ - (setq zc(vlax-curve-getDistAtPoint obj (vlax-curve-getEndPoint obj)))% k0 q2 V5 `/ b1 l! Z1 Y7 ]3 ?
- ) K) j- i! W! p, g6 Z( ]+ Z
- ;(setq j (- zc (* (fix(/ zc jj)) jj)));取第一段长度
6 [% |" ^( [ ~7 k$ b, L - (setq lst1(vlax-curve-getPointAtDist obj 0));取开始点9 ?$ L5 `/ a i+ D+ t8 X
- (repeat (fix (/ zc jj));循环周长取整次刚好到端点
$ u" U( c/ H7 d) I8 t' ?# n( E - ;(setq ePt (vlax-safearray->list (vlax-variant-value (vla-get-coordinate obj j))))
, v" j2 l# G9 j! U- ~ - (setq lst (vlax-curve-getPointAtDist obj j);取距开始点为j的点
. h6 ^ c# {& {" M- y7 b - ; lstlen (vlax-curve-getDistAtPoint obj lst);测量开始点到j点的距离
" O8 w8 A9 p: B! T9 r. d( K - ), O& K- ]/ K. i) Z9 ]
- (setq eelist (append eelist (list lst)));加入到点集
: i5 Y4 y; D6 I7 k" V" Y8 M - (setq j (+ jj j));递增jj5 ]& s7 h5 L( R0 R
- );内循环结束
3 ]! m4 D( M+ U5 U7 C - ;(setq eelist(reverse eelist))
. k) R1 P, Y u( I, ^. n( \8 ?$ U - (setq eelist (append eelist (list (vlax-curve-getEndPoint obj))))2 g7 m* V! W; e# D
- (command ".pline" "non" lst1);开始描点) W c* T+ M! s O& A! X" [
- (foreach n eelist (command "non" n)(grdraw lst1 n 1) (setq lst1 n));模拟描红" K8 i% u) y4 I+ |1 n, v
- (COMMAND "");描点结束
: U( ], \' f2 \" K - (setq eelist '());清空点集2 ~8 q' P9 c' {9 r6 p/ b
- (setq i (1+ i));下一个图元7 a V; `9 q) _4 d
- );外循环结束: |; t9 g+ J6 g! P6 i
- (princ "\n转换结束.")
6 f& o* B( @; b Z- N! H - )
复制代码 |