예제 #1
0
        /// <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);
        }
예제 #2
0
        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);
            }
        }