2012-08-03 22 views
5

के साथ ज़ेडग्राफ लंबवत रेखाएं मेरे पास इसमें कुछ वक्र के साथ एक ज़ेडग्राफ कंट्रोल है और मैं कुछ निश्चित एक्स-पोजीशन पर लंबवत रेखाएं जोड़ना चाहता हूं। रेखाएं निश्चित रूप से केवल वास्तविक ग्राफ क्षेत्र के अंदर होनी चाहिए।लाइनऑबेज मुद्दे

मैं निम्नलिखित

LineObj line = new LineObj(Color.Black, xPos, myPane.YAxis.Scale.Min, xPos, myPane.YAxis.Scale.Max); 
line.Line.Style = System.Drawing.Drawing2D.DashStyle.Dash; 
line.Line.Width = 1f; 
myPane.GraphObjList.Add(line); 

की कोशिश की और यह ठीक काम करता है जब तक उपयोगकर्ता ग्राफ ज़ूम, खड़ी लाइनों तो वास्तविक ग्राफ क्षेत्र से बाहर खिंचाव होगा (नीचे तस्वीर लिंक देखते हैं, यह भी है कि यह धराशायी नहीं है ग्राफ के अंदर, विषम)।

http://imageshack.us/photo/my-images/196/zedgraphzoom.png/

इस हल करने के लिए या कर रहे हैं (अगर केवल वहाँ वर्तमान ज़ूम के myPane.Xaxis.Scale.Min और मैक्स पाने के लिए और उसके बाद ZoomEvent में ग्राफ़ अपडेट? आ रास्ता नहीं था) एक रास्ता है इस उद्देश्य के लिए LineObj के अलावा अन्य किसी भी बेहतर वर्ग/विधियों का उपयोग करने के लिए? एक LineObj को परिभाषित करने के

उत्तर

2

इसके बजाय, एक LineItem को परिभाषित करने और GraphPane.CurveList में जोड़ें:

LineItem line = new LineItem(String.Empty, new[] { xPos, xPos }, 
       new[] { myPane.YAxis.Scale.Min, myPane.YAxis.Scale.Max }, 
       Color.Black, SymbolType.None); 
line.Line.Style = System.Drawing.Drawing2D.DashStyle.Dash; 
line.Line.Width = 1f; 

myPane.CurveList.Add(line); 

यह बांधता ग्राफ फलक में समन्वय प्रणाली को line, ताकि जब आप ज़ूम या पैन line स्थिति होगा अभी भी ग्राफ में ही सीमित रहें। बेशक, यदि आप line के मानों को अपडेट किए बिना ज़ूम आउट करते हैं, तो line सिरों ग्राफ के अंदर होंगे।

मुझे व्यक्तिगत अनुभव से पता है कि डैशिंग ज़ेडग्राफ में एक समस्या हो सकती है; हालांकि ऐसा लगता है कि LineItem जोड़ते समय डैशिंग ठीक से प्रदर्शित होती है।

+0

निर्माण अच्छी तरह से जब तक आप फोन zedGraphControl.AxisChange न के रूप में() समापन, जिस स्थिति में यह तल पर मार्जिन जोड़ देगा, लेकिन मुझे लगता है कि आप सब कुछ लाइनों को जोड़ने से पहले यह कॉल की आवश्यकता है कि कर सकते हैं। धन्यवाद! – HischT

+2

एक समाधान द्वितीयक वाई धुरी बनाने के लिए है, फिर 0 और 1 दोनों के लिए स्केल.मैक्स और मिनट डालें, फिर लाइनइटम को दो बिंदुओं (x, 0) और (x, 1) से संलग्न करें। इस तरह, यह अन्य अक्ष से स्वतंत्र रहता है। – Larry

2

आप CurveItem की बजाय लाइनऑब्ज का उपयोग करने के अच्छे तरीके पर थे।

Location संरचना और CoordinateFrame संपत्ति पर एक नज़र डालें। यह (बजाय एक्स और/या वाई

स्थापना XScaleYChartFraction को CoordinateFrame 0 दिन और वाई, जो "नीचे" और ग्राफ फलक के "टॉप" का मतलब है के रूप में 1 दिन का उपयोग करने की अनुमति देता है के लिए एक अलग समन्वय प्रणाली का उपयोग करने के लिए अनुमति देता है YAxis.Scale.Min और YAxis.Scale.Max) के रूप में, एक्स एक्स एक्सिस स्केल समन्वय प्रणाली का उपयोग जारी रखता है।

इसका मतलब है कि आप इसका उपयोग कर सकते हैं .एक्सिस चेंज(), ज़ूम, पैन, और लाइनऑबज वाई अक्ष के पैमाने परिवर्तनों में अंतर नहीं करेगा!

var line = new LineObj(Color.Black, xPos, 0, xPos, 1); 

line.Location.CoordinateFrame = XScaleYChartFraction; // This do the trick ! 
line.IsClippedToChartRect = true; 

line.Line.Style = System.Drawing.Drawing2D.DashStyle.Dash; 
line.Line.Width = 1f; 

myPane.GraphObjList.Add(line); 
+0

यह लाइनइटम जोड़ने से इसे करने का एक बेहतर तरीका प्रतीत होता है, क्योंकि ऊर्ध्वाधर रेखाएं डेटा वक्र से अवधारणात्मक रूप से भिन्न होती हैं। – ricovox

+0

मेरी खोज आखिरकार खत्म हो गई है। – KDecker

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