Ich habe einen benutzerdefinierten Renderer, der geänderte Geometrie rendern muss. Die Eingabefunktionen werden alle über die IFeatureCursor
als Polygonelemente eingegeben . (Dies ähnelt diesem Beispiel , obwohl ich keine Punkte rendere.)
Ich kann Polygone, Linien und Punkte einfach rendern, indem ich entweder die neue Geometrie übergebe IFeatureDraw.Draw
oder IDisplay.DrawPolygon
/ IDisplay.DrawPoint
/ etc. Aufrufe .
Bietet IDisplay
jedoch keinen Mechanismus zum Zeichnen eines Multipatchs, und das Übergeben dieses als Geometrie führt dazu, IFeatureDraw.Draw
dass nichts auf den Bildschirm gezeichnet wird.
Gibt es eine Möglichkeit, ein Multipatch-Element (vorzugsweise mit Texturierung) innerhalb dieser Methode direkt zu "zeichnen"?
arcgis-10.0
arcobjects
arcscene
Reed Copsey
quelle
quelle
Antworten:
Wie Craig sagt, ist OpenGL der richtige Weg für 3D.
Siehe Erstellen einer ArcGIS Engine-Anwendung mit C-Sharp und OpenGL . Frühere Versionen von ArcGIS Explorer unterstützten auch OpenGL-Aufrufe , aber als ich das letzte Mal überprüft habe, dass Esri dies nicht mehr unterstützt.
Ich weiß nicht, warum sie das getan haben - OpenGL-Zeichnungen haben wirklich dazu beigetragen, AGX von Google Earth zu unterscheiden.
Aktualisieren
Selbst wenn Ihr Plugin Multipatches korrekt zurückgegeben hat, bietet ArcObjects meines Erachtens keine Methoden zum Unterstützen des Zeichnens von Multipatches mit OpenGL-Aufrufen. Es wäre wahrscheinlich einfacher, nur aus ihrem nativen Format zu zeichnen (mit anderen Worten, das Plugin zu umgehen). Ich habe es noch nie verwendet, aber hier ist ein Skript, das zeigt, wie OpenGL mit ArcScene verwendet wird .
quelle
Die 2D-Anzeige (IDisplay) unterstützt das direkte Zeichnen von Multipatches nicht. Sie müssen sie in Footprints umwandeln (Informationen zum Extrahieren des Footprints finden Sie unter IMultipatch :: XYFootprint). Wenn Sie eine 2D-Darstellung der Multipatch-Texturen wünschen, müssen Sie aus einer 2D-Projektion des Multipatch ein Bild erstellen und dieses zeichnen.
Für 3D sollten Sie in der Lage sein, nur mehrere Patches im Cursor zurückzugeben, und es wird funktionieren, aber ehrlich gesagt implementieren die meisten Leute einfach eine benutzerdefinierte Ebene für den Globus und erledigen ihre eigene Arbeit in OpenGL.
quelle