QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
8天前
查看: 3076|回复: 2
收起左侧

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

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

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

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

x
按照AUTOCAD VBA的学习资料,我把二维的改成三维的之后出现如图错误,哪位大大能帮忙指正一下 非常感谢
& l* O5 [$ b, H- Y# i, H8 h- O
& p5 K0 N/ R+ g" A# z0 V# Z改过后程序为:" |+ Z& C5 a" U" u8 R4 Y) j- o8 ^' B
! w9 I" \/ u8 y) i; u
Public Sub move()
3 T& Q" L. g2 ^8 `% A! [Dim p0(2) As Variant       '起点坐标" D) ~5 l0 t7 l' c1 ~
Dim p1(2) As Variant       '终点坐标; Z7 G7 E- k' d) |' {, h  p
Dim pc(2) As Variant       '移动时起点坐标9 u! I# [, H4 u$ w. P$ v
Dim pe(2) As Variant       '移动时终点坐标. t; W. F) A( R. |
Dim movx As Variant     'x轴增量* v8 t" A" X7 p# [" S2 P5 E3 ]5 c. Q- Y
Dim movy As Variant     'y轴增量9 P3 \" K# t! [
Dim movz As Variant     'z轴增量
2 S9 A# y% E1 ?8 C( sDim getobj As Object    '移动对象
% ^. ]+ t& ?, o' ]! V4 t9 eDim movtimes As Integer '移动次数
! _3 g' F! h+ @; g4 i  |ThisDrawing.Utility.GetEntity getobj, po, "请选择移动对象". m: w5 T. c  V, s- a  c, _3 X
p0(2) = ThisDrawing.Utility.GetPoint(, "起点:"). u/ M2 T: H; O. ~2 ^
p1(2) = ThisDrawing.Utility.GetPoint(p0, "终点:")4 u% n! H7 M! \' Y+ A2 S
pe(2) = p0(2)
4 \. J# p, r- v$ L4 B4 |pc(2) = p0(2)- k1 Z" E$ w' {7 e3 A
movtimes = 30
! y2 A9 i" O8 T9 l1 p# \movx = (p1(0) - p0(0)) / movtimes6 x; [9 F% r' @
movy = (p1(1) - p0(1)) / movtimes
* @8 R% W( F2 G0 X) Rmovz = (p1(2) - p0(2)) / movtimes% s! a. y0 u% I% P6 T! w( V
For i = 1 To movtimes
3 C" [- ?4 I  P, T  pe(0) = pc(0) + movx
+ ?8 o) i  n, O* @) e2 d  pe(1) = pc(1) + movy; b3 {9 n0 i8 V8 E: m. R
  pe(2) = pc(2) + movz
' f6 X, z$ f5 s* R1 g, G  n  getobj.move pc, pe    '移动一段7 S( I( `' y+ [" f" S+ T
  getobj.Update         '更新对象
8 L# y8 u+ H. X* DNext( h4 v% H0 t! p, }
End Sub
0 g/ d2 b/ d$ N1 E8 H# [8 e# f8 v7 K2 D7 E) n% s+ I
  M- N; a. ]& ]. T, ]: ?; x
程序编译执行都没有错误,但是在选择完移动对象,选择起点的时候就报错(如图)
$ U6 i1 K5 H" E8 [& C0 E4 E8 H% Z+ H  ?% R" E
[ 本帖最后由 jasmine126 于 2008-10-31 15:17 编辑 ]
error.JPG
发表于 2008-10-31 13:47:11 | 显示全部楼层 来自: 中国辽宁营口
简单改写了你的程序,自己对照一下都有哪些部分不一样3 ~& j  R0 }1 V% H4 l
  1. Sub Move()
    $ G# U; F: {  D" q0 w" T
  2.     Dim P0 As Variant       '起点坐标' z" d8 n/ b  {  c9 T1 j) _
  3.     Dim P1 As Variant       '终点坐标
    0 s$ K' c6 T, z/ H  G
  4.     Dim Pc(2) As Double     '移动时基点坐标
    4 K/ k: n, N1 j" D9 x7 ], ?7 f" f
  5.     Dim Pe(2) As Double     '移动时第二点坐标) w+ M/ Q5 u( L8 g+ }, \' f6 ?
  6.     Dim MovX As Double      'x轴增量
    # B: F5 C3 B! U* ^% a" S  Q
  7.     Dim MovY As Double      'y轴增量" o3 P" O" q3 K
  8.     Dim MovZ As Double      'z轴增量* F, J, g8 o2 Y, V8 e9 }
  9.     Dim GetObj As Object    '移动对象; X1 W, J2 m7 H- }1 P& t) l) d& j
  10.     Dim MovTimes As Integer '移动次数
      F  ]0 p1 V8 J' ?
  11.     ThisDrawing.Utility.GetEntity GetObj, P0, "请选择移动对象"
    " ~+ l2 _3 K. S9 u* `+ K
  12.     P0 = ThisDrawing.Utility.GetPoint(, "起点:" )
    3 N0 _7 M) n7 I1 Y
  13.     P1 = ThisDrawing.Utility.GetPoint(P0, "终点:" )
    6 O* ?* f( T  G. c7 l  h; x- Y
  14.     MovTimes = 30; W9 f: A/ O7 n, Q. K7 l9 C
  15.     MovX = (P1(0) - P0(0)) / MovTimes" g" E% ~% A6 O1 ^7 K$ P0 z8 B* D
  16.     MovY = (P1(1) - P0(1)) / MovTimes; t0 ^3 N" `5 O$ z' F
  17.     MovZ = (P1(2) - P0(2)) / MovTimes5 \/ W9 |5 }0 R/ N' \2 q
  18.     Pe(0) = Pc(0) + MovX
    , C, p2 d: M2 A$ p
  19.     Pe(1) = Pc(1) + MovY
    / z0 _8 W* \. T/ M; T' V3 U( t9 n
  20.     Pe(2) = Pc(2) + MovZ
    * y7 r9 b/ M* n1 M
  21.     For I = 1 To MovTimes0 M1 e& U4 j; I7 X! d' e# _; H
  22.       GetObj.Move Pc, Pe    '移动一段
    7 u8 [- V" Q  F& ~2 g, W+ n% h. C9 B: Z
  23.       GetObj.Update         '更新对象& r- M1 H2 E- W: e4 S: _
  24.     Next
    . z8 }! o* [+ B# J7 z
  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 )

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