दिलचस्प पोस्ट
Symfony 2.0 AJAX एप्लिकेशन में JSON को सिद्धांत रूप से एनकोड कैसे करें? टोमकैट, जेबोस और ग्लासफ़िश के बीच क्या अंतर है? strtok segfault कारण है, लेकिन जब कोड के माध्यम से कदम JSF में बाहरी यूआरएल पर पुनर्निर्देशन पांडा डेटाफ़्रेम में विशेष सेल के लिए मूल्य निर्धारित करें जावास्क्रिप्ट कोई jQuery का उपयोग कर सरल अजाक्स फार्म यूआरएल / रेगेक्स का प्रयोग डोमेन के लिए सत्यापन? (रेल) AJAX शैली jQuery UI टैब्स के अंदर लोड jQuery UI संवाद विंडो संभवतः पीछे की तरफ से पुनरावृति करना संभव है? कैसे सीपीयू सी एक बच्चे की प्रक्रिया समाप्त करता है? क्या यह मेरे एंड्रॉइड ऐप के जरिए एडीबी कमांड निष्पादित करना संभव है? Google Weather API 403 त्रुटि पॉइंटर्स की तुलना कैसे करें? पायथन में एक स्ट्रिंग रिवर्स करें एक एक्सएमएल तत्व परिवर्तित करें जिसका सीडीएटीए के अंदर है I

HTML5 कैनवास पर घुमाए गए पाठ को आकर्षित करना

मैं विकास कर रहा हूँ एक वेब अनुप्रयोग का हिस्सा मुझे विभिन्न जानकारी प्रदर्शित करने के लिए बार ग्राफ बनाने की आवश्यकता है। मुझे लगा, अगर उपयोगकर्ता का ब्राउज़र सक्षम है, तो मैं उन्हें HTML5 कैनवास तत्व का उपयोग करके आकर्षित करूँगा। मेरे ग्राफ़ के लिए मेरे पास रेखाओं और बार खींचने में कोई समस्या नहीं है, लेकिन जब मैं कुल्हाड़ियों, सलाखों, कैनवास तत्व पर घुमाए गए पाठ को मैं कैसे आकर्षित करूं, ताकि आइटम के साथ लाइनों को लेबल कर दिया जाए? कुछ उदाहरणों में शामिल हैं:

  • वाई-अक्ष को लेबल करने के लिए पाठ को 90 डिग्री प्रति घंटा घुमाएं
  • ऊर्ध्वाधर पट्टी ग्राफ़ पर लेबल की सलाखों के लिए प्रति घंटा 90 डिग्री को घुमाएं
  • एक रेखीय ग्राफ़ पर लाइनों को लेबल करने के लिए पाठ को एक मनमाना राशि घुमाएं

कोई भी संकेतक प्रशंसनीय होंगे।

Solutions Collecting From Web of "HTML5 कैनवास पर घुमाए गए पाठ को आकर्षित करना"

दूसरों की तरह, उल्लेख किया गया है कि आप मौजूदा ग्राफ़िंग समाधान का पुनः उपयोग करना चाहते हैं, लेकिन घूर्णन पाठ बहुत मुश्किल नहीं है कुछ भ्रामक बिट (मेरे लिए) यह है कि आप पूरे संदर्भ को घुमाएंगे और फिर उस पर आकर्षित करें:

ctx.rotate(Math.PI*2/(i*6)); 

कोण रेडियन में है I यह कोड इस उदाहरण से लिया गया है , जो मुझे विश्वास है कि एमडीसी कैनवास ट्यूटोरियल के परिवर्तनों के लिए किया गया था।

अधिक पूर्ण समाधान के लिए कृपया नीचे दिए गए उत्तर देखें ।

इसी तरह की समस्याओं के साथ दूसरों की सहायता करने के प्रयास में इसे पोस्ट करना मैंने इस मुद्दे को पांच चरणों के दृष्टिकोण से सुलझाया – संदर्भ को बचाएं, संदर्भ का अनुवाद करें, संदर्भ को घुमाने के लिए, टेक्स्ट खींचें, फिर संदर्भ को अपने सहेजे हुए राज्य में बहाल करें

मैं अनुवादों के बारे में सोचता हूं और कैनवास पर समन्वित ग्रिड को ढकेलने के संदर्भ के रूप में संदर्भ में बदलता हूं। डिफ़ॉल्ट रूप से मूल (0,0) कैनवास के ऊपरी बाएं हाथ के कोने में शुरू होता है। एक्स बाएं से दाएं बढ़ता है, वाई ऊपर से नीचे तक बढ़ जाता है यदि आप अपने बाएं हाथ पर "एल" डब्ल्यू / आपकी इंडेक्सिंग उंगली और अंगूठे बनाते हैं और अपने अंगूठे के साथ इसे अपने सामने रख देते हैं, तो आपका अंगूठा वाई की बढ़ती दिशा की ओर इंगित करेगा और आपकी तर्जनी दिशा में इंगित करेगी बढ़ते एक्स की। मुझे पता है कि यह प्राथमिक है, लेकिन अनुवाद और रोटेशन के बारे में सोचते समय मुझे यह सहायक लगता है। यहाँ पर क्यों:

