예제 #1
0
    def _pipeline_default(self):
        sqrt2 = numpy.sqrt(2)
        x = -sqrt2 * numpy.cos(numpy.pi * 2. / 3)
        y = sqrt2 * numpy.sin(numpy.pi * 2. / 3)
        p1 = tvtk.PlaneSource(origin=(0,0,0), \
                              point1=(-sqrt2,0,1), point2=(x,y,1))
        p2 = tvtk.PlaneSource(origin=(0,0,0), \
                               point1=(x,y,1), point2=(x,-y,1))
        p3 = tvtk.PlaneSource(origin=(0,0,0), \
                               point1=(x,-y,1), point2=(-sqrt2,0,1))
        for p in (p1, p2, p3):
            p.set_resolution(32, 32)
        append = tvtk.AppendPolyData()
        append.add_input_connection(p1.output_port)
        append.add_input_connection(p2.output_port)
        append.add_input_connection(p3.output_port)

        scale_f = tvtk.TransformFilter(input_connection=append.output_port,
                                       transform=self.scale)

        trans = tvtk.Transform()
        trans.rotate_x(90.0)
        self.imp_cyl.transform = trans

        clip = tvtk.ClipPolyData(input_connection=scale_f.output_port,
                                 clip_function=self.imp_cyl,
                                 inside_out=True)

        transF2 = tvtk.TransformFilter(input_connection=clip.output_port,
                                       transform=self.transform)
        self.config_pipeline()
        return transF2
def make_tube(height, radius, resolution, rx=0, ry=0, rz=0):
    cs1 = tvtk.CylinderSource(height=height,
                              radius=radius[0],
                              resolution=resolution)
    cs2 = tvtk.CylinderSource(height=height + 0.1,
                              radius=radius[1],
                              resolution=resolution)
    triangle1 = tvtk.TriangleFilter(input_connection=cs1.output_port)
    triangle2 = tvtk.TriangleFilter(input_connection=cs2.output_port)
    tr = tvtk.Transform()
    tr.rotate_x(rx)
    tr.rotate_y(ry)
    tr.rotate_z(rz)
    tf1 = tvtk.TransformFilter(transform=tr,
                               input_connection=triangle1.output_port)
    tf2 = tvtk.TransformFilter(transform=tr,
                               input_connection=triangle2.output_port)
    bf = tvtk.BooleanOperationPolyDataFilter()
    bf.operation = "difference"
    bf.set_input_connection(0, tf1.output_port)
    bf.set_input_connection(1, tf2.output_port)
    m = tvtk.PolyDataMapper(input_connection=bf.output_port,
                            scalar_visibility=False)
    a = tvtk.Actor(mapper=m)
    return bf, a, tf1, tf2
예제 #3
0
 def _pipeline_default(self):
     cyl = self.vtk_cylinder
     norms = tvtk.PolyDataNormals(input_connection=cyl.output_port)
     transF1 = tvtk.TransformFilter(input_connection=norms.output_port,
                                    transform=self.cyl_trans)
     transF2 = tvtk.TransformFilter(input_connection=transF1.output_port,
                                    transform=self.transform)
     self.config_pipeline()
     return transF2
예제 #4
0
    def _pipeline_default(self):
        grid = self.vtk_grid
        grid.set_execute_method(self.create_grid)
        grid.modified()

        trans = tvtk.Transform()
        trans.rotate_x(90.)
        cyl = self.vtk_cylinder
        cyl.transform = trans

        clip1 = tvtk.ClipVolume(input=grid.structured_points_output,
                                clip_function=self.vtk_cylinder,
                                inside_out=1)

        clip2 = tvtk.ClipDataSet(input=clip1.output,
                                 clip_function=self.vtk_quadric,
                                 inside_out=1)

        topoly = tvtk.GeometryFilter(input=clip2.output)
        norms = tvtk.PolyDataNormals(input=topoly.output)

        transF = tvtk.TransformFilter(input=norms.output,
                                      transform=self.transform)
        self.config_pipeline()
        #clip1.update()
        grid.modified()
        return transF
