QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
10天前
查看: 2969|回复: 2
收起左侧

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

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

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

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

x
按照AUTOCAD VBA的学习资料,我把二维的改成三维的之后出现如图错误,哪位大大能帮忙指正一下 非常感谢% e7 d6 U! O8 R5 U& l& B

& O6 H$ W, ~( O. }) C9 A改过后程序为:8 h/ ]* Y& O' m) D- L* ~6 x
- I) [& K/ k: f, o
Public Sub move()3 N6 g. n$ ]* l4 Z
Dim p0(2) As Variant       '起点坐标
( x7 t5 |+ K( l+ s" d8 n1 `) LDim p1(2) As Variant       '终点坐标
8 E+ L2 A: c% p% h( h: JDim pc(2) As Variant       '移动时起点坐标
$ k) f) S! r0 Z8 F4 d- w7 vDim pe(2) As Variant       '移动时终点坐标" Q& K3 h' K6 o! O
Dim movx As Variant     'x轴增量
$ Z; w4 B* A7 }4 GDim movy As Variant     'y轴增量
7 u9 C& S6 N& J, u! K! cDim movz As Variant     'z轴增量  ]" C* s# m$ d3 C* t5 _! X
Dim getobj As Object    '移动对象! v+ H! {; R- ?# M7 E9 s6 }9 @
Dim movtimes As Integer '移动次数8 _8 J2 A  L. z6 g; i& Q/ a% I2 H' r
ThisDrawing.Utility.GetEntity getobj, po, "请选择移动对象"/ j' @* h* X3 e: _" i
p0(2) = ThisDrawing.Utility.GetPoint(, "起点:")
: Z% V& j" K' l; Up1(2) = ThisDrawing.Utility.GetPoint(p0, "终点:")
4 R! P& e4 V* `' upe(2) = p0(2)
) R( u$ D- F+ c  g( epc(2) = p0(2)7 l% u* E% c& ^  B% }
movtimes = 30% h. x+ C( p! W: e
movx = (p1(0) - p0(0)) / movtimes# J, [. O# q" ~' |3 w/ S$ {
movy = (p1(1) - p0(1)) / movtimes4 U5 u0 @% C% Q0 c1 W
movz = (p1(2) - p0(2)) / movtimes
* t1 H, S! x0 M& TFor i = 1 To movtimes7 u& u& S3 w; v, y$ z' a' i
  pe(0) = pc(0) + movx
$ Q; _" |1 k2 h3 \1 o8 G  H% F  pe(1) = pc(1) + movy7 a% Z6 w8 E5 z  P4 b. S( a8 F
  pe(2) = pc(2) + movz
; P6 w* n; F, I5 ]  getobj.move pc, pe    '移动一段' {1 r; i* a: M
  getobj.Update         '更新对象
- q/ {2 \# {( B4 ]" P% FNext
, S  p  L5 D9 DEnd Sub
( G6 [' r7 J* z! d/ B5 o9 @# |" P8 C; z% Y/ H% O' J3 n  b

( \: {3 }) v$ }! I+ r- h程序编译执行都没有错误,但是在选择完移动对象,选择起点的时候就报错(如图)
/ p! L* q4 A  w  h
* x' h' s' q" @% d) s# v+ e' \" v2 u2 K[ 本帖最后由 jasmine126 于 2008-10-31 15:17 编辑 ]
error.JPG
发表于 2008-10-31 13:47:11 | 显示全部楼层 来自: 中国辽宁营口
简单改写了你的程序,自己对照一下都有哪些部分不一样2 x1 k0 t# u1 b$ q& F+ n
  1. Sub Move()' ?5 J  a0 |$ q- ]: G. L
  2.     Dim P0 As Variant       '起点坐标
    3 R% Q. X5 t+ q+ }% W4 Q" _
  3.     Dim P1 As Variant       '终点坐标9 U& X) D' b9 b7 R' S# z
  4.     Dim Pc(2) As Double     '移动时基点坐标# l+ t, H) w6 i2 S$ M- |8 H
  5.     Dim Pe(2) As Double     '移动时第二点坐标
    : m+ Q/ E% b+ r8 m6 \) r1 i
  6.     Dim MovX As Double      'x轴增量
    $ B6 q( v6 |, L
  7.     Dim MovY As Double      'y轴增量' Q$ ^/ @6 ^; d% v0 a( @
  8.     Dim MovZ As Double      'z轴增量
    2 O. v9 u/ w! W+ L3 N
  9.     Dim GetObj As Object    '移动对象. x7 C* n& K0 B- ^1 H1 ~
  10.     Dim MovTimes As Integer '移动次数
    0 o* X; D( z8 y* @
  11.     ThisDrawing.Utility.GetEntity GetObj, P0, "请选择移动对象"* q1 ~! T9 f5 a+ k, ~% ]
  12.     P0 = ThisDrawing.Utility.GetPoint(, "起点:" ) - X  V/ j" q+ T+ U; x1 ^% p
  13.     P1 = ThisDrawing.Utility.GetPoint(P0, "终点:" )
    7 P! o4 N# Y8 J5 E& e
  14.     MovTimes = 30
    4 t% I% {! _4 l* p
  15.     MovX = (P1(0) - P0(0)) / MovTimes
    ( X: V; D5 ]3 k
  16.     MovY = (P1(1) - P0(1)) / MovTimes: v9 k8 c& O; D; M5 ]: H% S! Y0 t, S
  17.     MovZ = (P1(2) - P0(2)) / MovTimes
    9 L! T/ h$ D7 M2 e) r
  18.     Pe(0) = Pc(0) + MovX3 A7 D3 K' L! L
  19.     Pe(1) = Pc(1) + MovY
    - k+ g, b$ W4 r2 C( ^
  20.     Pe(2) = Pc(2) + MovZ% H; J# g& p6 e" ~
  21.     For I = 1 To MovTimes
    ( Z% X  ~% g& @8 c( n$ e2 |
  22.       GetObj.Move Pc, Pe    '移动一段
    5 ?: j9 R4 A% M) ~) o
  23.       GetObj.Update         '更新对象, F1 R! X/ _. t/ g5 w
  24.     Next! O% Y* ~6 n+ C3 {
  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 )

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