Mayavi: ترتيب غير صحيح في الكائنات الأمامية (رؤية خاطئة للكائن)

تم إنشاؤها على ٢١ يونيو ٢٠١٨  ·  27تعليقات  ·  مصدر: enthought/mayavi

أنا بعيد كل البعد عن الكفاءة في التعامل مع الأبعاد الثلاثية ولست متأكدًا من أن هذه مشكلة في مايافي على هذا النحو (أعتذر إذا نبت الشجرة الخاطئة) ، لكنني لاحظت ما يلي ، السلوك غير المتوقع:

بيئة:

conda ، anaconda 3 ، تم تثبيت mayavi باستخدام pip install mayavi vtk pyqt5 بدلاً من conda (بعد الاصطدام بمشكلة مشابهة لـ # 652)

Debian 4.9.88-1+deb9u1 (2018-05-07) x86_64 GNU/Linux
Name: mayavi
Version: 4.6.0
Name: vtk
Version: 8.1.0
Location: /home/xxxyyy/anaconda3/envs/ELA/lib/python3.6/site-packages

ريبرو

# example from https://stackoverflow.com/a/10740780
from mayavi import mlab
import numpy as np

# Generate some random hypocenters
x, y, z, mag = np.random.random((4, 500))

# Make a curved well bore...
wellx, welly, wellz = 3 * [np.linspace(0, 1.5, 10)]
wellz =  wellz**2

# Plot the hypocenters, colored and scaled by magnitude
mlab.points3d(x, y, z, mag)

# Plot the wellbore
mlab.plot3d(wellx, welly, wellz, tube_radius=0.1)

mlab.show()

يجب أن تحيط الكرات الملونة بالأنبوب الرمادي ، بحيث تخفي أجزاء منه أدناه.
أحصل على السلوكيات المتوقعة مع إصدار سابق من mayavi على نظام تشغيل مختلف - Windows (إصدار mayavi TBC ، ربما 4.5)

incorrect_foreground

التعليق الأكثر فائدة

لقد كنت أعاني من نفس المشكلة (عرض غير صحيح للعمق) باستخدام Python3 خلال الأسابيع القليلة الماضية ، واعتقدت أنني سأشارك تجربتي هنا أيضًا (اعتبارًا من 2019-04-15).

فقط حتى نكون على نفس الصفحة ، ها هي الإصدارات التي أنظر إليها:

  • مايافي: 4.6.2
  • السمات: 5.0.0
  • traitsui: 6.0.0
  • vtk: 8.1.2
  • يتصور: 4.7.1
  • الحاشية: 6.0.0
  • PyQt5: 5.12.1
  • PyQt4: 4.11.4 (_ من dpkg_)
  • PySide: 1.2.2 (_ من dpkg_)
  • PySide2: 5.12.2

يمكن أن تستخدم Mayavi / VTK / السمات إما مجموعة أدوات "wx" أو مجموعة أدوات "qt4". مع مجموعة أدوات "qt4" ، هناك خيار آخر لتحديد QT API ؛ الخيارات هي "pyqt" و "pyqt5" ​​و "pyside" و "pyside2". يتم تحديدها مع متغيرات البيئة ETS_TOOLKIT (اضبطها على wx أو qt4) و QT_API (اضبطها على pyqt أو pyqt5 أو pyside أو pyside2 ؛ ينطبق فقط إذا تم ضبط ETS_TOOLKIT على qt4).

تحت Mint 18.3 (وربما لأي متغير من Ubuntu 16.04) ، فإن Python3 الرسمي هو 3.5.2. تتوفر بعض الوحدات مع apt / dpkg ، لكن العديد منها يتطلب استخدام pip للتثبيت. لم أتمكن من الحصول على wxPython لتثبيت Python3. باستخدام Qt ، تختلف النتائج:

  • ETS_TOOLKIT = qt4 و QT_API = pyqt: يتم عرضها بشكل صحيح
  • ETS_TOOLKIT = qt4 و QT_API = pyqt5: يتم التقديم بترتيب خاطئ
  • ETS_TOOLKIT = qt4 و QT_API = pyside: يتم عرضه بشكل صحيح
  • ETS_TOOLKIT = qt4 و QT_API = pyside2: يتم التقديم بترتيب خاطئ

مع Mint 19.1 (وربما جميع متغيرات Ubuntu 18.04) ، تكون النتائج متشابهة. إصدار Python3 هو 3.6.7 ؛ جميع الوحدات هي نفسها كما كانت من قبل ، باستثناء أنني هنا تمكنت من تثبيت wxPython (4.0.1) باستخدام pip3. في هذه الحالة ، يؤدي إعداد ETS_TOOLKIT = wx إلى ترتيب العمق الصحيح. بالنسبة لمجموعة أدوات qt4 ، كانت النتائج مماثلة لنتائج Mint 18.3 (على سبيل المثال ، تم عرض pyqt و pyside بشكل صحيح ؛ لم يتم عرض pyqt5 و pyside2).

حاولت تجميع PySide2 من المصدر وتمكنت من تجميعه ؛ ومع ذلك ، لا يزال العرض خاطئًا.

حاولت أيضًا استخدام pyenv لاختبار إصدارات مختلفة من Python3 (على وجه الخصوص 3.5.2 و 3.7.3). في كلتا الحالتين ، يمكنني تثبيت الوحدات الضرورية من خلال pip3 ، باستثناء أن كود PySide الرسمي لا يدعم إصدارات Python الأعلى من 3.4. يتوفر PySide2 ، مثل PyQt5 ؛ لا يعمل أي منهما بشكل صحيح. لم أتمكن من تجميع wxPython.

في هذه المرحلة ، أتساءل عما إذا كانت مشكلة VTK ، بل مشكلة QT (لقد تخلت عن wxPython الآن). لكن الغريب ، على جهاز الكمبيوتر المحمول الخاص بالعمل (مع Mint 18.3) ، مع pyenv ، كان لدي Python 3.7.3 قيد التشغيل ، وفي هذه الحالة ، تم تقديم ترتيب العمق بشكل صحيح - إما باستخدام PyQt5 أو PySide2 (بينما في جهاز الكمبيوتر المحمول المنزلي الخاص بي ، أعطى QT_API ترتيب عمق خاطئ). إذن ما هو الفرق؟ بقدر ما أستطيع أن أقول ، كان الاختلاف الوحيد هو برنامج تشغيل OpenGL / GLX: تعمل أجهزة الكمبيوتر المحمولة المنزلية الخاصة بي على برنامج تشغيل SGI (كما ذكرت glxinfo) ، بينما يستخدم الكمبيوتر المحمول الخاص بالعمل برنامج تشغيل NVIDIA.

أخيرًا ، حاولت أيضًا إجراء اختبارين باستخدام VirtualBox (Mint 19.1 مع xfce). ما زلت أحاول تركيبات مختلفة ، لكن النتائج هي نفسها حتى الآن. (تقارير glxinfo أن برنامج تشغيل OpenGL / GLX هو SGI).

ال 27 كومينتر

يبدو أنني أواجه نفس المشكلة مع نقاط plot3d الموضوعة حول "الكرة الأرضية":

    sphere = mlab.points3d(0, 0, 0, scale_mode='none',
                           scale_factor=2,
                           # color=(0.67, 0.77, 0.93),
                           color=ocean_blue,
                           resolution=50,
                           opacity=.85,
                           name='Earth')
    #
    # These parameters, as well as the color, where tweaked through the GUI,
    # with the record mode to produce lines of code usable in a script.
    sphere.actor.property.specular = 0.45
    sphere.actor.property.specular_power = 5
    # Backface culling is necessary for more a beautiful transparent
    # rendering.
    sphere.actor.property.backface_culling = True

+1 لخلفية pyqt / pyside ، اختبار على امتداد دبيان باستخدام [email protected] و [email protected]

هذه مشكلة عامة مع VTK تظهر وقد تمت رؤيتها من قبل في # 574 و # 491. لم يكن لدي الوقت الكافي لاستكشاف هذا أو إيجاد حل.

@ jmp75 لدي نفس المشكلة .. هل يمكنك من فضلك تأكيد أي إصدار من Mayavi يعمل؟

lhvalentini لدي هذا العمل باستخدام Anaconda 2 (python 2.7.15) على نظام التشغيل Windows 10 ، مع الحزمتين mayavi 4.5.0 و vtk 6.3.0.

أيها الناس ، إذا كانت هذه مشكلة تتعلق بالتعتيم ، فهذه مشكلة مختلفة.

لقد جربت كود OPs وهو يعمل بشكل صحيح بالنسبة لي. إذا كانت هذه مشكلة خاصة بنظام التشغيل ، فمن المحتمل أن تكون مشكلة في برامج التشغيل الخاصة بك لأنها بالتأكيد تبدو مناسبة لي على جهاز Mac OS الخاص بي مع VTK 8.1.1 و Mayavi من الماجستير. أشك في أن أي شيء قد تغير في مايافي لإصلاح ذلك.

prabhuramachandran سأرى ما إذا كان بإمكاني التشخيص بشكل أكبر لعزل السبب الجذري (أ) ؛ في الواقع ، من غير المحتمل أن يكون مايفي على هذا النحو هو المكان الذي يحتاج فيه شيء ما إلى الإصلاح إذا كان موجودًا على الإطلاق ، ولكنه سيبلغ في هذا الموضوع إذا كان بإمكاني الإشارة إلى شيء مفيد.

يمكنني إعادة إنتاج المشكلة (باستخدام مثال الكرات الملونة أعلاه) على RHEL 7 و PyQt5 و Mayavi 4.6.2. لقد تمكنت من جعله يعمل بشكل صحيح عن طريق إلغاء تثبيت PyQt5 وتثبيت wxPython. لسوء الحظ ، أحتاج إلى PyQt5. على أحد الجهازين اللذين أعمل معهم ، يمكنني تشغيله ضمن برنامج VirtualGL (لا يزال يستخدم RHEL 7 و PyQt5 و Mayavi 4.6.2) ، وتختفي المشكلة. ومع ذلك ، على الجهاز الآخر (آلة الإنتاج) يتسبب برنامج VirtualGL في تعطل Mayavi.

أي اقتراحات حول كيفية إصلاح هذا عند استخدام PyQt5؟

هل حقيقة أنني أعادت إظهار المشكلة في PyQt5 ولكن ليس في wxPython توفر أي أدلة؟

لدي مشكلة مماثلة في Linux Mint 18 ، 64 بت (Anaconda ، Python 3.6 ، Qt 5.6.2 ، pyqt 5.6.0 ، VTK 8.1.1 ، Mayavi 4.6.2 ، مثبت من conda-forge).

إذا قمت للتو بتشغيل الفانيليا mlab.test_points3d() فإن ترتيب العنصر غير صحيح:

test
test2
حاولت تجربة الإعدادات المذكورة أعلاه scene.renderer.use_depth_peeling و f.scene.renderer.maximum_number_of_peels ، لكن دون جدوى.
أي أفكار ماذا يمكن أن يكون السبب؟

تحديثا. تبدو هذه المشكلة وكأنها مشكلة Qt5 على Linux. أنا قادر على رؤية هذا على أجهزة ubuntu الخاصة بي ولكن ليس على OS X. لست متأكدًا من windows. لا أراه مع خلفية Qt4. لذلك يبدو أنه يتم إفساد العرض بطريقة ما عندما نستخدم Qt5 و QVTKRenderWindowInteractor. لقد أبلغت عن هذه المشكلة في المنبع لأفراد VTK أيضًا. لست متأكدا ما هي القضية.

نفس المشكلة هنا. عدت إلى Qt4 وكل شيء يعمل بشكل جيد.

لدي هذه المشكلة على Linux مع Qt4 (مفعل مع ipython٪ gui qt4). على الرغم من أنه ربما يكون ذلك بسبب امتلاكي Intel Graphics (شيء مرتبط سبق ذكره في المشكلات المعروفة).

اضطررت إلى تثبيت Qt4 أيضًا ؛ بطريقة ما قبل ذلك ، فإن مجرد وضع "qt4" في الخيارات لم ينتج عنه رسالة خطأ ، ولكنه استخدم Qt5 بدلاً من ذلك.

حسنًا ، لم أكن أدرك أن qt4 لم يتم تثبيته من طرفي (في الواقع ، ronceray ، لا يسفر عن خطأ) ...

لم يتم تشغيل PyQt 4.12.3 ، لكنني تمكنت من تشغيله مع الإصدار 4.12.1 ..

أبطأ بكثير من PyQt5 ، لكن ليس بها مشكلة المقدمة هذه ... يحفظني من إعداد بطاقة رسومات أخرى!

قمت بالترقية من Fedora 27 -> Fedora 29 وقمت بتثبيت أحدث برامج تشغيل الرسومات NVIDIA . بعد ذلك ، يعمل mayavi كما هو متوقع باستخدام pyqt5.

لقد كنت أعاني من نفس المشكلة (عرض غير صحيح للعمق) باستخدام Python3 خلال الأسابيع القليلة الماضية ، واعتقدت أنني سأشارك تجربتي هنا أيضًا (اعتبارًا من 2019-04-15).

فقط حتى نكون على نفس الصفحة ، ها هي الإصدارات التي أنظر إليها:

  • مايافي: 4.6.2
  • السمات: 5.0.0
  • traitsui: 6.0.0
  • vtk: 8.1.2
  • يتصور: 4.7.1
  • الحاشية: 6.0.0
  • PyQt5: 5.12.1
  • PyQt4: 4.11.4 (_ من dpkg_)
  • PySide: 1.2.2 (_ من dpkg_)
  • PySide2: 5.12.2

يمكن أن تستخدم Mayavi / VTK / السمات إما مجموعة أدوات "wx" أو مجموعة أدوات "qt4". مع مجموعة أدوات "qt4" ، هناك خيار آخر لتحديد QT API ؛ الخيارات هي "pyqt" و "pyqt5" ​​و "pyside" و "pyside2". يتم تحديدها مع متغيرات البيئة ETS_TOOLKIT (اضبطها على wx أو qt4) و QT_API (اضبطها على pyqt أو pyqt5 أو pyside أو pyside2 ؛ ينطبق فقط إذا تم ضبط ETS_TOOLKIT على qt4).

تحت Mint 18.3 (وربما لأي متغير من Ubuntu 16.04) ، فإن Python3 الرسمي هو 3.5.2. تتوفر بعض الوحدات مع apt / dpkg ، لكن العديد منها يتطلب استخدام pip للتثبيت. لم أتمكن من الحصول على wxPython لتثبيت Python3. باستخدام Qt ، تختلف النتائج:

  • ETS_TOOLKIT = qt4 و QT_API = pyqt: يتم عرضها بشكل صحيح
  • ETS_TOOLKIT = qt4 و QT_API = pyqt5: يتم التقديم بترتيب خاطئ
  • ETS_TOOLKIT = qt4 و QT_API = pyside: يتم عرضه بشكل صحيح
  • ETS_TOOLKIT = qt4 و QT_API = pyside2: يتم التقديم بترتيب خاطئ

مع Mint 19.1 (وربما جميع متغيرات Ubuntu 18.04) ، تكون النتائج متشابهة. إصدار Python3 هو 3.6.7 ؛ جميع الوحدات هي نفسها كما كانت من قبل ، باستثناء أنني هنا تمكنت من تثبيت wxPython (4.0.1) باستخدام pip3. في هذه الحالة ، يؤدي إعداد ETS_TOOLKIT = wx إلى ترتيب العمق الصحيح. بالنسبة لمجموعة أدوات qt4 ، كانت النتائج مماثلة لنتائج Mint 18.3 (على سبيل المثال ، تم عرض pyqt و pyside بشكل صحيح ؛ لم يتم عرض pyqt5 و pyside2).

حاولت تجميع PySide2 من المصدر وتمكنت من تجميعه ؛ ومع ذلك ، لا يزال العرض خاطئًا.

حاولت أيضًا استخدام pyenv لاختبار إصدارات مختلفة من Python3 (على وجه الخصوص 3.5.2 و 3.7.3). في كلتا الحالتين ، يمكنني تثبيت الوحدات الضرورية من خلال pip3 ، باستثناء أن كود PySide الرسمي لا يدعم إصدارات Python الأعلى من 3.4. يتوفر PySide2 ، مثل PyQt5 ؛ لا يعمل أي منهما بشكل صحيح. لم أتمكن من تجميع wxPython.

في هذه المرحلة ، أتساءل عما إذا كانت مشكلة VTK ، بل مشكلة QT (لقد تخلت عن wxPython الآن). لكن الغريب ، على جهاز الكمبيوتر المحمول الخاص بالعمل (مع Mint 18.3) ، مع pyenv ، كان لدي Python 3.7.3 قيد التشغيل ، وفي هذه الحالة ، تم تقديم ترتيب العمق بشكل صحيح - إما باستخدام PyQt5 أو PySide2 (بينما في جهاز الكمبيوتر المحمول المنزلي الخاص بي ، أعطى QT_API ترتيب عمق خاطئ). إذن ما هو الفرق؟ بقدر ما أستطيع أن أقول ، كان الاختلاف الوحيد هو برنامج تشغيل OpenGL / GLX: تعمل أجهزة الكمبيوتر المحمولة المنزلية الخاصة بي على برنامج تشغيل SGI (كما ذكرت glxinfo) ، بينما يستخدم الكمبيوتر المحمول الخاص بالعمل برنامج تشغيل NVIDIA.

أخيرًا ، حاولت أيضًا إجراء اختبارين باستخدام VirtualBox (Mint 19.1 مع xfce). ما زلت أحاول تركيبات مختلفة ، لكن النتائج هي نفسها حتى الآن. (تقارير glxinfo أن برنامج تشغيل OpenGL / GLX هو SGI).

يبدو أن هذا الموضوع على VTK ML يذكر نفس المشكلة. للأسف ، لم يتم الرد عليه ...

في حدس ما ، جربت شيئًا ما على حاسوبي المحمول من Debian يستحق الإبلاغ عنه. هذا كمبيوتر محمول من نوع NVIDIA Optimus كما هو موصوف في Debian wiki . توجد في الأساس بطاقتان رسوميتان على هذه الأنظمة: NVIDIA و Intel.

قصة قصيرة: مع تساوي جميع الأشياء الأخرى ، يتم عرض نص الاختبار الأصلي الذي نشرته بشكل غير صحيح على بطاقة Intel ولكن بشكل صحيح على أجهزة NVIDIA.

البيئة (الحزم ذات الصلة):

envisage                  4.7.2                    pypi_0    pypi
mayavi                    4.6.2                    pypi_0    pypi
pyface                    6.0.0                    pypi_0    pypi
pygments                  2.3.1                    pypi_0    pypi
pyqt5                     5.12.2                   pypi_0    pypi
pyqt5-sip                 4.19.17                  pypi_0    pypi
python                    3.6.8                h0371630_0  
traits                    5.1.1                    pypi_0    pypi
traitsui                  6.0.0                    pypi_0    pypi
vtk                       8.1.2                    pypi_0    pypi

راجع موقع ويكي دبيان للتعرف على كيفية استخدام optirun . optirun python ~/src/tmp/qtbug.py بشكل صحيح. لتوضيح الفرق مع / بدون optirun ، باستخدام نموذج التطبيق:

إرجاع glxgears -info

GL_RENDERER   = Mesa DRI Intel(R) HD Graphics 630 (Kaby Lake GT2) 
GL_VERSION    = 3.0 Mesa 18.3.4
GL_VENDOR     = Intel Open Source Technology Center

بينما optirun glxgears -info

GL_RENDERER   = Quadro M1200/PCIe/SSE2
GL_VERSION    = 4.6.0 NVIDIA 418.56
GL_VENDOR     = NVIDIA Corporation

فقط لإضافة تأكيد آخر ، هنا على Arch Linux على Dell Precision 5520 ، أرى أن المشكلة تعمل على شريحة Intel ، ولكن ليس مع بطاقة nvidia عبر optirun . هذا مع Python 3.7 و Qt5 و mayavi كلها مثبتة عبر repos الرسمية لـ Arch.

نفس المشكلة ، تشغيل mayavi مع الواجهة الخلفية PyQt5 ينتج عنه ترتيب عرض غير صحيح باستخدام برامج تشغيل Mesa / SGI على Debian Stretch ، ولكنه يعمل مع مجموعة متغيرات البيئة ETS_TOOLKIT=wx .

لقد قمت بحل هذا باستخدام wxPython بدلاً من PyQt.

كان هذا الموضوع لا يقدر بثمن في حل المشكلة ، شكرًا جزيلاً على التعليقات.

نفس المشكلة ، لا يمكن أن تجعلها تعمل مع wx ، لذلك تم تثبيت python-pyqt4 ، وقم بتعيين ETS_TOOLKIT=qt4 و QT_API=pyqt وهذا حلها.

أود إضافة تأكيد آخر لأحد التكوينات المذكورة أعلاه. أنا أعمل على جهاز Linux يعمل بنظام التشغيل Ubuntu 18.04. يحتوي نظامي على بطاقة رسومات Intel. أنا أستخدم anaconda3 لتحريك حركة الجسيمات المشحونة. يجب أن تكون النتيجة النهائية عبارة عن حلزون مع خط يمر عبر مركزه. بالنسبة إلى بيئة Python 3.6.8 الخاصة بي مع mayavi 4.6.2 و vtk 8.1.2 و pyqt 5.9.2 ، أحصل على شيء مثل هذا:
snapshot
لاحظ أن الخط الأحمر يبدو خارج اللولب وهو خطأ.

لإصلاح هذه المشكلة ، قمت بإنشاء بيئة Python 3.5 جديدة في anaconda3 وقمت بتثبيت الحزم بالترتيب التالي:

pyqt 4.11.4 من conda-forge
vtk 8.1.2 من pypi
مايافي 4.6.2 من كوندا فورج

وقم بتعيين المتغيرات ذات الصلة في قشرتي باستخدام
تصدير ETS_TOOLKIT = qt4
تصدير QT_API = pyqt

وقمت بتشغيل الكود الخاص بي للحصول على الرسم التخطيطي الصحيح كما هو موضح أدناه
snapshot_right .
شكرًا لكل الأشخاص الأذكياء أعلاه الذين اكتشفوا ذلك. هتافات!

بعد إعادة إنتاج المشكلة (باستخدام مثال الكرات الملونة أعلاه) في وقت سابق اليوم ، تمكنت من حل المشكلة في بيئة كوندا تحتوي على:

1) بايثون 3.8.5
2) VTK 9.0.1 (مثبتة باستخدام ملف whl)
3) pyqt5
4) أحدث إصدار من "حافة النزيف" من Mayavi (4.7.3.dev0).

إذن ربما يعمل VTK 9 على إصلاح هذه المشكلة؟

أستطيع أن أؤكد أن VTK 9.0.1 مع pyqt5 و Mayavi 4.7.2 (من conda-forge) يعمل على إصلاح هذه المشكلة.

نعم بالفعل ، يمكنني أن أؤكد أن هذه المشكلة قد تم حلها الآن مع VTK-9.0.1 وأحدث Mayavi ، على الرغم من أنه يبدو أن VTK هو المكان الذي نشأ فيه الإصلاح. لقد اختبرت على جهاز Linux حيث كان هذا يفشل سابقًا. هذا عظيم. شكرا على الإبلاغ عنها.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات