def generate_code(self): """Generate all the wrapper code in `self.out_dir`. """ out_dir = self.out_dir helper_gen = self.helper_gen wrap_gen = self.wrap_gen # Create an __init__.py file with open(os.path.join(out_dir, '__init__.py'), 'w'): pass # Crete a vtk_version.py file that contains VTK build # information. v = vtk.vtkVersion() vtk_version = v.GetVTKVersion()[:3] vtk_src_version = v.GetVTKSourceVersion() code = "vtk_build_version = \'%s\'\n" % (vtk_version) code += "vtk_build_src_version = \'%s\'\n" % (vtk_src_version) with open(os.path.join(out_dir, 'vtk_version.py'), 'w') as f: f.write(code) # Write the helper code header. with open(os.path.join(out_dir, 'tvtk_helper.py'), 'w') as helper_file: helper_gen.write_prelims(helper_file) # Write the wrapper files. tree = wrap_gen.get_tree().tree classes = [] # This is another class we should not wrap and exists # in version 8.1.0. ignore = ['vtkOpenGLGL2PSHelperImpl'] include = ['VTKPythonAlgorithmBase'] for node in wrap_gen.get_tree(): name = node.name if name in ignore: continue if (name not in include and not name.startswith('vtk')) or \ name.startswith('vtkQt'): continue if not hasattr(vtk, name) or not hasattr( getattr(vtk, name), 'IsA'): # noqa # We need to wrap VTK classes that are derived # from vtkObjectBase, the others are # straightforward VTK classes that can be used as # such. All of these have an 'IsA' method so we # check for that. Only the vtkObjectBase # subclasses support observers etc. and hence only # those make sense to wrap into TVTK. continue classes.append(name) for nodes in tree: for node in nodes: if node.name in classes: tvtk_name = get_tvtk_name(node.name) logger.debug('Wrapping %s as %s' % (node.name, tvtk_name)) self._write_wrapper_class(node, tvtk_name) helper_gen.add_class(tvtk_name, helper_file)
def write_wrapper_classes(self, names): """Given VTK class names in the list `names`, write out the wrapper classes to a suitable file. This is a convenience method so one can generate a just a few of the wrapper classes if desired. This is useful when debugging. Please note that the method also generates code for all the ancestors of the specified classes. """ # Wrappers for the ancesors are generated in order to get the # _updateable_traits_ information correctly. nodes = [] for name in names: node = self.wrap_gen.get_tree().get_node(name) if node is None: print 'ERROR: Cannot find class: %s' % name nodes.append(node) # Get ancestors. for node in nodes[:]: anc = node.get_ancestors() for i in anc: if i not in nodes: nodes.insert(0, i) # Sort them as per their level. nodes.sort(lambda x, y: cmp(x.level, y.level)) # Write code. for node in nodes: tvtk_name = get_tvtk_name(node.name) self._write_wrapper_class(node, tvtk_name)
def write_wrapper_classes(self, names): """Given VTK class names in the list `names`, write out the wrapper classes to a suitable file. This is a convenience method so one can generate a just a few of the wrapper classes if desired. This is useful when debugging. Please note that the method also generates code for all the ancestors of the specified classes. """ # Wrappers for the accesors are generated in order to get the # _updateable_traits_ information correctly. nodes = [] for name in names: node = self.wrap_gen.get_tree().get_node(name) if node is None: print('ERROR: Cannot find class: %s' % name) nodes.append(node) # Get ancestors. for node in nodes[:]: anc = node.get_ancestors() for i in anc: if i not in nodes: nodes.insert(0, i) # Sort them as per their level. nodes.sort(key=lambda x: x.level) # Write code. for node in nodes: tvtk_name = get_tvtk_name(node.name) self._write_wrapper_class(node, tvtk_name)
def generate_code(self): """Generate all the wrapper code in `self.out_dir`. """ out_dir = self.out_dir helper_gen = self.helper_gen wrap_gen = self.wrap_gen # Create an __init__.py file with open(os.path.join(out_dir, '__init__.py'), 'w'): pass # Crete a vtk_version.py file that contains VTK build # information. v = vtk.vtkVersion() vtk_version = v.GetVTKVersion()[:3] vtk_src_version = v.GetVTKSourceVersion() code = "vtk_build_version = \'%s\'\n"%(vtk_version) code += "vtk_build_src_version = \'%s\'\n"%(vtk_src_version) with open(os.path.join(out_dir, 'vtk_version.py'), 'w') as f: f.write(code) # Write the helper code header. with open(os.path.join(out_dir, 'tvtk_helper.py'), 'w') as helper_file: helper_gen.write_prelims(helper_file) # Write the wrapper files. tree = wrap_gen.get_tree().tree classes = [] # This is another class we should not wrap and exists # in version 8.1.0. ignore = ['vtkOpenGLGL2PSHelperImpl'] include = ['VTKPythonAlgorithmBase'] for node in wrap_gen.get_tree(): name = node.name if name in ignore: continue if (name not in include and not name.startswith('vtk')) or \ name.startswith('vtkQt'): continue if not hasattr(vtk, name) or not hasattr(getattr(vtk, name), 'IsA'): # noqa # We need to wrap VTK classes that are derived # from vtkObjectBase, the others are # straightforward VTK classes that can be used as # such. All of these have an 'IsA' method so we # check for that. Only the vtkObjectBase # subclasses support observers etc. and hence only # those make sense to wrap into TVTK. continue classes.append(name) for nodes in tree: for node in nodes: if node.name in classes: tvtk_name = get_tvtk_name(node.name) logger.debug( 'Wrapping %s as %s' % (node.name, tvtk_name)) self._write_wrapper_class(node, tvtk_name) helper_gen.add_class(tvtk_name, helper_file)
def _write_special(self, name, out): """Given the name of the class, call appropriate method, if available. """ tname = get_tvtk_name(name) writer = '_write_%s'%tname if hasattr(self, writer): getattr(self, writer)(out)
def generate_code(self): """Generate all the wrapper code in `self.out_dir`. """ out_dir = self.out_dir helper_gen = self.helper_gen wrap_gen = self.wrap_gen # Create an __init__.py file f = open(os.path.join(out_dir, '__init__.py'), 'w') f.close() # Crete a vtk_version.py file that contains VTK build # information. v = vtk.vtkVersion() vtk_version = v.GetVTKVersion()[:3] vtk_src_version = v.GetVTKSourceVersion() code = "vtk_build_version = \'%s\'\n" % (vtk_version) code += "vtk_build_src_version = \'%s\'\n" % (vtk_src_version) f = open(os.path.join(out_dir, 'vtk_version.py'), 'w') f.write(code) f.close() # Write the helper code header. helper_file = open(os.path.join(out_dir, 'tvtk_helper.py'), 'w') helper_gen.write_prelims(helper_file) # Write the wrapper files. tree = wrap_gen.get_tree().tree classes = [] for node in wrap_gen.get_tree(): name = node.name if not name.startswith('vtk') or name.startswith('vtkQt'): continue if not hasattr(vtk, name) or not hasattr(getattr(vtk, name), 'IsA'): # We need to wrap VTK classes that are derived from # vtkObjectBase, the others are straightforward VTK classes # that can be used as such. All of these have an 'IsA' method # so we check for that. Only the vtkObjectBase subclasses # support observers etc. and hence only those make sense to # wrap into TVTK. continue classes.append(name) for nodes in tree: for node in nodes: if node.name in classes: tvtk_name = get_tvtk_name(node.name) self._write_wrapper_class(node, tvtk_name) helper_gen.add_class(tvtk_name, helper_file) helper_file.close()
def generate_code(self): """Generate all the wrapper code in `self.out_dir`. """ out_dir = self.out_dir helper_gen = self.helper_gen wrap_gen = self.wrap_gen # Create an __init__.py file f = open(os.path.join(out_dir, '__init__.py'), 'w') f.close() # Crete a vtk_version.py file that contains VTK build # information. v = vtk.vtkVersion() vtk_version = v.GetVTKVersion()[:3] vtk_src_version = v.GetVTKSourceVersion() code ="vtk_build_version = \'%s\'\n"%(vtk_version) code += "vtk_build_src_version = \'%s\'\n"%(vtk_src_version) f = open(os.path.join(out_dir, 'vtk_version.py'), 'w') f.write(code) f.close() # Write the helper code header. helper_file = open(os.path.join(out_dir, 'tvtk_helper.py'), 'w') helper_gen.write_prelims(helper_file) # Write the wrapper files. tree = wrap_gen.get_tree().tree classes = [] for node in wrap_gen.get_tree(): name = node.name if not name.startswith('vtk') or name.startswith('vtkQt'): continue if not hasattr(vtk, name) or not hasattr(getattr(vtk, name), 'IsA'): # We need to wrap VTK classes that are derived from # vtkObjectBase, the others are straightforward VTK classes # that can be used as such. All of these have an 'IsA' method # so we check for that. Only the vtkObjectBase subclasses # support observers etc. and hence only those make sense to # wrap into TVTK. continue classes.append(name) for nodes in tree: for node in nodes: if node.name in classes: tvtk_name = get_tvtk_name(node.name) self._write_wrapper_class(node, tvtk_name) helper_gen.add_class(tvtk_name, helper_file) helper_file.close()
def generate_code(self): """Generate all the wrapper code in `self.out_dir`. """ out_dir = self.out_dir helper_gen = self.helper_gen wrap_gen = self.wrap_gen # Create an __init__.py file f = open(os.path.join(out_dir, "__init__.py"), "w") f.close() # Crete a vtk_version.py file that contains VTK build # information. v = vtk.vtkVersion() vtk_version = v.GetVTKVersion()[:3] vtk_src_version = v.GetVTKSourceVersion() code = "vtk_build_version = '%s'\n" % (vtk_version) code += "vtk_build_src_version = '%s'\n" % (vtk_src_version) f = open(os.path.join(out_dir, "vtk_version.py"), "w") f.write(code) f.close() # Write the helper code header. helper_file = open(os.path.join(out_dir, "tvtk_helper.py"), "w") helper_gen.write_prelims(helper_file) # Write the wrapper files. tree = wrap_gen.get_tree().tree # classes = dir(vtk) classes = [ x.name for x in wrap_gen.get_tree() if x.name.startswith("vtk") and not x.name.startswith("vtkQt") and not issubclass(getattr(vtk, x.name), object) ] for nodes in tree: for node in nodes: if node.name in classes: tvtk_name = get_tvtk_name(node.name) self._write_wrapper_class(node, tvtk_name) helper_gen.add_class(tvtk_name, helper_file) helper_file.close()
def generate_code(self): """Generate all the wrapper code in `self.out_dir`. """ out_dir = self.out_dir helper_gen = self.helper_gen wrap_gen = self.wrap_gen # Create an __init__.py file f = open(os.path.join(out_dir, '__init__.py'), 'w') f.close() # Crete a vtk_version.py file that contains VTK build # information. v = vtk.vtkVersion() vtk_version = v.GetVTKVersion()[:3] vtk_src_version = v.GetVTKSourceVersion() code = "vtk_build_version = \'%s\'\n" % (vtk_version) code += "vtk_build_src_version = \'%s\'\n" % (vtk_src_version) f = open(os.path.join(out_dir, 'vtk_version.py'), 'w') f.write(code) f.close() # Write the helper code header. helper_file = open(os.path.join(out_dir, 'tvtk_helper.py'), 'w') helper_gen.write_prelims(helper_file) # Write the wrapper files. tree = wrap_gen.get_tree().tree #classes = dir(vtk) classes = [x.name for x in wrap_gen.get_tree() \ if x.name.startswith('vtk') and \ not x.name.startswith('vtkQt') and \ not issubclass(getattr(vtk, x.name), object) ] for nodes in tree: for node in nodes: if node.name in classes: tvtk_name = get_tvtk_name(node.name) self._write_wrapper_class(node, tvtk_name) helper_gen.add_class(tvtk_name, helper_file) helper_file.close()
def __init__(self): self.renamer = re.compile(r'(vtk[A-Z0-9]\S+)') self.ren_func = lambda m: get_tvtk_name(m.group(1)) self.func_re = re.compile(r'([a-z0-9]+[A-Z])') self.cpp_method_re = re.compile(r'C\+\+: .*?;\n*')