2010-08-24 15 views
6

में विभाजन एक WPF PathGeometry मैं एक नहीं बल्कि बड़ी PathGeometry (100,000 से अधिक अंक और stroked लेकिन नहीं भरी है) उपयोगकर्ता के लिए प्रदर्शित करने के लिए, लेकिन केवल पथ का एक छोटा सा हिस्सा किसी एक समय में दिखाई जाएगी। स्पष्टीकरण के लिए, पथ स्वयं पूर्वनिर्धारित नहीं है लेकिन डेटा से बनाया जाएगा।"टाइल"

समस्या: मैं बहुत चिकनी पैनिंग प्रदान करने के लिए तो उपयोगकर्ता बड़ा पथ के क्षेत्रों का पता लगाने कर सकते हैं।

मेरे पास एक संभावित समाधान है लेकिन मुझे यकीन नहीं है कि इसे कैसे खींचें। मैं एक टाइलिंग तकनीक का उपयोग करना चाहता हूं - ज्यामिति को टाइल्स में विभाजित करें और केवल दृश्यमान टाइल्स लोड करें।

तो, कैसे विभाजित हो जाते हैं टाइल्स में एक ही स्ट्रोक पथ ज्यामिति। अधिक विशेष रूप से, मैं किसी दिए गए आयताकार टाइल में मौजूद पथ के हिस्से को कैसे निर्धारित करूं?

मुझे पता है कि मैं पथ ज्यामिति और आयत के बीच अंतर को निर्धारित करने के लिए एक संयुक्त ज्यामिति का उपयोग कर सकता हूं, लेकिन इसमें आयताकार की "दीवारें" शामिल होंगी (जो स्ट्रोक हो जाएगी)। क्या स्ट्रोक-केवल पथगेटोमेट्री टाइल करने का कोई बेहतर तरीका है?

धन्यवाद!

उत्तर

2

खपरैल का शायद बजाय सिर्फ एक pathgeometry है और pathdata बदल प्रोग्राम के डेटा बाइंडिंग का उपयोग कर या जो कुछ भी पथ आप में पर ज़ूम इन होते हैं के खंड प्रतिनिधित्व करते हैं। DeepZoom की तरह थोड़ा लेकिन पथ के साथ। इसका मतलब यह होगा कि आपको विलय पथों के आसपास गड़बड़ नहीं करना पड़ेगा।

मैं तुम्हें लेकिन संख्या मैं अपने पथ में उपयोग कर रहा हूँ करने के लिए कुछ इसी तरह कर रहा हूँ थोड़ा कम तो मैं किसी भी वर्चुअलाइजेशन तरीकों का उपयोग कर विचार किया havn't हैं। हालांकि, मैंने भारी प्रदर्शन समस्याओं को नहीं देखा है। मेरे पास लगभग 100 - 10000 अंक का प्रतिनिधित्व करने वाले स्क्रोलव्यूअर में एक पथ है और जब मैं बहुत दूर हूं तो मैं केवल ज़ूम इन करता हूं। यदि पथ में बिंदु अपने पड़ोसियों (जैसे एक अच्छी व्यापक साइन लहर) के करीब हैं, तो WPF किसी भी अनुक्रमिक अंतराल को रोकने के लिए उन पर कुछ प्रकार का अनुकूलन करता है।

उदाहरण के लिए: इस पथ ...

multiple sines

... इस मार्ग से आकर्षित करने के लिए अधिक समय लगेगा:

simple sine

भले ही वे अंक की एक ही राशि में होते हैं इसका वर्णन यद्यपि वास्तविकता में पथ को प्रदर्शन में कोई अंतर देखने से पहले नीचे दी गई छवि की तरह दिखने की आवश्यकता है।

the troublemaker

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

+0

