Mehr

Zeichnen von Linien in der Layoutansicht mit ArcObjects


Ich versuche, eine Linie in der Layoutansicht in ArcMap mit C# und ArcObjects zu zeichnen. Ich arbeite an diesem Beispiel. Aber ich habe einige Probleme.

1.) Dieser Code zum Zeichnen einer Linie in der Datenansicht, aber ich muss eine Linie in der Layoutansicht zeichnen (im Rahmen). Ich möchte die Eigenschaften des Linienelements sehen, wenn ich mein Linienelement ausgewählt habe.

2.) Wenn ich in ArcMap auf diese Linie klicke, wird sie unsichtbar… warum passiert das?

Dies ist Codebeispiel:

protected override void OnClick() {//Zeichnen einer Polylinie Point p1 = new PointClass(); p1,X = 10; p1.Y = 10; IPoint p2 = neue PointClass(); p2.X = 20; p2.Y = 20; IPoint p3 = neue PointClass(); p3.X = 35; p3.Y = 15; IPoint p4 = neue PointClass(); p4.X = 40; p4.Y = 17; IPoint p5 = neue PointClass(); p5.X = 50; p5.Y = 19; IPoint p6 = neue PointClass(); p6.X = 60; p6.Y = 18; IPolyline polyline = new PolylineClass(); IPointCollection pointColl = Polylinie als IPointCollection; pointColl.AddPoint(p1); pointColl.AddPoint(p2); pointColl.AddPoint(p3); pointColl.AddPoint(p4); pointColl.AddPoint(p5); pointColl.AddPoint(p6); IMxDocument mxdoc = ArcMap.Application.Document als IMxDocument; IActiveView activeView = mxdoc.ActiveView; IScreenDisplay screenDisp = activeView.ScreenDisplay; short screenCache = Convert.ToInt16(esriScreenCache.esriNoScreenCache); screenDisp.StartDrawing(screenDisp.hDC, screenCache); IRgbColor color = new RgbColorClass(); Farbe.Rot = 0; Farbe.Blau = 0; Farbe.Grün = 0; ISimpleLineSymbol simpleLineSymbol = new SimpleLineSymbolClass(); simpleLineSymbol.Color = Farbe; simpleLineSymbol.Width = 1; screenDisp.SetSymbol(simpleLineSymbol as ISymbol); screenDisp.DrawPolyline(Polylinie); screenDisp.FinishDrawing(); }

Der Grund, warum dieser Code fehlschlägt, ist, dass Sie in den Bildschirmcache schreiben, den Sie vomAktivansichtund das könnte der seinKarteoderSeitenlayout; du musst deutlicher sein.

Sobald eine Bildschirmaktualisierung stattfindet, verlieren Sie die gezeichnete Grafik. Wenn Sie möchten, dass Grafiken bestehen bleiben, müssen Sie es sein Speicherung sie im PageLayout-Grafikcontainer. Der folgende VBA-Code zeigt Ihnen, wie Sie dies anhand Ihrer Beispielpunkte tun.

Public Sub drawline() ' Erstellen einer Polylinie Dim p1 As IPoint Set p1 = Neuer Punkt p1.X = 10 p1.Y = 10 Dim p2 As IPoint Set p2 = Neuer Punkt p2.X = 20 p2.Y = 20 Dim p3 As IPoint Set p3 = Neuer Punkt p3.X = 30 p3.Y = 15 Dim p4 Als IPoint Set p4 = Neuer Punkt p4.X = 40 p4.Y = 15 Dim p5 Als IPoint Set p5 = Neuer Punkt p5.X = 50 p5 .Y = 19 Dim p6 As IPoint Set p6 = Neuer Punkt p6.X = 60 p6.Y = 18 Dim pPolyline As IPolyline Set pPolyline = Neue Polyline Dim pPointColl As IPointCollection Set pPointColl = pPolyline pPointColl.AddPoint p1 pPointColl.AddPoint p2 pPointColl. AddPoint p3 pPointColl.AddPoint p4 pPointColl.AddPoint p5 pPointColl.AddPoint p6 ' Erzeuge eine Farbe Dim pColour As IRgbColor Set pColour = New RgbColor With pColour .Red = 0 .Blue = 0 .Green = 0 End With ' Erzeuge ein Liniensymbol Dim pSimpleLineSymbol As ISimpleLineSymbol Set pSimpleLineSymbol = New SimpleLineSymbol With pSimpleLineSymbol .Width = 1 .Style = esriSLSSolid .Color = pColour End With ' Erstellen Sie ein Linienelement, dies ist die Grafik, die w wird dem Container hinzugefügt Dim pElement As IElement Set pElement = New LineElement pElement.Geometry = pPolyline Dim pLineElement As ILineElement Set pLineElement = pElement pLineElement.Symbol = pSimpleLineSymbol ' Hole das MXD Dim pMXD As IMxDocument Set pMXD = ThisDocument ' Hole ein Handle auf handle das Seitenlayout Dim pPageLayout As IPageLayout Set pPageLayout = pMXD.PageLayout ' Hole den Grafikcontainer des PAGELAYOUT Dim pGraphicsContainer As IGraphicsContainer Set pGraphicsContainer = pPageLayout ' Element hinzufügen und pGraphicsContainer aktualisieren pGraphicsContainer 0.AddmViewActive Set pGraphicsContainer 0.AddmActive Set pGraphicsActive Set = pGraphicsActiveSet Ende Abo aktualisieren

Hinweis: Die Koordinaten werden als Seitenkoordinaten interpretiert, nicht als geografische, sodass die erstellte Linie viel größer als Ihre Seite ist.


Dies ist c#-Code für Ihre Lösung:

protected override void OnClick() { //Erzeuge eine Polylinie Point p1 = new PointClass(); p1,X = 10; p1.Y = 10; IPoint p2 = neue PointClass(); p2.X = 20; p2.Y = 20; IPoint p3 = neue PointClass(); p3.X = 35; p3.Y = 15; IPoint p4 = neue PointClass(); p4.X = 40; p4.Y = 17; IPoint p5 = neue PointClass(); p5.X = 50; p5.Y = 19; IPoint p6 = neue PointClass(); p6.X = 60; p6.Y = 18; IPolyline polyline = new PolylineClass(); IPointCollection pointColl = Polylinie als IPointCollection; pointColl.AddPoint(p1); pointColl.AddPoint(p2); pointColl.AddPoint(p3); pointColl.AddPoint(p4); pointColl.AddPoint(p5); pointColl.AddPoint(p6); // Erzeuge eine Farbe IRgbColor color = new RgbColorClass(); Farbe.Rot = 0; Farbe.Blau = 0; Farbe.Grün = 0; // Erzeuge ein Liniensymbol ISimpleLineSymbol simpleLineSymbol = new SimpleLineSymbolClass(); simpleLineSymbol.Color = Farbe; simpleLineSymbol.Width = 1; // Erstellen Sie ein Linienelement, dies ist die Grafik, die zum Container hinzugefügt wird IElement element = new LineElement(); element.Geometrie = Polylinie; ILineElement lineElement; lineElement = Element als ILineElement; lineElement.Symbol = simpleLineSymbol; // Hole das Mxd IMxDocument mxdoc = ArcMap.Application.Document als IMxDocument; // Hole das Handle für das Seitenlayout IPageLayout pageLayout = new PageLayout(); pageLayout = mxdoc.PageLayout; // Hole den Grafikcontainer des PageLayout IGraphicsContainer graphicsContainer = pageLayout as IGraphicsContainer; // Element hinzufügen und aktualisieren graphicsContainer.AddElement(element, 0); IActiveView activeView = pageLayout als IActiveView; activeView.Refresh(); }


Schau das Video: Geogebra arbeta med punkter och linjer (Oktober 2021).