# ========================================================================== 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