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(); }
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; } }
public SurfaceSegmentsPlaneProvider( [NotNull] IIndexedMultiPatch indexedMultiPatch) : base(indexedMultiPatch) { _indexedMultiPatch = indexedMultiPatch; _segmentsEnum = _indexedMultiPatch.GetSegments().GetEnumerator(); _enumValid = _segmentsEnum.MoveNext(); }
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); }
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())); }