QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

查看: 3093|回复: 2
收起左侧

[已解决] AUTOCAD 运用VBA使三维运动的问题

[复制链接]
发表于 2008-10-31 13:13:39 | 显示全部楼层 |阅读模式 来自: 中国陕西西安

马上注册,结识高手,享用更多资源,轻松玩转三维网社区。

您需要 登录 才可以下载或查看,没有帐号?注册

x
按照AUTOCAD VBA的学习资料,我把二维的改成三维的之后出现如图错误,哪位大大能帮忙指正一下 非常感谢  y  Z& \5 q( q$ g% K
' J  z# j6 T+ f; C- ?9 u6 a. w% m- ]3 d
改过后程序为:
) L& [, A, v7 b* Z, n+ E5 }( r3 m/ W1 `5 w8 o# `" x
Public Sub move()! Z3 }/ e" n5 k
Dim p0(2) As Variant       '起点坐标
1 i, S0 a# t) `- p5 ODim p1(2) As Variant       '终点坐标
/ O/ b% ?! s2 mDim pc(2) As Variant       '移动时起点坐标* V! n% Y$ f+ @+ T  v# U& {5 X' G
Dim pe(2) As Variant       '移动时终点坐标' x0 _/ ^- _; i4 {- C
Dim movx As Variant     'x轴增量! f. w' J3 b- l3 O) ~/ \/ k5 a
Dim movy As Variant     'y轴增量
7 p7 P4 w" |( `. _: bDim movz As Variant     'z轴增量
7 Y' {- f1 i. C3 |6 X& G! EDim getobj As Object    '移动对象+ x: F& A1 P% Q  g: o* F' j
Dim movtimes As Integer '移动次数
, P' C% T) g+ u$ ~; iThisDrawing.Utility.GetEntity getobj, po, "请选择移动对象"1 S( p3 O7 R9 v% N: ], X
p0(2) = ThisDrawing.Utility.GetPoint(, "起点:")
& J. J- o' I+ n' s3 Cp1(2) = ThisDrawing.Utility.GetPoint(p0, "终点:")' I) U& ~$ o' r. |/ B1 `' f
pe(2) = p0(2)
: z0 E% U3 F' U" ]3 [pc(2) = p0(2)
( K, R7 ^5 @, x) [2 V9 Zmovtimes = 30
9 v$ A* |7 K1 p7 L- ?; X$ R" ?! kmovx = (p1(0) - p0(0)) / movtimes+ u9 v4 q1 d, E6 N
movy = (p1(1) - p0(1)) / movtimes/ p5 x+ U4 s$ H' @
movz = (p1(2) - p0(2)) / movtimes4 L% _2 L7 F* A5 ^/ L
For i = 1 To movtimes
6 _( n; X3 ]4 ~8 t3 a+ _7 R" I$ g  pe(0) = pc(0) + movx6 ~% x: w! l$ D/ ~& ?  d3 H* W
  pe(1) = pc(1) + movy! l3 B" h  M0 p2 d; Z' X! c, @
  pe(2) = pc(2) + movz
! f" ~. K2 L, v& v7 y/ s  getobj.move pc, pe    '移动一段' g( j7 M; A# ?; Z
  getobj.Update         '更新对象. [2 n# x8 T2 A7 B
Next
! J+ h, ^+ v. T6 A' s" v7 s& \End Sub; \8 G% ]/ T( ^

$ Y, u/ V6 `& U5 L7 \
( J1 U! A# H: A1 s: S  n( J程序编译执行都没有错误,但是在选择完移动对象,选择起点的时候就报错(如图)
, w( ~8 U" S! ^9 l  C) X( A+ [( g* r, J' t
[ 本帖最后由 jasmine126 于 2008-10-31 15:17 编辑 ]
error.JPG
发表于 2008-10-31 13:47:11 | 显示全部楼层 来自: 中国辽宁营口
简单改写了你的程序,自己对照一下都有哪些部分不一样% L) i6 V5 W6 R2 Q9 Y
  1. Sub Move()
    ! \3 [! W* E1 j2 F  k) N$ H3 L7 n
  2.     Dim P0 As Variant       '起点坐标+ g8 N( m3 j" r8 `
  3.     Dim P1 As Variant       '终点坐标4 c% s1 l* _+ }1 j) u$ ~. H( j
  4.     Dim Pc(2) As Double     '移动时基点坐标
    . A: H& o9 n" Y! n1 Z
  5.     Dim Pe(2) As Double     '移动时第二点坐标
    ! M4 O, F0 ~+ x7 M
  6.     Dim MovX As Double      'x轴增量& w) ~; P% w: X, m
  7.     Dim MovY As Double      'y轴增量
    * Y7 l4 S+ p8 c. ~# A( Z2 F
  8.     Dim MovZ As Double      'z轴增量
    ! g2 \. b% N' W8 T
  9.     Dim GetObj As Object    '移动对象
    ( {: S8 X( K# i
  10.     Dim MovTimes As Integer '移动次数
    ) W( ]) e3 Q$ z" O( {' [
  11.     ThisDrawing.Utility.GetEntity GetObj, P0, "请选择移动对象"
    2 ]. D6 {. N+ J
  12.     P0 = ThisDrawing.Utility.GetPoint(, "起点:" )
    * z6 h. |$ o  j6 c
  13.     P1 = ThisDrawing.Utility.GetPoint(P0, "终点:" )
    $ ?% S: W5 A! G2 P
  14.     MovTimes = 305 v/ S' D$ H8 N5 V6 _+ e% S
  15.     MovX = (P1(0) - P0(0)) / MovTimes
    2 K  i$ v8 P& G3 f) \- u
  16.     MovY = (P1(1) - P0(1)) / MovTimes
    / t! `0 R8 s" G
  17.     MovZ = (P1(2) - P0(2)) / MovTimes; A$ `* D, U) S: }
  18.     Pe(0) = Pc(0) + MovX
    $ C/ h: O6 \7 _8 `4 g
  19.     Pe(1) = Pc(1) + MovY: }( a7 ^2 t8 f$ x8 [) \# W/ }6 Z
  20.     Pe(2) = Pc(2) + MovZ  S% u. e' u( ?$ i: T' q: v# @+ R
  21.     For I = 1 To MovTimes
      G4 k1 Z' D6 ^* y# k$ b( P
  22.       GetObj.Move Pc, Pe    '移动一段2 A. Q" u# J: ^, V2 d8 F3 |; K* k
  23.       GetObj.Update         '更新对象- k& e1 ~$ m# h; ?7 N( x- z
  24.     Next
    , x' E0 G+ v7 ?
  25. End Sub
复制代码

评分

参与人数 1三维币 +5 收起 理由
唐昕晨 + 5 应助

查看全部评分

发表于 2014-2-4 21:08:44 | 显示全部楼层 来自: 中国广西柳州
很有意思!!看懂一点了!!就是没能顺畅的写出来!!
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


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

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

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