Ejemplo n.º 1
0
    # ==========================================================================

    vector_tag = 'ps_1_top'
    lines = vector_lines_on_faces(mesh, vector_tag, True, factor=0.05)
    lines = [line for line in map(line_tuple_to_dict, lines)]
    for line in lines:
        line['width'] = 0.60

    # ==========================================================================
    # Instantiate StructuralMesh()
    # ==========================================================================

    str_mesh = StructuralMesh(mesh)

    for tag in tags:
        vector_field = mesh.get_faces_attribute(keys=list(mesh.faces()),
                                                name=tag)
        str_mesh.set_face_vectors(vector_field, tag, normalize=True)
        str_mesh.set_vertex_vectors_angles(tag)

    # str_mesh.get_edge_labels(vector_tag, 0.01)
    str_mesh.get_face_labels(vector_tag, 0.0)
    umbilic_keys = list(
        str_mesh.c_mesh.faces_where_predicate(
            lambda f_key, attr: attr['label'] != 1))
    not_umbilic_keys = list(
        str_mesh.c_mesh.faces_where_predicate(
            lambda f_key, attr: attr['label'] == 1))
    umbilics = [str_mesh.c_mesh.face_centroid(fkey) for fkey in umbilic_keys]

    # ==========================================================================
    # Create closest-point seeds
# 	x_vec = vec_1
# 	y_vec = cross_vectors(x_vec, [0.0, 0.0, 1.0])  # global Z
# 	y_vec = scale_vector(y_vec, y)
# 	vec_3 = normalize_vector(add_vectors(x_vec, y_vec))

# 	mesh.set_face_attribute(fkey, name=vector_tag, value=vec_3)

# ==========================================================================
# Average smooth vector field
# ==========================================================================

for _ in range(smooth_iters):
    averaged_vectors = {}
    for fkey in mesh.faces():
        nbrs = mesh.face_neighbors(fkey)
        vectors = mesh.get_faces_attribute(keys=nbrs, name=vector_tag)
        vectors.append(mesh.get_face_attribute(fkey, name=vector_tag))

        vectors = list(map(lambda x: ut.align_vector(x, vectors[0]), vectors))

        vectors = np.array(vectors)
        avg_vector = np.mean(vectors, axis=0).tolist()
        averaged_vectors[fkey] = avg_vector

    for fkey in mesh.faces():
        mesh.set_face_attribute(fkey,
                                name=vector_tag,
                                value=averaged_vectors[fkey])

# ==========================================================================
# Create PS vector lines