CAD设计论坛

 找回密码
 立即注册
论坛新手常用操作帮助系统等待验证的用户请看获取社区币方法的说明新注册会员必读(必修)
查看: 3736|回复: 5

[求助] 如何将样条曲线变成多段线?

[复制链接]
发表于 2012-3-30 22:55 | 显示全部楼层 |阅读模式
n条样条曲线怎么能转变为多段线
 楼主| 发表于 2012-4-10 08:07 | 显示全部楼层
哪位高手回复一下啊,教教!
发表于 2012-4-18 11:27 | 显示全部楼层
下面是acad的方法,你可以在中望中试试
: I  P0 X/ p' f  Q0 K3 ^! F" R# m( ?; _, L$ v: E( D
1.普通方法
2 r/ x* T- |: K) `: w* Y/ z! V    样条曲线转换成多段线的方法AutoCAD本身携带的ET工具(Express tool)有一个命令可以直接实现此功能:FLATTEN命令可以完成此项,前提是AutoCAD安装的时候已经安装了ET工具。
+ D* |# s* M) y1 k1 w8 x  n) L 方法1:直接输入“FLATTEN”- \3 e! b2 L8 c. u! }8 f
方法2:用菜单——Express——Modify——Flatten objects) }( |8 f) R2 d# e0 o

8 O, O, O! m+ g. j& \2.把样条曲线转换成多段线另类方法. V8 ~$ a9 _$ q
方法1:将要转换的样条曲线复制在一新图中,用“另存为”命令将图纸保存为“AutoCAD R12/L12 DXF (*.dxf)”格式,再“打开”命令选择打开刚才保存的“DXF (*.dxf)”格式文件即可。5 g  ], {: e$ V4 _; Q
方法2:用WMFOUT命令选择要要转换的样条后,将所选对象保存为“图元文件 (*.wmf)”格式文件,再用WMFIN命令打开刚才保存的“图元文件 (*.wmf)”文件,按提示输入相应参数后炸开图形,就得到了所要转换的多段线了。. w9 s: u5 o+ ~0 ?& |

6 t) P- G3 Z$ j3.用lsp程序
4 B* E2 O8 o, q) U  Y& a5 G- |/ q将如下代码存为lsp格式,用CAD加载后输入命令ee即可转换。
  1. (princ "+++ 曲线或圆弧到多线段 - Chris. test@skyline.name 2012-1-3 +++\n")
    $ V; `8 w0 e& h/ M( D2 J2 I' ?
  2. (princ "+++++ 输入命令"ee"进行操作 +++++\n")
    # J8 t3 Q8 _" ]
  3. (defun c:ee () ;任意曲线变多段线一般只用于椭圆、圆弧和样条曲线8 M. m+ p) A1 @! V4 I! e$ X/ E
  4.   (VL-LOAD-COM)(setvar "cmdecho" 0)
    - H! u3 ]5 T; M/ |- }5 |
  5.   (setq ss (ssget '((0 . "ARC,*LINE,ELLIPSE"))))6 p( ~& F5 a4 x- ^7 F" k; o8 K$ O
  6.   (princ "\n")
    " i: [+ [& T$ m8 R
  7.   (setq jj (getint "设置间距(1):"))* P- m. E) i* i4 N, P& t0 l% h
  8.   (if (= jj nil) (setq jj 1))0 |4 }6 R( q2 n3 R2 a
  9.   (setq lenss (sslength ss)
    ; n: R- P+ u2 u9 D; c
  10. i     0 eelist '()4 @/ j- X3 `7 A: l8 W" y9 b
  11.   )
    - @6 }  W* K0 w  O
  12.   (repeat lenss;外循环开始+ D# ^* ]/ {# B& G
  13.     (setq en  (ssname ss i);取得图元名$ m2 \2 ^' h$ E* k2 F2 j! A+ T. y
  14.    obj (vlax-ename->vla-object en);转换为vla对象
    * ]6 x; y. F3 u  I$ H2 @" }) K1 @
  15.     )
    $ d* i3 S& m6 @5 c0 p" i2 p- D
  16.     (setq ;zc (vlax-curve-getendparam obj)
    : n; `1 D! Y$ S7 o" d# I
  17.     j 1  );求得图元周长) N6 |; E4 u5 z0 @3 X, t
  18.    (setq zc(vlax-curve-getDistAtPoint obj (vlax-curve-getEndPoint obj)))
    ) q- I% ^6 l7 |9 q* E7 }
  19.    
    . R$ I+ S  }1 t) \/ y+ m
  20.     ;(setq j (- zc (* (fix(/ zc jj)) jj)));取第一段长度8 }; L2 Z8 p6 X- ~1 p2 L
  21.     (setq lst1(vlax-curve-getPointAtDist obj 0));取开始点8 A% P1 H, R9 l! L- ?; @
  22.     (repeat (fix (/ zc jj));循环周长取整次刚好到端点
    5 E8 H: _% f* N( Z/ a" ~
  23.       ;(setq ePt (vlax-safearray->list (vlax-variant-value (vla-get-coordinate obj j))))( Y! C, Q( v* c4 y7 y( l4 B
  24.       (setq lst (vlax-curve-getPointAtDist obj j);取距开始点为j的点
    ( K. n0 L# w- `, X4 m
  25.     ; lstlen (vlax-curve-getDistAtPoint obj lst);测量开始点到j点的距离
    5 d9 x3 D! W6 H7 E& g: C
  26.       )
    + E0 [9 }5 g: d0 s# a
  27.       (setq eelist (append eelist (list lst)));加入到点集
    3 [" k& Z6 a4 G9 `" @, M4 j0 G
  28.       (setq j (+ jj j));递增jj  N1 ~4 p' V0 Y" }, H. P( o
  29.     );内循环结束, B0 t8 U. Q6 M+ j! O" T1 t: e3 f" B* |
  30.     ;(setq eelist(reverse eelist))" a3 o$ U' T7 w" ^
  31.     (setq eelist (append eelist (list (vlax-curve-getEndPoint obj))))! E7 b: w# P: _2 U4 A0 s7 J
  32.     (command ".pline" "non" lst1);开始描点$ d7 t3 k+ ]( U+ n
  33.     (foreach n eelist (command "non" n)(grdraw lst1 n 1) (setq lst1 n));模拟描红
    # P, V% \& U( p6 Y
  34.     (COMMAND "");描点结束* ^; a; V4 O/ s
  35.     (setq eelist '());清空点集' l0 i8 A, E1 L, n0 ^& X$ i1 I
  36.     (setq i (1+ i));下一个图元
    6 h) Y! p" {  o
  37.   );外循环结束
    % k+ ^( O- Q" r! y9 P  k6 @
  38.   (princ "\n转换结束.")8 `( e& F. E, k: P/ |% w8 g7 i
  39. )
复制代码
发表于 2012-4-19 11:07 | 显示全部楼层
下面是acad的方法,你可以在中望中试试
* W4 F5 a0 C* D. L/ ^, A: c2 a5 W" Y4 `1 ?' O
1.普通方法4 W% J. c- `9 W* B- x; s# {: ]
    样条曲线转换成多段线的方法AutoCAD本身携带的E ...
# P$ d" q( v1 D  Y, p9 a, [www_qf 发表于 2012-4-18 11:27

) M" R% R6 A" o9 t: v8 G0 t3 J1 ]0 v
竟然有这么多的方法。
发表于 2012-4-24 12:02 | 显示全部楼层
不错,学习了。
发表于 2022-7-17 10:54 来自手机 | 显示全部楼层
www_qf 发表于 2012-4-18 11:27. |+ C: {1 T/ ]0 U6 o
下面是acad的方法,你可以在中望中试试
# g$ \$ P& p7 V$ ~1 s$ @. D: @
/ X% ~( Y# h3 t5 ?$ m1.普通方法  Y' k# V( j! s) [) [, m

# L, e. _+ ~# D* ~这ee插件,怎么只能设置整数呀,
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于|免责|隐私|版权|广告|联系|手机版|CAD设计论坛

GMT+8, 2024-5-5 15:36

CAD设计论坛,为工程师增加动力。

© 2005-2024 askcad.com. All rights reserved.

快速回复 返回顶部 返回列表