QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

查看: 3148|回复: 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 | 显示全部楼层 来自: 中国黑龙江哈尔滨
我一个笨招:
# m; q1 |  U) e绘制好椭圆后,使用offset命令偏移一下,在按相同的偏移距离再偏移回来就可以了。
发表于 2006-10-11 19:44:19 | 显示全部楼层 来自: 中国浙江杭州
打断试一下,可以吗?
发表于 2006-10-12 20:52:13 | 显示全部楼层 来自: 中国广东广州
《转贴》AUTOLISP程序
; t% X/ O; O4 B, _$ e' m3 e0 d0 q$ l  O6 g  h
;;;======================
& _$ [7 W% X8 A;;;= 将椭圆转化成多义线 =
* n3 Y* E: k. N5 H;;;======================  |$ d- a. t+ p3 U# i  S, {
(defun fcp::ellipsetopline  `6 {$ Y) w0 I4 w9 u
                    (ellobj   /            spoint       epoint
- b/ k0 I" A1 A7 H- G" Z3 V                    str           num1      num       plineobj1 [; D. }2 g, k( F% M
                    plineobj1 points      npoints       vpoints* ^' ]. D. m6 j, z3 b* c; [
                    2dpoints1 W. M& R3 a4 \: A8 s/ d7 }
                    )! P8 M; h) H; ^2 I$ ?7 p/ G
(setq      spoint (list (vlax-safearray-get-element- G' ~: |# Z# ^, c
                (setq
4 b, e" m, N0 g1 m! H6 u                  num (vlax-variant-value (vla-get-startpoint ellobj))
* v9 ~, }' u: u0 S) n4 a; `3 v                )
' S- |0 e+ f  Y" g  R3 A8 l                0( X% F' L# C) N2 |- B7 w
              )1 H0 C: p, j: h2 M. A& w
              (vlax-safearray-get-element num 1)6 p/ w8 U. P. U/ S  H
              (vlax-safearray-get-element num 2)
