""" This file defines a simple class that handles a vtk3DSImporter. The class handles the deletion of the actors generated by the vtk3DSImporter. The vtk3DSImporter class imports a 3D Studio scene into VTK. This code is distributed under the conditions of the BSD license. See LICENSE.txt for details. Copyright (c) 2001-2002, Prabhu Ramachandran. """ __author__ = "Prabhu Ramachandran " __version__ = "$Revision: 1.3 $" __date__ = "$Date: 2005/08/02 18:30:14 $" import vtk, Common debug = Common.debug class mv3DSImporter: """This is a class that handles a vtk3DSImporter and is similar to the VRMLImporter class. The vtk3DSImporter class imports a 3D Studio scene into VTK.""" def __init__ (self, renwin, file_name): """Initializes the class given a vtkRenderWindow and a file_name.""" debug ("In mv3DSImporter::__init__ ()") self.file_name = file_name self.renwin = renwin orig_actors = self._get_actors (self.renwin) self.imp = vtk.vtk3DSImporter () self.imp.SetFileName (file_name) self.imp.SetRenderWindow (self.renwin) try: self.imp.ComputeNormalsOn () except AttributeError: pass self.imp.Read () self.renwin.Render () final_actors = self._get_actors (self.renwin) self.actors = [] for act in final_actors: if act not in orig_actors: self.actors.append (act) def __del__ (self): debug ("In mv3DSImporter::__del__ ()") ren = self.imp.GetRenderer () for act in self.actors: ren.RemoveActor (act) self.renwin.Render () del self.actors del self.imp del self.renwin def _get_actors (self, rw): """ Returns a list of available actors in the given vtkRenderWindow.""" debug ("In mv3DSImporter::_get_actors ()") act = [] renderers = rw.GetRenderers () renderers.InitTraversal () n_ren = renderers.GetNumberOfItems () for i in range (n_ren): ren = renderers.GetNextItem () act.extend (self._get_actor_list (ren)) return act def _get_actor_list (self, ren): """ Returns a list of available actors in the given vtkRenderer.""" debug ("In mv3DSImporter::_get_actor_list ()") act = [] act_col = ren.GetActors () act_col.InitTraversal () n_act = act_col.GetNumberOfItems () for i in range (n_act): act.append (act_col.GetNextItem ()) return act def get_file_name (self): """ Returns the 3D Studio file used.""" debug ("In mv3DSImporter::get_file_name ()") return self.file_name