QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
按照AUTOCAD VBA的学习资料,我把二维的改成三维的之后出现如图错误,哪位大大能帮忙指正一下 非常感谢
/ D3 s8 J& I& U0 N+ j$ a( J$ J" U- `) L
改过后程序为:
  Z% a6 L8 y4 Q( w6 p* Y' d
2 l/ ?2 a* i6 N. OPublic Sub move()5 i7 H, t, m3 B) |0 V
Dim p0(2) As Variant       '起点坐标9 W! I: E  n9 e
Dim p1(2) As Variant       '终点坐标! J- n* t* ]. ^2 |" {2 a  s  |
Dim pc(2) As Variant       '移动时起点坐标4 \9 }' n5 @7 m3 R" v( n
Dim pe(2) As Variant       '移动时终点坐标4 T' k8 b! D1 y2 z; S: K
Dim movx As Variant     'x轴增量- ?: R  y. W; q# y3 F
Dim movy As Variant     'y轴增量
6 D" Z9 ?9 e. Z6 `$ ?! y: u$ f9 CDim movz As Variant     'z轴增量& X! ~% A# G7 Y2 L
Dim getobj As Object    '移动对象' I* o3 O. ], }: D
Dim movtimes As Integer '移动次数# ?/ _9 T0 e! O' h2 o
ThisDrawing.Utility.GetEntity getobj, po, "请选择移动对象"& M$ f% ~" E$ l" v, H
p0(2) = ThisDrawing.Utility.GetPoint(, "起点:")* _! I: r, w% Y, T- U
p1(2) = ThisDrawing.Utility.GetPoint(p0, "终点:")) F. Z% v) q4 \; F* V. F) h, f$ a
pe(2) = p0(2)
& ?$ C; i$ E6 T- Hpc(2) = p0(2)
( x& r2 C% a; B/ O) I8 lmovtimes = 30
; u. \+ Y# d1 d' pmovx = (p1(0) - p0(0)) / movtimes
/ n, A% `- ^& Vmovy = (p1(1) - p0(1)) / movtimes
* \- Z& I# }: W3 Xmovz = (p1(2) - p0(2)) / movtimes
; O( k# ^( [$ |6 Q" b; EFor i = 1 To movtimes- a+ E  j1 z  M; h6 y" ?5 M9 u
  pe(0) = pc(0) + movx
0 Z8 L8 }3 o  K5 O' p$ W% Q9 `  pe(1) = pc(1) + movy( ^  \3 W2 D5 \, l) n
  pe(2) = pc(2) + movz
2 P, F& X5 W- C5 z2 C  getobj.move pc, pe    '移动一段/ {" R- i- a! |/ X$ d4 Z2 i, A! F1 Y
  getobj.Update         '更新对象, U/ T! i# d1 L( u- G( I
Next
" I$ v8 E" d2 v" F) ^* G  J6 jEnd Sub. y' e  C- d& l; y$ w% p" C* b
5 F" m! _$ `/ r* Q% G
. w; l# a3 M( C) I; h) m  L9 M
程序编译执行都没有错误,但是在选择完移动对象,选择起点的时候就报错(如图)
: ?1 `9 _: S* i$ b/ {
  f9 P; Q# i; I1 |2 M! U2 `[ 本帖最后由 jasmine126 于 2008-10-31 15:17 编辑 ]
error.JPG
发表于 2008-10-31 13:47:11 | 显示全部楼层 来自: 中国辽宁营口
简单改写了你的程序,自己对照一下都有哪些部分不一样1 ]+ Z" J! ~6 @# g0 q! c- x
  1. Sub Move(), t& d0 W5 L8 @
  2.     Dim P0 As Variant       '起点坐标5 z: [, ~  q1 H3 n6 T
  3.     Dim P1 As Variant       '终点坐标( l6 p0 p4 ^/ G% }# w" I
  4.     Dim Pc(2) As Double     '移动时基点坐标  R3 U. L1 f- {3 j2 M4 h3 j
  5.     Dim Pe(2) As Double     '移动时第二点坐标
    0 N8 y" g6 ~, v; }: h
  6.     Dim MovX As Double      'x轴增量
    ' [: p4 I, V5 \# N0 k
  7.     Dim MovY As Double      'y轴增量
    * i- r- I; }1 J% w
  8.     Dim MovZ As Double      'z轴增量4 O' t8 e* G8 v1 }( Y
  9.     Dim GetObj As Object    '移动对象
    6 |. W' r$ s) P# S4 h
  10.     Dim MovTimes As Integer '移动次数/ B  I. }3 v& e& C' A
  11.     ThisDrawing.Utility.GetEntity GetObj, P0, "请选择移动对象"6 e* N" B5 }" i8 Z4 ~$ ^
  12.     P0 = ThisDrawing.Utility.GetPoint(, "起点:" ) 9 m. C0 a" f- \% {9 ^: K
  13.     P1 = ThisDrawing.Utility.GetPoint(P0, "终点:" )
      ]4 K" B1 y& W" Z
  14.     MovTimes = 30% t! Z- R5 c+ U1 O) x1 O5 R2 Q3 k
  15.     MovX = (P1(0) - P0(0)) / MovTimes# P3 y5 G" t& h+ k1 g
  16.     MovY = (P1(1) - P0(1)) / MovTimes
    ' T  H6 _* d+ a" A/ H4 I" Z
  17.     MovZ = (P1(2) - P0(2)) / MovTimes
    - `' a' V  a& C9 N
  18.     Pe(0) = Pc(0) + MovX3 z$ n; E1 w6 b
  19.     Pe(1) = Pc(1) + MovY4 S$ x) C+ P$ F1 Y/ Y5 H
  20.     Pe(2) = Pc(2) + MovZ
    ! J; u; |* s! k
  21.     For I = 1 To MovTimes4 C: R3 ^" p& g
  22.       GetObj.Move Pc, Pe    '移动一段6 ~. R+ q$ ~4 M8 p! L$ E
  23.       GetObj.Update         '更新对象
    / o6 i- v; y  q0 j1 h
  24.     Next6 G8 T+ n& ~' z% k3 Y
  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 )

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