Esempio n. 1
0
 def get_color(self):
     if self.name:
         if self.name in HTML4_NAMES_TO_HEX:
             r, g, b = hex_to_rgb(HTML4_NAMES_TO_HEX[self.name])
             return [r / 255., g / 255., b / 255., 1.]
     if self.color:
         return self.color.rgba
     return None
Esempio n. 2
0
    def draw_shader(self):

        if not self.settings['faces.on']:
            return

        for node in self.nodes:
            if not hasattr(node, 'vbo'):
                continue

            if not node.settings.get("faces.on", self.settings['faces.on']):
                continue

            shaders.glUseProgram(self.shader)
            try:
                # bind data into gpu
                node.vbo.bind()
                try:
                    # tells opengl to access vertex once
                    # we call a draw function
                    glDisable(GL_POLYGON_SMOOTH)
                    glEnableClientState(GL_VERTEX_ARRAY)

                    # point at our vbo data
                    glVertexPointerf(node.vbo)
                    # actually tell opengl to draw
                    # the stuff in the VBO as a series
                    # of triangles
                    if self.activate_selection and node.widget.isSelected():
                        glUniform3f(node.shader_uniforms['face_color'], 1, 1,
                                    0)
                    else:
                        rgb = hex_to_rgb(node.settings.get("color", "#ffffff"))
                        glUniform3f(node.shader_uniforms['face_color'], *rgb)

                    glUniform1f(node.shader_uniforms['opacity'],
                                node.settings.get("opacity", 1))

                    glDrawArrays(GL_TRIANGLES, 0, node.vertex_buffer.shape[0])
                finally:
                    # cleanup, unbind the our data from gpu ram
                    # and tell opengl that it should not
                    # expect vertex arrays anymore
                    node.vbo.unbind()
                    glDisableClientState(GL_VERTEX_ARRAY)
            finally:
                # stop using our shader
                shaders.glUseProgram(0)
Esempio n. 3
0
    def get_color(self):
        """Get the RGBA color array of the material.

        Returns
        -------
        :obj:`list` of :obj:`float`
            List of 4 floats (``0.0-1.0``) indicating RGB colors and Alpha channel of the material.

        Examples
        --------
        >>> material = Material('aqua')
        >>> material.get_color()
        [0.0, 1.0, 1.0, 1.0]
        """
        if self.name:
            if self.name in HTML4_NAMES_TO_HEX:
                r, g, b = hex_to_rgb(HTML4_NAMES_TO_HEX[self.name])
                return [r / 255., g / 255., b / 255., 1.]
        if self.color:
            return self.color.rgba
        return None
Esempio n. 4
0
polylines = []
for points in pointsets:
    points = [Point(*point) for point in points]
    polyline = Polyline(points)
    polylines.append(polyline)

# ==============================================================================
# Visualize
# ==============================================================================

meshartist = MeshArtist(None)

meshartist.mesh = Mesh.from_vertices_and_faces(*A)
meshartist.layer = "CGAL::Intersections::A"
meshartist.clear_layer()
meshartist.draw_faces(join_faces=True, color=hex_to_rgb('#222222'))

meshartist.mesh = Mesh.from_vertices_and_faces(*B)
meshartist.layer = "CGAL::Intersections::B"
meshartist.clear_layer()
meshartist.draw_faces(join_faces=True, color=hex_to_rgb('#888888'))

polylineartist = PolylineArtist(None, layer="CGAL::Intersections::Polylines")
polylineartist.clear_layer()
pointartist = PointArtist(None, layer='CGAL::Intersections::Points')
pointartist.clear_layer()

for polyline in polylines:
    polylineartist.primitive = polyline
    polylineartist.color = hex_to_rgb('#ffffff')
    polylineartist.draw()
Esempio n. 5
0
 def block_array_faces_color_back(self, block):
     return flist(
         hex_to_rgb(self.settings['faces.color:back']) for key in block.xyz)
Esempio n. 6
0
 def block_array_edges_color(self, block):
     return flist(
         hex_to_rgb(self.settings['edges.color']) for key in block.vertices)
Esempio n. 7
0
 def interface_array_faces_color_back(self, interface):
     return flist(
         hex_to_rgb(self.settings['interfaces.color:back'])
         for key in interface.xyz)
Esempio n. 8
0
 def array_faces_color_back(self):
     return flist(
         hex_to_rgb(self.settings['faces.color:back'])
         for key in self.mesh.xyz)