예제 #5
0
    def _pipeline_default(self):
        self.config_profile()
        self.config_pipeline()
        source = self.data_source

        def execute():
            xy = self._vtk_profile()
            z = numpy.ones(xy.shape[0]) * self.z_height_1
            points = numpy.column_stack((xy, z))

            cells = [
                list(range(len(z))),
            ]

            output = source.poly_data_output
            output.points = points
            output.polys = cells

        source.set_execute_method(execute)
        print("Made PIPELINE")

        extrude = self.extrude
        extrude.input_connection = source.output_port

        t = self.transform
        transf = tvtk.TransformFilter(input_connection=extrude.output_port,
                                      transform=t)
        return transf
예제 #6
0
    def _pipeline_default(self):
        source = self.data_source

        def execute():
            xy = self.get_real_profile()
            #print "extrude1:",profile[:3]
            #xy = np.column_stack((profile[:][0],profile[:][1]))
            #print "extrude2: ",xy[:3]
            z = numpy.ones(xy.shape[0]) * self.z_height_1
            points = numpy.column_stack((xy, z))

            cells = [
                list(range(len(z))),
            ]

            output = source.poly_data_output
            output.points = points
            output.lines = cells
            print("cells: ", type(output))

        source.set_execute_method(execute)

        self.extrude.scale_factor = self.z_height_2 - self.z_height_1  #mm, put here because it wasn;t being initialized
        if self.trace_ends:
            print("drew ends")
            self.extrude.capping = True
        extrude = self.extrude
        extrude.input = source.output
        print("extrude: ", extrude.input)
        t = self.transform
        transf = tvtk.TransformFilter(input_connection=extrude.output_port,
                                      transform=t)
        return transf
예제 #7
0
    def _pipeline_default(self):
        grid = self.vtk_grid
        #grid.set_execute_method(self.create_grid)
        grid.modified()

        trans = tvtk.Transform()
        trans.rotate_x(90.)
        cyl = self.vtk_cylinder
        cyl.transform = trans

        clip1 = tvtk.ClipVolume(input_connection=grid.output_port,
                                clip_function=self.vtk_cylinder,
                                inside_out=1)

        self.clip2.set(input_connection=clip1.output_port,
                       clip_function=self.vtk_sphere,
                       inside_out=1)

        topoly = tvtk.GeometryFilter(input_connection=self.clip2.output_port)
        norms = tvtk.PolyDataNormals(input_connection=topoly.output_port)

        transF = tvtk.TransformFilter(input_connection=norms.output_port,
                                      transform=self.transform)
        self.config_pipeline()
        grid.modified()
        return transF
예제 #8
0
 def _pipeline_default(self):
     cyl = self.vtk_disk
     norms = tvtk.PolyDataNormals(input_connection=cyl.output_port)
     
     tube = tvtk.TubeFilter(input_connection=self.line.output_port)
     
     append = tvtk.AppendPolyData()
     append.add_input_connection(norms.output_port)
     append.add_input_connection(tube.output_port)
     
     transF1 = tvtk.TransformFilter(input_connection=append.output_port, 
                                    transform=self.cyl_trans)
     
     transF2 = tvtk.TransformFilter(input_connection=transF1.output_port, 
                                    transform=self.transform)
     self.config_pipeline()
     return transF2
예제 #9
0
    def get_actors(self, scene):
        actors = []

        sList = [self.f1_glyph, self.f2_glyph]
        cList = [(0, 1, 0), (1, 0, 0)]

        for s, c in zip(sList, cList):
            s.radius = 1.0
            map = tvtk.PolyDataMapper(input_connection=s.output_port)
            act = tvtk.Actor(mapper=map, user_transform=self.transform)
            act.property.color = c
            actors.append(act)

        line = tvtk.LineSource(point1=(-100, 0, 0), point2=(100, 0, 0))
        t_line = tvtk.TransformFilter(
            input_connection=line.output_port,
            transform=self.ellipse_trans.linear_inverse)
        map = tvtk.PolyDataMapper(input_connection=t_line.output_port)
        act = tvtk.Actor(mapper=map, user_transform=self.transform)
        act.property.color = (0, 0, 0)
        actors.append(act)

        l1 = tvtk.VectorText(text="F1")
        l2 = tvtk.VectorText(text="F2")
        m1 = tvtk.PolyDataMapper(input_connection=l1.output_port)
        m2 = tvtk.PolyDataMapper(input_connection=l2.output_port)
        act1 = self.f1_act
        act2 = self.f2_act

        act1.mapper = m1
        act2.mapper = m2

        scale = (5, 5, 5)
        act1.scale = scale
        act2.scale = scale

        act1.property.color = (0, 0, 0)
        act2.property.color = (0, 0, 0)

        act1.position = self.focus1
        act2.position = self.focus2

        def on_editor(new_ed):
            if new_ed is not None:
                act1.camera = new_ed._camera
                act2.camera = new_ed._camera

        scene.on_trait_change(on_editor, "scene_editor")

        actors.append(act1)
        actors.append(act2)

        for actor in actors:
            self.actors.append(actor)
            self.foci_Actors.append(actor)
            actor.visibility = self.show_foci

        return self.actors
