QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

查看: 3152|回复: 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 | 显示全部楼层 来自: 中国黑龙江哈尔滨
我一个笨招:5 ]2 A/ C5 ?: p6 k! j- ]
绘制好椭圆后,使用offset命令偏移一下,在按相同的偏移距离再偏移回来就可以了。
发表于 2006-10-11 19:44:19 | 显示全部楼层 来自: 中国浙江杭州
打断试一下,可以吗?
发表于 2006-10-12 20:52:13 | 显示全部楼层 来自: 中国广东广州
《转贴》AUTOLISP程序$ t' G/ a, x* E# M
" e2 g# h! D. e% `8 p' z( T
;;;======================& x6 c( v, S  ?
;;;= 将椭圆转化成多义线 =
. h) L- u6 i5 M0 C: H% p* {+ Q;;;======================
2 n1 T0 G. U* y" L; T) q(defun fcp::ellipsetopline
' ~$ U3 P5 }! g+ Y0 ~' t                    (ellobj   /            spoint       epoint- G, @5 Z5 z  E4 T2 l% V/ c4 n
                    str           num1      num       plineobj
4 n  T+ E! x1 Y2 e+ ?9 I                    plineobj1 points      npoints       vpoints
0 a* x) z5 c1 j: r7 J0 k9 G" h                    2dpoints+ m$ P% j8 S; ~- f- r3 n
                    )( l0 r2 |- R+ F; M
(setq      spoint (list (vlax-safearray-get-element
* o5 P: U8 Y  V, ~# A# X                (setq
* M4 e3 y0 P" s2 S+ s                  num (vlax-variant-value (vla-get-startpoint ellobj))) s; {; `* c/ ~# }+ g1 A2 l8 u" q6 P7 k
                )
7 v6 f# ?; K% k5 f- x3 z% z                0
& `' n( M$ o7 P: v              )
0 U; H" ^7 a; @+ h' ]4 g              (vlax-safearray-get-element num 1)8 ]% G9 h0 l; c* ?
              (vlax-safearray-get-element num 2)
0 B4 J0 ~- D/ l* c1 K" Z3 T: V          )1 p/ V6 N2 [( _% p& B
     epoint (list (vlax-safearray-get-element1 ^# l# _( B, N$ n
                (setq& ]6 q! q3 d# N' i. s3 \2 o
                  num (vlax-variant-value (vla-get-endpoint ellobj))# `) m: g! M& {, ?" t9 E* S9 V" E
                )4 |5 _- F& {0 V
                0
! s* k/ ^: J/ c              )
% `9 o7 d( d/ s! T/ P/ f% w7 R% n* O5 v, h              (vlax-safearray-get-element num 1)1 ^) o6 k- ]2 C: Q/ s
              (vlax-safearray-get-element num 2)
1 i/ T" ~1 x" f, W          )& Y+ c" l6 L! b& ~4 L
)
- Z, _4 g& q- L1 H- M1 ~' K(setq      plineobj (car (vlax-safearray->list
9 H. r1 z, Y- c# V: x$ m( d                 (vlax-variant-value (vla-offset ellobj -0.1))
/ e7 M+ k) Q! H0 W% Y' C                )- D: u/ W7 u7 g
            )
. B$ \3 G  g- q4 n)7 N  N0 r0 A# i8 x( c
(setq
6 I  r6 k6 R! s- {  plineobj1 (car (vlax-safearray->list, `" U- T+ p0 T; C
              (vlax-variant-value (vla-offset plineobj 0.1))
* N' h" Z4 G1 Q9 L) T              )
' V: C  Z* S, {% A          )
* n% c) R6 x( _* \7 _; p)
0 d/ C; n4 m) U. ^) K! M7 g0 @! d(vla-delete plineobj)% a; l1 f& N: U) ~5 s
(setq      points nil2 U% C2 X3 ^+ e+ d( O
     num -1
! d# z3 h1 H+ h% t- H! @8 u     2dpoints nil
  ]' Y/ m* g6 a7 d& z) I4 \)
, }8 d& W8 e/ l2 i5 K3 `(setq
( {# a5 O1 u0 W" S  points (vlax-safearray->list
/ u& I' n; V: I# b1 E& S        (vlax-variant-value (vla-get-ControlPoints plineobj1))
: H2 Z' j+ _$ n$ r6 T        )
$ R. q' R6 A* _& \0 t% M)
" ]' Q9 d: J' R7 O+ ~(vla-delete plineobj1)4 A: N4 f/ x' K+ _" L# o% D
(setq      npoints      nil& y) f( i( o  d+ {
     num      (/ (length points) 3)
7 j' Y5 v5 ~5 R6 N0 E); ^% Y* z" i* H3 M0 Z' Z0 t+ x
(repeat num  w$ u  S, b# I/ [: T
  (if      (>= (length points) 3)
' [6 `2 p$ h# C$ C    (setq npoints (append+ Y! a. v# U7 o6 ?' S0 O
                npoints+ N9 Q& Z7 _* }/ W
                (list (list (car points) (cadr points) (caddr points))
+ ~3 A9 [  z: m: }                )
/ F& J- F# q" e- `; }2 S0 R              )
' u9 ]( }' u. w3 @# ?! R8 E& h& Q        points (cdddr points)
7 s: S6 }- M: g0 ]5 F  Z    )
) E! N$ C' Z* j  )" m2 L, w4 Y6 T& P$ [; ?
)3 `  R( L* v9 D/ Q' P' F
(setq      points      npoints
  \1 _6 k# ^6 S: Y4 F  ^9 ^     vpoints      (list (car points))4 L. Q& X/ E4 e' e5 C, L. J
     num      1, U9 e# p6 L9 Q9 j
)
2 z2 b! k5 a$ a4 _; M(if (> (setq str (length points)) 16)* V* X& U6 O7 I+ n
  (progn
4 e+ p; W1 x5 x    (setq num1 (fix (/ str 16)))
$ B  }9 G* o  ?& y0 U9 T0 q    (while (< num str)
# b( Q$ Z+ D6 n/ g! s     (if (= 0 (rem num num1))
8 C- `1 ~- S+ G      (setq vpoints (append vpoints (list (nth (- num 1) points)))): I1 C1 z! K) D: \, v( D1 ~
     ); z3 n; `- D2 Z
     (setq num (+ num 1))5 @4 E4 \0 }7 O' f3 U
    )) t2 k' |4 Z8 H* G6 k( l9 G/ T: p( r
    (setq points (append vpoints (list (last npoints))))
  N( I/ H. e6 `$ C* R" g) q  )0 O  b0 U2 a- r6 [
)
% n% c6 y& G- d: O(foreach num points
3 P9 L! T) Z! q. g% i  _  (setq points (subst      (vlax-curve-getClosestPointTo ellobj num)
! N& `4 C, l+ S8 w                 num5 a$ o/ s* e; \. A% j' C0 i2 Y
                 points9 X, L2 c- y! c% @# y6 y- k
            )
1 V$ d& x0 a5 i1 i  )
! S: P/ C8 p  x4 _# g0 Q2 O)9 b0 N4 D6 @! r. z1 Q* `
(princ points)
. ^* B. K3 `' ~) o7 {4 \(setq      points (subst spoint
. g) Z% b! h, Q/ n" {                (car points)) W+ h: `+ u5 L
                (subst epoint (last points) points)9 h( [& S- @1 ]# x1 I' H
          )
8 N6 n: U! z3 L* N9 F" u3 L)
6 J4 l! ]! q. `) H3 t1 a& C(foreach num points
- ?, V2 {4 m! X, {- L5 x% G  (setq 2dpoints
$ [0 {2 O4 _( K2 L- J8 [        (append 2dpoints num)' e! {$ B0 x3 W3 M5 W4 Y& v: V
  )
5 G! z8 L- t; n) p' L)
9 C2 K5 J' t! W7 D(setq      vpoints      (vlax-make-safearray0 I% F) R2 x- j4 B' \
            vlax-vbdouble
: m% U* X( b# S& {3 S) T$ R6 b$ \* S            (cons 0 (- (length 2dpoints) 1)); a! a2 ]# J0 Q5 O
           )0 _" T, ~3 M" ]5 M. a+ L4 }. Y
)5 \1 X. ]! m: Y
(vlax-safearray-fill vpoints 2dpoints)5 J  O5 i$ M' s2 `* k& j7 F6 V# {
(setq plineobj (vla-addpolyline fcp::mspaceobj vpoints))
- I4 ?! j2 E# c7 q+ f(if (and (= (car spoint) (car epoint))4 H+ T' G6 n7 [* J, w1 D+ m
        (= (cadr spoint) (cadr epoint))! F& Z/ n( H* r
    )7 Z% s# D5 t. [8 p2 T
  (vla-put-closed plineobj :vlax-true)8 J# l- V% n) ^
)+ G: ]% J- P4 s4 @) `
(vla-put-type plineobj acfitcurvepoly)2 N3 I% @) x4 a1 H3 C
plineobj
& [- f! i% c3 O% ?/ E7 }& ]" \% k! V). n/ ?1 [$ k' s

4 n) q! w8 ~: d* k: O, G! }  {( I
5 W3 u1 ^( ]; b3 r, n; s- q, d6 `7 _5 R: v  i
再配上变量定义:. g! o/ [- ~& Y# w, n
(vl-load-com)6 H! W; |" O2 S
(setq fcp::acadobj     (vlax-get-acad-object)
4 }: V8 R% W# ~5 _7 ~  fcp::acaddocobj     (vla-get-activedocument fcp::acadobj)+ P: [2 e6 ^  ~! o& |
  fcp::mspaceobj     (vla-get-modelspace fcp::acaddocobj)# b, o* w1 v+ F  z' \- W* ?
  fcp::pspaceobj     (vla-get-paperspace fcp::acaddocobj)
* d9 Y6 A( I: Z3 S  r0 n8 i  fcp::docobj     (vla-get-documents fcp::acadobj)8 o  t5 w  q% L7 e& }) e' r
  fcp::blocksobj     (vla-get-blocks fcp::acaddocobj)7 \1 v- w$ U. s! ^. r; ]
  fcp::layersobj     (vla-get-layers fcp::acaddocobj)+ ]# ]( N! i5 \* L3 t/ ~
  fcp::textstyles     (vla-get-Textstyles fcp::acaddocobj)