Esempio n. 9
0
 def array_edges_color(self):
     return flist(
         hex_to_rgb(self.settings['edges.color'])
         for key in self.mesh.vertices)
Esempio n. 10
0
    def make_buffers(self):

        # create instances map only at first time
        if not hasattr(self, 'intances'):
            self.intances = {}
            for i, m in enumerate(self.nodes):
                m.instance_color = self.random_hex()
                self.intances[m.instance_color] = m

                vertices = list(m.view.vertices)
                m.vertices_instance_color = []
                for v in vertices:
                    _hex = self.random_hex()
                    m.vertices_instance_color.append(_hex)
                    self.intances[_hex] = {'vertex': v, 'mesh': i}

                edges = list(m.view.edges)
                m.edge_instance = []
                m.edges_instance_color = []
                m.edge_xyz = []
                for j, e in enumerate(edges):

                    v1, v2 = e
                    m.edge_xyz.extend(m.view.xyz[v1])
                    m.edge_xyz.extend(m.view.xyz[v2])

                    m.edge_instance.extend([j * 2, j * 2 + 1])

                    _hex = self.random_hex()
                    m.edges_instance_color.append(_hex)
                    m.edges_instance_color.append(_hex)
                    self.intances[_hex] = {'edge': e, 'mesh': i}

        self.buffers = []
        for node in self.nodes:

            # print(node.settings)
            xyz = flist(node.view.xyz)
            vertices = list(node.view.vertices)
            edges = flist(node.view.edges)
            faces = flist(node.view.faces)
            faces_back = flist(face[::-1] for face in node.view.faces)
            vertices_instance_color = flist(
                hex_to_rgb(vc) for vc in node.vertices_instance_color)
            edges_instance_color = flist(
                hex_to_rgb(c) for c in node.edges_instance_color)
            instance_color = flist(
                hex_to_rgb(node.instance_color) for key in node.view.xyz)

            if hasattr(node.view, 'vertices_color'):
                vertices_color = flist(vc for vc in node.view.vertices_color)
            else:
                vertices_color = node.settings.get("vertices.color", "#000000")
                vertices_color = flist(
                    hex_to_rgb(vertices_color) for key in node.view.vertices)

            edges_color = node.settings.get("edges.color", "#000000")
            face_color = node.settings.get("color", "#cccccc")

            edges_color = flist(hex_to_rgb(edges_color) for key in edges)
            faces_color = flist(
                hex_to_rgb(face_color) for key in node.view.xyz)
            faces_color_back = flist(
                hex_to_rgb(face_color) for key in node.view.xyz)

            vertices_selected_color = flist(
                hex_to_rgb('#999900') for key in node.view.vertices)
            edges_selected_color = flist(
                hex_to_rgb('#ffff00') for key in edges)
            faces_selected_color = flist(
                hex_to_rgb('#ffff00') for key in node.view.xyz)
            faces_selected_color_back = flist(
                hex_to_rgb('#ffff00') for key in node.view.xyz)

            if self.activate_selection:
                is_selected = node.widget.isSelected
            else:
                is_selected = lambda: False

            buffer = {
                'isSelected':
                is_selected,
                'xyz':
                self.make_vertex_buffer(xyz),
                'vertices':
                self.make_index_buffer(vertices),
                'edges':
                self.make_index_buffer(edges),
                'edges.instance':
                self.make_index_buffer(node.edge_instance),
                'faces':
                self.make_index_buffer(faces),
                'faces:back':
                self.make_index_buffer(faces_back),
                'vertices.color':
                self.make_vertex_buffer(vertices_color, dynamic=True),
                'vertices.instance.color':
                self.make_vertex_buffer(vertices_instance_color, dynamic=True),
                'vertices.selected.color':
                self.make_vertex_buffer(vertices_selected_color, dynamic=True),
                'edges.color':
                self.make_vertex_buffer(edges_color, dynamic=True),
                'edges.xyz':
                self.make_vertex_buffer(node.edge_xyz),
                'edges.instance.color':
                self.make_vertex_buffer(edges_instance_color, dynamic=True),
                'edges.selected.color':
                self.make_vertex_buffer(edges_selected_color, dynamic=True),
                'instance.color':
                self.make_vertex_buffer(instance_color),
                'edges.width':
                node.settings.get("edges.width",
                                  self.settings['edges.width:value']),
                'vertices.size':
                node.settings.get("vertices.size",
                                  self.settings['vertices.size:value']),
                'vertices.on':
                node.settings.get("vertices.on", self.settings['vertices.on']),
                'edges.on':
                node.settings.get("edges.on", self.settings['edges.on']),
                'faces.on':
                node.settings.get("faces.on", self.settings['faces.on']),
                'n':
                len(xyz),
                'v':
                len(vertices),
                'e':
                len(edges),
                'f':
                len(faces)
            }

            if not self.use_shaders:
                buffer.update({
                    'faces.color':
                    self.make_vertex_buffer(faces_color, dynamic=True),
                    'faces.color:back':
                    self.make_vertex_buffer(faces_color_back, dynamic=True),
                    'faces.selected.color':
                    self.make_vertex_buffer(faces_selected_color,
                                            dynamic=True),
                    'faces.selected.color:back':
                    self.make_vertex_buffer(faces_selected_color_back,
                                            dynamic=True),
                })

            self.buffers.append(buffer)

        if self.use_shaders:
            self.create_shader()
