예제 #1
0
def are_same_edges(occedge1, occedge2):
    """
    This function checks if the two OCCedges are the same.
 
    Parameters
    ----------
    occedge1 : OCCedge
        The first edge to be analysed.
        
    occedge2 : OCCedge
        The second edge to be analysed.

    Returns
    -------
    True or False : bool
        If True the two edges are the same, if False the two edges are not the same.
    """
    edgepyptlist1 = fetch.points_frm_edge(occedge1)
    edgepyptlist2 = fetch.points_frm_edge(occedge2)
    if edgepyptlist1 == edgepyptlist2:
        return True
    else:
        edgepyptlist1.reverse()
        if edgepyptlist1 == edgepyptlist2:
            return True
        else:
            return False
예제 #2
0
def are_same_edges(occedge1, occedge2):
    """
    This function checks if the two OCCedges are the same.
 
    Parameters
    ----------
    occedge1 : OCCedge
        The first edge to be analysed.
        
    occedge2 : OCCedge
        The second edge to be analysed.

    Returns
    -------
    True or False : bool
        If True the two edges are the same, if False the two edges are not the same.
    """
    edgepyptlist1 = fetch.points_frm_edge(occedge1)
    edgepyptlist2 = fetch.points_frm_edge(occedge2)
    if edgepyptlist1 == edgepyptlist2:
        return True
    else:
        edgepyptlist1.reverse()
        if edgepyptlist1 == edgepyptlist2:
            return True 
        else:
            return False 
예제 #3
0
def flatten_edge_z_value(occedge, z=0):
    """
    This function flattens the Z-dimension of the OCCedge.
 
    Parameters
    ----------        
    occedge : OCCedge
        The edge to be flatten.
        
    z : float, optional
        The Z-value to flatten to. Default = 0.

    Returns
    -------
    flatten edge : OCCedge
        The flatten OCCedge.
    """
    pyptlist = fetch.points_frm_edge(occedge)
    pyptlist_2d = []
    for pypt in pyptlist:
        pypt2d = (pypt[0], pypt[1], z)
        pyptlist_2d.append(pypt2d)
    flatten_edge = construct.make_edge(pyptlist_2d[0], pyptlist_2d[1])
    return flatten_edge
예제 #4
0
파일: modify.py 프로젝트: chenkianwee/envuo
def flatten_edge_z_value(occedge, z=0):
    """
    This function flattens the Z-dimension of the OCCedge.
 
    Parameters
    ----------        
    occedge : OCCedge
        The edge to be flatten.
        
    z : float, optional
        The Z-value to flatten to. Default = 0.

    Returns
    -------
    flatten edge : OCCedge
        The flatten OCCedge.
    """
    pyptlist = fetch.points_frm_edge(occedge)
    pyptlist_2d = []
    for pypt in pyptlist:
        pypt2d = (pypt[0],pypt[1],z)
        pyptlist_2d.append(pypt2d)
    flatten_edge = construct.make_edge(pyptlist_2d[0],pyptlist_2d[1])
    return flatten_edge
