2012-01-26 5 views
5

私はWPFでこの図形を作成する必要があります。まず、私はパスだと思ったが、ショーの内部の線は3Dの形である。WPFでこのパスを描画する方法は?

この図形をどのように描くことができますか?

ありがとうございます。

enter image description here

+0

これを3Dオブジェクトとして作成するか、キャンバスなどで2D画像としてのみ描画する必要がありますか? –

+0

正確な方法はわかりませんが、役に立つかもしれないhttp://msdn.microsoft.com/en-us/library/ms747437.aspxをご覧ください – NominSim

+0

@andronz 2Dで描画する –

答えて

11

あなた形状の外/アウトラインはパスと楕円オブジェクトにはかなり簡単に描くことができます。円柱の頂面は、グリッド内のいくつかの線(Pathオブジェクトとして)で描画することもできます。それらをすべて上の楕円の外側に伸ばし、上の楕円をマスクとして使用してトリムすることができます。

シリンダー本体の垂直線はやや複雑です。

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 
:それらの座標は、シリンダの左端は、x = 0であり、シリンダの左端は、楕円の左端を満たす点をy = 0であると仮定すると、以下の式により決定することができます

ここで、NumberOfDivisions + 1は、シリンダーに表示する行の数に等しいです。

MSDNには、Path classを使い始めるための良い例がいくつかあります。

<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

:グリッド線、線形グラデーションブラシと2つのパスオブジェクトなし

あなたが必要とするすべてが3Dに見えるシリンダーを表現するだけの方法である場合

は、トリックを行いますEDIT この質問は私にとって興味深いものでした。 CodePojectに完全な記事を書いているだけでなく、ソリューションを描くための簡単なプロジェクトのソースコードも書いてありました。通常、私はそれほど問題にはなりませんでしたが、これはC#の学習を始めるための素敵な簡単なプロジェクトでした。

+0

私はそれが彼が望む結果だとは思わないが、それは素晴らしい例だ。 =) – CodingGorilla

+0

...非常にクールな例。 +1も私から:) –

関連する問題