#crv_guids = rs.GetObjects('get curves', filter=4) or []
crv_guids = []
pt_guids = rs.GetObjects('get points', filter=1) or []
poles = [rs.PointCoordinates(pt) for pt in pt_guids]

settings = rs.PropertyListBox([
    'triangulation_precision', 'density_target', 'smoothing_iterations',
    'damping_value'
], [1, 3.0, 30, 0.5], 'settings for mesh on surface')
triangulation_precision, density_target, kmax, damping = settings

# topology
print 'decomposition...'
decomposition, outer_boundary, inner_boundaries, polyline_features, point_features = surface_decomposition(
    srf_guid,
    float(triangulation_precision),
    crv_guids=crv_guids,
    pt_guids=pt_guids)
coarse_quad_mesh = decomposition_mesh(srf_guid, decomposition, point_features)

# density
print 'densification...'
coarse_quad_mesh.collect_strips()
coarse_quad_mesh.set_strips_density(1)
coarse_quad_mesh.set_strips_density_target(float(density_target))
coarse_quad_mesh.densification()

# smoothing
print 'smoothing...'
constraints = automated_smoothing_surface_constraints(
    coarse_quad_mesh.get_quad_mesh(), RhinoSurface.from_guid(srf_guid))
Beispiel #2
0
import rhinoscriptsyntax as rs
from compas_pattern.algorithms.decomposition.algorithm import surface_decomposition
from compas_pattern.algorithms.decomposition.algorithm import decomposition_curves
from compas_pattern.algorithms.decomposition.algorithm import decomposition_mesh

from compas_rhino.artists import MeshArtist

guids = rs.GetObjects('get surfaces', filter=8)
crv_guids = rs.GetObjects('get curves', filter=4) or []
pt_guids = rs.GetObjects('get points', filter=1) or []
discretisation = rs.GetReal('discretisation value', 1, 0)
box = rs.BoundingBox(guids)
scale = rs.Distance(box[0], box[2])
#discretisation = 0.005 * scale
rs.EnableRedraw(False)
for srf_guid in guids:
    decomposition, outer_boundary, inner_boundaries, polyline_features, point_features = surface_decomposition(
        srf_guid, discretisation, crv_guids=crv_guids, pt_guids=pt_guids)
    mesh = decomposition_mesh(srf_guid, decomposition, point_features)
    rs.EnableRedraw(False)
    MeshArtist(mesh).draw_mesh()
    #for u, v in mesh.edges():
    #    rs.AddLine(mesh.vertex_coordinates(u), mesh.vertex_coordinates(v))
