protected override IEnumerable <ParallelSegmentPair> GetParallelSegmentPairs()
            {
                int lastPartIndex = -1;
                var ringSegments  = new List <SegmentProxy>();

                foreach (SegmentProxy segment in _multiPatch.GetSegments())
                {
                    if (segment.PartIndex != lastPartIndex)
                    {
                        foreach (ParallelSegmentPair pair in GetParallelSegmentPairs(ringSegments))
                        {
                            yield return(pair);
                        }

                        ringSegments.Clear();
                        lastPartIndex = segment.PartIndex;
                    }

                    ringSegments.Add(segment);
                }

                foreach (ParallelSegmentPair pair in GetParallelSegmentPairs(ringSegments))
                {
                    yield return(pair);
                }
            }
 public MultiPatchPartsSliverAreaProvider(
     [NotNull] IIndexedMultiPatch indexedMultiPatch)
 {
     _indexedMultiPatch = indexedMultiPatch;
     _segmentsEnum      = _indexedMultiPatch.GetSegments().GetEnumerator();
     _enumValid         = _segmentsEnum.MoveNext();
 }
Exemple #3
0
        private static void ValidateForm([NotNull] IIndexedMultiPatch indexedMultiPatch,
                                         [NotNull] IEnumerable <WKSPointZ> projected)
        {
            var  pre      = new WKSPointZ();
            bool notFirst = false;
            IEnumerator <SegmentProxy> segments =
                indexedMultiPatch.GetSegments().GetEnumerator();

            foreach (WKSPointZ wksPoint in projected)
            {
                Assert.AreEqual(0, wksPoint.Z);

                if (notFirst)
                {
                    double dx     = wksPoint.X - pre.X;
                    double dy     = wksPoint.Y - pre.Y;
                    double length = Math.Sqrt(dx * dx + dy * dy);

                    Assert.IsTrue(segments.MoveNext());
                    Assert.IsNotNull(segments.Current);

                    const bool as3D          = true;
                    IPnt       start         = segments.Current.GetStart(as3D);
                    IPnt       end           = segments.Current.GetEnd(as3D);
                    double     segDx         = end.X - start.X;
                    double     segDy         = end.Y - start.Y;
                    double     segDz         = end[2] - start[2];
                    double     segmentLength = Math.Sqrt(segDx * segDx + segDy * segDy + segDz * segDz);
                    Assert.IsTrue(Math.Abs(segmentLength - length) < 1.0e-8);
                }

                pre      = wksPoint;
                notFirst = true;
            }
        }
Exemple #4
0
 public SurfaceSegmentsPlaneProvider(
     [NotNull] IIndexedMultiPatch indexedMultiPatch)
     : base(indexedMultiPatch)
 {
     _indexedMultiPatch = indexedMultiPatch;
     _segmentsEnum      = _indexedMultiPatch.GetSegments().GetEnumerator();
     _enumValid         = _segmentsEnum.MoveNext();
 }
Exemple #5
0
        public void IsPlaneVerticalTest()
        {
            var construction = new MultiPatchConstruction();

            construction.StartRing(0, 0, 0)
            .Add(5, 0, 0)
            .Add(5, 0, 5)
            .Add(0, 0, 5);
            IMultiPatch        multiPatch        = construction.MultiPatch;
            IIndexedMultiPatch indexedMultiPatch =
                QaGeometryUtils.CreateIndexedMultiPatch(multiPatch);

            Plane     plane  = QaGeometryUtils.CreatePlane(indexedMultiPatch.GetSegments());
            WKSPointZ normal = plane.GetNormalVector();

            Assert.AreEqual(0, normal.Z);
        }
Exemple #6
0
        public void CanProjectToPlaneTest()
        {
            var construction = new MultiPatchConstruction();

            construction.StartRing(0, 0, 0)
            .Add(5, 0, 0)
            .Add(5, 0, 5)
            .Add(0, 0, 5);
            IMultiPatch        multiPatch        = construction.MultiPatch;
            IIndexedMultiPatch indexedMultiPatch =
                QaGeometryUtils.CreateIndexedMultiPatch(multiPatch);

            IList <Pnt>       points    = QaGeometryUtils.GetPoints(indexedMultiPatch.GetSegments());
            Plane             plane     = QaGeometryUtils.CreatePlane(points);
            IList <WKSPointZ> projected = QaGeometryUtils.ProjectToPlane(plane, points);

            ValidateForm(indexedMultiPatch, projected);
        }
 protected override IEnumerable <ParallelSegmentPair> GetParallelSegmentPairs()
 {
     return(GetParallelSegmentPairs(_multiPatch.GetSegments()));
 }
 protected override IEnumerable <HeightSegmentPair> GetHeightSegmentPairs()
 {
     return(GetHeightSegmentPairs(_multiPatch.GetSegments()));
 }