/// <summary> /// Initializes a new instance of the <see cref="AoSegmentProxy"/> class. /// </summary> /// <param name="segment">The segment (must be a copy, i.e. not straight from a recycling segment enumerator).</param> /// <param name="partIndex">Index of the part.</param> /// <param name="segmentIndex">Index of the segment.</param> public AoSegmentProxy([NotNull] ISegment segment, int partIndex, int segmentIndex) : base(partIndex, segmentIndex) { Assert.ArgumentNotNull(segment, nameof(segment)); InnerSegment = segment; _extent = QaGeometryUtils.CreateBox(segment); }
public IndexedPolycurve([NotNull] IPointCollection4 baseGeometry) { Assert.ArgumentNotNull(baseGeometry, nameof(baseGeometry)); const bool @dynamic = true; const int dimension = 2; const int maxElementCountPerTile = 4; // was: 64; _boxTree = new BoxTree <SegmentProxy>(dimension, maxElementCountPerTile, @dynamic); var geometry = (IGeometry)baseGeometry; _envelope = geometry.Envelope; double tolerance = GeometryUtils.GetXyTolerance(geometry); Box extent = QaGeometryUtils.CreateBox(_envelope); Expand(extent, tolerance); _boxTree.InitSize(new IGmtry[] { extent }); var geometryCollection = baseGeometry as IGeometryCollection; if (geometryCollection != null) { int partCount = geometryCollection.GeometryCount; if (partCount > 1) { // unpack and add individual parts _partProxies = new List <PartProxy>(partCount); for (int partIndex = 0; partIndex < partCount; partIndex++) { var part = (IPointCollection4)geometryCollection.Geometry[partIndex]; var partProxy = new PartProxy(_boxTree, partIndex, part); _partProxies.Add(partProxy); Marshal.ReleaseComObject(part); } } else { // single part in collection _partProxies = AddSinglePartProxy(baseGeometry); } } else { // no geometry collection _partProxies = AddSinglePartProxy(baseGeometry); } }