예제 #5
0
def occtopo_2_collada(dae_filepath,
                      occface_list=None,
                      face_rgb_colour_list=None,
                      occedge_list=None):
    """
    This function converts OCCtopologies into a pycollada Collada class. The units are in meter.
 
    Parameters
    ----------
    occface_list : list of OCCfaces
        The geometries to be visualised with the results. The list of geometries must correspond to the list of results. Other OCCtopologies
        are also accepted, but the OCCtopology must contain OCCfaces. OCCtopology includes: OCCshape, OCCcompound, OCCcompsolid, 
        OCCsolid, OCCshell, OCCface. 
        
    dae_filepath : str
        The file path of the DAE (Collada) file.
    
    face_rgb_colour_list : list of tuple of floats, optional
        Each tuple is a r,g,b that is specifying the colour of the face. The number of colours must correspond to the number of OCCfaces.
        
    occedge_list : list of OCCedges, optional
        OCCedges to be visualised together, Default = None.
        
    Returns
    -------
    mesh : pycollada Collada class object
        The collada object from pycollada library.
    """
    import collada
    from collada import asset, material, source, geometry, scene
    import numpy
    mesh = collada.Collada()
    mesh.assetInfo.upaxis = asset.UP_AXIS.Z_UP
    mesh.assetInfo.unitmeter = 1.0
    mesh.assetInfo.unitname = "meter"

    if face_rgb_colour_list != None:
        mat_list = []
        colour_cnt = 0
        for rgb_colour in face_rgb_colour_list:
            effect = material.Effect("effect" + str(colour_cnt), [],
                                     "phong",
                                     diffuse=rgb_colour,
                                     specular=rgb_colour,
                                     double_sided=True)
            mat = material.Material("material" + str(colour_cnt),
                                    "mymaterial" + str(colour_cnt), effect)
            mesh.effects.append(effect)
            mesh.materials.append(mat)
            mat_list.append(mat)
            colour_cnt += 1

    else:
        effect = material.Effect("effect0", [],
                                 "phong",
                                 diffuse=(1, 1, 1),
                                 specular=(1, 1, 1))
        mat = material.Material("material0", "mymaterial", effect)
        mesh.effects.append(effect)
        mesh.materials.append(mat)

    edgeeffect = material.Effect("edgeeffect0", [],
                                 "phong",
                                 diffuse=(1, 1, 1),
                                 specular=(1, 1, 1),
                                 double_sided=True)
    edgemat = material.Material("edgematerial0", "myedgematerial", effect)
    mesh.effects.append(edgeeffect)
    mesh.materials.append(edgemat)

    geomnode_list = []
    shell_cnt = 0
    if occface_list:
        for occshell in occface_list:
            vert_floats = []
            normal_floats = []
            vcnt = []
            indices = []

            face_list = fetch.topo_explorer(occshell, "face")
            vert_cnt = 0
            for face in face_list:
                wire_list = fetch.topo_explorer(face, "wire")
                nwire = len(wire_list)
                if nwire == 1:
                    pyptlist = fetch.points_frm_occface(face)
                    vcnt.append(len(pyptlist))
                    face_nrml = calculate.face_normal(face)
                    pyptlist.reverse()
                    for pypt in pyptlist:
                        vert_floats.append(pypt[0])
                        vert_floats.append(pypt[1])
                        vert_floats.append(pypt[2])

                        normal_floats.append(face_nrml[0])
                        normal_floats.append(face_nrml[1])
                        normal_floats.append(face_nrml[2])

                        indices.append(vert_cnt)
                        vert_cnt += 1

                if nwire > 1:
                    tri_face_list = construct.simple_mesh(face)
                    for tface in tri_face_list:
                        pyptlist = fetch.points_frm_occface(tface)
                        vcnt.append(len(pyptlist))
                        face_nrml = calculate.face_normal(tface)
                        pyptlist.reverse()
                        for pypt in pyptlist:
                            vert_floats.append(pypt[0])
                            vert_floats.append(pypt[1])
                            vert_floats.append(pypt[2])

                            normal_floats.append(face_nrml[0])
                            normal_floats.append(face_nrml[1])
                            normal_floats.append(face_nrml[2])

                            indices.append(vert_cnt)
                            vert_cnt += 1

            vert_id = "ID" + str(shell_cnt) + "1"
            vert_src = source.FloatSource(vert_id, numpy.array(vert_floats),
                                          ('X', 'Y', 'Z'))
            normal_id = "ID" + str(shell_cnt) + "2"
            normal_src = source.FloatSource(normal_id,
                                            numpy.array(normal_floats),
                                            ('X', 'Y', 'Z'))
            geom = geometry.Geometry(mesh, "geometry" + str(shell_cnt),
                                     "geometry" + str(shell_cnt),
                                     [vert_src, normal_src])
            input_list = source.InputList()
            input_list.addInput(0, 'VERTEX', "#" + vert_id)
            #input_list.addInput(1, 'NORMAL', "#"+normal_id)

            vcnt = numpy.array(vcnt)
            indices = numpy.array(indices)

            if face_rgb_colour_list != None:
                mat_name = "materialref" + str(shell_cnt)
                polylist = geom.createPolylist(indices, vcnt, input_list,
                                               mat_name)
                geom.primitives.append(polylist)
                mesh.geometries.append(geom)

                matnode = scene.MaterialNode(mat_name,
                                             mat_list[shell_cnt],
                                             inputs=[])
                geomnode = scene.GeometryNode(geom, [matnode])
                geomnode_list.append(geomnode)
            else:
                mat_name = "materialref"
                polylist = geom.createPolylist(indices, vcnt, input_list,
                                               mat_name)
                geom.primitives.append(polylist)
                mesh.geometries.append(geom)

                matnode = scene.MaterialNode(mat_name, mat, inputs=[])
                geomnode = scene.GeometryNode(geom, [matnode])
                geomnode_list.append(geomnode)

            shell_cnt += 1

    if occedge_list:
        edge_cnt = 0
        for occedge in occedge_list:
            vert_floats = []
            indices = []
            pypt_list = fetch.points_frm_edge(occedge)
            if len(pypt_list) == 2:
                vert_cnt = 0
                for pypt in pypt_list:
                    vert_floats.append(pypt[0])
                    vert_floats.append(pypt[1])
                    vert_floats.append(pypt[2])

                    indices.append(vert_cnt)
                    vert_cnt += 1

                vert_id = "ID" + str(edge_cnt + shell_cnt) + "1"
                vert_src = source.FloatSource(vert_id,
                                              numpy.array(vert_floats),
                                              ('X', 'Y', 'Z'))
                geom = geometry.Geometry(
                    mesh, "geometry" + str(edge_cnt + shell_cnt),
                    "geometry" + str(edge_cnt + shell_cnt), [vert_src])
                input_list = source.InputList()
                input_list.addInput(0, 'VERTEX', "#" + vert_id)
                indices = numpy.array(indices)

                mat_name = "edgematerialref"
                linelist = geom.createLineSet(indices, input_list, mat_name)
                geom.primitives.append(linelist)
                mesh.geometries.append(geom)

                matnode = scene.MaterialNode(mat_name, edgemat, inputs=[])
                geomnode = scene.GeometryNode(geom, [matnode])
                geomnode_list.append(geomnode)
                edge_cnt += 1

    vis_node = scene.Node("node0", children=geomnode_list)
    myscene = scene.Scene("myscene", [vis_node])
    mesh.scenes.append(myscene)
    mesh.scene = myscene
    return mesh