2011-03-08 14 views
5

WPF'de yol dizelerini yol nesnelerine program aracılığıyla nasıl dönüştürdüğünüzü izlemek çok zor değil, ancak bir geometriyi veya yolu mini dilde bir dizeye dönüştürmek için yerleşik bir işlev var mı?Geometri/Yol, Minilanguage Dize Dönüştür?

+0

Sanırım öyle değil, çünkü daha doğrusu başka bir şeydir: mini dil geometriye ayrıştırılır. –

+1

"WPF'de yol dizelerini yol nesnelerine program aracılığıyla nasıl dönüştürdüğünüzü belirlemek çok zor değil" Bazı kaynaklarınızı paylaşmak ister misiniz? – jpierson

+0

Elbette! http://stackoverflow.com/questions/2029680/wpf-c-path-how-to-get-from-a-string-with-path-data-to-geometry-in-code-not-in –

cevap

6

Düzeltme: Şimdi baktığımda bunun yapılabilmesi gereken GeometryConverter adında bir sınıf olması gerektiğini düşündüm ve gerçekten de var. Sadece bunlardan birini oluşturun ve dönüştürmek istediğiniz geometri üzerinde ConvertToString kullanın.


Sen XAML olarak çıktı nesnelere XamlWriter sınıfını kullanabilirsiniz, geometri otomatik mini dile azalacaktır.

örn. Bu giriş ise:

<DrawingImage xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"> 
    <DrawingImage.Drawing> 
     <DrawingGroup> 
      <DrawingGroup.Children> 
       <GeometryDrawing Brush="#FFFF0000"> 
        <GeometryDrawing.Pen> 
         <Pen Brush="#FF000000" /> 
        </GeometryDrawing.Pen> 
        <GeometryDrawing.Geometry> 
         <PathGeometry Figures="M100,100L100,0A100,100,0,0,1,186.6,150L100,100" /> 
        </GeometryDrawing.Geometry> 
       </GeometryDrawing> 
       <GeometryDrawing Brush="#FF0000FF"> 
        <GeometryDrawing.Pen> 
         <Pen Brush="#FF000000" /> 
        </GeometryDrawing.Pen> 
        <GeometryDrawing.Geometry> 
         <PathGeometry Figures="M100,100L186.6,150A100,100,0,0,1,13.4,150L100,100" /> 
        </GeometryDrawing.Geometry> 
       </GeometryDrawing> 
       <GeometryDrawing Brush="#FF008000"> 
        <GeometryDrawing.Pen> 
         <Pen Brush="#FF000000" /> 
        </GeometryDrawing.Pen> 
        <GeometryDrawing.Geometry> 
         <PathGeometry Figures="M100,100L13.4,150A100,100,0,0,1,100,0L100,100" /> 
        </GeometryDrawing.Geometry> 
       </GeometryDrawing> 
      </DrawingGroup.Children> 
     </DrawingGroup> 
    </DrawingImage.Drawing> 
</DrawingImage> 

tamamı PathGeometry artık şudur:

<DrawingImage x:Name="segmentsDrawing"> 
    <DrawingImage.Drawing> 
     <DrawingGroup> 

      <GeometryDrawing Brush="Red"> 
       <GeometryDrawing.Pen> 
        <Pen Brush="Black" /> 
       </GeometryDrawing.Pen> 
       <GeometryDrawing.Geometry> 
        <PathGeometry> 
         <PathFigure StartPoint="100,100"> 
          <PathFigure.Segments> 
           <LineSegment Point="100,0"/> 
           <ArcSegment Point="186.6,150" SweepDirection="Clockwise" Size="100,100"/> 
           <LineSegment Point="100,100"/> 
          </PathFigure.Segments> 
         </PathFigure> 
        </PathGeometry> 
       </GeometryDrawing.Geometry> 
      </GeometryDrawing> 

      <GeometryDrawing Brush="Blue"> 
       <GeometryDrawing.Pen> 
        <Pen Brush="Black"/> 
       </GeometryDrawing.Pen> 
       <GeometryDrawing.Geometry> 
        <PathGeometry> 
         <PathFigure StartPoint="100,100"> 
          <PathFigure.Segments> 
           <LineSegment Point="186.6,150"/> 
           <ArcSegment Point="13.4,150" SweepDirection="Clockwise" Size="100,100"/> 
           <LineSegment Point="100,100"/> 
          </PathFigure.Segments> 
         </PathFigure> 
        </PathGeometry> 
       </GeometryDrawing.Geometry> 
      </GeometryDrawing> 

      <GeometryDrawing Brush="Green"> 
       <GeometryDrawing.Pen> 
        <Pen Brush="Black"/> 
       </GeometryDrawing.Pen> 
       <GeometryDrawing.Geometry> 
        <PathGeometry> 
         <PathFigure StartPoint="100,100"> 
          <PathFigure.Segments> 
           <LineSegment Point="13.4,150"/> 
           <ArcSegment Point="100,0" SweepDirection="Clockwise" Size="100,100"/> 
           <LineSegment Point="100,100"/> 
          </PathFigure.Segments> 
         </PathFigure> 
        </PathGeometry> 
       </GeometryDrawing.Geometry> 
      </GeometryDrawing> 
     </DrawingGroup> 
    </DrawingImage.Drawing> 
</DrawingImage> 

... ve

XmlTextWriter writer = new XmlTextWriter(@"C:\Users\Public\Test.xml", new UTF8Encoding()); 
writer.Formatting = Formatting.Indented; 
writer.Indentation = 1; 
writer.IndentChar = '\t'; 
XamlWriter.Save(segmentsDrawing, writer); 

... aşağıdaki olsun ... serialize mini dilde. Uygulamanızda bunu hemen kullanmak istiyorsanız, onu bir MemoryStream'a yazıp ondan bir XmlDocument oluşturarak verileri alın.

+0

Bu döner kavşak, ama bu sadece hile yapabilir! Teşekkürler... –