Esempio n. 11
0
    def make_buffers(self):

        # create instances map only at first time
        if not hasattr(self, 'intances'):
            self.intances = {}
            for i, m in enumerate(self.meshes):
                m.instance_color = self.random_hex()
                self.intances[m.instance_color] = m

                vertices = list(m.view.vertices)
                m.vertices_instance_color = []
                for v in vertices:
                    _hex = self.random_hex()
                    m.vertices_instance_color.append(_hex)
                    self.intances[_hex] = {'vertex': v, 'mesh': i}

                edges = list(m.view.edges)
                m.edge_instance = []
                m.edges_instance_color = []
                m.edge_xyz = []
                for j, e in enumerate(edges):

                    v1, v2 = e
                    m.edge_xyz.extend(m.view.xyz[v1])
                    m.edge_xyz.extend(m.view.xyz[v2])

                    m.edge_instance.extend([j * 2, j * 2 + 1])

                    _hex = self.random_hex()
                    m.edges_instance_color.append(_hex)
                    m.edges_instance_color.append(_hex)
                    self.intances[_hex] = {'edge': e, 'mesh': i}

        self.buffers = []
        for m in self.meshes:
            xyz = flist(m.view.xyz)
            vertices = list(m.view.vertices)
            edges = flist(m.view.edges)
            faces = flist(m.view.faces)
            faces_back = flist(face[::-1] for face in m.view.faces)
            vertices_color = flist(
                hex_to_rgb('#000000') for key in m.view.vertices)
            vertices_instance_color = flist(
                hex_to_rgb(vc) for vc in m.vertices_instance_color)
            edges_color = flist(hex_to_rgb('#333333') for key in m.view.edges)
            edges_instance_color = flist(
                hex_to_rgb(c) for c in m.edges_instance_color)

            if m.widget.isSelected():
                # default selection color
                face_color = '#ffff00'
            else:
                face_color = m.color

            faces_color = flist(hex_to_rgb(face_color) for key in m.view.xyz)
            faces_color_back = flist(
                hex_to_rgb(face_color) for key in m.view.xyz)
            instance_color = flist(
                hex_to_rgb(m.instance_color) for key in m.view.xyz)

            self.buffers.append({
                'xyz':
                self.make_vertex_buffer(xyz),
                'vertices':
                self.make_index_buffer(vertices),
                'edges':
                self.make_index_buffer(edges),
                'edges.instance':
                self.make_index_buffer(m.edge_instance),
                'faces':
                self.make_index_buffer(faces),
                'faces:back':
                self.make_index_buffer(faces_back),
                'vertices.color':
                self.make_vertex_buffer(vertices_color, dynamic=True),
                'vertices.instance.color':
                self.make_vertex_buffer(vertices_instance_color, dynamic=True),
                'edges.color':
                self.make_vertex_buffer(edges_color, dynamic=True),
                'edges.xyz':
                self.make_vertex_buffer(m.edge_xyz),
                'edges.instance.color':
                self.make_vertex_buffer(edges_instance_color, dynamic=True),
                'faces.color':
                self.make_vertex_buffer(faces_color, dynamic=True),
                'faces.color:back':
                self.make_vertex_buffer(faces_color_back, dynamic=True),
                'instance.color':
                self.make_vertex_buffer(instance_color),
                'n':
                len(xyz),
                'v':
                len(vertices),
                'e':
                len(edges),
                'f':
                len(faces)
            })