在VBA中怎样获取当前图形的左下角和右上角坐标,如图所示
本帖最后由 风言无际 于 2019-7-4 06:39 编辑如图所示,两个红圈圈内坐标是这张图的左上角和右下角坐标,VBA中有什么函数能直接获取到吗?总不至于一个个对象的遍历,然后比较坐标吧,如果图内对象很多的话,将会很费时间。
VBA用zoomextents方法可以直接按范围显示,所以应该有办法获取到范围的左下角和右上角坐标的啊,请大家帮帮忙,谢谢了。
就是遍历。不要想当然认为ACAD能做的事VBA就都支持。
另外从你例图上来看,并不是整张图的边界点,只是其中部分图元的边界点。就算有你期待的功能,你也用不上。 mikewolf2k 发表于 2019-7-4 09:27
就是遍历。不要想当然认为ACAD能做的事VBA就都支持。
另外从你例图上来看,并不是整张图的边界点,只是其 ...
是有点想当然了,哎。图内容很多的话,遍历就有点蛋疼了 风言无际 发表于 2019-7-4 18:50
是有点想当然了,哎。图内容很多的话,遍历就有点蛋疼了
有啥蛋疼的,又不要你一个个去数,一个遍历就得了。 "当前图形的左下角和右上角坐标"有何特征,如有,或许可以缩小搜索范围
mikewolf2k 发表于 2019-7-5 09:57
有啥蛋疼的,又不要你一个个去数,一个遍历就得了。
如果图纸内容很多的话,一个个遍历会很费时间,有可能导致软件卡死几秒种 mikewolf2k 发表于 2019-7-4 09:27
就是遍历。不要想当然认为ACAD能做的事VBA就都支持。
另外从你例图上来看,并不是整张图的边界点,只是其 ...
我刚刚找了一篇别人的原代码,算是找到了,
ThisDrawing.GetVariable("EXTMAX")
ThisDrawing.GetVariable("EXTMIN") mikewolf2k 发表于 2019-7-4 09:27
就是遍历。不要想当然认为ACAD能做的事VBA就都支持。
另外从你例图上来看,并不是整张图的边界点,只是其 ...
ThisDrawing.GetVariable("EXTMAX")
ThisDrawing.GetVariable("EXTMIN")
刚刚阅读了别人的一段原代码找到了。 风言无际 发表于 2019-7-6 08:34
ThisDrawing.GetVariable("EXTMAX")
ThisDrawing.GetVariable("EXTMIN")
刚刚阅读了别人的一段原代码找 ...
以前不知道这两个变量,学习了。谢谢。
经过测试,发现有些问题。比如先画一个100X200的框,取值是100,200(可能有小数点后数值),没问题。再在100,200处画一个半径20的圆,取值是120,220,没问题。删除圆,应该回到100,200,但是并没有,依旧是120,220。最后再手工执行下zoom E,取值才回到100,200。感觉是ACAD只在范围扩大或者Zoom E重置时候才更新此变量,变小或者删除时候不更新。换句话说,此数值可能偏大。
再回到楼主原始问题,只是部分图元的范围,还是得遍历判断满足自己需要的图元才能获得准确的数值,这两个变量还是没用。 本帖最后由 风言无际 于 2019-7-9 05:21 编辑
mikewolf2k 发表于 2019-7-6 13:25
以前不知道这两个变量,学习了。谢谢。
经过测试,发现有些问题。比如先画一个100X200的框,取值是100, ...
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")
这样可以正确获取到我想要的坐标了。
页:
[1]