예제 #10
0
 def _actors_default(self):
     source = self.plane_src
     trans_f = tvtk.TransformFilter(input_connection=source.output_port,
                     transform = self.transform)
     map = tvtk.PolyDataMapper(input_connection=trans_f.output_port)
     act = tvtk.Actor(mapper=map)
     actors = tvtk.ActorCollection()
     actors.append(act)
     return actors
예제 #11
0
    def _pipeline_default(self):
        cyl = self.cyl
        cyl.resolution = 63  #use a prime no to avoid vertex degeneracy
        # Important to ensure the cylinder end doesn't coincide with the corner of the cube
        cyl.height = self.thickness - 1
        cyl.radius = self.diameter / 2.0
        cyl.center = (0, (self.thickness / 2) - 1, 0)
        print("thickness", self.thickness)
        print("diameter", self.diameter)
        size = max(self.thickness, self.diameter) * 2
        cube = self.cube
        cube.set_bounds(0, size, 0, size, 0, size)

        tf = tvtk.Transform()
        tf.post_multiply()
        tf.rotate_x(-45.0)
        tf.rotate_wxyz(35.26438968275, 0, 0, 1)

        tfilt = tvtk.TransformFilter(input_connection=cube.output_port)
        tfilt.transform = tf

        tri1 = tvtk.TriangleFilter(input_connection=cyl.output_port)
        tri2 = tvtk.TriangleFilter(input_connection=tfilt.output_port)
        tri1.update()
        tri2.update()

        intersect = tvtk.BooleanOperationPolyDataFilter()
        intersect.operation = "intersection"
        intersect.add_input_connection(0, tri1.output_port)
        intersect.add_input_connection(1, tri2.output_port)
        intersect.tolerance = 1e-8

        tf2 = tvtk.Transform()
        tf2.rotate_x(90.0)
        tf2.rotate_y(60.0)
        orient = tvtk.TransformFilter(input_connection=intersect.output_port,
                                      transform=tf2)

        norm = tvtk.PolyDataNormals(input_connection=orient.output_port)
        transF = tvtk.TransformFilter(input_connection=norm.output_port,
                                      transform=self.transform)
        self.config_pipeline()
        return transF
예제 #12
0
 def _pipeline_default(self):
     source = self.data_source
     def execute():
         polydata = self._polydata
         output = source.poly_data_output
         output.shallow_copy(polydata)
     source.set_execute_method(execute)
     t = self.transform
     transf = tvtk.TransformFilter(input_connection=source.output_port, 
                                   transform=t)
     tri = tvtk.TriangleFilter(input_connection=transf.output_port)
     return tri
예제 #13
0
    def _pipeline_default(self):

        self.body.set_execute_method(self.calc_profile)

        extrude = tvtk.LinearExtrusionFilter(input=self.body.output)
        extrude.extrusion_type = "vector"
        extrude.vector = (0, 1, 0)
        extrude.scale_factor = self.length

        # cut parabolics.py here and inserted from prisms.py
        t = self.transform
        transF = tvtk.TransformFilter(input=extrude.output, transform=t)

        return transF
