2017-08-21 9 views
1

Ich habe ein unglaublich einfaches Geometry Objekt:C# Geometrie erhält Punkte (offene Linie)

var geometry = Geometry.Parse("F1M-76,-26.5L14,-26.5 14,-17.5 156,-17.5"); 

Ich mag die Punkte innerhalb dieses Geometry Objekt erhalten:

-76,-26.5 
14,-26.5 
14,-17.5 
156,-17.5 

Was ist der beste Weg ist, zu erhalten diese Punkte?

Ich habe versucht:

var allfigs = geometry.GetFlattenedPathGeometry().Figures.ToList(); 
allfigs.AddRange(geometry.GetOutlinedPathGeometry().Figures); 
allfigs.AddRange(geometry.GetWidenedPathGeometry(new Pen()).Figures); 

Die einzige Linie, die mich ist die letzte Zeile Zahlen gibt, aber die Punkte, die in diesen Figuren haben die ursprünglichen Punkte nicht überein ... Sie werden durch die Breite des Offsets Pen

Antwort

1

Versuchen sie folgendes:

var geometry = Geometry.Parse("F1M-76,-26.5L14,-26.5 14,-17.5 156,-17.5"); 

char[] UpperCaseChars = new char[] 
{ 
    'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 
    'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 
    'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 
    'Y', 'Z',' ' 
}; 

int indexOfM = geometry.ToString().IndexOf('M'); 
var a = geometry.ToString().Substring(indexOfM).Split(UpperCaseChars); 
+0

es funktioniert, aber es ist ein bisschen hacky. Kann nicht garantieren, dass es weiter funktioniert, wenn meine Zeilen detaillierter werden. – ManIkWeet

+0

Eigentlich benutze ich diesen Code fast ein Jahr ohne Probleme, da ich keine Alternative gefunden habe. – tabby

+1

Ihr Code funktioniert gut, und es hat mich inspiriert, etwas anderes zu versuchen, das funktioniert. Ich werde Ihren Code als Antwort markieren. Es inspirierte mich zu 'ToString' und' Parse' mein Geometrieobjekt und es scheint 'LineSegment' zu geben, nachdem ich das getan habe :) PS: Stellen Sie sicher, dass' CultureInfo.InvariantCulture' irgendwo drin ist! – ManIkWeet

Verwandte Themen