, t8 E" s2 s$ O  fcp::linetypes     (vla-get-linetypes fcp::acaddocobj)9 k" u( ^) w- b
  fcp::menugroupsel     (vla-get-menugroups fcp::acadobj): m7 K. a7 W: [
  fcp::menugroup     (vla-item fcp::menugroupsel 0)/ T4 }& W1 @. |, {
  fcp::menuobj     (vla-get-menus fcp::menugroup)* ~" M# O2 _  e7 O, M6 A
)

评分

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

查看全部评分

发表于 2006-10-12 20:54:00 | 显示全部楼层 来自: 中国广东广州
如果不想这样,我想可以考虑用多线段近似画椭圆弧,在要求不高的情况下还是可以的,
发表于 2010-3-12 11:46:06 | 显示全部楼层 来自: 中国辽宁沈阳
3# supernova  的办法试验了一下。可以做到把椭圆转成样条曲线。* r- Q$ o$ q( e/ g
如果要多线段的话,还有一步,就是点击样条曲线,右键,编辑,转换成多线段。
& b" N! W5 `$ H! Y' a$ h7 o要精度的话,选项值10左右就可以,不要精度的话,选项值0即可。) R2 g( g# [) H( a9 a) B$ P  k1 ?+ g' x

6 u+ ~$ y/ v/ q  J7 ?- g还有一招,将带有椭圆的图形,另存为 R12版本,再打开的时候,你会发现椭圆变成了多线段。
/ x( ~+ n2 y& S8 O. W这一招也是学来的。

评分

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

查看全部评分

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

本版积分规则


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

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

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