예제 #1
0
from compas.datastructures import Mesh
from compas.topology import trimesh_remesh
from compas.topology import delaunay_from_points
from compas.topology import voronoi_from_delaunay

from compas.geometry import pointcloud_xy

from compas.plotters import MeshPlotter

points = pointcloud_xy(10, (0, 10))
faces = delaunay_from_points(points)
delaunay = Mesh.from_vertices_and_faces(points, faces)

trimesh_remesh(delaunay, 1.0, allow_boundary_split=True)

points = [delaunay.vertex_coordinates(key) for key in delaunay.vertices()]
faces = delaunay_from_points(points)
delaunay = Mesh.from_vertices_and_faces(points, faces)

voronoi = voronoi_from_delaunay(delaunay)

lines = []
for u, v in voronoi.edges():
    lines.append({
        'start': voronoi.vertex_coordinates(u, 'xy'),
        'end': voronoi.vertex_coordinates(v, 'xy'),
        'width': 1.0
    })

plotter = MeshPlotter(delaunay, figsize=(10, 6))
예제 #2
0
#         voronoi.vertex[key]['y'] = center[1]
#         voronoi.vertex[key]['z'] = center[2]

#     return voronoi

# ==============================================================================
# Main
# ==============================================================================

if __name__ == "__main__":

    from compas.datastructures import Mesh
    from compas.geometry import pointcloud_xy
    from compas_plotters import MeshPlotter

    points = pointcloud_xy(200, (0, 50))
    faces = delaunay_from_points(points)

    delaunay = Mesh.from_vertices_and_faces(points, faces)

    plotter = MeshPlotter(delaunay, figsize=(8, 5))

    facecolor = {
        fkey: (255, 0, 0) if delaunay.face_normal(fkey)[2] > 0 else (0, 0, 255)
        for fkey in delaunay.faces()
    }

    plotter.draw_vertices(keys=list(delaunay.vertices_on_boundary()),
                          radius=0.5)
    plotter.draw_faces(facecolor=facecolor)
    plotter.draw_edges(keys=list(delaunay.edges_on_boundary()))
예제 #3
0
파일: kdtree.py 프로젝트: sehlstrom/compas
            return sorted(nnbrs, key=lambda nnbr: nnbr[2])
        return nnbrs


# ==============================================================================
# Main
# ==============================================================================

if __name__ == '__main__':

    from compas.geometry import pointcloud_xy
    from compas.plotters import Plotter

    plotter = Plotter()

    cloud = pointcloud_xy(999, (-500, 500))
    point = cloud[0]

    tree = KDTree(cloud)

    n = 50
    nnbrs = []
    exclude = set()

    for i in range(n):
        nnbr = tree.nearest_neighbor(point, exclude)
        nnbrs.append(nnbr)
        exclude.add(nnbr[1])

    for nnbr in nnbrs:
        print(nnbr)
예제 #4
0
from random import random
from compas.geometry import pointcloud_xy
from compas_plotters import Plotter
from compas.utilities import i_to_green
from compas.utilities import i_to_red

cloud = pointcloud_xy(20, (0, 10), (0, 5))

points = []
for xyz in cloud:
    n = random()
    points.append({
        'pos': xyz,
        'radius': n,
        'edgecolor': i_to_green(n),
        'facecolor': i_to_red(n)
    })

plotter = Plotter(figsize=(8, 5))
plotter.draw_points(points)
plotter.show()
from random import random
from compas.geometry import pointcloud_xy
from compas.utilities import i_to_green
from compas.utilities import i_to_red
import compas_rhino

pc = pointcloud_xy(10, (0, 10), (-3, 3))
print(pc)

points = []
for pt in pc:
    n = random()
    points.append({'pos': pt, 'color': i_to_red(n)})

compas_rhino.draw_points(points, layer="points", clear=True)
"""
cloud = pointcloud_xy(200, (0, 10), (0, 5))

points = []
circles = []
for xyz in cloud:
    n = random()
    points.append({'pos': xyz, 'color': i_to_red(n)})
    circles.append({'plane': [xyz, [0,0,1]], 'color': i_to_red(n), 'radius':n})

layerp = "points"
layerc = "circles"

compas_rhino.draw_points(points, layer=layerp, clear=True)
compas_rhino.draw_circles(circles, layer=layerp, clear=False)
"""
예제 #6
0
    return lower[:-1] + upper[:-1]


# ==============================================================================
# Main
# ==============================================================================

if __name__ == "__main__":

    # todo: distinguish between vertices of hull and internal vertices

    from compas.geometry import pointcloud_xy
    from compas.plotters import Plotter
    from compas.utilities import pairwise

    cloud = pointcloud_xy(50, (0, 100), (0, 100))
    hull = convex_hull_xy(cloud)

    points = []
    for a in cloud:
        points.append({'pos': a, 'facecolor': '#0000ff', 'radius': 0.5})

    lines = []
    for a, b in pairwise(hull + hull[:1]):
        lines.append({'start': a, 'end': b, 'color': '#ff0000', 'width': 2.0})

    plotter = Plotter()

    plotter.draw_points(points)
    plotter.draw_lines(lines)
예제 #7
0
from compas.geometry import pointcloud_xy
from compas_plotters import Plotter

cloud = pointcloud_xy(20, xbounds=(0, 10), ybounds=(0, 5))

points = []
for xyz in cloud:
    points.append({'pos': xyz, 'radius': 0.1})

plotter = Plotter(figsize=(8, 5))
plotter.draw_points(points)
plotter.show()
예제 #8
0
        vectorized distance function
        """
        alldistances = [((x - p[0])**2 + (y - p[1])**2 + (z - p[2])**2)
                        for p in self.points]

        print(len(alldistances), type(alldistances[0]))


if __name__ == "__main__":
    # from compas.geometry import Point
    import numpy as np
    import matplotlib.pyplot as plt
    from compas.geometry import pointcloud_xy

    dim = 300
    points = pointcloud_xy(66, (0, dim))
    b = Voronoi(points=points, thickness=2.5)

    # b.get_distance((2,3,4))
    #x, y, z = np.ogrid[-14:14:112j, -12:12:96j, -10:10:80j]

    #m = b.get_distance_numpy(x, y, z)

    # plt.imshow(m[:, :, 25].T, cmap='RdBu')
    # plt.colorbar()
    # plt.axis('equal')
    # plt.show()

    m = np.empty((dim, dim))
    for y in range(dim):
        s = ''