public TopoPolyline(ContourPolyline polyline) { this.ArcID = polyline.PID; Innerid = _ArcID++; MiddlePoint = new List <TopoPoint>(); MBR = new MinBoundRect(); if (polyline.PointList.Count >= 2) { TopoPoint startPoint = new TopoPoint(polyline.PointList.First(), true); startPoint.TopologyArcs.Add(this); this.BeginNode = startPoint; TopoPoint endPoint = new TopoPoint(polyline.PointList.Last(), true); endPoint.TopologyArcs.Add(this); this.EndNode = endPoint; MBR.UpdateRect(startPoint.X, startPoint.Y); MBR.UpdateRect(endPoint.X, endPoint.Y); for (int i = 1; i < polyline.PointList.Count - 1; i++) { if (polyline.PointList[i].OID != startPoint.PointID && polyline.PointList[i].OID != EndNode.PointID) { TopoPoint midPoint = new TopoPoint(polyline.PointList[i], false); MiddlePoint.Add(midPoint); midPoint.TopologyArcs.Add(this); } MBR.UpdateRect(polyline.PointList[i].X, polyline.PointList[i].Y); } } }
public TopoPolyline(Edge edge) { this.ArcID = edge.EID; MiddlePoint = new List <TopoPoint>(); MBR = new MinBoundRect(); TopoPoint startPoint = new TopoPoint(edge.StartPoint, true); startPoint.TopologyArcs.Add(this); this.BeginNode = startPoint; TopoPoint endPoint = new TopoPoint(edge.EndPoint, true); endPoint.TopologyArcs.Add(this); this.EndNode = endPoint; MBR.UpdateRect(startPoint.X, startPoint.Y); MBR.UpdateRect(endPoint.X, endPoint.Y); }
public PointSet(string setname, string filename, DataPoint[] points) { this.SetName = setname; this.FileName = filename; this.PointList = new List <DataPoint>(points); //最小外接矩形 MBR = new MinBoundRect(); foreach (DataPoint point in points) { MBR.UpdateRect(point.X, point.Y); } }
public TopoPolygon(TopoPolyline[] lines) { OuterPolygon = null; MBR = new MinBoundRect(); TopologyArcs = new List <TopoPolyline>(); InnerPolygons = new List <TopoPolygon>(); this.TopologyArcs.AddRange(lines); List <int> ArcIDList = new List <int>(); foreach (var arc in lines) { ArcIDList.Add(arc.ArcID); MBR.UpdateRect(arc.MBR); } ArcIDList.Sort(); int hasgCode = 1; foreach (var arcid in ArcIDList) { hasgCode *= arcid; } this.PID = hasgCode.GetHashCode(); innerId = _polygonID++; }