QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

查看: 3145|回复: 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 | 显示全部楼层 来自: 中国黑龙江哈尔滨
我一个笨招:
1 Z9 s$ P8 S/ B9 u" M7 {绘制好椭圆后,使用offset命令偏移一下,在按相同的偏移距离再偏移回来就可以了。
发表于 2006-10-11 19:44:19 | 显示全部楼层 来自: 中国浙江杭州
打断试一下,可以吗?
发表于 2006-10-12 20:52:13 | 显示全部楼层 来自: 中国广东广州
《转贴》AUTOLISP程序
6 W) [  {0 d, a" A, E- ^. C
1 L5 ?  I' d* Z) @) p9 Q3 P;;;======================
) M( m4 P3 o+ h" X;;;= 将椭圆转化成多义线 =- J' l/ x, K/ \( w1 j2 y% {
;;;======================  d! C3 ]' H; t2 m; B
(defun fcp::ellipsetopline
% B8 N# r/ X2 B# H! L                    (ellobj   /            spoint       epoint
: U1 V3 a% G. L! t$ t8 \  w                    str           num1      num       plineobj) c. P% F0 k- ?
                    plineobj1 points      npoints       vpoints
& C7 g  O4 j4 N' `4 H- N% a                    2dpoints+ a# k0 \2 m/ x6 z: j( z  D) |
                    )# f8 i8 v' C: H' F5 N5 n- R: Y
