QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
10天前
查看: 2966|回复: 2
打印 上一主题 下一主题
收起左侧

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

[复制链接]
跳转到指定楼层
1#
发表于 2008-10-31 13:13:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式 来自: 中国陕西西安

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

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

x
按照AUTOCAD VBA的学习资料,我把二维的改成三维的之后出现如图错误,哪位大大能帮忙指正一下 非常感谢' ^; X5 S6 u7 `! V

: P. N3 S8 t! X  X改过后程序为:
$ B+ T0 w) g) X- q& \  I
- M5 \- J; [& o; h4 {2 Y! LPublic Sub move()/ x+ j) F1 r% p
Dim p0(2) As Variant       '起点坐标
$ A% ~0 ^5 `; y4 n1 SDim p1(2) As Variant       '终点坐标
; g2 n* O& u4 C' B' Q' CDim pc(2) As Variant       '移动时起点坐标
8 b0 c) s( D1 @Dim pe(2) As Variant       '移动时终点坐标- F, n/ r$ |2 K' o9 t5 M' y
Dim movx As Variant     'x轴增量9 r1 P) Y  Q4 p2 M6 G
Dim movy As Variant     'y轴增量
. O  U& x$ F5 k8 {, E, f6 V5 s5 SDim movz As Variant     'z轴增量% ?2 g' Q' Q$ W! t! x  ~$ k
Dim getobj As Object    '移动对象
9 ^( ?: r& D9 g/ n5 bDim movtimes As Integer '移动次数
6 d6 `% y  z6 q. wThisDrawing.Utility.GetEntity getobj, po, "请选择移动对象"
, \8 R: L, w1 ~+ |# c6 a: a- S  C- ~p0(2) = ThisDrawing.Utility.GetPoint(, "起点:")2 v1 \$ j4 U7 n
p1(2) = ThisDrawing.Utility.GetPoint(p0, "终点:")9 Y' W( o& h( l5 S5 b/ T
pe(2) = p0(2)  P1 K, o8 D! F: _- w6 ]
pc(2) = p0(2)
# i$ |+ I; x, R# K; fmovtimes = 30
. ^. H2 O- q( Y* n/ X  Kmovx = (p1(0) - p0(0)) / movtimes
3 b# Q3 n7 s+ x& L$ b2 F. Mmovy = (p1(1) - p0(1)) / movtimes
/ t) o' W  N. C) w. Y/ R2 |! Ymovz = (p1(2) - p0(2)) / movtimes( e* m. U- J6 y  n
For i = 1 To movtimes
9 d" V3 m, e; }! P  pe(0) = pc(0) + movx
5 p; F3 K# g% G+ ?- p/ _  W# M& s  pe(1) = pc(1) + movy  Y2 Y, H' R# @- u3 m
  pe(2) = pc(2) + movz
3 \8 @6 W, n- ]  getobj.move pc, pe    '移动一段+ G7 v% O. n) _
  getobj.Update         '更新对象
6 s; u) q$ |! [& G# M3 mNext
1 `! X6 }' `- T+ j- m8 XEnd Sub# W+ Y, `) u" H" P0 c; F

1 J4 \. i. W: _1 g" }
/ U: i% N& D2 `! v' i1 C3 k程序编译执行都没有错误,但是在选择完移动对象,选择起点的时候就报错(如图)
9 H6 D. k/ a9 G$ w4 ?6 r, O2 _( \. |. K( D; K0 m9 d& d4 f% Q  L4 ~
[ 本帖最后由 jasmine126 于 2008-10-31 15:17 编辑 ]
2#
发表于 2008-10-31 13:47:11 | 只看该作者 来自: 中国辽宁营口
简单改写了你的程序,自己对照一下都有哪些部分不一样$ P& e0 J" L! H. F2 ]' F$ O4 p
  1. Sub Move()
    - o% g; R# w- w% w3 i9 G, C; D/ f2 ^
  2.     Dim P0 As Variant       '起点坐标
    ; b8 f% N' [  g& Y0 U
  3.     Dim P1 As Variant       '终点坐标
    2 X* u; ]7 U) k+ |4 I4 _: w* D8 F
  4.     Dim Pc(2) As Double     '移动时基点坐标. }7 i3 K/ \9 \# k
  5.     Dim Pe(2) As Double     '移动时第二点坐标
    # ?9 s4 d1 s' ~) j; a
  6.     Dim MovX As Double      'x轴增量
    2 B" d( P( b9 ]* J6 ?" y# d' I( ?
  7.     Dim MovY As Double      'y轴增量
    " b! v& `, j8 n, U+ i* F# Y! j5 K
  8.     Dim MovZ As Double      'z轴增量" y$ ]: j4 {  u+ g# G9 [9 j& S
  9.     Dim GetObj As Object    '移动对象
    2 G. J; ^+ ?" y/ {$ @$ u
  10.     Dim MovTimes As Integer '移动次数
    3 F8 N% {& K$ i, z( G; c: Q# \
  11.     ThisDrawing.Utility.GetEntity GetObj, P0, "请选择移动对象"
    1 Z+ i! Q7 J" X& [" T0 `: t2 ?6 p
  12.     P0 = ThisDrawing.Utility.GetPoint(, "起点:" )
    % \- y- M6 d6 c% o- u" t! @  [% n
  13.     P1 = ThisDrawing.Utility.GetPoint(P0, "终点:" )5 |, d* i$ ], ]/ ]. j  o
  14.     MovTimes = 300 [! [8 H' k* z% P/ L. `
  15.     MovX = (P1(0) - P0(0)) / MovTimes
    ! U: K+ y, E3 q! S. J% L
  16.     MovY = (P1(1) - P0(1)) / MovTimes
    ( @! W1 c. V7 D) e1 _7 H1 ]0 R
  17.     MovZ = (P1(2) - P0(2)) / MovTimes
    - }6 c! O9 d+ d2 x! v
  18.     Pe(0) = Pc(0) + MovX
    3 a& r4 d# R% H( k2 a' z) G
  19.     Pe(1) = Pc(1) + MovY
      X- {# r5 G6 c7 \/ |* Z" W' |
  20.     Pe(2) = Pc(2) + MovZ8 u! f: K; q/ `0 U- E
  21.     For I = 1 To MovTimes. T/ e  h% l4 U% d0 x6 G5 C$ a% M+ O
  22.       GetObj.Move Pc, Pe    '移动一段
    ' s; o9 Y8 b: i- }6 e+ Z
  23.       GetObj.Update         '更新对象
    7 T" W: f  d$ j+ C- v
  24.     Next- S4 f# V6 Z$ m
  25. End Sub
复制代码

评分

参与人数 1三维币 +5 收起 理由
唐昕晨 + 5 应助

查看全部评分

3#
发表于 2014-2-4 21:08:44 | 只看该作者 来自: 中国广西柳州
很有意思!!看懂一点了!!就是没能顺畅的写出来!!
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Licensed Copyright © 2016-2020 http://www.3dportal.cn/ All Rights Reserved 京 ICP备13008828号

小黑屋|手机版|Archiver|三维网 ( 京ICP备2023026364号-1 )

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