2016-01-29 6 views
6

मुझे दुनिया पर क्लिक करते समय स्थिति (लेट/लॉन) प्राप्त करने में समस्याएं आ रही हैं।माउस द्वारा सटीक स्थिति पर क्लिक करें विश्वव्यापी

एसओ (और अन्य वेबसाइटों) पर हर जगह getCurrentPosition विधि का उपयोग करने का सुझाव देता है।

दुर्भाग्य से, यह शीर्ष pickable वस्तु जो समझ बिंदु क्लिक किया की स्थिति देता है, इस प्रकार अगर कोई pickable वस्तु वहाँ मौजूद है, विधि सिर्फ रिटर्न अशक्त

आप इसे देख सकते हैं जब स्थिति पट्टी में जब आप किसी भी उदाहरण का उपयोग करते हैं: अब हर समय और फिर ग्लोब लेबल (लेट/लॉन के बजाए) बंद है, भले ही माउस इस कारण से दुनिया में है!

क्या पिक करने योग्य वस्तुओं के आधार पर स्थिति प्राप्त करने का कोई अन्य तरीका है? मैं स्क्रीन पर स्थिति और ज्यामिति का उपयोग करने के बारे में सोच रहा था, लेकिन यह बहुत कठिन होगा और मुझे नहीं पता कि कहां से शुरू करना है ...

+0

इस पोस्ट की जांच::

public class PositionListener implements MouseListener { private final WorldWindow ww; public PositionListener(WorldWindow ww) { this.ww = ww; } @Override public void mouseClicked(MouseEvent event) { try { System.out.println(ww.getCurrentPosition().toString()); } catch (NullPointerException e) { // click was not on the globe } } //... } 

तो getCurrentPosition() आप इस के लिए काम नहीं कर रहा एक विकल्प है http://stackoverflow.com/questions/ 20160420/ट्रैकिंग-माउस-पोजिशन-ऑन-जावा-वर्ल्डविंड –

+0

जैसा कि मैंने कहा है कि एक कन्ववास .getCurrentPosition() उपरोक्त देता है क्योंकि पिकेबल्स –

उत्तर

2

मुझे यकीन नहीं है कि getCurrentPosition() आप किस बात का जिक्र कर रहे हैं, लेकिन WorldWindow#getCurrentPosition() आपको जो चाहिए वो करना चाहिए। javadocs कहते हैं:

रिटर्न वर्तमान अक्षांश, देशांतर और वर्तमान कर्सर स्थिति की ऊंचाई, या नल अगर कर्सर दुनिया पर नहीं है।

यदि आपका कर्सर दुनिया के साथ छेड़छाड़ नहीं करता है (यानी आप पृष्ठभूमि में सितारों पर क्लिक करते हैं), तो क्लिक से जुड़ी स्थिति नहीं होगी। यह क्लिक के समय कर्सर को छेड़छाड़ करने वाली दुनिया पर, पिक करने योग्य वस्तुओं पर भरोसा नहीं करता है।

निम्न उदाहरण मेरे लिए काम करता है:

@Override 
public void mouseClicked(MouseEvent event) { 
    Point p = event.getPoint(); 
    Vec4 screenCoords = new Vec4(p.x,p.y); 
    Vec4 cartesian = ww.getView().unProject(screenCoords); 
    Globe g=ww.getView().getGlobe(); 
    Position pos=g.computePositionFromPoint(cartesian); 
    System.out.println(pos.toString()); 
} 
+0

पर आधारित है जो javadocs * कहता है *। लेकिन अगर आप getCurrentPosition (WorldindowImpl के अंदर) के कार्यान्वयन को देखते हैं तो आप देखेंगे कि यह वास्तव में PickedObjectList का उपयोग करता है। –

+1

मैं दुनिया के किसी ऐसे क्षेत्र में क्लिक करने में सक्षम हूं जहां मैंने कोई ऑब्जेक्ट नहीं जोड़ा है और स्थिति वापस ले ली है, क्या आप एक क्लिकशॉट दे सकते हैं जहां आप क्लिक करते हैं और स्थिति वापस नहीं लेते? –

+0

नक्शा भी पिकेबल्स (टेरेनोबजेक्ट्स) हैं, इस प्रकार यह आपको स्थिति नहीं देता है भले ही ऑब्जेक्ट न हों। समस्या यह है कि यह आपको उस बिंदु को वापस देता है जहां उस मानचित्र में इसके कोनों में से एक है। मेरे पास अभी आवेदन नहीं है, बाद में मैं कुछ और पोस्ट कर सकता हूं –

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