QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

查看: 3146|回复: 6
收起左侧

[已解决] 椭园怎样转成多段线?

[复制链接]
发表于 2006-10-11 09:23:40 | 显示全部楼层 |阅读模式 来自: 中国广西桂林

马上注册,结识高手,享用更多资源,轻松玩转三维网社区。

您需要 登录 才可以下载或查看,没有帐号?注册

x
有谁知道一段椭园弧如何转成多段线。
发表于 2006-10-11 13:25:57 | 显示全部楼层 来自: 中国
pellipse设置一下这个系统变量,看看是不是你想要的.

评分

参与人数 1三维币 +3 收起 理由
wang2003 + 3 应助

查看全部评分

发表于 2006-10-11 16:35:51 | 显示全部楼层 来自: 中国黑龙江哈尔滨
我一个笨招:/ o+ u' z/ J# j# C
绘制好椭圆后,使用offset命令偏移一下,在按相同的偏移距离再偏移回来就可以了。
发表于 2006-10-11 19:44:19 | 显示全部楼层 来自: 中国浙江杭州
打断试一下,可以吗?
发表于 2006-10-12 20:52:13 | 显示全部楼层 来自: 中国广东广州
《转贴》AUTOLISP程序  }+ }  `& ~% j6 y: r  y: x5 X

# x# S7 n9 j/ }: ]  ~' Z, j6 G/ y4 N;;;======================
! P9 C5 U. w: V' `; I;;;= 将椭圆转化成多义线 =6 [1 z2 [; \5 O/ L, C) g
;;;======================: Y  l  k- ?2 \" R8 {! v0 _
(defun fcp::ellipsetopline" R, \- [" ~  E# w' B+ F
                    (ellobj   /            spoint       epoint
; y' k: b2 T$ z8 s5 ]                    str           num1      num       plineobj4 {% j* u( S/ b1 Z0 K# o2 B
                    plineobj1 points      npoints       vpoints
# |5 A3 ?& _5 N8 E                    2dpoints
2 Z" L; a9 |: J. O                    )
" i6 w2 s8 z7 D(setq      spoint (list (vlax-safearray-get-element2 |8 x: f* o+ M$ h1 B5 r% q
                (setq
( E  ^8 s9 P8 l; Y" e9 |" s. ^. P6 H                  num (vlax-variant-value (vla-get-startpoint ellobj)); Z+ N" H7 `* k3 o7 C2 j  w
                )
, I; b0 p+ Z: ^' `                0$ V. s1 E; b6 S# x
              )
& C1 V  @: j/ U              (vlax-safearray-get-element num 1)  Z; Y! z  L! P
              (vlax-safearray-get-element num 2)% R: F! `# X, G
          )
3 s; B# d( W$ n+ j     epoint (list (vlax-safearray-get-element* ?, s* ~# J  {! c1 Z+ o
                (setq
  b+ H3 P! k) x2 ]6 U; V" L$ f$ l* h                  num (vlax-variant-value (vla-get-endpoint ellobj))
# {  f: b+ U* @( q2 O' ?# \                )/ K  I8 Q; W3 H4 x8 k/ A
                0: L  G% u, v5 m' G$ Y
              )
3 i4 d8 [; C8 r* k              (vlax-safearray-get-element num 1). j* _- ~8 T- t" [8 i% ~- V
              (vlax-safearray-get-element num 2)
4 _& [( e& B) S$ I* {. b* V: L          )1 y3 F4 A. H+ k5 s6 J. m
)
7 k* }% i! S$ |7 m5 d  b(setq      plineobj (car (vlax-safearray->list
1 {1 B0 O: d& V% Z1 O/ [                 (vlax-variant-value (vla-offset ellobj -0.1))
$ P9 n3 ]! _% k$ g$ d6 s* \                )
0 s3 R# b2 X  T* X6 L            )
% [" u, J" O; W! W2 m# i- F$ g2 V1 e)
- U2 }2 e9 g9 j7 t5 Y+ ^(setq
! D5 {8 s* @& @2 H5 r# f  plineobj1 (car (vlax-safearray->list
) [# A- r- m7 n  Y              (vlax-variant-value (vla-offset plineobj 0.1))1 Z" n1 w" `, A. c& J" T
              )
: n: Y1 ?' C% U+ |2 [) o  u          )( K& ]; i* F* X6 X& k8 b
)0 s" t0 I5 s. T2 U: j% J
(vla-delete plineobj)' r  F" ~5 V# O0 J' e
(setq      points nil9 _8 I4 i* k  \2 o. O: E
     num -1
  d; D% [* O, V7 u; S     2dpoints nil
. }$ c- d+ g7 U& R8 S$ I)
' l& w6 r% f7 M4 |+ m; u+ R(setq1 K+ w/ j6 M1 M1 w
  points (vlax-safearray->list
. H( i7 u4 h4 N        (vlax-variant-value (vla-get-ControlPoints plineobj1)); G  Z% D* ^# J7 j- D
        )/ P- ]9 l( @* M* |5 v
)
! W; B. w2 v: o1 B% U( o1 R3 ~(vla-delete plineobj1)& u! Q: p- U6 d* o& e: k2 ^2 q- L7 [# a
(setq      npoints      nil" _7 w6 V; ]# Z7 g! w' H, u
     num      (/ (length points) 3)
. ?9 e! F, V8 L( S7 v)6 d  Y7 H! p% Q
(repeat num6 x& V: \0 Q* n' W) P( S- H' t
  (if      (>= (length points) 3)
$ q: y. @6 Y! v/ W    (setq npoints (append
+ D+ \" G2 ]& J+ S3 O: q                npoints/ J8 {  [; B$ k% J$ }6 A
                (list (list (car points) (cadr points) (caddr points))5 \& V, P$ X$ v# L% t
                )
- }$ o+ J3 d9 C              )
& v( l  K& G# ^        points (cdddr points)
9 d4 f8 A  j- D7 B: C# \    )
% k8 c2 w; h. q7 x, _  )2 V% y9 u3 q( F8 u7 G# @
)
, U& J8 N2 R- `! ](setq      points      npoints0 r: E; d4 Y  Q% Y, N9 A
     vpoints      (list (car points)), B+ I; L- @5 Y, y1 V: Y9 E
     num      1& v) d8 C  y* q& x
)
6 C) \+ _! g5 l  B/ o(if (> (setq str (length points)) 16)
  W9 D. m; e& \. h; v  (progn) I( ^) F# _6 [1 _
    (setq num1 (fix (/ str 16))); G: J+ i4 H% }! \
    (while (< num str)2 k' y1 I% P/ v
     (if (= 0 (rem num num1))
/ W) {; K  e% l. k- J, p) L      (setq vpoints (append vpoints (list (nth (- num 1) points))))4 T3 ^6 }$ o0 q- V/ H& w( H9 X  J
     )
* c5 G/ l3 B' p, F# h( c6 }3 y  e     (setq num (+ num 1))4 [0 G7 A8 t- a/ B, X7 E
    )
6 q; r2 D4 Y- J: @; j    (setq points (append vpoints (list (last npoints))))
3 Z$ V% f; I3 l) |6 Y  )
: E6 Q. F, {7 P' U5 Z)
/ o/ F- t9 l3 f/ H9 U0 U(foreach num points
$ ]# u8 f, |" X3 |5 N9 @, e  (setq points (subst      (vlax-curve-getClosestPointTo ellobj num)/ ~& q4 E" m% s" W2 b) o
                 num
6 l3 V+ P- Z  X/ e, N6 v                 points
4 p- f& _' F# ~) q! ^            )
  k% i2 u( @' K, J) `. `  )! A' I8 ^: T$ X5 u( B( D
)
( U7 X! I" V2 K/ ]) A4 |/ I(princ points)8 V& }3 K/ _7 c& l
(setq      points (subst spoint
* w0 i# W1 t% e2 c( ~                (car points)
. r: |( D, \; ]                (subst epoint (last points) points)8 Y; ?: Z+ W8 m  n" b. @9 d2 K% O
          ); z" |$ w3 j4 {9 U: N5 P9 W4 G+ V
)
2 A9 k" T1 _7 {7 {(foreach num points5 h, G$ X" {0 Q8 {( [$ @0 S
  (setq 2dpoints
) W, z! a& W  \6 _. w2 r3 S' p  P) v        (append 2dpoints num)# ?  D0 }/ R. B2 m1 b5 ?
  )
8 a, V( y$ i5 I! `& r)$ h8 B! x  K" m
(setq      vpoints      (vlax-make-safearray9 ~& m! l: }4 X, c) Z/ g
            vlax-vbdouble. ]& n, U& V2 w) l! K; R- z5 _% \
            (cons 0 (- (length 2dpoints) 1))* W' U$ z( A6 }: p6 w5 r- ?0 X
           )
) t5 [) y2 ^& V& r' S)0 v" F$ k- V- L' H4 x; d: l/ J
(vlax-safearray-fill vpoints 2dpoints)9 @+ w1 m4 g1 ~; a: A* i
(setq plineobj (vla-addpolyline fcp::mspaceobj vpoints))* q7 r! \  ^9 c4 |
(if (and (= (car spoint) (car epoint))$ b/ _6 _5 b( l9 v5 ]
        (= (cadr spoint) (cadr epoint))7 b9 [6 |( a+ q$ v, A
    )/ E5 m  p7 t4 K. x7 f& h0 J
  (vla-put-closed plineobj :vlax-true)" t/ n$ o: i: y6 @$ d
)2 T8 w1 K8 {0 P+ b+ X5 v
(vla-put-type plineobj acfitcurvepoly)
7 p) t3 j5 L8 D- o, l8 h* R3 r! [plineobj* _; B  Z9 K1 J" z
)0 ^* e5 e9 c) k( y* `# V
+ g  ?' @& x3 [: u' O

" ^* J# P1 b" a- M. S
7 G+ |$ o& }9 H) Y再配上变量定义:
; E( _' i9 N3 @& m8 H+ b% M& L(vl-load-com)
2 \6 }( _( f7 R+ F(setq fcp::acadobj     (vlax-get-acad-object)+ M8 G5 ?2 A8 n7 h7 ^2 ]
  fcp::acaddocobj     (vla-get-activedocument fcp::acadobj)
$ \# D4 Q2 r; `) Q3 l  fcp::mspaceobj     (vla-get-modelspace fcp::acaddocobj)
8 R* w: I0 l  j' z/ U" l  fcp::pspaceobj     (vla-get-paperspace fcp::acaddocobj). x* P4 l5 n) J
  fcp::docobj     (vla-get-documents fcp::acadobj)
5 z- y# u; Y" N# r' l  fcp::blocksobj     (vla-get-blocks fcp::acaddocobj)) k8 A( x8 X& I
  fcp::layersobj     (vla-get-layers fcp::acaddocobj)
% b( M4 q* Y7 m0 d) I  fcp::textstyles     (vla-get-Textstyles fcp::acaddocobj)' U1 W) l7 Y, L) ]1 h- ]
  fcp::linetypes     (vla-get-linetypes fcp::acaddocobj)
& i; o2 ~6 t& i% w* m  fcp::menugroupsel     (vla-get-menugroups fcp::acadobj)0 l" E* t" f5 q& `) @; o
  fcp::menugroup     (vla-item fcp::menugroupsel 0)
# s+ `- Q) W; C6 Y# t/ B/ U  fcp::menuobj     (vla-get-menus fcp::menugroup)) r0 I& O9 i' Q
)