예제 #14
0
    def _pipeline_default(self):
        grid = self.vtk_grid
        #grid.set_execute_method(self.create_grid)
        grid.modified()

        trans = tvtk.Transform()
        trans.rotate_x(90.)
        cyl = self.vtk_cylinder
        cyl.transform = trans

        clip1 = tvtk.ClipVolume(input_connection=grid.output_port,
                                clip_function=self.vtk_cylinder,
                                inside_out=1)

        self.clip2.set(input_connection=clip1.output_port,
                       clip_function=self.vtk_sphere1,
                       inside_out=1)

        self.clip3.set(input_connection=self.clip2.output_port,
                       clip_function=self.vtk_sphere3,
                       inside_out=1)

        clip4 = tvtk.ClipDataSet(input_connection=self.clip3.output_port,
                                 clip_function=self.vtk_sphere2,
                                 inside_out=1)

        clip5 = tvtk.ClipDataSet(input_connection=self.clip3.output_port,
                                 clip_function=self.vtk_sphere2,
                                 inside_out=0)

        topoly = tvtk.GeometryFilter(input_connection=clip4.output_port)
        topoly2 = tvtk.GeometryFilter(input_connection=clip5.output_port)

        append = tvtk.AppendPolyData()
        append.add_input_connection(topoly.output_port)
        append.add_input_connection(topoly2.output_port)

        norms = tvtk.PolyDataNormals(input_connection=append.output_port)

        transF = tvtk.TransformFilter(input_connection=norms.output_port,
                                      transform=self.transform)

        self.on_geometry_changed()
        self.config_pipeline()
        grid.modified()
        return transF
예제 #15
0
    def _pipeline_default(self):
        #pretty much just copied this from extruded_interpolant, and added three profile points
        source = self.data_source

        def execute():

            opening = .5 * self.entry_width
            d = self.depth
            slant = self.slant

            x1 = opening
            y1 = 0
            x2 = opening - (d / np.tan(np.radians(slant)))
            y2 = -d

            profile = self.get_real_profile()
            profile[0] = np.append(profile[0], [x2, -x2], 1)
            profile[1] = np.append(profile[1], [y2, y2], 1)
            xy = np.column_stack((profile[:][0], profile[:][1]))
            z = np.ones(xy.shape[0]) * self.z_height_1
            points = np.column_stack((xy, z))

            cells = [
                list(range(len(z))),
            ]

            output = source.poly_data_output
            output.points = points
            output.polys = cells

        source.set_execute_method(execute)

        self.extrude.scale_factor = self.z_height_2 - self.z_height_1  #mm, put here because it wasn;t being initialized
        if self.trace_ends:
            print("drew ends")
            self.extrude.capping = True
        extrude = self.extrude
        extrude.input = source.output

        t = self.transform
        transf = tvtk.TransformFilter(input_connection=extrude.output_port,
                                      transform=t)
        return transf
예제 #16
0
    def _pipeline_default(self):
        grid = self.vtk_grid
        #grid.set_execute_method(self.create_grid)
        grid.modified()

        quad = self.vtk_quadric
        quad.transform = self.ellipse_trans

        clip = tvtk.ClipVolume(input_connection=grid.output_port,
                               clip_function=quad,
                               inside_out=0)

        topoly = tvtk.GeometryFilter(input_connection=clip.output_port)
        norm = tvtk.PolyDataNormals(input_connection=topoly.output_port)
        transF = tvtk.TransformFilter(input_connection=norm.output_port,
                                      transform=self.transform)
        self.config_pipeline()
        grid.modified()
        return transF
예제 #17
0
    def __init__(self):
        self.el = 0.0
        self.az = 0.0

        # Create an arrow.
        arrow = tvtk.ArrowSource()

        # Transform it suitably so it is oriented correctly.
        t = tvtk.Transform()
        tf = tvtk.TransformFilter()
        tf.transform = t
        t.rotate_y(90.0)
        t.translate((-2, 0, 0))
        configure_input_data(tf, arrow.output)

        mapper = tvtk.PolyDataMapper()
        configure_input(mapper, tf)

        self.actor = actor = tvtk.Follower()
        actor.mapper = mapper
        prop = actor.property
        prop.color = 0, 1, 1
        prop.ambient = 0.5
        prop.diffuse = 0.5
예제 #18
0
 def setup_pipeline(self):
     self._transform = tvtk.Transform()
     self.widget = tvtk.BoxWidget(place_factor=1.1)
     self.filter = tvtk.TransformFilter()
     super(TransformData, self).setup_pipeline()
예제 #19
0
 def _pipeline_default(self):
     transf = tvtk.TransformFilter(input=self.vtk_disk.output,
                                   transform=self.transform)
     return transf