检测折线区域、位置或形状的变化
Detecting changes on Polyline area, position or shape
我正在尝试修改任何折线 XData 当且仅当它的位置、面积或形状(顶点的变化)是变了。
在 AutoCAD 中执行此操作的可能方法有哪些?
在此先感谢您的帮助
当您使用 XData 时,一些 DXF codes are transformed with their owner。您可以使用代码:ExtendedDataWorldXCoordinate
(1011)、ExtendedDataWorldXDisp
(1012)、ExtendedDataWorldXDir
(1013)、ExtendedDataDist
(1041) 和 ExtendedDataScale
(1042) .
但是,对于您的情况,我将使用 Database.ObjectModified
或 DBObject.Modified
事件。您可以使用 this approach 查找哪些属性已被修改。
为了获得良好的性能,您应该使用 ObjectOverrule
,您将覆盖 Open
方法,保存多段线的状态(如果它是为写入打开的)并将其与在 Close
方法中找到的状态。然后,为了安全起见,您可以在 CommandEnded
事件处理程序中更改 XData。
您还可以使用 DBObject.OpenedForModify
和 DBObject.ObjectClosed
事件。
事实上,有很多方法可以做到这一点,但ObjectOverrule
似乎是最好的选择,因为你可以在XData上设置一个过滤器。当您覆盖 Close
方法时,您可以直接访问对象及其状态,而在 DBObject.ObjectClosed
事件中,您只有 Id。
Kean 有一系列关于此的帖子。他正在处理 OnCommandEnded 事件以查看一系列圆圈是否有变化 position/size.
看这里:http://through-the-interface.typepad.com/through_the_interface/2006/11/linking_circles.html
我正在尝试修改任何折线 XData 当且仅当它的位置、面积或形状(顶点的变化)是变了。
在 AutoCAD 中执行此操作的可能方法有哪些?
在此先感谢您的帮助
当您使用 XData 时,一些 DXF codes are transformed with their owner。您可以使用代码:ExtendedDataWorldXCoordinate
(1011)、ExtendedDataWorldXDisp
(1012)、ExtendedDataWorldXDir
(1013)、ExtendedDataDist
(1041) 和 ExtendedDataScale
(1042) .
但是,对于您的情况,我将使用 Database.ObjectModified
或 DBObject.Modified
事件。您可以使用 this approach 查找哪些属性已被修改。
为了获得良好的性能,您应该使用 ObjectOverrule
,您将覆盖 Open
方法,保存多段线的状态(如果它是为写入打开的)并将其与在 Close
方法中找到的状态。然后,为了安全起见,您可以在 CommandEnded
事件处理程序中更改 XData。
您还可以使用 DBObject.OpenedForModify
和 DBObject.ObjectClosed
事件。
事实上,有很多方法可以做到这一点,但ObjectOverrule
似乎是最好的选择,因为你可以在XData上设置一个过滤器。当您覆盖 Close
方法时,您可以直接访问对象及其状态,而在 DBObject.ObjectClosed
事件中,您只有 Id。
Kean 有一系列关于此的帖子。他正在处理 OnCommandEnded 事件以查看一系列圆圈是否有变化 position/size.
看这里:http://through-the-interface.typepad.com/through_the_interface/2006/11/linking_circles.html