7 U: f" L; d; O, c          )
* f( |2 N& k( W4 W* [     epoint (list (vlax-safearray-get-element* q: a7 O7 U4 d0 {# \3 o% t& T. N
                (setq' Q2 d; W9 f3 f" q) z1 g( }
                  num (vlax-variant-value (vla-get-endpoint ellobj))
9 B' {' n( Q! p2 k5 |3 p                ); t" w8 g- _# F+ y9 T
                05 J7 B: N" m5 r& s
              )
2 S' E0 n7 M) c& [( t% w. ]              (vlax-safearray-get-element num 1)
* s  \2 x8 H# @% h4 t. C              (vlax-safearray-get-element num 2)
4 r5 S" u% v9 r( p          )( L# E# L  V# a
)) `' o, R" m( D$ R/ l
(setq      plineobj (car (vlax-safearray->list, E* @3 ~3 W6 ^4 x, G) T  w
                 (vlax-variant-value (vla-offset ellobj -0.1))1 P5 o2 `9 ~5 H; J
                )
2 e! M( k* h- D, @. N* G! F            )
* m* G- S( C& i( j. N4 d9 Q)* N- K- X! s* ^" \2 G2 i
(setq! @1 {( r- ~) R( ?2 I. [* W
  plineobj1 (car (vlax-safearray->list
/ M9 F9 r4 |# r  ]3 ]              (vlax-variant-value (vla-offset plineobj 0.1))+ `, z, K, X6 X' P9 ~
              )
0 f/ a0 Z8 z( q9 w          )
* P5 A9 Q) E+ }( G5 J2 t7 [), b" E3 t! X* F! `6 l2 \4 R
(vla-delete plineobj)
: W* ^& ?5 p$ C; c(setq      points nil
5 W" i3 m4 h7 a6 x1 X5 t+ W$ Q     num -18 G$ r# P/ `$ F
     2dpoints nil: U0 u1 z) K; e# a
)) p2 S9 }3 Z' C* `
(setq
, [% b& b( _5 R& R% y  h" w' ?! s  points (vlax-safearray->list
/ N( z4 u  i8 ~- v, h        (vlax-variant-value (vla-get-ControlPoints plineobj1))
' X4 K+ v) Z# l) W, N1 ^        )
- m" f3 P0 F# I! _)8 n8 H2 b: f$ f1 z3 V; ^3 P: C1 e0 p
(vla-delete plineobj1)' S4 Z& g/ w  Y/ g  e
(setq      npoints      nil+ Z+ l# W* G# B6 ^+ Z7 R
     num      (/ (length points) 3)/ o/ |0 B# [& Q% D: \
)
& Y; b6 J# l$ |* S3 w" @9 A# }(repeat num8 N! }$ {; N' X1 n+ M. z
  (if      (>= (length points) 3)
( X) P5 B0 {2 z    (setq npoints (append: Y3 Q, i$ R6 Y: @- ]- O  N$ e* T
                npoints/ G% v' c2 `  |/ W8 m  R0 x0 ?2 F
                (list (list (car points) (cadr points) (caddr points))
- y& h# W: O5 G- P  B                )  a% [' h' i5 h* D3 I2 @/ w* e& i
              )
$ A- m% |) Z: _4 b        points (cdddr points)' s9 H/ m- Q2 V8 ^1 t. ?8 u
    )
' R, l$ q) M: }0 o  u  ); X' b& Z0 v4 Q% u
)
1 \; W' Z6 z6 L1 B" P(setq      points      npoints9 ~$ ?" g+ P& ]
     vpoints      (list (car points))
% A- h: ?; l' R+ E# z/ t# Q     num      1, X: f2 r6 G- J5 I0 A# c- ?
)) h' L% h; D8 l* p
(if (> (setq str (length points)) 16)' I/ o6 d' }) y/ K- S2 m0 n
  (progn
$ h: Z6 K+ K3 y6 C; m    (setq num1 (fix (/ str 16)))
0 ^0 v0 a; _# r. ~3 U" @: _1 p    (while (< num str); U  Q! n/ D( N+ U
     (if (= 0 (rem num num1))- X/ G2 |) x2 D& A, m
      (setq vpoints (append vpoints (list (nth (- num 1) points)))), w- a$ ^7 g; j) c; H' K
     )$ K2 I5 i, _- @) a2 j) B# k3 b
     (setq num (+ num 1))9 s# F, C7 j6 x: m4 I
    )8 P4 `; z2 V5 e
    (setq points (append vpoints (list (last npoints))))! ]/ E5 `# }% p7 y* f2 U+ z
  )4 G* _  X+ \: B% @( z, g5 g. `
)# V2 Z6 K. r/ b
(foreach num points
- ~5 \0 h8 [& z) D) g0 ~  (setq points (subst      (vlax-curve-getClosestPointTo ellobj num)+ [. }7 p1 P3 p+ x. @) b
                 num
- g. n7 [( ?% i" P9 }2 v, o9 ^- }                 points
' Q5 R! r, g6 X2 y# o8 s) [            )
" H8 l; t# c' L$ X6 Y, }. e3 `/ F  )
: X/ w3 {8 A) z3 S! Y; p. c* g)! R$ J! W5 h( `3 [8 ?5 \5 p. ~: y
(princ points)2 ^' C4 p1 g, p$ ?
(setq      points (subst spoint
; }: U0 D: t% p$ Z                (car points)
8 d- U6 I  F* h% ]; k3 v  ?2 Q                (subst epoint (last points) points)& ?8 W; {7 n& Z
          )( c3 x6 v! c' R. d. D. E& r% E
), ?% j$ A& s7 r3 g: a2 W" G
(foreach num points/ d! j* ]2 R) [  o2 Z4 b. T; F
  (setq 2dpoints
4 U- P$ @$ S$ Y" g        (append 2dpoints num)
9 C4 S- J  r( N# b$ K  )
5 ?1 |2 r; G' z9 G% f3 q& p- S& V)
" P5 o2 E; k/ H1 W(setq      vpoints      (vlax-make-safearray
- d$ ~/ |0 p* y# C, X% G  p            vlax-vbdouble1 z' Z1 x% C5 A6 q* m* W1 v+ e, k
            (cons 0 (- (length 2dpoints) 1)); Q! h  ^2 U! x/ f
           )
% j! J4 I& ~% s; k)3 M7 Q4 B2 f  a$ J5 h5 T
(vlax-safearray-fill vpoints 2dpoints)
8 [4 c9 `  t$ T: q4 [9 }(setq plineobj (vla-addpolyline fcp::mspaceobj vpoints))- c+ `  }2 {( A( ^% T9 O
(if (and (= (car spoint) (car epoint))
1 Q2 O& m( ], T        (= (cadr spoint) (cadr epoint))) s$ n% }( ^: j6 k0 m" Y
    )% z. t+ i4 |$ z+ K7 m' K- V' S
  (vla-put-closed plineobj :vlax-true)
  n5 l3 x) S7 a3 S' _5 B8 t: G& [)7 Y/ V7 p0 G& ~
(vla-put-type plineobj acfitcurvepoly)
; j  x! `2 z) G8 J3 Nplineobj2 d2 A: G" p) L# X+ I  X: [! r
); Z7 t  z& q7 a) j4 y& K

