2011-10-08 15 views
14

पीएचडी छात्र के रूप में मेरे दिन की नौकरी में, मैं भूवैज्ञानिक मॉडलिंग करता हूं। मेरे खाली समय (मुख्य रूप से मज़ेदार) में, मैं पाइथन सीख रहा हूं और 3 डी भू-मॉड्यूलर मॉडल देखने के लिए एक साधारण प्रोग्राम लिखने की कोशिश कर रहा हूं।पाइथन और WxPython के साथ 3 डी/4 डी ग्राफिक्स?

geological model http://img710.imageshack.us/img710/6503/sgems.png geo model2 http://img638.imageshack.us/img638/529/1sblockmodel.jpg

geocellular मॉडल सिर्फ एक 3 डी ग्रिड जहां हर ग्रिड सेल कुछ महत्व है (के रूप में सही चित्र में दिखाया गया है)। तो, मैं चाहता हूं कि मेरा दर्शक एक 3 डी ग्रिड मॉडल को दाहिने तरफ चित्र की तरह प्रदर्शित करने में सक्षम हो। साथ ही, मैं चाहता हूं कि यह एक्स, वाई और जेड दिशाओं में मॉडल के माध्यम से क्रॉस सेक्शन प्रदर्शित करने में सक्षम हो (यह बाएं आकृति में दिखाया गया है)।

मैं यह भी चाहता हूं कि मॉडल सभी तीन अक्षों के चारों ओर घूमने और ज़ूम इन और आउट करने में सक्षम हों।

मैंने कुछ प्रारंभिक जांच (मुख्य रूप से here) की है और ऐसा लगता है कि VisVis और VTK दो संभावित विकल्प हैं। मैं मुख्य जीयूआई के लिए wxPython का उपयोग करने की कोशिश कर रहा हूं और ऐसा लगता है कि दोनों विकल्प wxPython के साथ काम करेंगे जहां तक ​​मैं कह सकता हूं।

सवाल:

  1. क्या मैं सही हूँ जब मैं कहता हूँ मुझे लगता है कि VisVis और VTK जो मैं चाहता के लिए काम करेंगे? क्या एक दूसरे के लिए बेहतर है?

  2. इनमें से कौन सा विकल्प लागू करने के लिए सबसे आसान होगा?

  3. क्या कोई और विकल्प है जिसे मुझे भी विचार करना चाहिए?

ध्यान रखें कि मैं पाइथन के लिए नया हूं और wxPython के लिए बहुत नया हूं।

उत्तर

13

क्या आप के लिए वॉक्सेल दृश्य, वॉक्सेल ग्रिड या इस तरह कहा जाता है देख रहे हैं। मैं MayaVi पर गंभीरता से विचार करता हूं (कभी इसका इस्तेमाल नहीं करता, लेकिन मैं इस पर नजर रखता हूं), ऐसा लगता है कि here बहुत करीब है।

Paraview, जो मायावी की तरह वीटीके के ऊपर बनाया गया है, भी एक अच्छा विकल्प हो सकता है।

मुझे लगता है कि विज़ुअलाइज़ेशन के लिए सीधे VTK पर जाना मुश्किल है, यह बहुत कम स्तर है और शायद आपको बस निराश कर देगा। उस ने कहा, आप मायावी/पैराव्यू में खोलने के लिए वीटीके डेटासेट के रूप में अपने डेटा को सहेजना चाहते हैं; यह मुश्किल नहीं है, आपको सिर्फ सही संरचना चुननी है (vtkGrid, vtkUnructructedGrid, ...)।

3

