Пример #1
0
    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)
Пример #2
0
    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)
Пример #3
0
    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)
Пример #4
0
    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)
Пример #5
0
    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)
Пример #6
0
    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()
Пример #7
0
    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()
Пример #8
0
    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()
Пример #9
0
    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()
Пример #10
0
 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*')
Пример #11
0
 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*')