找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

楼主: xxCAD

[求助]:关于将图形放大的编程问题

[复制链接]
发表于 2002-11-15 18:01:13 | 显示全部楼层
VBA下可利用TransformBy方法可实现复杂的图形变换


Sub Ch4_TransformBy()
' 创建一直线
Dim lineObj As AcadLine
Dim startPt(0 To 2) As Double
Dim endPt(0 To 2) As Double
startPt(0) = 2
startPt(1) = 1
startPt(2) = 0
endPt(0) = 5
endPt(1) = 1
endPt(2) = 0
Set lineObj = ThisDrawing.ModelSpace. _
AddLine(startPt, endPt)
ZoomAll

' 初始化transMat转换矩阵的变量,
'以使其围绕点(0,0,0)并按90度旋转对象。
Dim transMat(0 To 3, 0 To 3) As Double
transMat(0, 0) = 0#: transMat(0, 1) = -1#  transMat(0, 2) = 0#: transMat(0, 3) = 0#
transMat(1, 0) = 1#: transMat(1, 1) = 0#   transMat(1, 2) = 0#: transMat(1, 3) = 0#
transMat(2, 0) = 0#: transMat(2, 1) = 0#   transMat(2, 2) = 1#: transMat(2, 3) = 0#
transMat(3, 0) = 0#: transMat(3, 1) = 0#   transMat(3, 2) = 0#: transMat(3, 3) = 1#

'使用定义了的转换矩阵转换直线
lineObj.TransformBy transMat
lineObj.Update
End Sub


矩阵结构(以平面为例),为齐次坐标表示,其结构及含义如下

r00 r01 0 T0
R10 R11 0 T1
R20 R21 1 0
0   0   0  s
以平面为例:其中
T0 ,X向平移量,T1 ,y向平移量,
比如要将一物X向移动5,Y向  移动10,则矩阵结构为
  1 0 0 5
  0 1 0 10
  0 0 1 0
  0 0 0 1
r00,r01,r10,r11,表示旋转
r00=cos (a),r01=-sin(a),r10=sin(a),r11=cos(a),A是逆时针转角

绕(100,200)转90度,(45度线对称)则矩阵结构 为
  0 1 0 100
  1 0 0 200
  0 0 1 0
  0 0 0 1
Y轴对称,则矩阵结构 (180度)
  0 1  0 0
  0 -1 0 0
  0 0  1 0
  0 0  0 1
x 向放大2,Y向放大5
  2 0 0 0
  0 5 0 0
  0 0 1 0
  0 0 0 1
以次类推!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-11-15 18:09:34 | 显示全部楼层
最初由 fjw_ok 发布
[B]VBA下可利用TransformBy方法可实现复杂的图形变换


Sub Ch4_TransformBy()
' 创建一直线
Dim lineObj As AcadLine
Dim startPt(0 To 2) As Double
Dim endPt(0 To 2) As Double
startPt(0) = 2
startPt(1)... [/B]


jw,VBA里面有直接构造转换矩阵的方法吗?就是矩阵的常用的一些操作?旋转矩阵、平移矩阵、镜像矩阵、投影矩阵等?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-11-15 18:12:12 | 显示全部楼层
这个没发现,不过如果先定义了几个矩阵就好办了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 181个

财富等级: 日进斗金

发表于 2002-11-15 18:22:27 | 显示全部楼层
在VBA中旋转用Rotate,平移用Move,镜向用Mirror,这些方法比用矩阵简单明了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-11-15 18:31:35 | 显示全部楼层
最初由 efan2000 发布
[B]在VBA中旋转用Rotate,平移用Move,镜向用Mirror,这些方法比用矩阵简单明了。 [/B]


那VBA里面,对这些编辑符合的运算方法呢?任意的变换,最后用一次transFormby的方法?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-11-17 10:14:17 | 显示全部楼层
最初由 XDSoft 发布
[B]

那VBA里面,对这些编辑符合的运算方法呢?任意的变换,最后用一次transFormb... [/B]

只COPY ,ROTATION,当然简单
但要复杂的变换就是TransformBy
有优势了,只要定义了矩阵,就可以随便
变了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-9-28 17:35 , Processed in 0.189465 second(s), 34 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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