private List <PlaneHelper> GetPlaneHelpers([NotNull] IFeature feature)
        {
            const bool            includeAssociatedParts = true;
            SegmentsPlaneProvider planeProvider          =
                SegmentsPlaneProvider.Create(feature, includeAssociatedParts);

            var indexedMultiPatch = (IIndexedMultiPatch)planeProvider.IndexedSegments;

            var result = new List <PlaneHelper>();

            SegmentsPlane segmentsPlane;

            while ((segmentsPlane = planeProvider.ReadPlane()) != null)
            {
                result.Add(PlaneHelper.Create(segmentsPlane, indexedMultiPatch, this));
            }

            return(result);
        }
        private static IEnumerable <Either <NonPlanarError, SegmentsPlane> > GetPlanarRings(
            [NotNull] IFeature planarFeature, double coplanarityTolerance)
        {
            SegmentsPlaneProvider provider =
                SegmentsPlaneProvider.Create(planarFeature, false);

            SegmentsPlane segPlane;

            while ((segPlane = provider.ReadPlane()) != null)
            {
                // check for co-planarity
                double maximumOffset;
                yield return(IsCoplanar(segPlane, planarFeature, coplanarityTolerance,
                                        out maximumOffset)
                                                     ? new Either <NonPlanarError, SegmentsPlane>(segPlane)
                                                     : new NonPlanarError("Coplanarity tolerance is exceeded",
                                                                          maximumOffset, segPlane));
            }
        }
示例#3
0
 private SegmentsPlaneProvider GetPlaneProvider([NotNull] IFeature feature)
 {
     return(SegmentsPlaneProvider.Create(feature, _shapeType,
                                         _includeAssociatedParts));
 }