2012-12-05 26 views
5

मैं एक बड़ी एसवीजी पथ स्ट्रिंग उत्पन्न कर रहा हूं जो एक रेखा चार्ट का प्रतिनिधित्व करता है।नोड्स की संख्या को कम करके एसवीजी पथ तारों को सरल बनाना

चार्ट के नीचे मेरे पास समय सीमा स्लाइस चुनने के लिए एक स्लाइडर है। स्लाइडर के पीछे पूरे लाइन चार्ट का एक छोटा पूर्वावलोकन है।

मैं वर्तमान में पूर्वावलोकन उत्पन्न करने के लिए पथ को स्केल कर रहा हूं हालांकि ऐसा करने में मैं प्रति पिक्सल के नोड्स के साथ समाप्त हो रहा हूं और इसलिए अब और अधिक जानकारी आवश्यक है। बेशक यह ब्राउजर को इसके मुकाबले ज्यादा प्रतिपादन देता है।

एसवीजी स्ट्रिंग्स (gzipping आदि) को संपीड़ित करने पर बहुत सारी जानकारी उपलब्ध है, हालांकि एल्गोरिदम पर बहुत कम जो वास्तव में नोड्स को कम करके पथ को सरल बनाते हैं।

मैं राफेलज का उपयोग कर रहा हूं और जावास्क्रिप्ट आधारित समाधान की तलाश में हूं। कोई विचार?

+0

आप पथ 'प' विशेषता का एक उदाहरण है? उदाहरण के लिए .. lostsource

+1

आप इसे पहले से प्रदर्शित करके पूर्ण "रिज़ॉल्यूशन" पथ लोड कर रहे हैं, थंबनेल में इसे फिर से प्रदर्शित करने के लिए प्रदर्शन हिट न्यूनतम, बहुत कम होना चाहिए एक एल्गोरिदम पथ को सरल बनाने के बजाय। – Duopixel

+0

@ डुओपिक्सल: मुझे नहीं लगता कि यह बिल्कुल सही है। आपके पास डीओएम में एक ही रास्ता दो बार दिखाई देगा। अगर ब्राउज़रर्स इसके लिए अनुकूलित करेंगे तो मुझे बहुत आश्चर्य होगा। साथ ही, जैसा कि मैं इसे समझता हूं, मिनी पूर्वावलोकन पूर्ण पथ के समान पहलू अनुपात नहीं होगा - स्ट्रोक चौड़ाई अलग हो सकती है (पूर्ण आकार चार्ट के संबंध में इसे थोड़ा भारी बनाने के लिए समझ में आता है)। –

उत्तर

11

Simplify.js शायद आप जो देख रहे हैं वह शायद है।

अपनी लाइन चार्ट को देखते हुए सीधी रेखा खंडों केवल इस तरह (जो परिभाषा से यह चाहिए), आप इसे उपयोग कर सकते हैं के होते हैं:

var tolerance = 3 
    var pathSegArray = [] 
    for (var i=0; i<path.pathSegList.numberOfItems; i++) { 
    pathSegArray.push(path.pathSegList.getItem(i)) 
    } 
    var newPathArray = simplify(pathSegArray,tolerance) 
    var newD = "M"; 
    for (i=0; i<newPathArray.length; i++) { 
    newD += newPathArray[i].x + " " + newPathArray[i].y + " " 
    } 
    path.setAttribute("d",newD) 
+0

दुर्भाग्यवश, यह क्रोम में काम नहीं कर रहा है। –

+3

क्रोम –

+0

के साथ काम करने के लिए कोड बदल दिया यह वक्र, ए, सी, क्यू, टी, एस कमांड इत्यादि के लिए उपयुक्त नहीं है – cuixiping