Beispiel #1
0
        public void Draw(IDisplay disp, IFeature feature)
        {
            if (feature?.Shape != null)
            {
                if (_aggregateGeometry == null)
                {
                    _aggregateGeometry = new AggregateGeometry();
                }

                _aggregateGeometry.AddGeometry(feature.Shape);
            }
        }
Beispiel #2
0
        private static void WriteGeometryCollection(IAggregateGeometry aGeometry, BinaryWriter writer, WkbByteOrder byteOrder)
        {
            WriteUInt32((uint)aGeometry.GeometryCount, writer, byteOrder);

            for (int i = 0; i < aGeometry.GeometryCount; i++)
            {
                IGeometry geometry = aGeometry[i];
                if (geometry == null)
                {
                    continue;
                }

                if (geometry is IPoint)
                {
                    writer.Write((uint)WKBGeometryType.wkbPoint);
                    WritePoint((IPoint)geometry, writer, byteOrder);
                }
                else if (geometry is IMultiPoint)
                {
                    writer.Write((uint)WKBGeometryType.wkbMultiPoint);
                    WriteMultiPoint((IMultiPoint)geometry, writer, byteOrder);
                }
                else if (geometry is IPolyline)
                {
                    writer.Write((uint)WKBGeometryType.wkbMultiLineString);
                    WriteMultiLineString((IPolyline)geometry, writer, byteOrder);
                }
                else if (geometry is IPolygon)
                {
                    writer.Write((uint)WKBGeometryType.wkbMultiPolygon);
                    WriteMultiPolygon((IPolygon)geometry, writer, byteOrder);
                }
                else if (geometry is IAggregateGeometry)
                {
                    writer.Write((uint)WKBGeometryType.wkbGeometryCollection);
                    WriteGeometryCollection((IAggregateGeometry)geometry, writer, byteOrder);
                }
                else
                {
                    throw new NotSupportedException("Geometry type is not supported");
                }
            }
        }
Beispiel #3
0
 public PersistableAggregateGeometry(IAggregateGeometry ageometry)
 {
     _ageometry = ageometry;
 }
Beispiel #4
0
        public void FinishDrawing(IDisplay disp, ICancelTracker cancelTracker)
        {
            if (cancelTracker == null)
            {
                cancelTracker = new CancelTracker();
            }

            try
            {
                if (cancelTracker.Continue)
                {
                    // also draw empty aggregates (a MUST for PoygonMask!!)
                    if (_aggregateGeometry == null)
                    {
                        _aggregateGeometry = new AggregateGeometry();
                    }

                    if (_symbol is ISymbolCollection)
                    {
                        ISymbolCollection sColl = (ISymbolCollection)_symbol;
                        foreach (ISymbolCollectionItem symbolItem in sColl.Symbols)
                        {
                            if (symbolItem.Visible == false || symbolItem.Symbol == null)
                            {
                                continue;
                            }

                            ISymbol symbol = symbolItem.Symbol;

                            if (symbol.SupportsGeometryType(geometryType.Aggregate))
                            {
                                disp.Draw(symbol, _aggregateGeometry);
                            }
                            else
                            {
                                for (int g = 0; g < _aggregateGeometry.GeometryCount; g++)
                                {
                                    disp.Draw(symbol, _aggregateGeometry[g]);
                                }
                            }
                        }
                    }
                    else
                    {
                        if (_symbol.SupportsGeometryType(geometryType.Aggregate))
                        {
                            disp.Draw(_symbol, _aggregateGeometry);
                        }
                        else
                        {
                            for (int g = 0; g < _aggregateGeometry.GeometryCount; g++)
                            {
                                disp.Draw(_symbol, _aggregateGeometry[g]);
                            }
                        }
                    }
                }
            }
            finally
            {
                _aggregateGeometry = null;
            }
        }