لماذا لا يتم ضبط light_manager الخاص بـ MlabSceneModel؟

StackOverflow https://stackoverflow.com//questions/20034515

  •  21-12-2019
  •  | 
  •  

سؤال

أنا أستخدم Mayavi لتصور ثلاثي الأبعاد باستخدام TraitsUI.ال scene هي سمة من النوع MlabSceneModel.أريد تغيير الإضاءة ومحاولة الوصول scene.light_manager في وظيفة تسمى على activated حدث.لكن، scene.light_manager دائما None.

استخدام mlab.figure() لإنشاء مشهد يحتوي على مدير إضاءة، ولكن بما أنني أريد دمج المشهد في واجهة المستخدم وليس في نافذة إضافية، فهذا ليس خيارًا بالنسبة لي.

هل كانت مفيدة؟

المحلول

سؤال جيد دفعني إلى حلقة في البداية.

بالنظر إلى مصدر tvtk، تتم إضافة مدير الضوء إلى المشهد عند إنشاء المتفاعل، والذي يحدث بعد تنشيط المشهد.علاوة على ذلك، فإن أول شيء حاولت فعله هو الاستماع إليه 'scene:light_manager' لا يعمل لأن مدير الضوء هو Property السمة التي لا تتغير مباشرة.ومع ذلك، إذا استمعت إلى الكائن نفسه، والذي تشير إليه الخاصية، فسيؤدي ذلك إلى إصدار إشعار عند الإنشاء.بمعنى آخر، افعل هذا:

class Application(HasTraits):
  scene=Instance(MlabSceneModel,())

  ...

  @on_trait_change('scene:scene_editor:light_manager')
  def muck_with_the_lights(self):
    print self.scene.light_manager
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top