Example #1
0
def test_from_ploygons():
    polygon = [[[1.0, 0.0, 3.0], [1.0, 1.25, 0.0], [1.5, 0.5, 0.0]],
               [[1.0, 0.0, 3.0], [1.0, 5.25, 0.0], [1.5, 0.5, 0.0]]]
    mesh = Mesh.from_polygons(polygon)
    assert mesh.number_of_faces() == 2
    assert mesh.number_of_vertices() == 4
    assert mesh.number_of_edges() == 5
for fkey in mesh.faces():
    centroids[geometric_key(mesh.face_centroid(fkey))] = fkey
    vectors[fkey] = mesh.face_attribute(fkey, tag)

# ==========================================================================
# Rebuild mesh - necessary to match ordering of collection.set(array)! 
# ==========================================================================

polygons = []
for fkey in mesh.faces():
    x, y, z = mesh.face_centroid(fkey)
    if x >= x_lim and y >= y_lim:
        polygons.append(mesh.face_coordinates(fkey))

mesh = Mesh.from_polygons(polygons)
mesh_unify_cycles(mesh)

for fkey in mesh.faces():
    gkey = geometric_key(mesh.face_centroid(fkey))
    ofkey = centroids[gkey]
    vector = vectors[ofkey]
    mesh.face_attribute(fkey, tag, vector)

# =============================================================================
# Align vectors
# =============================================================================

# convexity of the resulting distribution seems to be beneficial. 
# in other words, single mode distributions produce nicer results than double
# mode. double mode distributions arise aligning with global y, whereas the good
Example #3
0
# Viz
# ==============================================================================

viewer = App()

nodes = []
blocks = []
interfaces = []
interactions = []

for node in assembly.nodes():
    nodes.append(Point(* assembly.node_coordinates(node)))
    blocks.append(assembly.node_attribute(node, 'block'))

for edge in assembly.edges():
    interface = assembly.edge_attribute(edge, 'interface')
    polygon = Polygon(interface.points)
    interfaces.append(Mesh.from_polygons([polygon]))

for edge in assembly.edges():
    a = Point(* assembly.node_coordinates(edge[0]))
    b = Point(* assembly.node_coordinates(edge[1]))
    interactions.append(Line(a, b))

viewer.add(Collection(nodes))
viewer.add(Collection(blocks), show_faces=False, show_edges=True)
viewer.add(Collection(interfaces), show_edges=False, color=(0, 0, 1), opacity=0.5)
viewer.add(Collection(interactions))

viewer.run()
Example #4
0
viewer = App()

nodes = []
blocks = []
interfaces = []
sides = []
colors = []

for node in assembly.nodes():
    nodes.append(Point(* assembly.node_coordinates(node)))
    blocks.append(assembly.node_attribute(node, 'block'))

for node in assembly.nodes():
    block = assembly.node_attribute(node, 'block')
    faces = sorted(block.faces(), key=lambda face: block.face_area(face))[:-2]
    for face in faces:
        side = Polygon(block.face_coordinates(face))
        mesh = Mesh.from_polygons([side])
        sides.append(mesh)

for mesh in sides:
    face = list(mesh.faces())[0]
    dev = mesh.face_flatness(face)
    colors.append(i_to_red(dev, normalize=True))

viewer.add(Collection(blocks), show_faces=False, show_edges=True)
viewer.add(Collection(sides), colors=colors, show_edges=False)

viewer.run()
# Visualisation
# ==============================================================================

Object.register(Block, MeshObject)

viewer = App()

for node in assembly.nodes():
    point = Point(*assembly.node_attributes(node, 'xyz'))
    block = assembly.node_attribute(node, 'block')

    viewer.add(point, size=10, color=(0, 0, 0))

    viewer.add(block,
               show_faces=assembly.node_attribute(node, 'is_support'),
               show_edges=True,
               facecolor=(1.0, 0, 0))

for edge in assembly.edges():
    line = Line(*assembly.edge_coordinates(*edge))
    interface = assembly.edge_attribute(edge, 'interface')

    viewer.add(line, linewidth=3, color=(0, 0.7, 0))

    viewer.add(Mesh.from_polygons([interface.points]),
               show_edges=False,
               facecolor=(0.5, 0.5, 1.0),
               linecolor=(0, 0, 1.0))

viewer.show()