. e3 e; P  A! J1 \% y0 }  \0 b# h; ?+ D  O9 ?
& \* y0 k2 l; |) W3 U" O1 Q
再配上变量定义:2 ?( `2 w' v3 ]8 `% c& Y  K
(vl-load-com)
0 I' r8 c' c$ |* D' Q6 _* z7 v(setq fcp::acadobj     (vlax-get-acad-object)( h' {$ }. E" P
  fcp::acaddocobj     (vla-get-activedocument fcp::acadobj)( A$ F! E* @0 C" h' J0 e! U) S2 G. \
  fcp::mspaceobj     (vla-get-modelspace fcp::acaddocobj): q: b3 I) \4 ?3 }% q9 y# E. E8 ^
  fcp::pspaceobj     (vla-get-paperspace fcp::acaddocobj)
9 |8 w' d5 T  b5 \" s; {: @  fcp::docobj     (vla-get-documents fcp::acadobj)/ Q: _6 }$ H$ I! T- x' W
  fcp::blocksobj     (vla-get-blocks fcp::acaddocobj)
) ]5 M$ z! z! k! i% N  fcp::layersobj     (vla-get-layers fcp::acaddocobj)0 u9 q: T4 b; _
  fcp::textstyles     (vla-get-Textstyles fcp::acaddocobj)
2 C2 D; K  c& L9 y4 {; T* t  fcp::linetypes     (vla-get-linetypes fcp::acaddocobj)
6 i5 `3 y, k$ v5 R. Z% e  fcp::menugroupsel     (vla-get-menugroups fcp::acadobj)
2 C" b! M: S5 \5 M8 }  fcp::menugroup     (vla-item fcp::menugroupsel 0)
4 y  B) l! v4 f" U4 c  fcp::menuobj     (vla-get-menus fcp::menugroup)2 _; w* @3 L& P  H: c; h5 s
)

评分

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

查看全部评分

发表于 2006-10-12 20:54:00 | 显示全部楼层 来自: 中国广东广州
如果不想这样,我想可以考虑用多线段近似画椭圆弧,在要求不高的情况下还是可以的,
发表于 2010-3-12 11:46:06 | 显示全部楼层 来自: 中国辽宁沈阳
3# supernova  的办法试验了一下。可以做到把椭圆转成样条曲线。
0 h- y, g( f, o1 s. R3 G如果要多线段的话,还有一步,就是点击样条曲线,右键,编辑,转换成多线段。9 R$ |% }, Z: X* T( h! k! Y
要精度的话,选项值10左右就可以,不要精度的话,选项值0即可。
( y  ^* f9 a3 A# J& l  l; m" P  o, X% O. ^8 ^# [" v3 H
还有一招,将带有椭圆的图形,另存为 R12版本,再打开的时候,你会发现椭圆变成了多线段。
" X) M1 E4 L2 g; |这一招也是学来的。

评分

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

查看全部评分

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

本版积分规则


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

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

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