def PullPoints(object_id, points): """Pulls an array of points to a surface or mesh object. For more information, see the Rhino help file Pull command Parameters: object_id = the identifier of the surface or mesh object that pulls points = list of 3D points Returns: list of 3D points Example: import rhinoscriptsyntax as rs surface = rs.GetObject("Select surface that pulls", rs.filter.surface) objects = rs.GetObjects("Select points to pull", rs.filter.point) points = [rs.PointCoordinates(obj) for obj in objects] results = rs.PullPoints( surface, points ) rs.AddPoints( results ) See Also: PullCurve """ id = rhutil.coerceguid(object_id, True) points = rhutil.coerce3dpointlist(points, True) mesh = rhutil.coercemesh(id, False) if mesh: points = mesh.PullPointsToMesh(points) return list(points) brep = rhutil.coercebrep(id, False) if brep and brep.Faces.Count == 1: tolerance = scriptcontext.doc.ModelAbsoluteTolerance points = brep.Faces[0].PullPointsToFace(points, tolerance) return list(points) return []
def GetPointOnSurface(surface_id, message=None): """Pauses for user input of a point constrained to a surface or polysurface object Parameters: surface_id = identifier of the surface to get a point on message [opt] = a prompt or message Returns: 3d point if successful None on error """ surfOrBrep = rhutil.coercesurface(surface_id) if not surfOrBrep: surfOrBrep = rhutil.coercebrep(surface_id, True) gp = Rhino.Input.Custom.GetPoint() if message: gp.SetCommandPrompt(message) if isinstance(surfOrBrep, Rhino.Geometry.Surface): gp.Constrain(surfOrBrep, False) else: gp.Constrain(surfOrBrep, -1, -1, False) gp.Get() if gp.CommandResult() != Rhino.Commands.Result.Success: return scriptcontext.errorhandler() pt = gp.Point() gp.Dispose() return pt
def ProjectPointToSurface(points, surface_ids, direction): """Projects one or more points onto one or more surfaces or polysurfaces Parameters: points = one or more 3D points surface_ids = identifiers of one or more surfaces/polysurfaces direction = direction vector to project the points Returns: list of projected points on success Example: import rhinoscriptsyntax as rs surface = rs.GetObject("Select surface to project onto", rs.filter.surface) objects = rs.GetObjects("Select points to project", rs.filter.point) points = [rs.PointCoordinates(obj) for obj in objects] results = rs.ProjectPointToSurface(points, surface, (0,0,-1)) rs.AddPoints(results) See Also: ProjectCurveToMesh ProjectCurveToSurface ProjectPointToMesh """ pts = rhutil.coerce3dpointlist(points) if pts is None: pts = [rhutil.coerce3dpoint(points, True)] direction = rhutil.coerce3dvector(direction, True) id = rhutil.coerceguid(surface_ids, False) if id: surface_ids = [id] breps = [rhutil.coercebrep(id, True) for id in surface_ids] tolerance = scriptcontext.doc.ModelAbsoluteTolerance return Rhino.Geometry.Intersect.Intersection.ProjectPointsToBreps( breps, pts, direction, tolerance)
def PullPoints(object_id, points): """Pulls an array of points to a surface or mesh object. For more information, see the Rhino help file Pull command Parameters: object_id = the identifier of the surface or mesh object that pulls points = list of 3D points Returns: list of 3D points Example: import rhinoscriptsyntax as rs surface = rs.GetObject("Select surface that pulls", rs.filter.surface) objects = rs.GetObjects("Select points to pull", rs.filter.point) points = [rs.PointCoordinates(obj) for obj in objects] results = rs.PullPoints( surface, points ) rs.AddPoints( results ) See Also: PullCurve """ id = rhutil.coerceguid(object_id, True) points = rhutil.coerce3dpointlist(points, True) mesh = rhutil.coercemesh(id, False) if mesh: points = mesh.PullPointsToMesh(points) return list(points) brep = rhutil.coercebrep(id, False) if brep and brep.Faces.Count==1: tolerance = scriptcontext.doc.ModelAbsoluteTolerance points = brep.Faces[0].PullPointsToFace(points, tolerance) return list(points) return []
def GetPointOnSurface(surface_id, message=None): """Pauses for user input of a point constrained to a surface or polysurface object Parameters: surface_id = identifier of the surface to get a point on message [opt] = a prompt or message Returns: 3d point if successful None on error """ surfOrBrep = rhutil.coercesurface(surface_id) if not surfOrBrep: surfOrBrep = rhutil.coercebrep(surface_id, True) gp = Rhino.Input.Custom.GetPoint() if message: gp.SetCommandPrompt(message) if isinstance(surfOrBrep,Rhino.Geometry.Surface): gp.Constrain(surfOrBrep,False) else: gp.Constrain(surfOrBrep, -1, -1, False) gp.Get() if gp.CommandResult()!=Rhino.Commands.Result.Success: return scriptcontext.errorhandler() pt = gp.Point() gp.Dispose() return pt
def ProjectPointToSurface(points, surface_ids, direction): """Projects one or more points onto one or more surfaces or polysurfaces Parameters: points = one or more 3D points surface_ids = identifiers of one or more surfaces/polysurfaces direction = direction vector to project the points Returns: list of projected points on success Example: import rhinoscriptsyntax as rs surface = rs.GetObject("Select surface to project onto", rs.filter.surface) objects = rs.GetObjects("Select points to project", rs.filter.point) points = [rs.PointCoordinates(obj) for obj in objects] results = rs.ProjectPointToSurface(points, surface, (0,0,-1)) rs.AddPoints(results) See Also: ProjectCurveToMesh ProjectCurveToSurface ProjectPointToMesh """ pts = rhutil.coerce3dpointlist(points) if pts is None: pts = [rhutil.coerce3dpoint(points, True)] direction = rhutil.coerce3dvector(direction, True) id = rhutil.coerceguid(surface_ids, False) if id: surface_ids = [id] breps = [rhutil.coercebrep(id, True) for id in surface_ids] tolerance = scriptcontext.doc.ModelAbsoluteTolerance return Rhino.Geometry.Intersect.Intersection.ProjectPointsToBreps(breps, pts, direction, tolerance)
def ProjectPointToSurface(points, surface_ids, direction): """Projects one or more points onto one or more surfaces or polysurfaces Parameters: points = one or more 3D points surface_ids = identifiers of one or more surfaces/polysurfaces direction = direction vector to project the points Returns: list of projected points on success """ pts = rhutil.coerce3dpointlist(points) if pts is None: pts = [rhutil.coerce3dpoint(points, True)] direction = rhutil.coerce3dvector(direction, True) id = rhutil.coerceguid(surface_ids, False) if id: surface_ids = [id] breps = [rhutil.coercebrep(id, True) for id in surface_ids] tolerance = scriptcontext.doc.ModelAbsoluteTolerance return Rhino.Geometry.Intersect.Intersection.ProjectPointsToBreps(breps, pts, direction, tolerance)
def PullPoints(object_id, points): """Pulls an array of points to a surface or mesh object. For more information, see the Rhino help file Pull command Parameters: object_id = the identifier of the surface or mesh object that pulls points = list of 3D points Returns: list of 3D points """ id = rhutil.coerceguid(object_id, True) points = rhutil.coerce3dpointlist(points, True) mesh = rhutil.coercemesh(id, False) if mesh: points = mesh.PullPointsToMesh(points) return list(points) brep = rhutil.coercebrep(id, False) if brep and brep.Faces.Count==1: tolerance = scriptcontext.doc.ModelAbsoluteTolerance points = brep.Faces[0].PullPointsToFace(points, tolerance) return list(points) return []
def GetPointOnSurface(surface_id, message=None): """Pauses for user input of a point constrained to a surface or polysurface object Parameters: surface_id (guid): identifier of the surface to get a point on message (str, optional): a prompt or message Returns: point: 3d point if successful None: on error Example: import rhinoscriptsyntax as rs surface = rs.GetObject("Pick a surface") if surface: point = rs.GetPointOnSurface(surface, "Point on surface") if point: rs.AddPoint(point) See Also: GetPoint GetPointOnCurve GetPointOnMesh GetPoints """ surfOrBrep = rhutil.coercesurface(surface_id) if not surfOrBrep: surfOrBrep = rhutil.coercebrep(surface_id, True) gp = Rhino.Input.Custom.GetPoint() if message: gp.SetCommandPrompt(message) if isinstance(surfOrBrep,Rhino.Geometry.Surface): gp.Constrain(surfOrBrep,False) else: gp.Constrain(surfOrBrep, -1, -1, False) gp.Get() if gp.CommandResult()!=Rhino.Commands.Result.Success: return scriptcontext.errorhandler() pt = gp.Point() gp.Dispose() return pt
def GetPointOnSurface(surface_id, message=None): """Pauses for user input of a point constrained to a surface or polysurface object Parameters: surface_id = identifier of the surface to get a point on message [opt] = a prompt or message Returns: 3d point if successful None on error Example: import rhinoscriptsyntax as rs surface = rs.GetObject("Pick a surface") if surface: point = rs.GetPointOnSurface(surface, "Point on surface") if point: rs.AddPoint(point) See Also: GetPoint GetPointOnCurve GetPointOnMesh GetPoints """ surfOrBrep = rhutil.coercesurface(surface_id) if not surfOrBrep: surfOrBrep = rhutil.coercebrep(surface_id, True) gp = Rhino.Input.Custom.GetPoint() if message: gp.SetCommandPrompt(message) if isinstance(surfOrBrep,Rhino.Geometry.Surface): gp.Constrain(surfOrBrep,False) else: gp.Constrain(surfOrBrep, -1, -1, False) gp.Get() if gp.CommandResult()!=Rhino.Commands.Result.Success: return scriptcontext.errorhandler() pt = gp.Point() gp.Dispose() return pt
def ObjectsByType(type, select=False): """Returns identifiers of all objects based on the objects' geometry type. Parameters: type = The type(s) of geometry objects (points, curves, surfaces, meshes, etc.) that can be selected. Object types can be added together to filter several different kinds of geometry. Value Description 0 All objects 1 Point 2 Point cloud 4 Curve 8 Surface or single-face brep 16 Polysurface or multiple-face 32 Mesh 256 Light 512 Annotation 4096 Instance or block reference 8192 Text dot object 16384 Grip object 32768 Detail 65536 Hatch 131072 Morph control 134217728 Cage 268435456 Phantom 536870912 Clipping plane select[opt] = Select the objects Returns: A list of Guids identifying the objects. """ bSurface = False bPolySurface = False bLights = False bGrips = False bPhantoms = False geometry_filter = __FilterHelper(type) if geometry_filter & Rhino.DocObjects.ObjectType.Surface: bSurface = True if geometry_filter & Rhino.DocObjects.ObjectType.Brep: bPolySurface = True if geometry_filter & Rhino.DocObjects.ObjectType.Light: bLights = True if geometry_filter & Rhino.DocObjects.ObjectType.Grip: bGrips = True if geometry_filter & Rhino.DocObjects.ObjectType.Phantom: bPhantoms = True it = Rhino.DocObjects.ObjectEnumeratorSettings() it.DeletedObjects = False it.ActiveObjects = True it.ReferenceObjects = True it.IncludeLights = bLights it.IncludeGrips = bGrips it.IncludePhantoms = bPhantoms object_ids = [] e = scriptcontext.doc.Objects.GetObjectList(it) for object in e: bFound = False object_type = object.ObjectType if object_type == Rhino.DocObjects.ObjectType.Brep and (bSurface or bPolySurface): brep = rhutil.coercebrep(object.Id) if brep: if brep.Faces.Count == 1: if bSurface: bFound = True else: if bPolySurface: bFound = True elif object_type & geometry_filter: bFound = True if bFound: if select: object.Select(True) object_ids.append(object.Id) if object_ids and select: scriptcontext.doc.Views.Redraw() return object_ids
def ObjectsByType(geometry_type, select=False, state=0): """Returns identifiers of all objects based on the objects' geometry type. Parameters: geometry_type (number): The type(s) of geometry objects (points, curves, surfaces, meshes, etc.) that can be selected. Object types can be added together as bit-coded flags to filter several different kinds of geometry. Value Description 0 All objects 1 Point 2 Point cloud 4 Curve 8 Surface or single-face brep 16 Polysurface or multiple-face 32 Mesh 256 Light 512 Annotation 4096 Instance or block reference 8192 Text dot object 16384 Grip object 32768 Detail 65536 Hatch 131072 Morph control 134217728 Cage 268435456 Phantom 536870912 Clipping plane select (bool, optional): Select the objects state (bool, optional): Object state. See help Returns: list(guid, ...): identifiers of object that fit the specified type(s). Example: import rhinoscriptsyntax as rs objs = rs.ObjectsByType(4 | 8, True) See Also: """ if not state: state = 7 bSurface = False bPolySurface = False bLights = False bGrips = False bPhantoms = False geometry_filter = __FilterHelper(geometry_type) if type(geometry_type) is int and geometry_type == 0: geometry_filter = Rhino.DocObjects.ObjectType.AnyObject if geometry_filter & Rhino.DocObjects.ObjectType.Surface: bSurface = True if geometry_filter & Rhino.DocObjects.ObjectType.Brep: bPolySurface = True if geometry_filter & Rhino.DocObjects.ObjectType.Light: bLights = True if geometry_filter & Rhino.DocObjects.ObjectType.Grip: bGrips = True if geometry_filter & Rhino.DocObjects.ObjectType.Phantom: bPhantoms = True it = Rhino.DocObjects.ObjectEnumeratorSettings() it.DeletedObjects = False it.ActiveObjects = True it.ReferenceObjects = True it.IncludeLights = bLights it.IncludeGrips = bGrips it.IncludePhantoms = bPhantoms it.NormalObjects = True it.LockedObjects = True it.HiddenObjects = True object_ids = [] e = scriptcontext.doc.Objects.GetObjectList(it) for object in e: if state & 1 and object.IsNormal or state & 2 and object.IsLocked or state & 4 and object.IsHidden: bFound = False object_type = object.ObjectType if object_type == Rhino.DocObjects.ObjectType.Brep and ( bSurface or bPolySurface): brep = rhutil.coercebrep(object.Id) if brep: if brep.Faces.Count == 1: if bSurface: bFound = True else: if bPolySurface: bFound = True elif object_type == Rhino.DocObjects.ObjectType.Extrusion and ( bSurface or bPolySurface): extrusion = object.Geometry profile_count = extrusion.ProfileCount cap_count = extrusion.CapCount if profile_count == 1 and cap_count == 0 and bSurface: bFound = True elif profile_count > 0 and cap_count > 0 and bPolySurface: bFound = True elif object_type & geometry_filter: bFound = True if bFound: if select: object.Select(True) object_ids.append(object.Id) if object_ids and select: scriptcontext.doc.Views.Redraw() return object_ids
def ObjectsByType(geometry_type, select=False, state=0): """Returns identifiers of all objects based on the objects' geometry type. Parameters: geometry_type = The type(s) of geometry objects (points, curves, surfaces, meshes, etc.) that can be selected. Object types can be added together to filter several different kinds of geometry. Value Description 0 All objects 1 Point 2 Point cloud 4 Curve 8 Surface or single-face brep 16 Polysurface or multiple-face 32 Mesh 256 Light 512 Annotation 4096 Instance or block reference 8192 Text dot object 16384 Grip object 32768 Detail 65536 Hatch 131072 Morph control 134217728 Cage 268435456 Phantom 536870912 Clipping plane select[opt] = Select the objects state[opt] = Object state. See help Returns: A list of Guids identifying the objects. Example: import rhinoscriptsyntax as rs objs = rs.ObjectsByType(4 | 8, True) See Also: """ if not state: state = 7 bSurface = False bPolySurface = False bLights = False bGrips = False bPhantoms = False geometry_filter = __FilterHelper(geometry_type) if type(geometry_type) is int and geometry_type==0: geometry_filter = Rhino.DocObjects.ObjectType.AnyObject if geometry_filter & Rhino.DocObjects.ObjectType.Surface: bSurface = True if geometry_filter & Rhino.DocObjects.ObjectType.Brep: bPolySurface = True if geometry_filter & Rhino.DocObjects.ObjectType.Light: bLights = True if geometry_filter & Rhino.DocObjects.ObjectType.Grip: bGrips = True if geometry_filter & Rhino.DocObjects.ObjectType.Phantom: bPhantoms = True it = Rhino.DocObjects.ObjectEnumeratorSettings() it.DeletedObjects = False it.ActiveObjects = True it.ReferenceObjects = True it.IncludeLights = bLights it.IncludeGrips = bGrips it.IncludePhantoms = bPhantoms it.NormalObjects = True it.LockedObjects = True it.HiddenObjects = True object_ids = [] e = scriptcontext.doc.Objects.GetObjectList(it) for object in e: if state & 1 and object.IsNormal or state & 2 and object.IsLocked or state & 4 and object.IsHidden: bFound = False object_type = object.ObjectType if object_type==Rhino.DocObjects.ObjectType.Brep and (bSurface or bPolySurface): brep = rhutil.coercebrep(object.Id) if brep: if brep.Faces.Count==1: if bSurface: bFound = True else: if bPolySurface: bFound = True elif object_type==Rhino.DocObjects.ObjectType.Extrusion and (bSurface or bPolySurface): extrusion = object.Geometry profile_count = extrusion.ProfileCount cap_count = extrusion.CapCount if profile_count==1 and cap_count==0 and bSurface: bFound = True elif profile_count>0 and cap_count>0 and bPolySurface: bFound = True elif object_type & geometry_filter: bFound = True if bFound: if select: object.Select(True) object_ids.append(object.Id) if object_ids and select: scriptcontext.doc.Views.Redraw() return object_ids
def ObjectsByType(type, select=False): """Returns identifiers of all objects based on the objects' geometry type. Parameters: type = The type(s) of geometry objects (points, curves, surfaces, meshes, etc.) that can be selected. Object types can be added together to filter several different kinds of geometry. Value Description 0 All objects 1 Point 2 Point cloud 4 Curve 8 Surface or single-face brep 16 Polysurface or multiple-face 32 Mesh 256 Light 512 Annotation 4096 Instance or block reference 8192 Text dot object 16384 Grip object 32768 Detail 65536 Hatch 131072 Morph control 134217728 Cage 268435456 Phantom 536870912 Clipping plane select[opt] = Select the objects Returns: A list of Guids identifying the objects. """ bSurface = False bPolySurface = False bLights = False bGrips = False bPhantoms = False geometry_filter = __FilterHelper(type) if geometry_filter & Rhino.DocObjects.ObjectType.Surface: bSurface = True if geometry_filter & Rhino.DocObjects.ObjectType.Brep: bPolySurface = True if geometry_filter & Rhino.DocObjects.ObjectType.Light: bLights = True if geometry_filter & Rhino.DocObjects.ObjectType.Grip: bGrips = True if geometry_filter & Rhino.DocObjects.ObjectType.Phantom: bPhantoms = True it = Rhino.DocObjects.ObjectEnumeratorSettings() it.DeletedObjects = False it.ActiveObjects = True it.ReferenceObjects = True it.IncludeLights = bLights it.IncludeGrips = bGrips it.IncludePhantoms = bPhantoms object_ids = [] e = scriptcontext.doc.Objects.GetObjectList(it) for object in e: bFound = False object_type = object.ObjectType if object_type==Rhino.DocObjects.ObjectType.Brep and (bSurface or bPolySurface): brep = rhutil.coercebrep(object.Id) if brep: if brep.Faces.Count==1: if bSurface: bFound = True else: if bPolySurface: bFound = True elif object_type & geometry_filter: bFound = True if bFound: if select: object.Select(True) object_ids.append(object.Id) if object_ids and select: scriptcontext.doc.Views.Redraw() return object_ids