2009-06-30 12 views
10

मेरी वर्तमान फ्री-टाइम प्रोजेक्ट, डब्ल्यूपीएफ एमवीवीएम में गोता लगाने के लिए, एक पुरानी पहेली की एक "डिजिटल" प्रति है जिसे मैं अपने बचपन में बहुत कुछ करने के लिए उपयोग करता था। यह मूल रूप से एक साधारण पहेली है जहां किसी को एक अलग स्थान को विभिन्न प्रकार के टुकड़ों से भरना होता है ताकि पूरी जगह भर जाए। लेकिन हेक्सागोनल अंतरिक्ष में होने के अतिरिक्त मोड़ के साथ।WPF स्नैपिंग नियंत्रण

बस वर्णन करने के लिए, यह वर्तमान में क्या दिखता है WPF में की तरह:

http://img190.imageshack.us/img190/2553/atomgridmolecule.png

तो मूल रूप से वहाँ पूर्वनिर्धारित टुकड़े के एक नंबर है जिसमें "खामियों को दूर" हो सकता है (ऊपर नारंगी की तरह) है दिया गया ग्रिड (ऊपर भूरे रंग की चीजें)।

तो परिणाम कुछ इस तरह दिख सकता है:

http://img30.imageshack.us/img30/2553/atomgridmolecule.png

मैं उपयोगकर्ता चाहते हैं (शायद ही मुझे ^^) खींचें और ग्रिड में टुकड़े ड्रॉप करने में सक्षम हो। मैं ड्रैगिंग को प्राकृतिक अर्थ देखने के लिए चाहता हूं, जहां उपयोगकर्ता ने टुकड़े पर क्लिक किया था, इस पर निर्भर करते हुए सही ऑफ़सेट होने पर।

दोनों ग्रिड और अणु एक ही नियंत्रण हैं, जो WPF पैनल वर्ग से प्राप्त एक कस्टम हेक्सागोनल पैनल नियंत्रण है।

समस्या यह है कि "प्लगिंग" और विशेष रूप से "अनप्लगिंग" को कैसे करें।

  1. बस ग्रिड में कोशिकाओं रंग और मूल टुकड़ा
    • प्रो छुपा: की
      • शून्य लागत सही संरेखण

        मुझे लगता है मैं कैसे से निपटने के हो सकता है इस पर दो विचार है कोशिकाओं

    • विपक्ष:
      • खींचने पर सही माउस ऑफ़सेट के साथ दाएं स्थान पर टुकड़े को दोबारा शुरू करना, असंभव लगता है?
  2. कर ग्रिड से टुकड़ा स्नैप करना और पर यह दिखाने के लिए कठिन शीर्ष
    • प्रो:
      • सिर्फ
      में खींच के रूप में, एक सरल खींचने आपरेशन बाहर खींच रहा है
    • नुकसान:
      • किसी तरह अंतर्निहित ग्रिड के साथ टुकड़ा,

तो जो दृष्टिकोण मैं लेना चाहिए तड़क किसी तरह का संरेखित करने के लिए है? इससे भी महत्वपूर्ण बात यह है कि मैं इसे WPF में कैसे कार्यान्वित कर सकता हूं? विशेष रूप से एक स्वच्छ एमवीवीएम तरीके का उपयोग कर।


आपकी मदद के लिए बहुत बहुत धन्यवाद! किसी भी इनपुट की अत्यधिक सराहना की जाती है!

संपादित करें:
धन्यवाद अरन, मैंने भी ऐसा सोचा।

लेकिन मैं वास्तव में इसे कैसे कार्यान्वित कर सकता हूं?

  • मैं वास्तव में निर्देशांक कैसे प्राप्त कर सकता हूं?
  • सभी नारंगी मंडल जुड़े हुए हैं, तो मैं उन्हें एक टुकड़े के रूप में "प्लग" या बेहतर "प्लग" कैसे कर सकता हूं?

उत्तर

1

मैं दूसरे विचार के साथ जाने के इच्छुक हूं। एक साधारण स्नैपिंग केवल परीक्षण करने के लिए होगी यदि आपके द्वारा खींचने वाले सर्कल का केंद्र बिंदु ग्रिड पर किसी मंडली के कुछ सहिष्णुता कारक के भीतर है और यदि ऐसा है तो उन्हें स्नैप करें।

+1

मैं यह करूँगा - कोड के पीछे कोड में प्रत्येक नारंगी सर्कल पर अंत माउस क्लिक करें, फिर ऑरेंज सर्कल एक्स, वाई की तुलना सभी ग्रे सर्कल एक्स, वाई की सूची में करें। नारंगी सर्कल एक्स, वाई समायोजित करके निकटतम बिंदु पर स्नैप करें। –

+0

ठीक है मैंने भी सोचा। लेकिन मैं वास्तव में इसे कैसे लागू करूं? – eric

+0

क्या आप जानते हैं कि दूरी को दो बिंदुओं के बीच तुलना कैसे करें? "ए 2 + बी 2 = सी 2" अगर आपको अधिक जानकारी चाहिए तो इसे देखें: http://www.purplemath.com/modules/distform.htm विशेष रूप से यह फ़ॉर्मूला वह है जिसकी आपको आवश्यकता होगी: http: // www .purplemath.com/मॉड्यूल/xyplane/dist07b.gif – Giffyguy

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