Exemple #1
0
        public PointFeaturePointEnumerator([NotNull] IFeature feature)
            : base(feature)
        {
            var point = (IPoint)feature.Shape;

            _point = QaGeometryUtils.CreatePoint3D(point);
        }
Exemple #2
0
 public override IEnumerable <Pnt> GetPoints()
 {
     foreach (WKSPointZ wksPoint in _wksPoints)
     {
         yield return(QaGeometryUtils.CreatePoint3D(wksPoint));
     }
 }
Exemple #3
0
 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);
        }
Exemple #5
0
        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));
                    }
                }
            }
Exemple #7
0
        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);
        }
Exemple #8
0
        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);
        }
Exemple #9
0
        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);
 }