QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

查看: 3149|回复: 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 o: f$ _9 T( q/ J: C) ]! c绘制好椭圆后,使用offset命令偏移一下,在按相同的偏移距离再偏移回来就可以了。
发表于 2006-10-11 19:44:19 | 显示全部楼层 来自: 中国浙江杭州
打断试一下,可以吗?
发表于 2006-10-12 20:52:13 | 显示全部楼层 来自: 中国广东广州
《转贴》AUTOLISP程序
, f- s& p" H0 v+ g% i0 _6 Q3 S' {  u: O
;;;======================3 A1 F4 c8 I! N! u1 q& A5 n3 V7 |
;;;= 将椭圆转化成多义线 =: E: ~) B' C  o8 y
;;;======================2 R; D0 d; o7 {
(defun fcp::ellipsetopline
7 l: u1 H* I  u+ d- Z7 g                    (ellobj   /            spoint       epoint
& P% d8 `2 t! r1 @' _7 D% a                    str           num1      num       plineobj8 f9 ^: ^* A/ R' [8 u  W: Y0 G5 I
                    plineobj1 points      npoints       vpoints
! W7 k, @. Y0 v% }. E                    2dpoints
5 R5 _5 Z) m! F- `! I                    ), i* E* R5 n9 u5 j, M
(setq      spoint (list (vlax-safearray-get-element
4 k1 M- {1 I7 x# E" e                (setq6 o& D! ^. }4 |
                  num (vlax-variant-value (vla-get-startpoint ellobj))
, f5 ^$ q$ U+ m: ~- M' K" z% U                )
) C( m6 W) m3 P2 ]! K1 J( K' ?                0; h- @6 u1 t1 A  ~: H; G5 f: d0 h8 X
              )6 E3 r8 J! I" S. q4 r  h
              (vlax-safearray-get-element num 1), T; ~$ n5 T" N. _$ K& y0 D
              (vlax-safearray-get-element num 2)
6 Z2 F: e* C  S4 }9 B- p+ i2 o% ]          )
/ N/ R, T0 q+ }. n" x4 F* P     epoint (list (vlax-safearray-get-element5 s3 W1 E# b; y5 Z5 J) ]! ~
                (setq
1 D& k3 n: C9 L' ?                  num (vlax-variant-value (vla-get-endpoint ellobj))
- e6 F/ Z4 W2 E+ T( q                )
6 g+ m& R7 \3 [2 {5 S5 V. r, ?                0; u# b; W7 a$ D. _4 C
              )
+ w# a0 Z& ?1 z  l) \! W0 J              (vlax-safearray-get-element num 1)
5 e- _1 X) @' ?2 R$ J" o              (vlax-safearray-get-element num 2)
& ], Q' o  u7 B# _: z* ~0 }          )0 t7 K* B) `2 l- ]3 i. a$ G* @6 f; a
)' A# b( J1 u' P+ D2 u2 ?
(setq      plineobj (car (vlax-safearray->list, F$ ~8 i) y, H
                 (vlax-variant-value (vla-offset ellobj -0.1))- ~" u; k9 L4 F: Q
                )  ~3 G4 E" l, d8 F
            )4 I4 |( p7 V! q* A
)+ l% e! ?1 N4 `  W* `, U" c  P) y0 N
(setq
0 x, G* u" N9 |  plineobj1 (car (vlax-safearray->list4 I# [# m, g0 Q7 W# s% A0 T6 F
              (vlax-variant-value (vla-offset plineobj 0.1))
$ L1 _8 [' z4 e8 f, U2 ]( j              ), R( ?& C; O/ P, p/ B
          ); B, y+ W; A% x* M& T
)7 h/ S! l* a8 O; I
(vla-delete plineobj)
$ K$ P' X8 q. i( j4 a) u# C(setq      points nil3 I/ T* f: O( a1 M4 r* a
     num -19 k9 m9 K+ r  \$ S4 q( h" A3 ?
     2dpoints nil
# c$ ?9 ^; J( Y3 I7 O, ~) Q)
( j3 C1 X8 D! R4 ^- D8 }; t(setq
5 t+ d8 D4 v3 v7 D/ G+ p) ]  points (vlax-safearray->list! [/ g3 N! M: R5 t
        (vlax-variant-value (vla-get-ControlPoints plineobj1))) x) h- O9 W: Q
        )* g  q" F% I! C8 w" @% o
)
6 c6 p, V. p6 L) R% \(vla-delete plineobj1)! C; X6 r* i" I7 M
(setq      npoints      nil
! n: I; L. I* R' w     num      (/ (length points) 3)! m& K. a( U' V
)
+ a6 y* ?7 _! a$ x; h* E(repeat num) D0 B- f: x/ b: ^0 U* D& d# ?
  (if      (>= (length points) 3)! |0 Q8 x" H: y
    (setq npoints (append! k8 h, {: y: X  b! A
                npoints0 v/ t& Z: _/ K: f9 F4 z8 [" n0 T
                (list (list (car points) (cadr points) (caddr points)): B9 Q  s( T" e4 v
                )
+ R5 U" @6 W4 i              )9 b9 H3 F, _, C
        points (cdddr points)- z5 x. B+ ~& d4 X' n2 ^
    )% R3 a+ l7 X4 z+ r
  )+ d. ?8 i, x0 |. d9 e* }
)
0 }# y0 n, u8 X6 d6 |(setq      points      npoints# P. n) F$ J; s6 T. w
     vpoints      (list (car points))
/ e9 ?' W: a7 b" R     num      1- d' S0 O+ C2 s4 U
)
9 @+ \+ _2 G6 X! r: V4 t' [(if (> (setq str (length points)) 16)& o% j* U( m: g# \6 y: |3 }
  (progn
* {  |, q% F4 p- c    (setq num1 (fix (/ str 16)))
3 s+ v+ B& x0 U  |3 }( V    (while (< num str)
- i3 F& Q8 N# V; C* v     (if (= 0 (rem num num1))
/ H/ Q5 Q- \' z" Z9 b9 T" G# L& p      (setq vpoints (append vpoints (list (nth (- num 1) points))))0 f1 I  |8 p* Q* c
     )
2 K& F5 d2 Y1 |     (setq num (+ num 1))+ p5 s9 {/ X$ P" h- i
    )5 {$ Q3 P5 q/ H" D- I
    (setq points (append vpoints (list (last npoints))))
2 `) X* s  c2 t/ A2 U; {  )
( ?! y  W0 P  `)
! x7 v' [0 s; K; I' z(foreach num points' q" f( G6 v7 @8 _& L
  (setq points (subst      (vlax-curve-getClosestPointTo ellobj num)
$ f/ z. \9 o# U( {( u                 num3 k- o* J' v0 [5 N
                 points& j+ g$ x  B4 n* X8 t/ w; D
            )
9 l0 t: W7 s/ p7 B( b  )0 ?+ c  n3 j: ~4 s" k* Q9 X
)0 l. e% d. _/ Z2 ]
(princ points)
2 P& y5 O2 I, y" N(setq      points (subst spoint4 {8 M5 b1 Q. T& A
                (car points)* l& ~/ y4 {* W
                (subst epoint (last points) points)' w, A1 U& L2 n
          )
9 W' O9 f- ^) @+ |5 u- S) t! s) U)9 \/ S0 ?' S$ Z- ?
(foreach num points0 v* O+ u& K1 \9 _5 e& r) j1 U' O
  (setq 2dpoints
& w3 h5 W5 X1 [6 ~        (append 2dpoints num)
. k5 m" D6 L& o! ^' @" C& r  )
& r. ?( p# N3 \( V! [)
% l& g! H  K" [* J1 X(setq      vpoints      (vlax-make-safearray) R2 {9 q* y% c7 ?1 I6 V
            vlax-vbdouble
4 j4 G7 G7 C' b& W" p: S- x            (cons 0 (- (length 2dpoints) 1))0 g  l# e, ~; f7 U% _# z+ Y
           )& V: d9 ?% ^: d% _! R8 W9 F$ d+ v
)
  P4 D  O: H: o(vlax-safearray-fill vpoints 2dpoints)2 I' c$ e3 d4 x8 `8 m* Z  i
(setq plineobj (vla-addpolyline fcp::mspaceobj vpoints))
. l; `) t; E$ W% g3 p(if (and (= (car spoint) (car epoint))
% y+ b; A  Y1 R* ]+ R        (= (cadr spoint) (cadr epoint))
/ U- j! r  T  A1 Q, C    )
6 S9 S+ i- F8 |2 W. w2 n! P: }: o  (vla-put-closed plineobj :vlax-true)
/ J8 X- j  y# j: l( `5 I/ q2 S)
1 Q# q% D3 \( V" r+ \3 u(vla-put-type plineobj acfitcurvepoly)# `9 K1 d8 p* C7 R, x/ q6 n% f! @
plineobj7 e- w  N9 A  r2 b5 K! s8 D$ h2 F) o
)
( O$ Q3 f& N% Z7 V" z" C( w' D# H3 J) s; k. E
9 Y& N6 F% N/ w( v( m7 z" l

% M* @9 {& \+ I再配上变量定义:. f9 |+ I! e& A
(vl-load-com)% q0 \: ]0 {$ A; n$ v
(setq fcp::acadobj     (vlax-get-acad-object)
0 Z2 ]: C( h% F, x; z3 t" Y  fcp::acaddocobj     (vla-get-activedocument fcp::acadobj)+ c4 J8 Z9 Z$ f; f% s& m
  fcp::mspaceobj     (vla-get-modelspace fcp::acaddocobj)
+ X$ U! }, s# b7 c  fcp::pspaceobj     (vla-get-paperspace fcp::acaddocobj)5 W, A# ?# R* p
  fcp::docobj     (vla-get-documents fcp::acadobj)3 X# ~& c, U. Q; l" a1 C0 o
  fcp::blocksobj     (vla-get-blocks fcp::acaddocobj)
9 ]8 P, @1 N5 }. O$ x5 z6 U/ q2 K3 V  fcp::layersobj     (vla-get-layers fcp::acaddocobj)
1 C) W- J3 |" Q1 [  n8 Y; {  fcp::textstyles     (vla-get-Textstyles fcp::acaddocobj)
+ y2 t! X4 Y( S4 F& I3 _. }$ s  fcp::linetypes     (vla-get-linetypes fcp::acaddocobj)
$ v3 ~4 G) N( O7 S8 w3 e1 J8 O  fcp::menugroupsel     (vla-get-menugroups fcp::acadobj)# {8 Z' z+ v3 n% s
  fcp::menugroup     (vla-item fcp::menugroupsel 0), i' U1 \: y6 [
  fcp::menuobj     (vla-get-menus fcp::menugroup)
! D0 k8 O8 }  ^+ h)

评分

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

查看全部评分

发表于 2006-10-12 20:54:00 | 显示全部楼层 来自: 中国广东广州
如果不想这样,我想可以考虑用多线段近似画椭圆弧,在要求不高的情况下还是可以的,
发表于 2010-3-12 11:46:06 | 显示全部楼层 来自: 中国辽宁沈阳
3# supernova  的办法试验了一下。可以做到把椭圆转成样条曲线。
' W9 }, H/ `+ g* ?$ H如果要多线段的话,还有一步,就是点击样条曲线,右键,编辑,转换成多线段。
5 c* T3 B4 W. U( D要精度的话,选项值10左右就可以,不要精度的话,选项值0即可。$ e) E! O! G6 Q. B
  ~& m; W4 O8 a  W5 w! D9 u' T3 B
还有一招,将带有椭圆的图形,另存为 R12版本,再打开的时候,你会发现椭圆变成了多线段。; `; f  [* U6 m( O" `7 ^
这一招也是学来的。

评分

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

查看全部评分

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

本版积分规则


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

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

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