2012-01-26 14 views
5

मुझे इस आकार को WPF में बनाने की आवश्यकता है। सबसे पहले, मैंने सोचा कि एक रास्ता है, लेकिन शो के अंदर की रेखाएं एक 3 डी आकार है।WPF में इस पथ को कैसे आकर्षित करें?

मैं इस आकार को लाइनों सहित कैसे आकर्षित कर सकता हूं?

बहुत बहुत धन्यवाद।

enter image description here

+0

आपको इसे 3 डी ऑब्जेक्ट के रूप में बनाना या केवल 2 डी छवि के रूप में आकर्षित करना है, उदाहरण के लिए, कैनवास? –

+0

मुझे यकीन नहीं है कि कैसे, लेकिन http://msdn.microsoft.com/en-us/library/ms747437.aspx पर एक नज़र डालें जो सहायक हो सकता है – NominSim

+0

@andronz ड्रा 2 डी –

उत्तर

11

बाहर/अपने आकार की रूपरेखा पथ और दीर्घवृत्त वस्तुओं के साथ सुंदर बस खींचा जा सकता है। सिलेंडर का शीर्ष चेहरा भी एक ग्रिड में कई रेखाओं (पथ वस्तुओं के रूप में) के साथ खींचा जा सकता है। आप उन्हें आकर्षित कर सकते हैं ताकि वे सभी शीर्ष अंडाकार के बाहर विस्तार कर सकें और उन्हें छिड़कने के लिए मास्क के रूप में शीर्ष अंडाकार का उपयोग करें।

सिलेंडर के शरीर में लंबवत रेखाएं थोड़ा और जटिल हैं। उनके निर्देशांक निम्न सूत्र द्वारा निर्धारित किया जा सकता है, यह सोचते हैं पर x = 0 और बिंदु जहां सिलेंडर के बाएँ किनारे अंडाकार के बाईं बढ़त को पूरा करती है y = 0 है सिलेंडर के बाएँ किनारे है:

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 

जहां NumberOfDivisions + 1 सिलेंडर पर दिखने वाली लाइनों की संख्या के बराबर है।

एमएसडीएन के पास 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

:

आप सभी की जरूरत एक 3 डी दिखने सिलेंडर का प्रतिनिधित्व करने के लिए सिर्फ एक रास्ता है, तो ग्रिडलाइनें, रेखीय ग्रेडिएंट ब्रश और 2 पथ वस्तुओं के बिना चाल करना होगा संपादित करें ठीक है, इस प्रश्न ने मुझे इतना चिंतित किया कि समाधान के लिए एक साधारण परियोजना के स्रोत स्रोत के साथ CodePoject पर इसके लिए एक संपूर्ण लेख लिखने की परेशानी हुई। आम तौर पर, मैं उस परेशानी पर नहीं जाऊंगा, लेकिन सी # सीखना शुरू करने के लिए यह एक अच्छा आसान प्रोजेक्ट था।

+0

मुझे नहीं लगता कि वह परिणाम चाहता है, लेकिन +1 cuz यह एक अच्छा उदाहरण है। =) – CodingGorilla

+0

... एक बहुत अच्छा उदाहरण है। मेरे द्वारा +1 भी :) –

संबंधित मुद्दे