जब आप संदर्भ का अनुवाद करते हैं, तो आप कैनवास पर एक नए स्थान के लिए समन्वय ग्रिड की उत्पत्ति को स्थानांतरित करते हैं। जब आप संदर्भ को घुमाएंगे, तो घड़ी की दिशा में अपने बाएं हाथ से "एल" को घूर्णन करने के बारे में सोचें, मूल के बारे में रेडियंस में आपके द्वारा निर्दिष्ट कोण से दर्शाया गया राशि। जब आप स्ट्रोक पाठ या fillText, नए निर्देशित अक्षों के संबंध में अपने निर्देशांक निर्दिष्ट करें। अपने टेक्स्ट को ओरिएंट करने के लिए यह नीचे से ऊपर तक पठनीय है, आप नीचे एक स्थिति का अनुवाद कर सकते हैं, जहां आप अपने लेबल को शुरू करना चाहते हैं, -90 डिग्री से घूमते हैं और भर या स्ट्रोक टेक्स्ट, घुमाए गए एक्स अक्ष के साथ प्रत्येक लेबल को ऑफसेट करते हैं। ऐसा कुछ काम करना चाहिए:

  context.save(); context.translate(newx, newy); context.rotate(-Math.PI/2); context.textAlign = "center"; context.fillText("Your Label Here", labelXposition, 0); context.restore(); 

.रेस्टोर () संदर्भ को राज्य को वापस रीसेट करता है, जब आपने फोन किया था .save () – वापस "सामान्य" चीजों को वापस लाने के लिए आसान।


हालांकि यह एक पिछले उत्तर के लिए अनुवर्ती है, यह थोड़ा (उम्मीद है) जोड़ता है।

मुख्यतः मैं क्या स्पष्ट करना चाहता हूं यह है कि आम तौर पर हम चीजों को खींचने की सोचते हैं जैसे draw a rectangle at 10, 3

इसलिए यदि हम इसके बारे में इस तरह सोचते हैं: move origin to 10, 3 , फिर draw rectangle at 0, 0 । फिर हमें जो करना है, बीच में घुमाएं

एक और बड़ा मुद्दा टेक्स्ट की संरेखण है यह 0, 0 पर पाठ आकर्षित करने में आसान है, इसलिए सही संरेखण का उपयोग करने से हमें पाठ की चौड़ाई को मापने के बिना ऐसा करने की अनुमति मिल सकती है।

हमें अभी भी एक राशि द्वारा पाठ को खड़ी रूप से केन्द्रित करने के लिए ले जाना चाहिए, और दुर्भाग्य से कैनवास में उत्कृष्ट रेखा ऊंचाई का समर्थन नहीं है, इसलिए यह अनुमान लगाया गया है और चीज की जांच करें (अगर कुछ बेहतर है तो मुझे सही करें)

मैंने 3 उदाहरण तैयार किए हैं जो 3 संरेखण के साथ एक बिंदु और एक पाठ प्रदान करते हैं, यह दिखाने के लिए कि स्क्रीन पर वास्तविक बिंदु कहां से आता है जहां फ़ॉन्ट जाता है।

यहां छवि विवरण दर्ज करें

 var font, lineHeight, x, y; x = 100; y = 100; font = 20; lineHeight = 15; // this is guess and check as far as I know this.context.font = font + 'px Arial'; // Right Aligned this.context.save(); this.context.translate(x, y); this.context.rotate(-Math.PI / 4); this.context.textAlign = 'right'; this.context.fillText('right', 0, lineHeight / 2); this.context.restore(); this.context.fillStyle = 'red'; this.context.fillRect(x, y, 2, 2); // Center this.context.fillStyle = 'black'; x = 150; y = 100; this.context.save(); this.context.translate(x, y); this.context.rotate(-Math.PI / 4); this.context.textAlign = 'center'; this.context.fillText('center', 0, lineHeight / 2); this.context.restore(); this.context.fillStyle = 'red'; this.context.fillRect(x, y, 2, 2); // Left this.context.fillStyle = 'black'; x = 200; y = 100; this.context.save(); this.context.translate(x, y); this.context.rotate(-Math.PI / 4); this.context.textAlign = 'left'; this.context.fillText('left', 0, lineHeight / 2); this.context.restore(); this.context.fillStyle = 'red'; this.context.fillRect(x, y, 2, 2); 

यह लाइन। this.context.fillText('right', 0, lineHeight / 2); मूलतः 0, 0 , सिवाय इसके कि हम इस बिंदु के पास केंद्रित होने के लिए पाठ के लिए थोड़ा आगे बढ़ते हैं

यहाँ होमब्रे के लिए एक एचटीएमएलएक्स विकल्प है: http://www.rgraph.net/ आप उनके तरीकों को इंजीनियर रिवर्स करने में सक्षम हो सकते हैं ….

आप Flot ( http://code.google.com/p/flot/ ) या जीसीएआरटीएस जैसे कुछ भी विचार कर सकते हैं: ( http://www.maxb.net/scripts/jgcharts/include/demo/#1 ) ऐसा नहीं है काफी शांत है, लेकिन पूरी तरह से पीछे संगत और डरावना आसान को लागू करने के लिए।