QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

查看: 3151|回复: 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 | 显示全部楼层 来自: 中国黑龙江哈尔滨
我一个笨招:
; Q) s1 h& L* g$ p) _, M绘制好椭圆后,使用offset命令偏移一下,在按相同的偏移距离再偏移回来就可以了。
发表于 2006-10-11 19:44:19 | 显示全部楼层 来自: 中国浙江杭州
打断试一下,可以吗?
发表于 2006-10-12 20:52:13 | 显示全部楼层 来自: 中国广东广州
《转贴》AUTOLISP程序% v3 j, Z) a: }8 ~2 L9 S

( ~: c* P' O1 _9 |- z: d5 }9 ~9 _;;;======================
! \3 f- Y8 A6 J;;;= 将椭圆转化成多义线 =- l; w& u% c3 r- A, c7 w
;;;======================5 A- S/ N; i6 i) m6 G
(defun fcp::ellipsetopline
/ H* {; k+ F. G& e( `- f                    (ellobj   /            spoint       epoint+ [+ y8 ~! l1 r8 C2 I
                    str           num1      num       plineobj' U8 H9 [3 I- A+ o! r. R. l
                    plineobj1 points      npoints       vpoints0 y0 S; {+ w' v. R( }7 x1 t8 E. F
                    2dpoints
* D' Z) N, t/ |0 k$ G. o, ?                    )' V* S! V) A: @/ {' _# |
(setq      spoint (list (vlax-safearray-get-element/ {0 _9 b" p; f' F) Q7 h0 ~
                (setq* W1 b, N+ ]9 z9 G
                  num (vlax-variant-value (vla-get-startpoint ellobj))+ l3 Y! Z" R5 t1 w9 b/ \
                )/ b* n! [4 P, w% |: ?6 @( B8 T
                0
$ R) d; s9 A( d0 R) Z; d* J              )* ]+ `3 m+ l$ e0 e( c5 N
              (vlax-safearray-get-element num 1)7 z' M8 w, k+ Y- F
              (vlax-safearray-get-element num 2)
) ~; ^- }9 x6 J; U, B5 S7 e! \          )! t! W' A9 P6 a5 g/ l
     epoint (list (vlax-safearray-get-element: K" O6 a, p) M1 a) R4 ~  z
                (setq
5 w1 _0 H- I3 K! W0 _1 Z! a7 v                  num (vlax-variant-value (vla-get-endpoint ellobj))
# u6 S$ U% S8 w& D6 Q5 e+ J                )
9 K& C/ E5 D% v# _2 L                0! V5 G& B! Q( M* I
              )
( ]9 N0 q# o/ Q; p3 Z, x# S; G3 p2 n6 M              (vlax-safearray-get-element num 1)
, {1 }4 {5 q1 H* c0 U              (vlax-safearray-get-element num 2)
# N: L% H6 P5 @* S* ]9 `          ): I9 V5 I/ r  J8 a$ U
)
9 [$ F5 S9 i% B# h) v8 ]$ [(setq      plineobj (car (vlax-safearray->list7 q, Q: ]4 q  u
                 (vlax-variant-value (vla-offset ellobj -0.1)). s2 I* T" s! N1 n  v4 O) R
                )' s$ S6 x& Q( i+ t
            )
7 K. v: R- d9 h$ i/ X3 I- q( h$ T2 K): y! f0 d; q" c7 t1 F/ E0 p' c7 n
(setq
5 a. }$ j: W8 ^# M9 Q  plineobj1 (car (vlax-safearray->list
9 e% e. P4 o; d/ P3 B4 e$ J0 X* C1 z              (vlax-variant-value (vla-offset plineobj 0.1))
, y9 L& {9 Q9 m  n; M* @1 D              )7 q" W, ^$ ~5 J9 j0 ~6 |) {6 P# E2 o
          )
1 J* S% \; Y; f% P4 A( n9 U)) X& l* C8 R. I, Q$ _* s' x
(vla-delete plineobj)
* ]% M2 X; x' a; g(setq      points nil
$ Z# l4 X7 h# o% G     num -1
$ `6 e. w/ C7 U8 A! d     2dpoints nil/ t: [1 b$ b' {; t6 B5 x) x
)
, S( S& d' l/ e: L(setq
5 n6 F: a# Y2 O  points (vlax-safearray->list
  h! j9 T, u* o  u( a        (vlax-variant-value (vla-get-ControlPoints plineobj1))
- g/ g  {, @. k        )( v* O& o0 \0 n4 I" |6 h
)
5 |/ x- m8 ]- k. B(vla-delete plineobj1)8 X4 u9 z' ~0 o' }
(setq      npoints      nil
6 \; i3 h9 {0 w& B6 s7 \( O     num      (/ (length points) 3)' H8 L* \) z" q! X3 W9 s2 ?3 f
)+ [; I1 ~/ @! P% D7 X* u
(repeat num
, }: `5 L0 z, V% l, f  (if      (>= (length points) 3)
3 [: N9 e) t  ?$ c; }1 e    (setq npoints (append
2 n5 G# j3 _# b" K, ^* T* d                npoints
7 o+ B  H/ t1 g0 q2 V% |                (list (list (car points) (cadr points) (caddr points))" U1 ?, R/ \: ?- n" D
                )
* Z0 `7 Z* t. B6 O8 a5 j& g5 j# e              )
; \3 z. v, v; _, B        points (cdddr points)
0 ^, x2 x$ e- t# x) l    )
  c6 z& M5 N9 O  )
) w) ~( w9 B3 ?: f0 ]* I0 f' O)
6 X, ]4 E( Q3 V2 x5 E7 t3 r* W(setq      points      npoints
/ A6 f; B8 c+ F' Z$ y     vpoints      (list (car points))
) X& A1 Y" @" h  S0 E; q( \     num      1
5 L& p( M6 l# {5 a9 Q9 K)
9 y! B2 @5 q, W0 B* v0 ]$ ]" f(if (> (setq str (length points)) 16)
; s) x# D9 l( h  (progn
) k  K0 c- L$ D- X6 j: J    (setq num1 (fix (/ str 16)))
7 v9 ]8 V- {9 J0 y    (while (< num str)
$ w! z) g  E  r" a! x     (if (= 0 (rem num num1))8 ^( Y- B! m. t4 l
      (setq vpoints (append vpoints (list (nth (- num 1) points))))
, U3 c  {  ~! n! A* c: F3 K     )' w, q' m) \8 V& x: S% m4 g9 c; M
     (setq num (+ num 1))
7 w% [0 I" d' R& \+ R% @: K8 X    )
& x9 F( e+ B' t. ]! ~* J- i  t    (setq points (append vpoints (list (last npoints))))# N. {0 d5 r3 H! E
  )
$ m) H& Q, o/ I" p)) x) S: n! S: P
(foreach num points+ d  n' p( f4 A5 K4 R; l+ u( W
  (setq points (subst      (vlax-curve-getClosestPointTo ellobj num)
, z7 `! y, p; B# l: t( }3 a! C                 num/ k) U0 A. G; m- b" x4 s: B* w
                 points
! I* w( t% H. c- G/ ]. z            )
# m' z/ P7 s7 K, _* c! v4 \5 m/ n  )
) Q: G$ T# x+ b( F) U)! P* s' K* e# r2 v9 w
(princ points)
7 T3 Q/ m; v) ]4 y(setq      points (subst spoint
% f, }  x5 Y- x; H                (car points)
4 q! k; y  p0 [0 {% T4 |                (subst epoint (last points) points)
7 Q- m6 p5 C: J; {7 |6 \6 R, E          )
7 E4 P7 ]1 C; V$ T)
: d0 N5 d; p  Z  u! @; z(foreach num points3 z5 L9 T6 r" l  ~! S
  (setq 2dpoints; a+ H9 _8 C1 b9 ]8 H
        (append 2dpoints num)' C$ u8 B# R. h" n
  )
4 f" @. f& L9 e6 Q3 y)# p- ^8 B9 h8 J/ V, e" [
(setq      vpoints      (vlax-make-safearray, `/ N( A# s( w+ L4 n: E
            vlax-vbdouble$ I) h0 ]; V$ L6 k7 Q, l
            (cons 0 (- (length 2dpoints) 1))" I5 m$ i! B: D9 \0 p6 Q# c
           )
( M3 w5 J! {$ K# K5 B)
" Z% ^. h; b" g(vlax-safearray-fill vpoints 2dpoints)8 s. k& R! y* u3 x8 ^. T0 z
(setq plineobj (vla-addpolyline fcp::mspaceobj vpoints))
% I/ ~( g% X' r3 ?4 G8 A8 g(if (and (= (car spoint) (car epoint))
% T+ w- _, v( g3 F* W        (= (cadr spoint) (cadr epoint))
, z+ g' U1 J/ g! q0 _/ C; i8 Y    ); X- z4 q$ u6 D. P% i  d
  (vla-put-closed plineobj :vlax-true)
/ V: z! O- _; P. Z% J)
4 z- [/ d8 I% c0 d(vla-put-type plineobj acfitcurvepoly): ]& _3 R' @  f; {
plineobj/ }1 O: J' x/ T! _6 a
)
) H0 Y' k! B9 u, S
) V* F. }) f5 b! W" G4 j, J
+ m$ t1 n( h% }4 J% v( r6 K* W
; B+ `, i! T5 x" s' s再配上变量定义:
; F) |- V( ~; z, a3 U(vl-load-com)
: t+ q4 q. U, L# [6 P(setq fcp::acadobj     (vlax-get-acad-object)8 ]! I3 L( m% n9 Y) k5 T5 R
  fcp::acaddocobj     (vla-get-activedocument fcp::acadobj)
: s! \7 z6 E2 T  fcp::mspaceobj     (vla-get-modelspace fcp::acaddocobj)
; y3 O: S& m; H% x( H, f) V  fcp::pspaceobj     (vla-get-paperspace fcp::acaddocobj)
. a1 [3 l9 Z# o  fcp::docobj     (vla-get-documents fcp::acadobj)
. t" ~% U2 O3 A% ^6 o; z" h3 Y$ [  fcp::blocksobj     (vla-get-blocks fcp::acaddocobj), A( b& m3 ~6 Q/ {
  fcp::layersobj     (vla-get-layers fcp::acaddocobj)' t7 ]- U( Z; V1 Q8 o
  fcp::textstyles     (vla-get-Textstyles fcp::acaddocobj)
" _2 j9 n, k& l# b  fcp::linetypes     (vla-get-linetypes fcp::acaddocobj)! k  ~0 S- c9 U
  fcp::menugroupsel     (vla-get-menugroups fcp::acadobj)
1 u; V' g& ~1 m  fcp::menugroup     (vla-item fcp::menugroupsel 0)' d. o% D: d& @9 b
  fcp::menuobj     (vla-get-menus fcp::menugroup); T9 G1 X0 m+ d# _0 h- h+ w/ {4 Q
)

评分

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

查看全部评分

发表于 2006-10-12 20:54:00 | 显示全部楼层 来自: 中国广东广州
如果不想这样,我想可以考虑用多线段近似画椭圆弧,在要求不高的情况下还是可以的,
发表于 2010-3-12 11:46:06 | 显示全部楼层 来自: 中国辽宁沈阳
3# supernova  的办法试验了一下。可以做到把椭圆转成样条曲线。
) |* X; y6 @4 a如果要多线段的话,还有一步,就是点击样条曲线,右键,编辑,转换成多线段。5 N4 C' q& X$ v8 t. R
要精度的话,选项值10左右就可以,不要精度的话,选项值0即可。
, ^! U4 d. S" _$ h, B; f  `7 J$ S- W! [; r: r3 p; \3 o9 @3 l
还有一招,将带有椭圆的图形,另存为 R12版本,再打开的时候,你会发现椭圆变成了多线段。
0 c4 H) z- N# i8 {这一招也是学来的。

评分

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

查看全部评分

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

本版积分规则


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

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

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