QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
7天前
查看: 3075|回复: 2
收起左侧

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

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

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

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

x
按照AUTOCAD VBA的学习资料,我把二维的改成三维的之后出现如图错误,哪位大大能帮忙指正一下 非常感谢4 ^0 z" j) n0 ?
& h! J0 f5 ?9 b. P6 @8 S. q
改过后程序为:. K+ D( Z" E2 h0 H+ K

+ p+ d3 C% u$ b2 C  U& SPublic Sub move(); F# A  r% X( Q1 d! e
Dim p0(2) As Variant       '起点坐标, f/ C0 F; p9 {1 Q- ~& Y9 r8 w" \
Dim p1(2) As Variant       '终点坐标; @7 A- `. m( |! N- O0 Q* G2 p
Dim pc(2) As Variant       '移动时起点坐标8 Z2 ~7 T. z$ ?3 K
Dim pe(2) As Variant       '移动时终点坐标
" p; F2 N/ P! Z: ZDim movx As Variant     'x轴增量1 Z5 w- J5 B" C4 a  Q( ^
Dim movy As Variant     'y轴增量
: m, ]% p* Z& x5 ^; M. PDim movz As Variant     'z轴增量
: ]3 L6 d- }0 n6 UDim getobj As Object    '移动对象
& d) C2 {2 Q3 F! ]Dim movtimes As Integer '移动次数
& @4 K' P2 K( Y" x% X3 nThisDrawing.Utility.GetEntity getobj, po, "请选择移动对象"# v$ N9 w$ a# v  }: ]+ i% [0 n
p0(2) = ThisDrawing.Utility.GetPoint(, "起点:")7 v$ Q- b& M! k" s/ H5 G8 s' K
p1(2) = ThisDrawing.Utility.GetPoint(p0, "终点:")
, h8 k+ u5 k2 O( spe(2) = p0(2)3 \8 s" {  }9 }6 y
pc(2) = p0(2)
2 z- L3 A, Y  }* Ymovtimes = 307 z4 i" X/ W* n% q" i6 z+ i
movx = (p1(0) - p0(0)) / movtimes5 }8 M+ ~, U/ @" o: Z$ ~5 c% |
movy = (p1(1) - p0(1)) / movtimes
- ^& i# Q4 t+ s+ J. tmovz = (p1(2) - p0(2)) / movtimes) e" J% U9 r! \3 y1 Z4 [4 z
For i = 1 To movtimes
$ x% M4 M, o7 a( r5 |' E! m% ?  pe(0) = pc(0) + movx; _$ h. Z, Y  u9 n3 d8 U
  pe(1) = pc(1) + movy
/ _0 {; x/ a9 h5 l1 t- O  pe(2) = pc(2) + movz
- ^7 C0 ?  k: A9 @! H" Y( Z  [  e  getobj.move pc, pe    '移动一段
. g8 X+ v7 {1 z' X: M4 q  getobj.Update         '更新对象
$ f+ v# `) P* C6 @8 a& ?Next2 R  z# S9 T! }, C" [# I
End Sub
  J  @7 P  D8 k- k7 b$ T2 o, D
) a$ C. l4 `6 l0 o4 v
" l) N2 Z1 Z/ W1 H6 H# h9 O程序编译执行都没有错误,但是在选择完移动对象,选择起点的时候就报错(如图)
" p2 \" }+ t! a) g+ m" [/ I3 K8 z4 C4 w- w
[ 本帖最后由 jasmine126 于 2008-10-31 15:17 编辑 ]
error.JPG
发表于 2008-10-31 13:47:11 | 显示全部楼层 来自: 中国辽宁营口
简单改写了你的程序,自己对照一下都有哪些部分不一样
5 ?4 r7 Y$ l- Q3 F9 l8 V8 z( @1 c# c5 ?
  1. Sub Move()
    % h; f! u- {" a+ C5 e% i
  2.     Dim P0 As Variant       '起点坐标& Q! f  g: d+ i+ |7 }# z6 T; G& ~
  3.     Dim P1 As Variant       '终点坐标+ u5 n+ H2 ]; L& b( I2 \' f
  4.     Dim Pc(2) As Double     '移动时基点坐标" Y8 m9 N4 _! |: [
  5.     Dim Pe(2) As Double     '移动时第二点坐标  R. [0 y* V" Z2 `6 r% M
  6.     Dim MovX As Double      'x轴增量7 T' d- E; s) Z+ y0 A( ]3 v
  7.     Dim MovY As Double      'y轴增量
    4 N. J( _$ [0 Q3 @1 h
  8.     Dim MovZ As Double      'z轴增量% a: L" L0 h$ ~6 a9 W
  9.     Dim GetObj As Object    '移动对象, T  e: ?7 K8 U% S
  10.     Dim MovTimes As Integer '移动次数6 y. P, f% Y0 z% u! y- k9 w9 u
  11.     ThisDrawing.Utility.GetEntity GetObj, P0, "请选择移动对象"
    & b/ I$ H- l7 f* C4 R
  12.     P0 = ThisDrawing.Utility.GetPoint(, "起点:" ) 2 O4 B' H2 @; o* l; X
  13.     P1 = ThisDrawing.Utility.GetPoint(P0, "终点:" )# V2 f7 |5 D3 p6 a! _; e1 I
  14.     MovTimes = 30
    - l* N& B  T8 Q4 @" v
  15.     MovX = (P1(0) - P0(0)) / MovTimes- T2 B: h5 ^9 G9 g3 X. o  N: R, H
  16.     MovY = (P1(1) - P0(1)) / MovTimes3 H4 t* [/ i$ N
  17.     MovZ = (P1(2) - P0(2)) / MovTimes
    # ~. A) ~$ n( a& {$ P- x, t
  18.     Pe(0) = Pc(0) + MovX
    ! j0 O+ [9 c# a- i
  19.     Pe(1) = Pc(1) + MovY
    6 v* z  U# t/ I
  20.     Pe(2) = Pc(2) + MovZ$ S0 p* `. v0 G( _0 ]: N, R
  21.     For I = 1 To MovTimes6 q( b% R: a( p! S8 S
  22.       GetObj.Move Pc, Pe    '移动一段
    6 [" _5 k, E3 {& S' K' N6 L
  23.       GetObj.Update         '更新对象
    . Z0 h/ i& y5 X! `3 _
  24.     Next
    ! G& j# ]( Y- O- W# b, W
  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 )

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