public void Draw(IDisplay disp, IFeature feature) { if (feature?.Shape != null) { if (_aggregateGeometry == null) { _aggregateGeometry = new AggregateGeometry(); } _aggregateGeometry.AddGeometry(feature.Shape); } }
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"); } } }
public PersistableAggregateGeometry(IAggregateGeometry ageometry) { _ageometry = ageometry; }
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; } }