下面是acad的方法,你可以在中望中试试
) C& ]/ _* o- n3 w! ]8 ^9 w* M
1.普通方法) U/ F& ~$ E* A) F
样条曲线转换成多段线的方法AutoCAD本身携带的ET工具(Express tool)有一个命令可以直接实现此功能:FLATTEN命令可以完成此项,前提是AutoCAD安装的时候已经安装了ET工具。& e, m. C9 g& I x' k
方法1:直接输入“FLATTEN” L0 h' S* c$ W# H9 Y
方法2:用菜单——Express——Modify——Flatten objects
$ X9 @$ ] _- E9 Z; `" R$ `$ P8 k+ J: C7 _5 N
2.把样条曲线转换成多段线另类方法& O' c+ q9 k+ B) S1 m+ d6 E
方法1:将要转换的样条曲线复制在一新图中,用“另存为”命令将图纸保存为“AutoCAD R12/L12 DXF (*.dxf)”格式,再“打开”命令选择打开刚才保存的“DXF (*.dxf)”格式文件即可。
$ W9 Q6 z' s4 k, @' e7 v2 N 方法2:用WMFOUT命令选择要要转换的样条后,将所选对象保存为“图元文件 (*.wmf)”格式文件,再用WMFIN命令打开刚才保存的“图元文件 (*.wmf)”文件,按提示输入相应参数后炸开图形,就得到了所要转换的多段线了。3 D; Q/ V. S3 Q8 q, R$ Z; T! i
8 s* e3 |$ H5 j3.用lsp程序0 h2 o- p0 ?2 X7 M6 c+ E7 b
将如下代码存为lsp格式,用CAD加载后输入命令ee即可转换。- (princ "+++ 曲线或圆弧到多线段 - Chris. [email protected] 2012-1-3 +++\n")3 E0 Y5 n( |! X2 g. Y
- (princ "+++++ 输入命令"ee"进行操作 +++++\n")
4 h+ _ B; T9 x1 K1 v/ v - (defun c:ee () ;任意曲线变多段线一般只用于椭圆、圆弧和样条曲线
7 b9 B# u7 _3 F Y0 R; c( y7 I ` - (VL-LOAD-COM)(setvar "cmdecho" 0)& n- o6 h1 b) K$ Y$ Z0 [" f3 Q
- (setq ss (ssget '((0 . "ARC,*LINE,ELLIPSE"))))
4 o( z2 h! r7 g* b" C/ ^ - (princ "\n")
& a' y! F/ y; v - (setq jj (getint "设置间距(1):"))
: l$ O; F0 I8 i* z" Y - (if (= jj nil) (setq jj 1))
! E; L+ u* o: U& J6 E - (setq lenss (sslength ss)$ V L4 A" y) v
- i 0 eelist '()
! y6 r% s5 `' w - )
6 q% |+ {/ l2 l) C! m& |, p - (repeat lenss;外循环开始
1 k$ U4 t b# d& o9 c* t - (setq en (ssname ss i);取得图元名
* k1 E k* o! ?! A6 m7 C' K6 L - obj (vlax-ename->vla-object en);转换为vla对象
7 Z' [2 g# i [. | - )
0 n5 Z7 |) ?5 f2 \ - (setq ;zc (vlax-curve-getendparam obj)
4 o+ B* I$ H: A- C1 O$ ]' @ - j 1 );求得图元周长5 \) D" `% t# y% R
- (setq zc(vlax-curve-getDistAtPoint obj (vlax-curve-getEndPoint obj)))( L/ J+ D5 c: v) m9 v. u
-
% U4 R) M# m' n - ;(setq j (- zc (* (fix(/ zc jj)) jj)));取第一段长度. ], K4 \* P- ~1 J5 `- z5 ? U' `7 r
- (setq lst1(vlax-curve-getPointAtDist obj 0));取开始点
( M8 C$ C3 S a4 G, v6 s - (repeat (fix (/ zc jj));循环周长取整次刚好到端点
& `: ^% `$ f* f$ h, R - ;(setq ePt (vlax-safearray->list (vlax-variant-value (vla-get-coordinate obj j))))
8 s+ ~: R8 V; s, A4 {- Q/ J& I - (setq lst (vlax-curve-getPointAtDist obj j);取距开始点为j的点
2 ^$ w% p2 o" p! J% D - ; lstlen (vlax-curve-getDistAtPoint obj lst);测量开始点到j点的距离
3 d. y2 l$ `- Q* y+ S8 v - )
d. V5 E8 A) g& ^3 B' i0 S6 R - (setq eelist (append eelist (list lst)));加入到点集
0 a0 ]3 u# |: L; u' Q. j0 H9 ~ - (setq j (+ jj j));递增jj/ w! E4 v: ^$ B" U' K4 l. |
- );内循环结束) K4 N2 f# ^# z9 x& t
- ;(setq eelist(reverse eelist))
" f. d; }8 F" h - (setq eelist (append eelist (list (vlax-curve-getEndPoint obj))))
& {1 K- ^8 ? @8 n; P. m/ c0 E$ ? - (command ".pline" "non" lst1);开始描点
: Z; i e# y. q' K. ~: R3 ` - (foreach n eelist (command "non" n)(grdraw lst1 n 1) (setq lst1 n));模拟描红7 S/ t8 i/ p6 g$ h6 L: [' `
- (COMMAND "");描点结束
& w2 @# v8 K; H+ K* k( z; G - (setq eelist '());清空点集) D; r$ X. _+ O$ N* w
- (setq i (1+ i));下一个图元
; Y8 K: n8 x4 f- y4 q - );外循环结束
& |$ I0 S- {1 r) {; [: w6 n - (princ "\n转换结束.")
+ ]6 d* p" x; g( G+ c9 E - )
复制代码 |