प्रतिक्रिया के लिए धन्यवाद। एक अच्छी तकनीक की तरह लगता है जब आप आसानी से निर्धारित कर सकते हैं कि पथ के उपधारा को उस क्षेत्र को देखा जाना चाहिए जहां उपयोगकर्ता को पॅन किया गया है (उदाहरण के लिए, x_i और x_f जानना, आप निर्धारित कर सकते हैं कि प्लॉट करने के लिए क्या y मान हैं)। यदि आप दो आयामी गैर-पैरामीट्रिज्ड पथ डेटा का उपयोग कर रहे हैं तो यह कठिन है (आप वर्तमान में दिखाई देने वाले उप-पथ की तरह दिखने वाले "जल्दी से" कैसे समझते हैं)। टाइल्स के पीछे विचार पथ के उप-सेट को पूर्व-निर्धारित करना था जो प्रत्येक टाइल में दिखाई देगा (अधिमानतः WPF की ज्यामिति सुविधाओं का उपयोग करके) और "जल्दी" आवश्यकतानुसार टाइल दिखाएं/छुपाएं। – FTLPhysicsGuy

0

एक तरीका यह हो सकता है, आप लोड (चित्र में आकार अंतर के बारे में खेद है, थोड़ा कि साइन वेव की गणना करता है पल तो मैं पुराने jpegs उपयोग करने के लिए मिला है पर कार्रवाई से बाहर है) एक कैनवास में पूरी ज्यामिति। फिर कैनवास में ज़ूम लागू करें। आप ab2d जैसे तृतीय पक्ष नियंत्रणों का उपयोग कर सकते हैं।

मैं वहाँ में झूठ बोल रही ज्यामिति के रूप में चित्र की बहुत (उपयोगकर्ता द्वारा बनाई गई) के साथ में फ़ोटोशॉप की तरह इस तरह के एक कैनवास बनाया है।मैंने अपने मेन्यूकंट्रोल के साथ ज़ूम आउट करने के लिए ab2d का उपयोग किया है और यह ठीक काम करता है। आप इसके एक हिस्से में एक पूर्वनिर्धारित ज़ूम भी सेट कर सकते हैं।

धन्यवाद/subho100

1

मैं इस बारे में अपने आप को हाल ही में सोच रहा था, तो शायद अपने अनुभवों को आपकी मदद कर सकता है। सबसे पहले, यदि आप PathGeometry की बजाय StreamGeometry का उपयोग करने में सक्षम हैं तो आप बेहतर प्रदर्शन प्राप्त कर सकते हैं। मैं एक स्ट्रीम की डेटा प्रॉपर्टी के रूप में एक स्ट्रीमगोमेट्री बनाने की सिफारिश करता हूं, इसे कैनवास पर रखता हूं, और उसके बाद आकार को नेविगेट करने के लिए स्केल और अनुवाद ट्रांसफॉर्म लागू करता हूं। मुझे 5 या 6 सीरीज़ जीमेट्रीज़ के साथ 1000 अंक (स्पष्ट रूप से आपके द्वारा उल्लिखित संख्या से बहुत कम) के साथ अच्छा प्रदर्शन मिल रहा था, हालांकि मुझे लगता है कि डब्ल्यूपीएफ ग्राफिक्स इंजन काफी अच्छी तरह से स्केल करेगा जब तक कि आपके पास स्क्रीन पर सभी बिंदु नहीं हैं एक ही समय में। यदि आपको "पूरी तरह से ज़ूम आउट" होने का समर्थन करने की आवश्यकता है, यानी सभी बिंदु दिखाई देंगे, तो मैं ज्यामिति के कम-रेज संस्करण (यानी अंक का एक सरल सेट या बिटमैप) बनाने और उच्च और निम्न को स्वैप करने की अनुशंसा करता हूं ज़ूम कुछ स्तर तक पहुंचने पर संस्करणों के संस्करण।

क्या यह समझ में आता है?

शुभकामनाएं!

+0

StreamGeometry पर सिर के लिए धन्यवाद - मैं इसे देख लूंगा। मैंने पूरी तरह से ज़ूम आउट होने के लिए पहले से ही "लो-रेज" संस्करण माना है। हालांकि, जब आप बहुत दूर ज़ूम करते हैं तो स्केल और अनुवाद विकल्प में समस्याएं होती हैं। उच्च ज़ूम स्तर पर कैनवास का अनुवाद करने पर मेरा अन्य प्रश्न देखें (http://stackoverflow.com/questions/3523541/translate-a-wpf-canvas-at-high-scale-factors-isnt-smooth-away-from-origin)। – FTLPhysicsGuy

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