Exemplo n.º 1
0
    def from_guid(cls, guid):
        rhinosurface = RhinoSurface.from_guid(guid)
        mesh = rhinosurface.to_compas(cleanup=False)
        subdobject = cls(mesh)
        subdobject.coarse = mesh

        return subdobject
Exemplo n.º 2
0
    def from_rhinosurface(cls, guid, **kwargs):
        """Construct a FormDiagram from a Rhino surface represented by its GUID.

        Parameters
        ----------
        guid : str
            A globally unique identifier.

        Returns
        -------
        FormDiagram
            A FormDiagram object.

        Examples
        --------
        .. code-block:: python

            import compas_rhino
            from compas_tna.diagrams import FormDiagram

            guid = compas_rhino.select_surface()
            form = FormDiagram.from_rhinosurface(guid)

        """
        from compas_rhino.geometry import RhinoSurface
        mesh = RhinoSurface.from_guid(guid).uv_to_compas(cls, **kwargs)
        if 'name' in kwargs:
            mesh.name = kwargs['name']
        return mesh
Exemplo n.º 3
0
def mesh_from_surface_heightfield(cls, guid, density=(10, 10)):
    """Create a mesh data structure from a point grid aligned with the uv space of a Rhino NURBS surface.

    Parameters
    ----------
    cls : Mesh
        The mesh type.
    guid : str
        The GUID of the surface.
    density : tuple
        The density of the point grid in the u and v directions.

    Returns
    -------
    Mesh
        A mesh object.

    See Also
    --------
    * :class:`compas_rhino.geometry.RhinoSurface`

    Examples
    --------
    >>>

    """
    try:
        u, v = density
    except Exception:
        u, v = density, density

    surface = RhinoSurface.from_guid(guid)

    mesh = cls()

    vertices = surface.heightfield(density=(u, v), over_space=True)

    for x, y, z in vertices:
        mesh.add_vertex(x=x, y=y, z=z)

    for i in range(u - 1):
        for j in range(v - 1):
            face = ((i + 0) * v + j, (i + 0) * v + j + 1, (i + 1) * v + j + 1,
                    (i + 1) * v + j)
            mesh.add_face(face)

    return mesh
    def from_polysurface(cls, guid, frame):
        """Class method for constructing a block from a Rhino poly-surface.

        Parameters
        ----------
        guid : str
            The GUID of the poly-surface.
        frame : :class:`Frame`
            Origin frame of the element.
        Notes
        -----
        In Rhino, poly-surfaces are organised such that the cycle directions of
        the individual sub-surfaces produce normal vectors that point out of the
        enclosed volume. The normal vectors of the faces of the mesh, therefore
        also point "out" of the enclosed volume.
        """
        from compas_rhino.geometry import RhinoSurface
        element = cls(frame)
        element._source = RhinoSurface.from_guid(guid)
        element._mesh = element._source.brep_to_compas()
        return element
def RunCommand(is_interactive):

    scene = get_scene()
    if not scene:
        return

    guid = compas_rhino.select_surface()
    if not guid:
        return

    u = PatternObject.SETTINGS['from_surface.density.U']
    v = PatternObject.SETTINGS['from_surface.density.V']

    options = ['U', 'V']
    while True:
        option = compas_rhino.rs.GetString("Enter values for U and V:",
                                           strings=options)

        if not option:
            break

        if option == 'U':
            u = compas_rhino.rs.GetInteger("Density U", u, 2, 100)
            continue
        if option == 'V':
            v = compas_rhino.rs.GetInteger("Density V", v, 2, 100)
            continue

    density = u + 1, v + 1
    pattern = RhinoSurface.from_guid(guid).uv_to_compas(cls=Pattern,
                                                        density=density)

    compas_rhino.rs.HideObject(guid)

    scene.clear()
    scene.add(pattern, name='pattern')
    scene.update()

    print(
        "Pattern object successfully created. Input surface has been hidden.")
Exemplo n.º 6
0
    def from_rhinosurface(cls, guid, u=20, v=10):
        """Make a cable net from a Rhino surface.

        Parameters
        ----------
        guid : str
            The GUID of the Rhino surface.
        u : int (10)
            The number of isolines in the "u" direction.
            Default is `10`.
        v : int (10)
            The number of isolines in the "v" direction.
            Default is `10`.

        Returns
        -------
        :class:`Cablenet`
            An instance of a cable net.

        """
        from compas_rhino.geometry import RhinoSurface
        return RhinoSurface.from_guid(guid).uv_to_compas(cls=cls,
                                                         density=(u, v))
Exemplo n.º 7
0
    def from_polysurface(cls, guid):
        """Class method for constructing a block from a Rhino poly-surface.

        Parameters
        ----------
        guid : str
            The GUID of the poly-surface.

        Returns
        -------
        Block
            The block corresponding to the poly-surface.

        Notes
        -----
        In Rhino, poly-surfaces are organised such that the cycle directions of
        the individual sub-surfaces produce normal vectors that point out of the
        enclosed volume. The normal vectors of the faces of the mesh, therefore
        also point "out" of the enclosed volume.
        """
        from compas_rhino.geometry import RhinoSurface
        surface = RhinoSurface.from_guid(guid)
        return surface.to_compas(cls)
Exemplo n.º 8
0
HERE = os.path.dirname(__file__)
FILE = os.path.join(HERE, 'data', 'blocks.json')

# ==============================================================================
# Blocks and Blanks
# ==============================================================================

guids = compas_rhino.select_surfaces()

blocks = []

world = Frame.worldXY()

for guid in guids:
    surface = RhinoSurface.from_guid(guid)
    block = surface.to_compas()
    block.name = str(guid)

    bottom = sorted(
        block.faces(),
        key=lambda face: dot_vectors(block.face_normal(face), [0, 0, -1]))[-1]

    plane = block.face_centroid(bottom), block.face_normal(bottom)
    frame = Frame.from_plane(plane)

    T = Transformation.from_frame_to_frame(frame, world)

    block.transform(T)

    blank = Box.from_bounding_box(block.bounding_box())
Exemplo n.º 9
0
from compas_3gs.rhino import draw_network_external_forces
from compas_3gs.rhino import draw_network_internal_forces

from compas_3gs.rhino import Mesh3gsArtist, VolMesh3gsArtist
from compas_3gs.rhino import Network3gsArtist

try:
    import rhinoscriptsyntax as rs
except ImportError:
    compas.raise_if_ironpython()

# select the polysurface which you create in Rhino
guid = rs.GetObject("select a closed polysurface",
                    filter=rs.filter.polysurface)
# turn Rhino polysurface to a COMPAS single polyhedral cell
cell = RhinoSurface.from_guid(guid).brep_to_compas(cls=Cell())
rs.HideObjects(guid)

# draw the polyhedral cell
layer = 'cell'
cellartist = Mesh3gsArtist(cell, layer=layer)
cellartist.draw()
cellartist.redraw()

from compas_3gs.operations import check_cell_convexity
print(check_cell_convexity(cell))

print(cell)


#================== cell_cut_face_subdiv ==================