Ejemplo n.º 1
0
            protected override bool GetNextSliverArea(out double area, out double perimeter)
            {
                _latestPartSegments = null;
                if (!_enumValid)
                {
                    area      = double.NaN;
                    perimeter = double.NaN;
                    return(false);
                }

                SegmentProxy segment = Assert.NotNull(_segmentsEnum.Current);

                int currentPart  = segment.PartIndex;
                int segmentCount = _indexedMultiPatch.GetPartSegmentCount(currentPart);
                var partSegments = new List <SegmentProxy>(segmentCount)
                {
                    segment
                };

                while ((_enumValid = _segmentsEnum.MoveNext()) &&
                       Assert.NotNull(_segmentsEnum.Current).PartIndex == currentPart)
                {
                    partSegments.Add(_segmentsEnum.Current);
                }

                List <Pnt> planePoints = QaGeometryUtils.GetPoints(partSegments);
                Plane      plane       = QaGeometryUtils.CreatePlane((IEnumerable <SegmentProxy>)partSegments);

                QaGeometryUtils.CalculateProjectedArea(plane, planePoints, out area, out perimeter);

                _latestPartSegments = partSegments;

                return(true);
            }
Ejemplo n.º 2
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);
        }
Ejemplo n.º 3
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);
        }
Ejemplo n.º 4
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);
        }