QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

查看: 3150|回复: 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 | 显示全部楼层 来自: 中国黑龙江哈尔滨
我一个笨招:
9 p7 g& o# b) g% a% o) q+ O$ x绘制好椭圆后,使用offset命令偏移一下,在按相同的偏移距离再偏移回来就可以了。
发表于 2006-10-11 19:44:19 | 显示全部楼层 来自: 中国浙江杭州
打断试一下,可以吗?
发表于 2006-10-12 20:52:13 | 显示全部楼层 来自: 中国广东广州
《转贴》AUTOLISP程序9 b9 f# u" h3 D+ ~7 e$ j( O. V
4 G8 Q  j5 X& O5 I9 D0 M
;;;======================' A$ @/ Z* t  L5 u6 y9 I' e; g
;;;= 将椭圆转化成多义线 =
$ b' _- y4 i; d;;;======================$ a. e* |/ Q4 S9 G- i4 z6 }- [
(defun fcp::ellipsetopline" D0 \8 Y$ _6 [6 E& r0 k! d" _
                    (ellobj   /            spoint       epoint8 K& X$ m% E5 _2 z; W
                    str           num1      num       plineobj
% |" l; `# S( S) M9 x, d                    plineobj1 points      npoints       vpoints
" D- B" N' x, Y# p( o4 U6 Z8 ]. t                    2dpoints' k1 \6 }8 o( Y$ k  _/ S5 A- H
                    )! G* l0 B' X/ s( w
(setq      spoint (list (vlax-safearray-get-element
" f0 b% ~: F$ Z4 r' T* s/ A                (setq
- z/ N3 N# [; M0 A0 E4 R                  num (vlax-variant-value (vla-get-startpoint ellobj))
4 ^/ D; p  y# A5 ^4 F! Q& s                )
8 H# C( q5 P5 b5 o; f0 _                0
7 M; A0 B3 Q9 n/ P3 a% x3 `- |7 `7 O              )) ~. ?9 P9 Q/ W& K+ C+ V
              (vlax-safearray-get-element num 1)- b1 [5 n3 R* G  N' i; s" s
              (vlax-safearray-get-element num 2)
" Q; t! [3 ^6 c# M: J& X          )8 i7 p" `+ U; o, K$ x% z
     epoint (list (vlax-safearray-get-element
0 L4 x. C4 C6 y. t                (setq1 |8 p0 y8 n& K: q& ^' N
                  num (vlax-variant-value (vla-get-endpoint ellobj))
+ [! `- |3 q4 b* l( `                )4 }! o$ t3 N* s5 `2 Q+ l5 B; n/ S
                08 E2 G, A/ n  p; p% S) y
              )
# b1 ?5 B, c* g$ u0 g              (vlax-safearray-get-element num 1)
) |5 j6 {' h/ W, a! c              (vlax-safearray-get-element num 2)
. x* y2 J' i: g( X- r1 }- U. N' X          )
& e( _, T1 E# a' }* Q  Y)" R+ X* ?: d' j, S4 n5 ~8 i8 o  p! w
(setq      plineobj (car (vlax-safearray->list0 G- L6 [. }9 g7 Y5 ^# y! M
                 (vlax-variant-value (vla-offset ellobj -0.1))
& f6 {3 t5 l( Z' V                )
9 O, S/ A5 Q! w& ~0 U            )
$ h/ p7 t5 K$ I5 a0 h0 z/ [)' u. h* r' L# i, F4 ]
(setq( R* P% g( o- L6 b) M
  plineobj1 (car (vlax-safearray->list0 F2 t/ R, i& E
              (vlax-variant-value (vla-offset plineobj 0.1))
1 R5 |6 ]5 \. z; w1 h+ F+ |3 D+ q" G              ): _% c! S3 [  s0 u/ a
          )8 e- h1 s; H& a0 Y% B+ ]! Z
)
1 x3 z* h. {1 S+ g5 H8 O4 g(vla-delete plineobj)% F* u) Y: S# c1 e+ V
(setq      points nil' }8 {3 t% r  ~2 z! S3 ?* t3 @2 C0 {
     num -1' u% |+ \2 m9 {2 Y
     2dpoints nil
5 `1 R( ?4 A9 g$ a- s8 ~' ]" k" x)7 W$ g& s* y' [* |  ?0 E, A- [- v  K
(setq
* \7 A4 J$ `: A6 H% k  points (vlax-safearray->list0 a; K8 U! k' ?
        (vlax-variant-value (vla-get-ControlPoints plineobj1))" H- x- ~* \0 f4 ~/ J
        )2 p9 P: D# N# K! N, @& D7 U
)0 B# M+ P) [5 ]  a# c7 k
(vla-delete plineobj1)+ A% C5 U; ^# h0 F3 R7 i! ^1 N2 _
(setq      npoints      nil
9 I* g* ^; j/ q5 Y+ M7 \6 D* h     num      (/ (length points) 3)- a  k5 m! ?8 Z  |5 A: W6 R
)5 T; U$ L  y  n
(repeat num
4 g" P$ s# M- k5 ]+ a9 m# A  (if      (>= (length points) 3)
1 F: m/ }! K* p0 z( ?4 X3 ~: e! m& q+ y    (setq npoints (append
- o$ E+ A, t3 O                npoints. Q2 E, @6 c1 W- M4 U, q, w
                (list (list (car points) (cadr points) (caddr points))) M) i8 }8 V4 }$ @% X- ~% ?' M
                )
9 K, \4 T0 Z+ r  @9 A! Q4 f  d              )3 V& y# j* v6 t) ]- h) R
        points (cdddr points)
, p5 _5 s# o, a; T  v' d1 S. a0 |    )
3 F5 d0 e9 S1 p' j' p  )5 @6 _- \  {: O1 e1 F1 P
)
7 Y% @1 _$ B8 a7 p" G6 O(setq      points      npoints
, P1 y+ L; @. L( C- D3 [; m% v     vpoints      (list (car points))
' N- Z0 A/ Q6 Q' `. x( a     num      16 _9 I- j2 \$ y& \
)" {8 ^5 o" Q) W" U# c0 Y
(if (> (setq str (length points)) 16)9 n6 ^) K8 ]; `7 k4 U  |6 v  m
  (progn$ @0 \+ W  b. e' x) b
    (setq num1 (fix (/ str 16)))( X0 L& L/ ?9 j+ t, S
    (while (< num str)
: \5 p2 Q8 l: }* o. q! ]0 E2 ?     (if (= 0 (rem num num1))
  e( z% f) }3 N+ v$ ~      (setq vpoints (append vpoints (list (nth (- num 1) points))))
, w2 z/ \: M* u% m/ L( {' A     )4 n! w' J/ q0 t8 ^& Y  ?) S
     (setq num (+ num 1))- Q  u! F# d# R6 e
    )5 L0 A9 ]" V& t5 W/ K
    (setq points (append vpoints (list (last npoints))))4 @' N3 M( ?- [! @9 o7 U
  )
% @& k4 M0 k5 t9 d% O( o6 U, V6 P)1 {4 c% r- s4 _
(foreach num points" u1 _* Q" y, j7 w' U/ V8 f- v
  (setq points (subst      (vlax-curve-getClosestPointTo ellobj num)% O9 N  ~6 H/ M5 A1 k3 {; ]
                 num
$ ]% z: O3 I2 M6 N% R, [                 points% {: B  O8 c% A8 `: k8 r3 i
            ); a, o. X$ w) e5 Y" u/ l- q
  )7 e) g: I: j3 ?! U* u* F
)
9 V: R8 w* G9 s  u/ ^(princ points)) L+ Y3 A2 e. E: Z* [- H
(setq      points (subst spoint- t' ?% l3 `! w5 n* L3 o, a
                (car points)' `% v* ?# v' ?: w* c1 u" Y2 i
                (subst epoint (last points) points)
1 c5 m6 P% c+ r: H) T          )
9 `1 f/ k9 s. u- x)$ Q: h2 U: p# h3 u0 d( O1 C
(foreach num points, Q; H/ N4 q) c! F: z5 u, I" C
  (setq 2dpoints, W* U4 X" e% `, ^. l; Z# p% T
        (append 2dpoints num)9 q5 s* G7 z7 a3 }/ T
  ). Y6 e- c+ `' R6 s7 R6 e
)- e9 u' J7 A' m' H
(setq      vpoints      (vlax-make-safearray
& \# Q7 A$ s+ q* H3 v2 ^9 z            vlax-vbdouble" p! [8 h7 p4 S9 Y  Z- n! a3 ?
            (cons 0 (- (length 2dpoints) 1))
2 a" `, n& c* j           )
1 i) V% |7 x9 k6 k)
5 b$ I% W0 Z0 V5 i6 b9 x(vlax-safearray-fill vpoints 2dpoints)4 f; L# M" j( r1 {
(setq plineobj (vla-addpolyline fcp::mspaceobj vpoints))4 g0 w- s! A$ U+ I5 g. ^
(if (and (= (car spoint) (car epoint))! x& `3 x  ~2 w% W6 _
        (= (cadr spoint) (cadr epoint))
" L" V$ ?2 k5 k  y4 {# I    )
- V+ h7 ^* i4 [  (vla-put-closed plineobj :vlax-true)
1 _: V- i4 l) @5 q  K)
6 I( y# o7 b+ a(vla-put-type plineobj acfitcurvepoly)
+ \" u: D& n: H: R6 r9 |" gplineobj9 H, r8 F# A2 a/ m& r' U% k
)
3 Q7 M; Q) S4 }3 p6 m/ j1 y$ O: ~7 l4 J: l
  {. K6 z5 u' ^& K' u' P

4 e! W: L7 k( \: z" R/ v再配上变量定义:
! @+ v  I  L* Q9 F# F' C8 f& }. M(vl-load-com)
' t: _# a' T* P(setq fcp::acadobj     (vlax-get-acad-object)
. T2 k9 B% Y7 ~. T" ^  fcp::acaddocobj     (vla-get-activedocument fcp::acadobj)
$ t) C- i' S! ^. u5 x( K9 d  fcp::mspaceobj     (vla-get-modelspace fcp::acaddocobj)
( z" ~4 a1 x0 ?8 T, |9 O) P. p  fcp::pspaceobj     (vla-get-paperspace fcp::acaddocobj)
) Q1 ]% a, p' J0 x8 O. _' ~  fcp::docobj     (vla-get-documents fcp::acadobj)
4 f1 D7 s: j$ J0 h# k9 X  fcp::blocksobj     (vla-get-blocks fcp::acaddocobj)
: M4 K* Q$ f+ A' L  s  L  fcp::layersobj     (vla-get-layers fcp::acaddocobj); A0 e1 W: ~; ]1 O. {3 i
  fcp::textstyles     (vla-get-Textstyles fcp::acaddocobj). s! y/ @' n$ L& `
  fcp::linetypes     (vla-get-linetypes fcp::acaddocobj)
0 h: u7 ~+ J6 U9 L& o  fcp::menugroupsel     (vla-get-menugroups fcp::acadobj)
  Q, M  E4 S, u' r8 t  fcp::menugroup     (vla-item fcp::menugroupsel 0)+ b+ b# Q- s# P1 v$ K" }" r( J
  fcp::menuobj     (vla-get-menus fcp::menugroup)
. Y$ [" I  H, n. r8 ^' L)

评分

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

查看全部评分

发表于 2006-10-12 20:54:00 | 显示全部楼层 来自: 中国广东广州
如果不想这样,我想可以考虑用多线段近似画椭圆弧,在要求不高的情况下还是可以的,
发表于 2010-3-12 11:46:06 | 显示全部楼层 来自: 中国辽宁沈阳
3# supernova  的办法试验了一下。可以做到把椭圆转成样条曲线。' |* j! r' u9 J( P
如果要多线段的话,还有一步,就是点击样条曲线,右键,编辑,转换成多线段。
! u' u+ l8 j2 @6 z+ M" d% j# _% q3 T要精度的话,选项值10左右就可以,不要精度的话,选项值0即可。4 [0 e6 k6 x7 E8 r

: O  {( C6 U. ^- }9 A# t0 y还有一招,将带有椭圆的图形,另存为 R12版本,再打开的时候,你会发现椭圆变成了多线段。* c9 n6 @6 G/ m) i% f. a/ ]% {$ H
这一招也是学来的。

评分

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

查看全部评分

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

本版积分规则


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

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

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