评分

参与人数 1三维币 +3 收起 理由
wang2003 + 3 应助

查看全部评分

发表于 2006-10-12 20:54:00 | 显示全部楼层 来自: 中国广东广州
如果不想这样,我想可以考虑用多线段近似画椭圆弧,在要求不高的情况下还是可以的,
发表于 2010-3-12 11:46:06 | 显示全部楼层 来自: 中国辽宁沈阳
3# supernova  的办法试验了一下。可以做到把椭圆转成样条曲线。' a' V3 m4 i: o, k+ y
如果要多线段的话,还有一步,就是点击样条曲线,右键,编辑,转换成多线段。9 N" C6 G3 A+ |# \
要精度的话,选项值10左右就可以,不要精度的话,选项值0即可。
- w* M; Y- Y: B, [7 T4 S+ L9 T$ P' j. F# i1 [
还有一招,将带有椭圆的图形,另存为 R12版本,再打开的时候,你会发现椭圆变成了多线段。
- x5 ~2 X6 B/ H$ X这一招也是学来的。

评分

参与人数 1三维币 +3 收起 理由
2005llnn + 3 技术讨论

查看全部评分

发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


Licensed Copyright © 2016-2020 http://www.3dportal.cn/ All Rights Reserved 京 ICP备13008828号

小黑屋|手机版|Archiver|三维网 ( 京ICP备2023026364号-1 )

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