public PointFeaturePointEnumerator([NotNull] IFeature feature) : base(feature) { var point = (IPoint)feature.Shape; _point = QaGeometryUtils.CreatePoint3D(point); }
public override IEnumerable <Pnt> GetPoints() { foreach (WKSPointZ wksPoint in _wksPoints) { yield return(QaGeometryUtils.CreatePoint3D(wksPoint)); } }
public override IEnumerable <Pnt> GetPoints(IBox searchBox) { foreach (WKSPointZ wksPoint in _wksPoints) { Pnt point = QaGeometryUtils.CreatePoint3D(wksPoint); if (searchBox.Contains((IPnt)point)) { yield return(point); } } }
private static double GetDistanceToVertices([NotNull] IPoint point, [NotNull] IFeature neighbourFeature, [NotNull] IPoint nearestPoint, double maxNeededDistance) { double minDistance2 = double.MaxValue; SegmentProxy nearestSegment = null; var isEndNearest = false; Pnt qaPoint = QaGeometryUtils.CreatePoint3D(point); IEnumerable <SegmentProxy> segments = EnumSegments(qaPoint, neighbourFeature, maxNeededDistance); foreach (SegmentProxy segment in segments) { if (GetNearest(qaPoint, segment.GetStart(false), ref minDistance2)) { nearestSegment = segment; isEndNearest = false; } if (GetNearest(qaPoint, segment.GetEnd(false), ref minDistance2)) { nearestSegment = segment; isEndNearest = true; } } double minDistance; if (nearestSegment != null) { minDistance = Math.Sqrt(minDistance2); if (minDistance <= maxNeededDistance) { Pnt nearest = !isEndNearest ? nearestSegment.GetStart(true) : nearestSegment.GetEnd(true); nearestPoint.PutCoords(nearest.X, nearest.Y); nearestPoint.Z = nearest[2]; } } else { minDistance = double.MaxValue; } return(minDistance); }
private void ValidateTri(List <WKSPointZ> wksPointZs, bool isDefined) { List <Pnt> points = wksPointZs.Select(wksPointZ => QaGeometryUtils.CreatePoint3D(wksPointZ)).ToList(); var pointsWithoutEndPoint = new List <Pnt>(points); pointsWithoutEndPoint.RemoveAt(points.Count - 1); Plane plane = QaGeometryUtils.CreatePlane(pointsWithoutEndPoint); Assert.True(plane.IsDefined == isDefined); }
public override IEnumerable <Proximity> GetProximities(Pnt point, bool as3D, IBox box) { foreach (WKSPointZ wksPoint in _wksPoints) { Pnt part = QaGeometryUtils.CreatePoint3D(wksPoint); if (box.Contains((IPnt)part)) { yield return(new PointProximity(point, as3D, part)); } } }
public void CanCalculateVerticalProjectedAreaDiagonalXY() { var wksPointZs = new List <WKSPointZ> { new WKSPointZ { X = 0, Y = 0, Z = 0 }, new WKSPointZ { X = 10, Y = 10, Z = 0 }, new WKSPointZ { X = 10, Y = 10, Z = 10 }, new WKSPointZ { X = 0, Y = 0, Z = 10 }, new WKSPointZ { X = 0, Y = 0, Z = 0 } }; List <Pnt> points = wksPointZs.Select(wksPointZ => QaGeometryUtils.CreatePoint3D(wksPointZ)).ToList(); var pointsWithoutEndPoint = new List <Pnt>(points); pointsWithoutEndPoint.RemoveAt(points.Count - 1); Plane plane = QaGeometryUtils.CreatePlane(pointsWithoutEndPoint); double area; double perimeter; QaGeometryUtils.CalculateProjectedArea(plane, points, out area, out perimeter); Console.WriteLine(@"area: {0} perimeter: {1}", area, perimeter); const double e = 0.0000001; Assert.AreEqual(141.421356237309, Math.Abs(area), e); Assert.AreEqual(48.2842712474619, perimeter, e); }
public void CanCalculateVerticalProjectedAreaConstantX2() { // using coordinates from an actual building face (exactly north-south oriented) var wksPointZs = new List <WKSPointZ> { new WKSPointZ { X = 2722584.8725, Y = 1252311.12875, Z = 618.42624999999 }, new WKSPointZ { X = 2722584.8725, Y = 1252309.3725, Z = 619.654999999984 }, new WKSPointZ { X = 2722584.8725, Y = 1252304.75375, Z = 616.388749999984 }, new WKSPointZ { X = 2722584.8725, Y = 1252311.12875, Z = 618.42624999999 } }; List <Pnt> points = wksPointZs.Select(wksPointZ => QaGeometryUtils.CreatePoint3D(wksPointZ)).ToList(); var pointsWithoutEndPoint = new List <Pnt>(points); pointsWithoutEndPoint.RemoveAt(points.Count - 1); Plane plane = QaGeometryUtils.CreatePlane(pointsWithoutEndPoint); double area; double perimeter; QaGeometryUtils.CalculateProjectedArea(plane, points, out area, out perimeter); Console.WriteLine(@"area: {0} perimeter: {1}", area, perimeter); const double e = 0.000001; Assert.AreEqual(5.70582031258122, Math.Abs(area), e); Assert.AreEqual(14.4930667883504, perimeter, e); }
public void CanCalculateHorizontalProjectedArea() { var wksPointZs = new List <WKSPointZ> { new WKSPointZ { X = 0, Y = 0, Z = 0 }, new WKSPointZ { X = 10, Y = 0, Z = 0 }, new WKSPointZ { X = 10, Y = 10, Z = 0 }, new WKSPointZ { X = 0, Y = 10, Z = 0 }, new WKSPointZ { X = 0, Y = 0, Z = 0 } }; List <Pnt> points = wksPointZs.Select(wksPointZ => QaGeometryUtils.CreatePoint3D(wksPointZ)).ToList(); var pointsWithoutEndPoint = new List <Pnt>(points); pointsWithoutEndPoint.RemoveAt(points.Count - 1); Plane plane = QaGeometryUtils.CreatePlane(pointsWithoutEndPoint); double area; double perimeter; QaGeometryUtils.CalculateProjectedArea(plane, points, out area, out perimeter); Console.WriteLine(@"area: {0} perimeter: {1}", area, perimeter); Assert.AreEqual(100, Math.Abs(area)); Assert.AreEqual(40, perimeter); }
public PointNearFeatureCoincidence([NotNull] IFeature feature, [NotNull] IPoint point) : base(feature) { _point = QaGeometryUtils.CreatePoint3D(point); }