QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
11天前
查看: 2970|回复: 2
收起左侧

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

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

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

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

x
按照AUTOCAD VBA的学习资料,我把二维的改成三维的之后出现如图错误,哪位大大能帮忙指正一下 非常感谢
. T6 {" m2 b) V' G7 r
) K3 Z) F) j; B- q* {9 A* N  {7 a, I改过后程序为:
3 e, \: p. k) `+ I2 e" Y/ `4 A5 W. K0 p  F; k; {( m! |& [
Public Sub move()
7 ?2 x4 k9 [, T: o$ e. g9 nDim p0(2) As Variant       '起点坐标
1 }; k, W7 f- ?& DDim p1(2) As Variant       '终点坐标) u3 e+ S; @9 f6 {% {; g5 U2 t
Dim pc(2) As Variant       '移动时起点坐标; D) w$ {' C& ]# b: W; U. f
Dim pe(2) As Variant       '移动时终点坐标, l% m+ Q" r+ J0 q& s  _
Dim movx As Variant     'x轴增量
, z( G1 w7 {1 ^& k) ^# ^0 |Dim movy As Variant     'y轴增量: T6 Y4 T/ v+ A* t) W$ c
Dim movz As Variant     'z轴增量
2 o3 O* m, |% k; P2 m- N: b5 V! w& aDim getobj As Object    '移动对象
, m% P1 @$ c8 T, GDim movtimes As Integer '移动次数* D# y4 u; v. }
ThisDrawing.Utility.GetEntity getobj, po, "请选择移动对象"' U5 F3 w1 X" O1 z9 D2 [! v
p0(2) = ThisDrawing.Utility.GetPoint(, "起点:")2 C% k3 n! t& L* C
p1(2) = ThisDrawing.Utility.GetPoint(p0, "终点:")$ s- G% ]3 V5 w1 Y
pe(2) = p0(2)& F5 Y( \2 |4 n1 ~
pc(2) = p0(2)& \. Z& e* w; E* Q' A9 [1 B
movtimes = 30
5 e3 z1 E# h! B0 ]( W+ B4 q: pmovx = (p1(0) - p0(0)) / movtimes
, |$ t* Y$ R) y: |2 @5 v3 A2 Rmovy = (p1(1) - p0(1)) / movtimes3 ]! y; Z' q% a. b. {2 u6 W
movz = (p1(2) - p0(2)) / movtimes& _* M+ d7 h' r$ f, x$ D& ~5 R
For i = 1 To movtimes
0 C' H; j+ L# \" d3 N( U4 N  pe(0) = pc(0) + movx% e3 `& X- b- ]% \  O
  pe(1) = pc(1) + movy
) b7 [5 e6 D& x- L8 n0 w& Z& `+ l0 E  pe(2) = pc(2) + movz  ?* r' p( v3 x  f* D- O
  getobj.move pc, pe    '移动一段
4 Z+ M3 T9 p( c0 _9 L# h  getobj.Update         '更新对象
# T1 O3 }' j  v- _8 ?; }2 ]Next- S1 j2 Q, x( T" R9 T
End Sub
  H: t8 J2 N/ N1 z* M1 `% B: Q- P& B# e1 q4 w, |

5 W$ X5 [, ~% X3 S# r/ Q1 p程序编译执行都没有错误,但是在选择完移动对象,选择起点的时候就报错(如图). x% [! y" ?4 y& Q% e5 D6 q

( o' Q2 d4 v# ^( a[ 本帖最后由 jasmine126 于 2008-10-31 15:17 编辑 ]
error.JPG
发表于 2008-10-31 13:47:11 | 显示全部楼层 来自: 中国辽宁营口
简单改写了你的程序,自己对照一下都有哪些部分不一样5 Z3 D7 E2 B. X8 E0 D
  1. Sub Move()* d+ v: h/ T0 j8 |  T7 d& I8 I
  2.     Dim P0 As Variant       '起点坐标+ E, u! G+ q' j' C
  3.     Dim P1 As Variant       '终点坐标' v! u" W  K2 B+ I9 v# S7 C# d
  4.     Dim Pc(2) As Double     '移动时基点坐标
    ) x6 }0 V: @8 A8 r6 ^. N4 X
  5.     Dim Pe(2) As Double     '移动时第二点坐标7 \& F! X' {. A8 T5 [: ]
  6.     Dim MovX As Double      'x轴增量
    + @6 p& S% H- S$ ?
  7.     Dim MovY As Double      'y轴增量( ^. [3 X# D$ g0 T! W, a$ C, {' i
  8.     Dim MovZ As Double      'z轴增量* m5 n4 I* V2 r5 @6 ~, N6 ?
  9.     Dim GetObj As Object    '移动对象, p2 @% y- C- \# S) ^2 [
  10.     Dim MovTimes As Integer '移动次数
    3 a8 A4 Q7 w8 k( M$ h: H; L8 i
  11.     ThisDrawing.Utility.GetEntity GetObj, P0, "请选择移动对象"; `- Q( h6 F3 A+ ?7 ?0 g
  12.     P0 = ThisDrawing.Utility.GetPoint(, "起点:" ) + ^: Z2 @2 H9 V  Z4 l
  13.     P1 = ThisDrawing.Utility.GetPoint(P0, "终点:" )6 T% m) c( c1 h4 c& e' o
  14.     MovTimes = 30) b$ x9 Y& v2 Y/ B# X
  15.     MovX = (P1(0) - P0(0)) / MovTimes
    ' S, u& g5 `' [1 ^" X3 y
  16.     MovY = (P1(1) - P0(1)) / MovTimes
    ; l/ u, [& j5 l/ C8 n) t" n, M
  17.     MovZ = (P1(2) - P0(2)) / MovTimes6 I4 z, s1 n: {% T5 ?# D" ?3 B
  18.     Pe(0) = Pc(0) + MovX
    & y' ~9 M* L. \" N( O8 t0 {
  19.     Pe(1) = Pc(1) + MovY
    0 b0 w. b7 q' b, g8 X; j# x; T
  20.     Pe(2) = Pc(2) + MovZ6 v! i% |$ E2 y( u9 P
  21.     For I = 1 To MovTimes
    $ T& `6 @; @3 e* O3 y
  22.       GetObj.Move Pc, Pe    '移动一段$ j) y8 L' e4 X; ~8 T$ g  ~( o% T
  23.       GetObj.Update         '更新对象
    ; s% b8 Z( [1 M9 _/ g
  24.     Next2 [  \, R; W& M4 V, l: f
  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 )

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