2012-01-26 18 views
5

Bu şekli WPF'de oluşturmam gerekiyor. İlk olarak, bir yol olduğunu düşündüm, ancak şov içindeki çizgiler 3 boyutlu bir şekil.WPF'de bu yol nasıl çizilir?

Çizgiler dahil olmak üzere bu şekli nasıl çizebilirim?

Çok teşekkürler.

enter image description here

+0

Bunu 3B nesne olarak yapmanız ya da sadece 2d resmi çizmeniz gerekiyor, örneğin, tuval mi? –

+0

Tam olarak nasıl emin olamadığımdan emin değilim, ama yararlı olabilir http://msdn.microsoft.com/en-us/library/ms747437.aspx yararlı olabilir – NominSim

+0

@andronz 2 boyutlu çizim –

cevap

11

dış/senin şeklin ana hatları Yolu ve Elips nesnelerle oldukça basit çizilebilir. Silindirin üst yüzü, bir ızgarada bir dizi çizgi (Yol nesnesi olarak) ile de çizilebilir. Onları sadece üst elipsin dışına uzatacak şekilde çizebilir ve üstte bulunan Elips'i kullanarak bunları kırpabilirsiniz. Silindirin gövdesindeki dikey çizgiler biraz daha karmaşıktır.

For i = 0 to NumberOfDivisions 
    HorizontalPosition = CircleRadius - (cos(pi/NumberOfDivisions * i) * CircleRadius) 
    TopOfLine = sin(pi/NumberOfDivisions * i) * CircleRadius * 0.5 //The 0.5 assumes that the ellipse will only be half as tall as it is wide. 
    BottomOfLine = TopOfLine + HeightOfCylinder 
    //draw vertical line where: 
    //X1=HorizontalPosition, Y1=TopOfLine 
    //X2=HorizontalPosition, Y2=BottomOfLine 
Next 
: Bunların koordinatlarının x = 0 ve silindirin sol kenar elipsin sol kenarı ile birleştiği nokta y = 0 olduğu silindir sol kenarı olduğunu varsayarak aşağıdaki formül ile tespit edilebilir

Burada NumberOfDivisions + 1, silindirde görünmesini istediğiniz satır sayısına eşittir.

MSDN, Path class ile çalışmaya başlamak için iyi örneklere sahiptir.

<Canvas > 
     <Path Width="111" Height="113.5" Canvas.Left="0" Canvas.Top="12.5" Stretch="Fill" StrokeLineJoin="Round" Stroke="#FF000000" Data="F1 M 177,190C 176.999,196.903 152.375,202.5 122,202.5C 91.6246,202.5 67.0006,196.903 67,189.979L 67,90L 177,90L 177,190 Z "> 
      <Path.Fill> 
       <LinearGradientBrush StartPoint="-0.00454615,0.5" EndPoint="1.00455,0.5"> 
        <LinearGradientBrush.GradientStops> 
         <GradientStop Color="#FF28A528" Offset="0"/> 
         <GradientStop Color="#FF63B963" Offset="0.152943"/> 
         <GradientStop Color="#FF9FCE9F" Offset="0.362069"/> 
         <GradientStop Color="#FF006C00" Offset="0.991379"/> 
        </LinearGradientBrush.GradientStops> 
       </LinearGradientBrush> 
      </Path.Fill> 
     </Path> 
     <Path Width="111" Height="26" Canvas.Left="0" Canvas.Top="0" Stretch="Fill" StrokeLineJoin="Round" Stroke="#FF000000" Fill="#FF2CF72C" Data="F1 M 122,77.4999C 152.376,77.4999 177,83.0964 177,89.9999C 177,96.9035 152.376,102.5 122,102.5C 91.6244,102.5 67.0001,96.9035 67.0001,89.9999C 67.0001,83.0964 91.6245,77.4999 122,77.4999 Z "/> 
    </Canvas> 

enter image description here

: Izgara çizgileri, doğrusal gradyan fırça ve 2 yol nesneler olmaksızın

tek ihtiyacınız bir 3D görünümlü silindir temsil edecek bir yolu ise

, hile yapacak EDIT Tamam, bu soru bana, çözüm için basit bir proje için kaynak kodu ile birlikte CodePoject için tam bir makale yazma sorununa gittim beni yeterince merak etti. Normalde, o kadar çok sıkıntıya gitmezdim, ama bu C# öğrenmeye başlamak için güzel ve basit bir projeydi.

+0

Bence bu onun istediği sonuç değil, ama +1 cuz güzel bir örnek. =) – CodingGorilla

+0

... çok güzel bir örnek. +1 benden de :) –

İlgili konular