autogis 发表于 2019-2-20 10:06:05

正确闭合折线

嗨,伙计们,感谢您抽出宝贵时间阅读这篇文章。 我的问题是:正确关闭折线的正确程序是什么?
这是我用来关闭折线的线:
pline.Closed = true;
但是,如果我随后按如下方式查询折线:
private const double TOLERANCE = 0.001;
var t = new Tolerance(TOLERANCE, TOLERANCE);
using (var curve1 = pline.GetGeCurve(t))
            {
                using (var curve2 = pline.GetGeCurve(t))
                {
                  using (var curveInter = new CurveCurveIntersector3d
                   (
                  curve1, curve2, pline.Normal, t))
                  {
                        int interCount = curveInter.NumberOfIntersectionPoints;
                        int overlaps = curveInter.OverlapCount();
                        if (overlaps < pline.NumberOfVertices)
                        {
                            // WHY AM I GOING IN HERE?OVERLAPS=33, pline.NumberOfVertices = 34
                        }
                  }
                }
            }
我的结论是,当我以编程方式关闭折线时,重叠计数不会更新。(也应该是34)。任何想法如何正确关闭折线? 谢谢。
**** Hidden Message *****

Bryco 发表于 2019-2-20 11:29:25

闭合折线不会增加顶点的数量,仍然是相同的数量。虽然有时当最后一个线段有一个凸起时,cad会添加一个顶点,但这在编码时不会发生

autogis 发表于 2019-2-20 11:34:28


正确。但是重叠计数应该增加以匹配顶点的数量。请参阅我的示例代码。

n.yuan 发表于 2019-2-20 11:42:34

如果多段线的起点和终点不在同一点,设置Closed=true会将多段线从上一个终点延伸到起点。因此,折线将以相同的顶点数和线段数(顶点之间)结束。在这种情况下,我们说来自折线的多边形没有重复的顶点。这是等同于AutoCAD中GIS多边形的正确闭合多段线。
在您的代码中,显然折线的起点和终点位于同一位置。Closed=true简单地使折线闭合(即在起点和终点之间添加长度为0的线段)。作为程序员,你有责任决定是否允许重复的顶点,因为你想创建一个闭合的折线作为多边形;如果没有,你需要删除它。如果您使用过AutoCAD Map,您会知道它附带的绘图清理工具的一个功能是从闭合多段线中删除重复的顶点。
这种起点/终点都在同一位置的闭合多段线通常是导入GIS多边形的结果,其中导入过程不会将GID多边形正确转换为AutoCAD的闭合多段线,因为在GIS worked中,闭合多段线环(多段线)由第一个点和最后一个点相同的一系列点表示。
因此,在AutoCAD中,闭合多段线没有正确或不正确的方法。您的代码有责任设置Closed=True/False,并在必要时检测/处理重复的顶点。
页: [1]
查看完整版本: 正确闭合折线