Beispiel #3
0
def singular():
    """Explore a pattern, its topology (singularities, densities and symmetries) and its geoemtry (via smoothing).

    """

    layer = rs.CurrentLayer()

    pattern_from = rs.GetString('start pattern from?',
                                strings=[
                                    'coarse_pseudo_quad_mesh',
                                    'pseudo_quad_mesh', 'surface_and_features'
                                ])

    if pattern_from == 'coarse_pseudo_quad_mesh':
        guid = rs.GetObject('get coarse quad mesh', filter=32)
        vertices, faces = RhinoMesh.from_guid(guid).get_vertices_and_faces()
        clean_faces(faces)
        poles = []
        #print(faces)
        for face in faces:
            if len(face) != 4:
                poles = [
                    rs.PointCoordinates(point)
                    for point in rs.GetObjects('get pole points', filter=1)
                ]
                break
        coarse_pseudo_quad_mesh = CoarsePseudoQuadMesh.from_vertices_and_faces_with_poles(
            vertices, faces, poles)
        coarse_pseudo_quad_mesh.collect_strips()
        print(coarse_pseudo_quad_mesh.data['attributes']['strips'])
        coarse_pseudo_quad_mesh.set_strips_density(1)
        coarse_pseudo_quad_mesh.set_quad_mesh(coarse_pseudo_quad_mesh.copy())
        coarse_pseudo_quad_mesh.set_polygonal_mesh(
            coarse_pseudo_quad_mesh.copy())
        print(coarse_pseudo_quad_mesh.data['attributes']['strips'])
    elif pattern_from == 'pseudo_quad_mesh':
        guid = rs.GetObject('get quad mesh', filter=32)
        vertices, faces = RhinoMesh.from_guid(guid).get_vertices_and_faces()
        clean_faces(faces)
        poles = []
        for face in faces:
            if len(face) != 4:
                poles = [
                    rs.PointCoordinates(point)
                    for point in rs.GetObjects('get pole points', filter=1)
                ]
                break
        coarse_pseudo_quad_mesh = CoarsePseudoQuadMesh.from_quad_mesh(
            PseudoQuadMesh.from_vertices_and_faces_with_poles(
                vertices, faces, poles))
    elif pattern_from == 'surface_and_features':
        srf_guid = rs.GetObject('get surface', filter=8)
        crv_guids = rs.GetObjects('get optional curve features', filter=4)
        if crv_guids is None:
            crv_guids = []
        pt_guids = rs.GetObjects('get optional point features', filter=1)
        if pt_guids is None:
            pt_guids = []
        coarse_pseudo_quad_mesh = surface_decomposition(
            srf_guid,
            rs.GetReal('precision', number=1.),
            crv_guids=crv_guids,
            pt_guids=pt_guids,
            output_skeleton=False)[0]
        coarse_pseudo_quad_mesh.collect_strips()
        coarse_pseudo_quad_mesh.set_strips_density(1)
        coarse_pseudo_quad_mesh.set_quad_mesh(coarse_pseudo_quad_mesh.copy())
        coarse_pseudo_quad_mesh.set_polygonal_mesh(
            coarse_pseudo_quad_mesh.copy())
        artist = rhino_artist.MeshArtist(coarse_pseudo_quad_mesh)
        guid = artist.draw_mesh()
    else:
        return 0

    while True:

        #edit = rs.GetString('edit pattern?', strings = ['topology', 'density', 'symmetry', 'geometry', 'evaluate', 'exit'])
        edit = rs.GetString('edit pattern?',
                            strings=[
                                'topology', 'density', 'symmetry', 'geometry',
                                'save', 'exit'
                            ])

        if type(guid) == list:
            rs.DeleteObjects(guid)
        else:
            rs.DeleteObject(guid)

        if edit is None or edit == 'exit':
            rs.EnableRedraw(False)
            artist = rhino_artist.MeshArtist(
                coarse_pseudo_quad_mesh.get_polygonal_mesh())
            return artist.draw_mesh()

        if edit == 'topology':
            editing_topology(coarse_pseudo_quad_mesh)
            coarse_pseudo_quad_mesh.densification()
            coarse_pseudo_quad_mesh.set_polygonal_mesh(
                coarse_pseudo_quad_mesh.get_quad_mesh().copy())

        elif edit == 'density':
            editing_density(coarse_pseudo_quad_mesh)
            coarse_pseudo_quad_mesh.set_polygonal_mesh(
                coarse_pseudo_quad_mesh.get_quad_mesh().copy())

        elif edit == 'symmetry':
            editing_symmetry(coarse_pseudo_quad_mesh)

        elif edit == 'geometry':
            editing_geometry(coarse_pseudo_quad_mesh)

        rs.EnableRedraw(False)
        artist = rhino_artist.MeshArtist(
            coarse_pseudo_quad_mesh.get_polygonal_mesh())
        guid = artist.draw_mesh()
        rs.EnableRedraw(True)

        if edit == 'save':
            save_design(coarse_pseudo_quad_mesh, layer)

        if edit == 'evaluate':
            evaluate_pattern(coarse_pseudo_quad_mesh.get_polygonal_mesh())
Beispiel #4
0
import rhinoscriptsyntax as rs
from compas_pattern.algorithms.decomposition.algorithm import surface_decomposition

from compas_rhino.artists import MeshArtist

guids = rs.GetObjects('get surfaces', filter=8)
crv_guids = rs.GetObjects('get curves', filter=4) or []
pt_guids = rs.GetObjects('get points', filter=1) or []
discretisation = rs.GetReal('discretisation value', 1, 0)
for srf_guid in guids:
    decomposition = surface_decomposition(srf_guid,
                                          discretisation,
                                          crv_guids=crv_guids,
                                          pt_guids=pt_guids,
                                          output_delaunay=False,
                                          output_skeleton=False,
                                          output_mesh=True,
                                          output_polysurface=False)[0]
    rs.EnableRedraw(False)
    MeshArtist(decomposition).draw_mesh()
Beispiel #5
0
crv_guids = []
pt_guids = rs.GetObjects('get points', filter=1) or []
poles = [rs.PointCoordinates(pt) for pt in pt_guids]

settings = rs.PropertyListBox([
    'triangulation_precision', 'density_target', 'smoothing_iterations',
    'damping_value'
], [0.5, 1.0, 30, 0.5], 'settings for mesh on surface')
triangulation_precision, density_target, kmax, damping = settings

# topology
print 'decomposition...'
coarse_quad_mesh = surface_decomposition(srf_guid,
                                         float(triangulation_precision),
                                         crv_guids=crv_guids,
                                         pt_guids=pt_guids,
                                         output_delaunay=False,
                                         output_skeleton=False,
                                         output_mesh=True,
                                         output_polysurface=False)[0]

# density
print 'densification...'
coarse_quad_mesh.init_strip_density()
coarse_quad_mesh.set_strips_density_target(float(density_target))
coarse_quad_mesh.densification()

# smoothing
print 'smoothing...'
constraints = automated_smoothing_surface_constraints(
    coarse_quad_mesh.quad_mesh, RhinoSurface(srf_guid))
constraints.update(