三维网

标题: AUTOCAD 运用VBA使三维运动的问题 [打印本页]

作者: jasmine126    时间: 2008-10-31 13:13
标题: AUTOCAD 运用VBA使三维运动的问题
按照AUTOCAD VBA的学习资料,我把二维的改成三维的之后出现如图错误,哪位大大能帮忙指正一下 非常感谢& u/ X3 d' k1 L$ Y& V% O
6 z# @: u5 N7 c( G
改过后程序为:
+ b3 `- N# X/ D7 _, R' q9 c0 Y. D- }+ k) W2 P& k3 j
Public Sub move()- Z) B, }4 b6 |$ |2 L6 d+ N
Dim p0(2) As Variant       '起点坐标8 a3 v6 t1 Z) N$ N. t
Dim p1(2) As Variant       '终点坐标, _+ d# S( `- Y. N& \, Y
Dim pc(2) As Variant       '移动时起点坐标
- R8 o+ F% @) Y1 M$ E" a: aDim pe(2) As Variant       '移动时终点坐标
3 R( W; d2 p2 {& EDim movx As Variant     'x轴增量
% F, \' m% M  U) |1 i6 Z% E, ZDim movy As Variant     'y轴增量
2 `: U3 o' ]/ P9 A" {- G( s6 WDim movz As Variant     'z轴增量
, W! s/ I$ `6 ?8 BDim getobj As Object    '移动对象
# H5 j  a$ Y+ P0 Z9 Y, ^Dim movtimes As Integer '移动次数$ p: E' I4 P  O; G
ThisDrawing.Utility.GetEntity getobj, po, "请选择移动对象"
% T! M$ }) e' Vp0(2) = ThisDrawing.Utility.GetPoint(, "起点:"). I8 {4 H- [5 v0 U0 O& \
p1(2) = ThisDrawing.Utility.GetPoint(p0, "终点:")! X9 b2 q& r! G3 s* u
pe(2) = p0(2); h& G  S4 S8 |5 R1 M
pc(2) = p0(2)
% Q' [( H! B: h& s6 Gmovtimes = 30
/ O: Z( r, C. f( T: Bmovx = (p1(0) - p0(0)) / movtimes0 x5 z! L9 t: s" r8 V3 g1 i
movy = (p1(1) - p0(1)) / movtimes; c9 _  I, O( }9 P! |
movz = (p1(2) - p0(2)) / movtimes+ W# B' j( {* c3 e& l
For i = 1 To movtimes* c, ^1 k/ L1 M  W+ G7 M
  pe(0) = pc(0) + movx
9 a# v  ?% @3 _6 ?6 B# [' @5 S  pe(1) = pc(1) + movy
( a' I* {+ |2 n1 t# e5 F  pe(2) = pc(2) + movz( d: O! r! K: w8 j+ W
  getobj.move pc, pe    '移动一段
- @  K% M% e$ l# E( h* P  getobj.Update         '更新对象
& }1 s. j6 i3 W2 ~3 |4 g% WNext7 a9 d% G: s/ ^1 g' l2 N# R
End Sub
! U" y: q$ E3 P& {1 U& P: r
* s+ H6 j$ F2 e7 K
, r* G$ C+ n6 B3 l) o: L程序编译执行都没有错误,但是在选择完移动对象,选择起点的时候就报错(如图)% ~( J: {2 U6 X6 e) d# [$ w

& G+ o, V' V/ w. @! t& w6 O/ r" ][ 本帖最后由 jasmine126 于 2008-10-31 15:17 编辑 ]
作者: woaishuijia    时间: 2008-10-31 13:47
简单改写了你的程序,自己对照一下都有哪些部分不一样. E' ]! z' p: n, c
  1. Sub Move()* o; P/ x5 J  _. L- }8 g
  2.     Dim P0 As Variant       '起点坐标
      s7 S9 _; M, O# T* z& D+ B4 b  a
  3.     Dim P1 As Variant       '终点坐标. H; Q6 s) ?: d/ T" v
  4.     Dim Pc(2) As Double     '移动时基点坐标
    / v7 ?, T0 R- m' e
  5.     Dim Pe(2) As Double     '移动时第二点坐标' y+ @  Y  @& e, V+ N  b  L. m
  6.     Dim MovX As Double      'x轴增量
    ( r+ Y2 k1 F2 F0 B) d
  7.     Dim MovY As Double      'y轴增量5 N+ \# R4 q7 b5 M" L
  8.     Dim MovZ As Double      'z轴增量
    - s) [4 N& m$ O
  9.     Dim GetObj As Object    '移动对象- t  T4 I- C3 }2 @" E3 F
  10.     Dim MovTimes As Integer '移动次数
    7 d" `' x* ^2 }9 s5 N; Q  P
  11.     ThisDrawing.Utility.GetEntity GetObj, P0, "请选择移动对象"
    / P" F" C. @  |. x+ S
  12.     P0 = ThisDrawing.Utility.GetPoint(, "起点:" )
    & C7 x  }. k- ^3 Q, v
  13.     P1 = ThisDrawing.Utility.GetPoint(P0, "终点:" )* ^# B2 x' P; v" l8 L
  14.     MovTimes = 30, k( z' g  Q0 Q" L6 o! y
  15.     MovX = (P1(0) - P0(0)) / MovTimes4 u" E$ E2 [! V/ t
  16.     MovY = (P1(1) - P0(1)) / MovTimes2 ?. W6 D8 \5 }$ F
  17.     MovZ = (P1(2) - P0(2)) / MovTimes
    % L0 l: p, P/ g# r
  18.     Pe(0) = Pc(0) + MovX# B5 Z( v8 m* W
  19.     Pe(1) = Pc(1) + MovY
    2 e4 `+ {% X# h
  20.     Pe(2) = Pc(2) + MovZ( o5 A  o9 B7 }4 _: x' U5 s
  21.     For I = 1 To MovTimes2 y7 C5 \. b+ a/ d4 j- T
  22.       GetObj.Move Pc, Pe    '移动一段2 Z3 S: _- _$ b( l: y; x2 F
  23.       GetObj.Update         '更新对象
    $ ~" y2 B' M6 M, v5 d$ \
  24.     Next
    ' Y' P4 g/ I8 a( L1 _3 _
  25. End Sub
复制代码

作者: qinrongshan    时间: 2014-2-4 21:08
很有意思!!看懂一点了!!就是没能顺畅的写出来!!




欢迎光临 三维网 (http://www.3dportal.cn/discuz/) Powered by Discuz! X3.4