आप (eudoxos 'ठीक उत्तर देखें) VTK/मायावी दुनिया में होने का एक आसान तरीका चाहते हैं, यह करने के लिए mlab एपीआई को देखो। यह matplotlib-like convenience को मूल वॉल्यूम विज़ुअलाइज़ेशन में लाता है और मुझे अभी तक अंतर्निहित प्लेटफॉर्म में गहरी खुदाई करने की आवश्यकता नहीं है।

+0

mlab यूआरएल/लिंक टूटा – DevPlayer

10

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

इसके अलावा, मायावी TVTK नामक एक लाइब्रेरी प्रदान करता है जो वीटीके बाइंडिंग का एक और पाइथोनिक संस्करण है लेकिन अंत में मैंने निर्भरता की संख्या को कम करने के लिए सादा वीटीके चुना है। लेकिन आपको इसे देखना चाहिए। शायद यह वही होगा जो आप खोज रहे हैं।

शुरुआत में मुझे यह tutorial बहुत उपयोगी मिला। यह पायथन के बारे में नहीं है, यह टीसीएल के बारे में है, लेकिन उदाहरणों का अनुवाद करना मामूली है और यह आपको vtk कार्यों के तरीके को समझने में मदद करता है।

इसके अलावा, आपको प्रारंभ करने के लिए, आप VTK Wiki पर उदाहरणों की जांच कर सकते हैं। यदि वे पर्याप्त नहीं हैं, तो आप हमेशा C++ examples देख सकते हैं और उन्हें पायथन में अनुवाद कर सकते हैं। अनुवाद मुश्किल नहीं है क्योंकि विधियों और गुणों के नाम समान हैं। यदि आप करते हैं, तो आपको विकी में उदाहरण जोड़ने के लिए प्रोत्साहित किया जाता है। source में और भी उदाहरण हैं।

जबकि आप वीटीके सीख रहे हैं, तो आप पाएंगे कि Ipython शानदार है! आपकी उंगलियों पर पूरा वीटीके नेमस्पेस होने से काफी मदद मिलती है।

यदि आपको अधिक विशिष्ट सहायता की आवश्यकता है, तो vtk-users मेलिंग सूची काफी सक्रिय है। अंत में वीटीके के बारे में books हैं, और some of them निःशुल्क हैं! हालांकि वे पाइथन के बारे में नहीं हैं।

मैंने wxPython और VTK को एक साथ नहीं करने की कोशिश की है, लेकिन ऐसा इसलिए है क्योंकि मैं wxPython पर PyQt4 पसंद करता हूं। AFAIK या तो लाइब्रेरी के साथ वीटीके के एकीकरण के साथ कोई समस्या नहीं है। किसी भी मामले में, एक जीयूआई लिखने में समय बिताने से पहले, पूरी तरह से पैराव्यू देखें। यह संभवतः पहले से ही करता है जो आप चाहते हैं, और यदि ऐसा नहीं होता है, तो यह python scriptable भी है! (मैंने इसे कभी जांच नहीं लिया है)।

+3

+1: मैं मानता हूं कि सीधे वीटीके के लिए आसान है। यह मुश्किल है लेकिन मायावी और वीटीके के साथ सभी चुनौती बस वीटीके के बारे में सीख रही है, और मायावी के साथ, यह एक और बाधा है। बाद में, मुझे मायावी का उपयोग करना शुरू करना आसान हो गया क्योंकि यह कुछ ऐसी चीजों को सरल बनाता है जो परेशानी हैं (लेकिन अवधारणाओं को समझना मुश्किल नहीं है)। – tom10

7

बस मायावी के mlab इंटरफ़ेस का उपयोग कर यह करने के लिए एक सरल उदाहरण के रूप में (कुछ भूगर्भिक डेटा के साथ, यहां तक ​​कि!):

from mayavi import mlab 
import geoprobe 

vol = geoprobe.volume('Volumes/example.vol') 
data = vol.load() #"data" here is just a 3D numpy array of uint8's 

fig = mlab.figure(bgcolor=(1., 1., 1.), fgcolor=(0., 0., 0.), size=(800,800)) 
grid = mlab.pipeline.scalar_field(data) 

# Have things display in kilometers with no vertical exxageration 
# Each voxel actually represents a 12.5 by 18.5 by 5 meter volume. 
grid.spacing = [vol.dxW/1000, vol.dyW/1000, vol.dz/1000] 

# Now, let's display a few cut planes. These are interactive, and are set up to 
# be dragged around through the volume. If you'd prefer non-interactive cut 
# planes, have a look at mlab.pipeline.scalar_cut_plane instead. 
orientations = ['x', 'x', 'y', 'z'] 
starting_positions = [vol.nx//4, 3*vol.nx//4, vol.ny//2, vol.nz] 
for orientation, start_pos in zip(orientations, starting_positions): 
    plane = mlab.pipeline.image_plane_widget(grid, colormap='gray', 
      plane_orientation='%s_axes' % orientation, slice_index=start_pos) 

    # High values should be black, low values should be white... 
    plane.module_manager.scalar_lut_manager.reverse_lut = True 

mlab.show() 

enter image description here (डेटा और डेटा प्रारूप से निपटने कोड (geoprobe मॉड्यूल) यहां उपलब्ध हैं: http://code.google.com/p/python-geoprobe/)

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

+0

वीटीके फाइलों के निर्माण के लिए आप पीईईवीटीके https://bitbucket.org/pauloh/pyevtk का उपयोग कर सकते हैं। इसके अलावा, हाथ से लीकैजी वीटीके फाइलों का निर्माण काफी सीधे है। – pmav99

+0

आप मायावी में अंतर्निहित कार्यों का भी उपयोग कर सकते हैं। मैं सिर्फ विज़ुअलाइजेशन के लिए एक अलग फ़ाइल प्रारूप नहीं रखना पसंद करता हूं। –

+0

स्पष्टीकरण: 'हाथ से' मेरा मतलब प्रोग्रामेटिक रूप से है। – pmav99