我希望复制AutoCAD BOUNDARY命令提供的功能。给定图形中的2D点,我需要找到围绕该点的所有最近的线段。
此图像描绘了一条线条和位于线条内的点(蓝色方块)。 before boundary command
使用该点运行autocad boundary命令后,此图像描绘了具有所需输出的相同图形。 after boundary command
autocad boundary命令找到了点周围最近的线并突出显示它们。我一直在尝试在C#中实现相同的结果,而不依赖于autocad编辑器命令。我唯一的想法是某种泛洪填充算法,但这似乎非常低效,并且对于不应该解决的难题本身而言非常冗长。
我非常感谢能够指出正确方向的任何建议或伪代码。
谢谢
答案 0 :(得分:1)
您可以使用Editor.TraceBoundary()方法。
public unsafe DBObjectCollection TraceBoundary(Point3d seedPoint, bool detectIslands)
答案 1 :(得分:0)
您尚未描述细分如何组织。
从水平方向的给定点构建光线,找到第一个相交的线段。获取该段的上端并按顺时针顺序确定第一个相邻段。继续该段的第二端,依此类推,直到再次遇到第一段。
答案 2 :(得分:0)
边界命令正在做的是在闭合多边形内找到一个2d点。有许多算法涵盖了这个(see here)。 但是,因为您说您的线路未分组,您必须将其分为两个步骤。 第一步是检测线是否是多边形的一部分,并将所有这些多边形存储在数据中。接下来是找到属于多边形形状的最近线。一旦发现您找到了解决方案。 为了找到一个点的近岸线段,一个简单的搜索将获得很多结果。
祝你好运