[MSV8i VBA OR .NET ADDIN] 识别特殊图形标识的点或方向

两位老师好:

在一个cell单元中,我想识别出开口方向,Cell的相关属性如下:

细部区别如下,查找目标的开口类似于三角形,我想查找到目标后,沿圆的中心点到目标图形的中心轴线(中心点)连线(如右侧图形), 要实现这种判断,是否有相关思路,请老师指教。

  • 这个没有太好的思路,如果Cell单元的子元素都是固定的,那完全可以直接写死去画这条线,例如如果中心圆是Cell的第二个子元素,那可以直接获取Cell的第二个元素去得到圆心。

  • 我想您这个图形应该也是程序生成的,所以,一定有非常固定的规律的。分析一下每组5个的Linestring的情况,看看到底哪一个是你需要的这个“开口”,获取它的几何就能画出你期望的线了。如果自己分析不清楚,可提供该DGN供我们分析。



  • 感谢符老师,我目前有个思路正在尝试,我想通过圆(类型为linestring)上的端点构建最小包围圆,然后遍历原有圆(linestring)上所有点,与新构建的圆的中心点最近的点,为最大开口方向。我正在尝试这个思路,已提供dgn文件,请符老师帮忙看看思路是否可行。谢谢3333.dgn

  • 我想通过圆(类型为linestring)上的端点构建最小包围圆

    这一步不太容易做到吧?我想到了一个似乎更简易的方法:

    将最外这个Linestring构造成一个Shape(或Complex Shape),然后就能直接得到封闭图形的重心(Centroid)。严格来说这个重心不是100%准确的,因为四个方向的缺口大小不一。但不影响求出最大缺口。

    我先用Measure Area工具测试了一下,得到的重心如下图所示。从重心到四个缺口连线后很容易得到哪个是最大缺口。



  • 非常感谢符老师给的思路,经过测试在我原有图纸中利用sharp的重心与外圆(LineString)的所有顶点相连,找到最短的Length即为开口最大的开口方向。

    如下图所示,连线后指向大缺口方向:

    但是我在一套新图中发现了下面图形:如下图所示,每个缺口下都有个小圆,他们离重心的距离理论上是一样的,所以我之前求离重心最短距离的思路可能不适用,我现在的想法是延着符老师的思路,继续连接中心点和外圆上所有的点,然后求相临两条线的夹角,角度最大的两个点为要求的夹角在圆上的点,不确定此思路是否可以实现,或者符老师是否有更好的思路,不胜感激!新数据已上传:33330531.dgn