Source code for compas_wood.binding.binding_read_xml_polylines_and_properties

from wood_nano import read_xml_polylines_and_properties as wood_nano_read_xml_polylines_and_properties
from wood_nano import double2
from wood_nano import int2
from wood_nano import int1
from wood_nano.conversions_python import from_int1
from wood_nano.conversions_python import from_int2
from compas.geometry import Polyline
from compas.geometry import Scale
from compas.geometry import Line
from compas.geometry import Vector


[docs]def read_xml_polylines_and_properties( foldername="/home/petras/brg/2_code/wood_nano/src/wood/cmake/src/wood/dataset/", filename_of_dataset="type_plates_name_top_to_side_and_side_to_side_outofplane_annen_grid_small", scale=1e-2, ): """Read polylines from XML file with attributes: - insertion vectors per face - input_joints_types per face - input_three_valence_element_indices_and_instruction - input_adjacency per curren and next elements and their faces. Parameters ---------- foldername : str, optional Foldername. filename_of_dataset : str, optional Filename of dataset. scale : float, optional Scale. Returns ------- list[compas.geometry.Polyline] List of polylines. list[list[compas.geometry.Vector]] List of vectors. list[list[int]] List of joint types. list[list[int]] List of three valence element indices and instruction. list[int] List of adjacency. """ input_polyline_pairs_coord = double2() input_insertion_vectors_coord = double2() input_joints_types = int2() input_three_valence_element_indices_and_instruction = int2() input_adjacency = int1() wood_nano_read_xml_polylines_and_properties( foldername, filename_of_dataset, input_polyline_pairs_coord, input_insertion_vectors_coord, input_joints_types, input_three_valence_element_indices_and_instruction, input_adjacency, ) polylines = [] xform = Scale.from_factors([scale, scale, scale]) for polyline in input_polyline_pairs_coord: points = [] for i in range(0, len(polyline), 3): points.append([polyline[i], polyline[i + 1], polyline[i + 2]]) polyline = Polyline(points) polyline.transform(xform) polylines.append(polyline) vectors_lists = [] for vector in input_insertion_vectors_coord: vector_list = [] for i in range(0, len(vector), 3): vector_list.append(Vector(vector[i], vector[i + 1], vector[i + 2])) vectors_lists.append(vector_list) return ( polylines, vectors_lists, from_int2(input_joints_types), from_int2(input_three_valence_element_indices_and_instruction), from_int1(input_adjacency), )
if __name__ == "__main__": ( polylines, vectors_lists, input_joints_types, input_three_valence_element_indices_and_instruction, input_adjacency, ) = read_xml_polylines_and_properties() import sys if sys.version_info >= (3, 9): from compas_viewer import Viewer viewer = Viewer() for i in range(len(vectors_lists)): viewer.scene.add(polylines[i * 2 + 0], show_points=False) viewer.scene.add(polylines[i * 2 + 1], show_points=False) for segment, vector in zip(polylines[i * 2 + 0].lines, vectors_lists[i]): midpoint = segment.midpoint line = Line(midpoint, midpoint + vector) if line.length > 0: viewer.scene.add(line, show_points=False, lineswidth=3) else: viewer.scene.add(line.start, show_points=True, points_size=0.02) # for i in input_joints_types: # print(i) # for i in input_three_valence_element_indices_and_instruction: # print(i) # for i in range(0, len(input_adjacency), 4): # print(input_adjacency[i:i + 4]) viewer.show()