(setq      spoint (list (vlax-safearray-get-element# M' r) O( }; M+ x3 D% w3 E, R
                (setq
2 `; `! X$ ^2 e" t2 L                  num (vlax-variant-value (vla-get-startpoint ellobj))
' V$ u5 l1 y: I) z& ^; d                )$ {0 Z" Q, w& M  i- Q4 i  W
                0
4 e7 y. U* X: G9 t& r% T/ ?              )
. T* a* [- c% R6 R              (vlax-safearray-get-element num 1)& V; L  h7 X# i
              (vlax-safearray-get-element num 2)
' C) x  E2 j: C          )
. h) s1 a* d9 A) X4 {     epoint (list (vlax-safearray-get-element
# x- n  G- C8 `                (setq* ]" Z3 Y# L1 q1 p5 B: ~% v
                  num (vlax-variant-value (vla-get-endpoint ellobj))& ]% \: z$ K" A3 Z) }! T/ Z$ R/ u
                )9 ?, q# P1 i% O3 j7 L, i/ U
                05 g# q  x) U6 l' }. e8 J& b
              )
8 A! S) i/ ~  B+ b7 }              (vlax-safearray-get-element num 1)' y5 k5 L5 ?+ V& {- i" F) e
              (vlax-safearray-get-element num 2). z  Q2 s+ w( E! ]5 t+ C# b6 L
          )3 @* y- P. E/ z$ M& ^
)
; Z6 p* ]' y1 p+ O(setq      plineobj (car (vlax-safearray->list
6 H: y  W0 |% L; d9 \# \, q                 (vlax-variant-value (vla-offset ellobj -0.1))
" }7 Y# L6 y( ~9 L& O& z                )/ w2 O6 W4 ^, l$ j7 H: P. N5 {6 c* a
            )& z% Y* A$ F% x0 T# M
)
3 z# q7 d$ L1 q  W# w/ n0 U(setq
+ r( }* u& S7 h2 \  plineobj1 (car (vlax-safearray->list" a" n! _8 M% ^$ p+ a
              (vlax-variant-value (vla-offset plineobj 0.1))
5 n7 B' }+ \# H& `              )
0 M4 t; |9 p8 o3 ^          )& g- I" a( I$ z( ?" O1 b
)  {: P: b4 S8 S2 w" k3 B) Y5 w: L' c
(vla-delete plineobj), T2 ?0 @; ^2 Z! g: p
(setq      points nil8 Y5 d; |. u5 J8 f/ p0 M
     num -1
' x, y# b* d0 z# q8 j     2dpoints nil
- y6 I, G- X  o* g5 Y1 k). z0 L, x( O0 g' g8 G2 J! h' q
(setq
% w+ ^4 b6 Z' @  points (vlax-safearray->list
1 G2 x- s+ Z! h4 U7 ^5 {7 N+ e        (vlax-variant-value (vla-get-ControlPoints plineobj1))
5 Z4 o0 ?8 W/ t1 U        )" t0 h" x2 J- `3 n+ x3 r8 b
)! N  l% d* E6 o5 _" v( D
(vla-delete plineobj1)
( O6 J5 U2 a2 A/ V& Q& ]) J  x' c(setq      npoints      nil
: C6 a7 x5 Y# D; d) q7 ^     num      (/ (length points) 3)
, I# O7 _8 R8 v* f; A+ W)& o- y8 x" t' V
(repeat num
4 a9 y! t  D8 k9 e/ D; G  (if      (>= (length points) 3)
* Z- F$ w" u6 Y7 t6 q    (setq npoints (append6 O8 G* e% ^& M9 m4 C0 A* v
                npoints  w7 s* H( c& L& r% q9 l! M6 i
                (list (list (car points) (cadr points) (caddr points))8 i& k* s6 Z. V6 ?& ~" Y: c7 }$ J
                )
- P5 T& W9 B7 O0 O: ~- S              )9 Q; M; ^1 w* [* t  q9 j" m
        points (cdddr points)' p) \# k- Q0 u. {5 A
    )
" K; U# h$ q  s* u9 j  )
7 l# h/ ~: ?7 r) O/ B/ r$ r)
/ n+ o4 W5 ?. `4 H9 P(setq      points      npoints
) L* ~( d) _/ E/ t/ v% p     vpoints      (list (car points))
' x* D% I; Y, o0 A; a6 f     num      1
# Y  V  [) L1 \)
* r8 A9 |6 `; @/ A) ]3 l(if (> (setq str (length points)) 16)1 _6 E( Z* f7 w7 V( d% T8 ^
  (progn
6 x3 v  \0 i3 y, [$ P0 ~    (setq num1 (fix (/ str 16)))# @% ]. H( e8 m
    (while (< num str)
: h2 r* v+ g1 a2 h     (if (= 0 (rem num num1))
. V3 z! A# y/ w6 ]2 E) O      (setq vpoints (append vpoints (list (nth (- num 1) points)))): P9 q; {* Q0 P1 v, m4 ^6 i+ Y
     )
4 \0 U, Q# z- x3 t) v3 F2 E     (setq num (+ num 1))8 K% Z: p5 |3 Y4 e; v$ M
    )
7 a8 y) m. o4 \4 j3 }  q1 v    (setq points (append vpoints (list (last npoints))))
- h* W3 u1 u! }0 U% _8 Y" z  )
. }" Q1 c5 `( C)
0 o1 P4 }, q) ^. Z* e(foreach num points
9 C3 ?9 W% Q; w0 F  @& _: g  (setq points (subst      (vlax-curve-getClosestPointTo ellobj num)! {- A! f% G  N; S9 r5 ?
                 num
2 @0 H. u8 I0 e4 |2 T3 j4 Y1 P                 points
( ^5 R' [* V8 k$ r9 P! Y) l6 R            )
& A: o& r/ }  X6 i. n8 g/ j  )# P! p8 |5 F5 X& k; o& }
)
/ L9 {, {; `9 D) H, n(princ points), @# X1 r, V: q: J* g- U9 p9 a
(setq      points (subst spoint* W- @; \9 t- z
                (car points)4 }. O% q9 F/ D) y$ t
                (subst epoint (last points) points)8 Z: S) e/ \' ]
          )
; L. ]$ X  ~  }4 ?; q& L* W)
; ~* P7 y  P5 r) e& b: o. [8 _! q; e(foreach num points( V' Q5 X$ `$ ~! O4 n: Q7 K1 k; W* P
  (setq 2dpoints
; X; z4 ?( }7 d  s7 k% d, y3 C        (append 2dpoints num)' f" D. V' j5 I/ Z( X0 K, ~. i4 \
  )6 q* M! S- T$ m# t+ c! `" v$ v
)- w. L* M5 K* M4 U' `; D
(setq      vpoints      (vlax-make-safearray+ a$ t6 R/ c/ S) W7 M* ]. m2 C
            vlax-vbdouble& a, W, j! S$ U: a
            (cons 0 (- (length 2dpoints) 1))
" b- [- A" d$ i  {; @% U  ^           )- @$ {1 u! H$ Y9 a  D& W
)* Q' J9 T( L8 ]! Q& h) G! Z; y
(vlax-safearray-fill vpoints 2dpoints)
" l9 o4 D9 \/ {( k1 \* p(setq plineobj (vla-addpolyline fcp::mspaceobj vpoints))
! O7 L/ N9 T3 L3 L(if (and (= (car spoint) (car epoint))
; ?) T% d# ~; }3 [  c6 R+ D7 ~        (= (cadr spoint) (cadr epoint))9 Y' K3 g/ `: T2 C: d0 u
    )% `  X5 g) I0 Z$ I  j; ~2 M
  (vla-put-closed plineobj :vlax-true)5 Q5 l3 W8 i* d
)( c  d8 `) m0 r- Y: S! T& t
(vla-put-type plineobj acfitcurvepoly)
; O, [/ a- I4 G9 Q# o% l% Z5 aplineobj& u, a0 q% M1 \; N- F
)& f6 B3 U. Q! W( m( @& ~4 ^0 ]9 i

  Z& [* i+ g! m9 ~# l  B( m7 X/ Y: Q: s% g* E" ?- z
8 {: I8 A% u% B+ O
再配上变量定义:) M8 X% U) C* I; V& c
(vl-load-com)/ y8 ^7 H4 _9 R
(setq fcp::acadobj     (vlax-get-acad-object)9 O& G( q* R% W0 Z- K/ {4 |; K
  fcp::acaddocobj     (vla-get-activedocument fcp::acadobj)5 }0 b0 e# C3 K4 N+ l5 ?3 E) e
  fcp::mspaceobj     (vla-get-modelspace fcp::acaddocobj)" e4 b  i  w' e( Z5 D! ?- Y
  fcp::pspaceobj     (vla-get-paperspace fcp::acaddocobj)4 K+ n! Q  ]6 U
  fcp::docobj     (vla-get-documents fcp::acadobj)- b$ s8 [- o$ k2 \$ G
  fcp::blocksobj     (vla-get-blocks fcp::acaddocobj)
) x8 v( `5 p2 {' U* ~+ N+ L  fcp::layersobj     (vla-get-layers fcp::acaddocobj)
' Y  [, \' c+ e; F, A5 f7 Z$ F  fcp::textstyles     (vla-get-Textstyles fcp::acaddocobj), J1 {0 K( k8 w3 }: h; K/ g, V
  fcp::linetypes     (vla-get-linetypes fcp::acaddocobj): C: X  m$ P% z8 z7 e; y  f
  fcp::menugroupsel     (vla-get-menugroups fcp::acadobj)
$ v0 f8 c, z% K3 M2 p9 f  fcp::menugroup     (vla-item fcp::menugroupsel 0)
/ N0 k# @& n9 U  fcp::menuobj     (vla-get-menus fcp::menugroup)
) ^/ _( `; N& r- O7 \' a0 s" z)

评分

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

查看全部评分

发表于 2006-10-12 20:54:00 | 显示全部楼层 来自: 中国广东广州
如果不想这样,我想可以考虑用多线段近似画椭圆弧,在要求不高的情况下还是可以的,
发表于 2010-3-12 11:46:06 | 显示全部楼层 来自: 中国辽宁沈阳
3# supernova  的办法试验了一下。可以做到把椭圆转成样条曲线。
$ V# X" n3 }3 e) W' a+ U如果要多线段的话,还有一步,就是点击样条曲线,右键,编辑,转换成多线段。& c: v) l. |* V* [! }
要精度的话,选项值10左右就可以,不要精度的话,选项值0即可。
: B4 l6 b) N7 y$ x4 A) n! D8 L, H* q$ o" @& B
还有一招,将带有椭圆的图形,另存为 R12版本,再打开的时候,你会发现椭圆变成了多线段。+ n/ @. ]' I0 P8 `/ C$ k
这一招也是学来的。

评分

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

查看全部评分

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

本版积分规则


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

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

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