コード例 #1
0
            private IGeometry GetGeometry(int partIndex)
            {
                IGeometry geometry;

                if (!_perPart)
                {
                    geometry = GeometryFactory.Clone(_baseGeometry);
                }
                else if (_baseGeometry is ICurve)
                {
                    var geometryCollection = _baseGeometry as IGeometryCollection;
                    if (geometryCollection == null || geometryCollection.GeometryCount == 1)
                    {
                        geometry = GetErrorGeometry((ICurve)_baseGeometry);
                    }
                    else
                    {
                        var curve = (ICurve)geometryCollection.get_Geometry(partIndex);
                        geometry = GetErrorGeometry(curve);
                    }

                    return(geometry);
                }
                else
                {
                    IGeometryCollection geometryCollection;
                    if (_baseGeometry.GeometryType == esriGeometryType.esriGeometryPolygon)
                    {
                        geometryCollection = QaGeometryUtils.CreatePolygon(_baseGeometry);
                    }
                    else if (_baseGeometry.GeometryType == esriGeometryType.esriGeometryPolyline)
                    {
                        geometryCollection = QaGeometryUtils.CreatePolyline(_baseGeometry);
                    }
                    else if (_baseGeometry.GeometryType == esriGeometryType.esriGeometryMultiPatch)
                    {
                        geometryCollection = new MultiPatchClass();
                    }
                    else
                    {
                        throw new InvalidOperationException("unhandled geometry type " +
                                                            _baseGeometry.GeometryType);
                    }

                    int segmentCount = _indexedSegments.GetPartSegmentCount(partIndex);
                    var partSegments = new List <SegmentProxy>(segmentCount);
                    for (int iSegment = 0; iSegment < segmentCount; iSegment++)
                    {
                        partSegments.Add(_indexedSegments.GetSegment(partIndex, iSegment));
                    }

                    SegmentUtils.CreateGeometry(geometryCollection, partSegments);
                    geometry = (IGeometry)geometryCollection;
                }

                return(geometry);
            }