rs.ExtendSurface returns bool!?


#1

Hey,
Im trying to create a rhinoscript/python node that extends an untrimmed surface, but reading the documentation on rs.extendSurface I found this in the online documentation:

Parameters:
surface_id = identifier of a surface
parameter = tuple of two values definfing the U,V parameter to evaluate.
The surface edge closest to the U,V parameter will be the edge that is
extended
length = amount to extend to surface
smooth[opt] = If True, the surface is extended smoothly curving from the
edge. If False, the surface is extended in a straight line from the edge
Returns:
True or False indicating success or failure

rs.ExtendSurface returns only true or false indicating success or failure, but no actual surface or surface_id!?
How can I retrieve the exteneded surface for further GH operations?


(Menno Deij - van Rijswijk) #2

The complete code of rhinoscriptsyntax is available on GitHub.

For ExtendSurface, you find the code below. It needs as input a surface_id, so that means that this function only works on surfaces that are in the Rhino document; and not on surfaces that are in the Grasshopper document. This means that you can’t use rs.ExtendSurface in Grasshopper Python scripting. I would advise you to look at the code below and ‘roll your own’ ExtendSurface for use in Grasshopper Ptyhon scripting.

def ExtendSurface(surface_id, parameter, length, smooth=True):
    """Lengthens an untrimmed surface object
    Parameters:
      surface_id = identifier of a surface
      parameter = tuple of two values definfing the U,V parameter to evaluate.
        The surface edge closest to the U,V parameter will be the edge that is
        extended
      length = amount to extend to surface
      smooth[opt] = If True, the surface is extended smoothly curving from the
        edge. If False, the surface is extended in a straight line from the edge
    Returns:
      True or False indicating success or failure
    Example:
      import rhinoscriptsyntax as rs
      pick = rs.GetObjectEx("Select surface to extend", rs.filter.surface)
      if pick:
      parameter = rs.SurfaceClosestPoint(pick[0], pick[3])
      rs.ExtendSurface(pick[0], parameter, 5.0)
    See Also:
      IsSurface
    """
    surface = rhutil.coercesurface(surface_id, True)
    edge = surface.ClosestSide(parameter[0], parameter[1])
    newsrf = surface.Extend(edge, length, smooth)
    if newsrf:
        surface_id = rhutil.coerceguid(surface_id)
        if surface_id: scriptcontext.doc.Objects.Replace(surface_id, newsrf)
        scriptcontext.doc.Views.Redraw()
return newsrf is not None

#3

Thanks for clearifying this!