乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 245|回复: 9

在VBA中怎样获取当前图形的左下角和右上角坐标,如图所示

[复制链接]

3

主题

24

帖子

3

银币

初来乍到

Rank: 1

铜币
36
发表于 2019-7-4 06:35:00 | 显示全部楼层 |阅读模式

c4ddin42ptl.png

c4ddin42ptl.png


如图所示,两个红圈圈内坐标是这张图的左上角和右下角坐标,VBA中有什么函数能直接获取到吗?总不至于一个个对象的遍历,然后比较坐标吧,如果图内对象很多的话,将会很费时间。
VBA用zoomextents方法可以直接按范围显示,所以应该有办法获取到范围的左下角和右上角坐标的啊,请大家帮帮忙,谢谢了。
回复

使用道具 举报

85

主题

1175

帖子

11

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1518
发表于 2019-7-4 09:27:00 | 显示全部楼层
就是遍历。不要想当然认为ACAD能做的事VBA就都支持。
另外从你例图上来看,并不是整张图的边界点,只是其中部分图元的边界点。就算有你期待的功能,你也用不上。
回复

使用道具 举报

3

主题

24

帖子

3

银币

初来乍到

Rank: 1

铜币
36
发表于 2019-7-4 18:50:00 | 显示全部楼层

是有点想当然了,哎。图内容很多的话,遍历就有点蛋疼了
回复

使用道具 举报

85

主题

1175

帖子

11

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1518
发表于 2019-7-5 09:57:00 | 显示全部楼层

有啥蛋疼的,又不要你一个个去数,一个遍历就得了。
回复

使用道具 举报

23

主题

561

帖子

13

银币

中流砥柱

Rank: 25

铜币
653
发表于 2019-7-5 10:25:00 | 显示全部楼层
"当前图形的左下角和右上角坐标"有何特征,如有,或许可以缩小搜索范围
回复

使用道具 举报

3

主题

24

帖子

3

银币

初来乍到

Rank: 1

铜币
36
发表于 2019-7-6 08:31:00 | 显示全部楼层

如果图纸内容很多的话,一个个遍历会很费时间,有可能导致软件卡死几秒种
回复

使用道具 举报

3

主题

24

帖子

3

银币

初来乍到

Rank: 1

铜币
36
发表于 2019-7-6 08:32:00 | 显示全部楼层

我刚刚找了一篇别人的原代码,算是找到了,
ThisDrawing.GetVariable("EXTMAX")
ThisDrawing.GetVariable("EXTMIN")
回复

使用道具 举报

3

主题

24

帖子

3

银币

初来乍到

Rank: 1

铜币
36
发表于 2019-7-6 08:34:00 | 显示全部楼层

ThisDrawing.GetVariable("EXTMAX")
ThisDrawing.GetVariable("EXTMIN")
刚刚阅读了别人的一段原代码找到了。
回复

使用道具 举报

85

主题

1175

帖子

11

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1518
发表于 2019-7-6 13:25:00 | 显示全部楼层

以前不知道这两个变量,学习了。谢谢。
经过测试,发现有些问题。比如先画一个100X200的框,取值是100,200(可能有小数点后数值),没问题。再在100,200处画一个半径20的圆,取值是120,220,没问题。删除圆,应该回到100,200,但是并没有,依旧是120,220。最后再手工执行下zoom E,取值才回到100,200。感觉是ACAD只在范围扩大或者Zoom E重置时候才更新此变量,变小或者删除时候不更新。换句话说,此数值可能偏大。
再回到楼主原始问题,只是部分图元的范围,还是得遍历判断满足自己需要的图元才能获得准确的数值,这两个变量还是没用。
回复

使用道具 举报

3

主题

24

帖子

3

银币

初来乍到

Rank: 1

铜币
36
发表于 2019-7-9 05:03:00 | 显示全部楼层

CAD帮助文档中对于EXTMAX的定义:
类型:三维点
保存位置:图形
存储图形范围右上角点的值。如果有新的对象绘制到界限之外,则仅当使用 ZOOM 命令的“全部”或“范围”选项时,对象才会收缩至新范围内。本系统变量的值表示为当前空间中的世界坐标值。
所以获取这两个变量之前,应该是先ZOOMEXTENTS或ZOOMALL一下,才能获取更新后的数值。就像获取打印机信息之前需要用object.RefreshPlotDeviceInfo更新打印机、规范介质和打印样式表信息一样。是要跟其他命令配合使用的。
Dim eMax As Variant
Dim eMin As Variant
ThisDrawing.Application.ZoomAll
eMax = ThisDrawing.GetVariable("EXTMAX")
eMin = ThisDrawing.GetVariable("EXTMIN")
MsgBox Format(eMin(0), "0.00") & "," & Format(eMin(1), "0.00")
MsgBox Format(eMax(0), "0.00") & "," & Format(eMax(1), "0.00")
这样可以正确获取到我想要的坐标了。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2024-11-22 01:09 , Processed in 0.239937 second(s), 75 queries .

© 2020-2024 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表