def GetObjects(message=None, filter=0, group=True, preselect=False, select=False, objects=None, minimum_count=1, maximum_count=0, custom_filter=None): """Prompts user to pick or select one or more objects. Parameters: message[opt] = a prompt or message. filter[opt] = The type(s) of geometry (points, curves, surfaces, meshes,...) that can be selected. Object types can be added together to filter several different kinds of geometry. use the filter class to get values group[opt] = Honor object grouping. If omitted and the user picks a group, the entire group will be picked (True). Note, if filter is set to a value other than 0 (All objects), then group selection will be disabled. preselect[opt] = Allow for the selection of pre-selected objects. select[opt] = Select the picked objects. If False, the objects that are picked are not selected. objects[opt] = list of objects that are allowed to be selected mimimum_count, maximum_count[out] = limits on number of objects allowed to be selected Returns list of Guids identifying the picked objects """ if not preselect: scriptcontext.doc.Objects.UnselectAll() scriptcontext.doc.Views.Redraw() objects = rhutil.coerceguidlist(objects) class CustomGetObject(Rhino.Input.Custom.GetObject): def __init__(self, filter_function): self.m_filter_function = filter_function def CustomGeometryFilter( self, rhino_object, geometry, component_index ): if objects and not rhino_object.Id in objects: return False rc = True if self.m_filter_function is not None: try: rc = self.m_filter_function(rhino_object, geometry, component_index) except: rc = True return rc go = CustomGetObject(custom_filter) if message: go.SetCommandPrompt(message) geometry_filter = __FilterHelper(filter) if filter>0: go.GeometryFilter = geometry_filter go.SubObjectSelect = False go.GroupSelect = group go.AcceptNothing(True) if go.GetMultiple(minimum_count,maximum_count)!=Rhino.Input.GetResult.Object: return None if not select: scriptcontext.doc.Objects.UnselectAll() scriptcontext.doc.Views.Redraw() rc = [] count = go.ObjectCount for i in xrange(count): objref = go.Object(i) rc.append(objref.ObjectId) obj = objref.Object() if select and obj is not None: obj.Select(select) go.Dispose() return rc
def GetObjects(message=None, filter=0, group=True, preselect=False, select=False, objects=None, minimum_count=1, maximum_count=0, custom_filter=None): """Prompts user to pick or select one or more objects. Parameters: message[opt] = a prompt or message. filter[opt] = The type(s) of geometry (points, curves, surfaces, meshes,...) that can be selected. Object types can be added together to filter several different kinds of geometry. use the filter class to get values group[opt] = Honor object grouping. If omitted and the user picks a group, the entire group will be picked (True). Note, if filter is set to a value other than 0 (All objects), then group selection will be disabled. preselect[opt] = Allow for the selection of pre-selected objects. select[opt] = Select the picked objects. If False, the objects that are picked are not selected. objects[opt] = list of objects that are allowed to be selected mimimum_count, maximum_count[out] = limits on number of objects allowed to be selected Returns list of Guids identifying the picked objects """ if not preselect: scriptcontext.doc.Objects.UnselectAll() scriptcontext.doc.Views.Redraw() objects = rhutil.coerceguidlist(objects) class CustomGetObject(Rhino.Input.Custom.GetObject): def __init__(self, filter_function): self.m_filter_function = filter_function def CustomGeometryFilter( self, rhino_object, geometry, component_index ): if objects and not rhino_object.Id in objects: return False rc = True if self.m_filter_function is not None: try: rc = self.m_filter_function(rhino_object, geometry, component_index) except: rc = True return rc go = CustomGetObject(custom_filter) go.SetCommandPrompt(message or "Select Objects") geometry_filter = __FilterHelper(filter) if filter>0: go.GeometryFilter = geometry_filter go.SubObjectSelect = False go.GroupSelect = group go.AcceptNothing(True) if go.GetMultiple(minimum_count,maximum_count)!=Rhino.Input.GetResult.Object: return None if not select: scriptcontext.doc.Objects.UnselectAll() scriptcontext.doc.Views.Redraw() rc = [] count = go.ObjectCount for i in xrange(count): objref = go.Object(i) rc.append(objref.ObjectId) obj = objref.Object() if select and obj is not None: obj.Select(select) go.Dispose() return rc
def PointClosestObject(point, object_ids): """Finds the object that is closest to a test point Parameters: point = point to test object_id = identifiers of one or more objects Returns: (closest object_id, point on object) on success None on failure """ object_ids = rhutil.coerceguidlist(object_ids) point = rhutil.coerce3dpoint(point, True) closest = None for id in object_ids: geom = rhutil.coercegeometry(id, True) point_geometry = geom if isinstance(point_geometry, Rhino.Geometry.Point): distance = point.DistanceTo( point_geometry.Location ) if closest is None or distance<closest[0]: closest = distance, id, point_geometry.Location continue point_cloud = geom if isinstance(point_cloud, Rhino.Geometry.PointCloud): index = point_cloud.ClosestPoint(point) if index>=0: distance = point.DistanceTo( point_cloud[index].Location ) if closest is None or distance<closest[0]: closest = distance, id, point_cloud[index].Location continue curve = geom if isinstance(curve, Rhino.Geometry.Curve): rc, t = curve.ClosestPoint(point) if rc: distance = point.DistanceTo( curve.PointAt(t) ) if closest is None or distance<closest[0]: closest = distance, id, curve.PointAt(t) continue brep = geom if isinstance(brep, Rhino.Geometry.Brep): brep_closest = brep.ClosestPoint(point) distance = point.DistanceTo( brep_closest ) if closest is None or distance<closest[0]: closest = distance, id, brep_closest continue mesh = geom if isinstance(mesh, Rhino.Geometry.Mesh): mesh_closest = mesh.ClosestPoint(point) distance = point.DistanceTo( mesh_closest ) if closest is None or distance<closest[0]: closest = distance, id, mesh_closest continue if not closest: return scriptcontext.errorhandler() return closest[1], closest[2]
def PointClosestObject(point, object_ids): """Finds the object that is closest to a test point Parameters: point = point to test object_id = identifiers of one or more objects Returns: (closest object_id, point on object) on success None on failure """ object_ids = rhutil.coerceguidlist(object_ids) point = rhutil.coerce3dpoint(point, True) closest = None for id in object_ids: geom = rhutil.coercegeometry(id, True) point_geometry = geom if isinstance(point_geometry, Rhino.Geometry.Point): distance = point.DistanceTo(point_geometry.Location) if closest is None or distance < closest[0]: closest = distance, id, point_geometry.Location continue point_cloud = geom if isinstance(point_cloud, Rhino.Geometry.PointCloud): index = point_cloud.ClosestPoint(point) if index >= 0: distance = point.DistanceTo(point_cloud[index].Location) if closest is None or distance < closest[0]: closest = distance, id, point_cloud[index].Location continue curve = geom if isinstance(curve, Rhino.Geometry.Curve): rc, t = curve.ClosestPoint(point) if rc: distance = point.DistanceTo(curve.PointAt(t)) if closest is None or distance < closest[0]: closest = distance, id, curve.PointAt(t) continue brep = geom if isinstance(brep, Rhino.Geometry.Brep): brep_closest = brep.ClosestPoint(point) distance = point.DistanceTo(brep_closest) if closest is None or distance < closest[0]: closest = distance, id, brep_closest continue mesh = geom if isinstance(mesh, Rhino.Geometry.Mesh): mesh_closest = mesh.ClosestPoint(point) distance = point.DistanceTo(mesh_closest) if closest is None or distance < closest[0]: closest = distance, id, mesh_closest continue if not closest: return scriptcontext.errorhandler() return closest[1], closest[2]
def AddObjectsToGroup(object_ids, group_name): """Adds one or more objects to an existing group. Parameters: object_ids = list of Strings or Guids representing the object identifiers group_name = the name of an existing group Returns: number of objects added to the group """ if not isinstance(group_name, str): group_name = str(group_name) index = scriptcontext.doc.Groups.Find(group_name, True) object_ids = rhutil.coerceguidlist(object_ids) if index<0 or not object_ids: return 0 if not scriptcontext.doc.Groups.AddToGroup(index, object_ids): return 0 return len(object_ids)
def AddObjectsToGroup(object_ids, group_name): """Adds one or more objects to an existing group. Parameters: object_ids ([guid, ...]) list of Strings or Guids representing the object identifiers group_name (str): the name of an existing group Returns: number: number of objects added to the group Example: import rhinoscriptsyntax as rs name = "NewGroup" object_ids = rs.GetObjects("Select objects to add to group") if object_ids: rs.AddObjectsToGroup(object_ids, name) See Also: AddObjectToGroup IsGroupEmpty ObjectGroups ObjectsByGroup """ if not isinstance(group_name, str): group_name = str(group_name) index = scriptcontext.doc.Groups.Find(group_name) object_ids = rhutil.coerceguidlist(object_ids) if index < 0 or not object_ids: return 0 if not scriptcontext.doc.Groups.AddToGroup(index, object_ids): return 0 return len(object_ids)
def AddObjectsToGroup(object_ids, group_name): """Adds one or more objects to an existing group. Parameters: object_ids = list of Strings or Guids representing the object identifiers group_name = the name of an existing group Returns: number of objects added to the group Example: import rhinoscriptsyntax as rs name = "NewGroup" object_ids = rs.GetObjects("Select objects to add to group") if object_ids: rs.AddObjectsToGroup(object_ids, name) See Also: AddObjectToGroup IsGroupEmpty ObjectGroups ObjectsByGroup """ if not isinstance(group_name, str): group_name = str(group_name) index = scriptcontext.doc.Groups.Find(group_name, True) object_ids = rhutil.coerceguidlist(object_ids) if index<0 or not object_ids: return 0 if not scriptcontext.doc.Groups.AddToGroup(index, object_ids): return 0 return len(object_ids)
def PointClosestObject(point, object_ids): """Finds the object that is closest to a test point Parameters: point = point to test object_id = identifiers of one or more objects Returns: (closest object_id, point on object) on success None on failure Example: import rhinoscriptsyntax as rs objs = rs.GetObjects("Select target objects for closest point", 63) if objs: point = rs.GetPoint("Test point") if point: results = rs.PointClosestObject(point, objs) if results: print "Object id:", results[0] rs.AddPoint( results[1] ) See Also: CurveClosestObject """ object_ids = rhutil.coerceguidlist(object_ids) point = rhutil.coerce3dpoint(point, True) closest = None for id in object_ids: geom = rhutil.coercegeometry(id, True) point_geometry = geom if isinstance(point_geometry, Rhino.Geometry.Point): distance = point.DistanceTo(point_geometry.Location) if closest is None or distance < closest[0]: closest = distance, id, point_geometry.Location continue point_cloud = geom if isinstance(point_cloud, Rhino.Geometry.PointCloud): index = point_cloud.ClosestPoint(point) if index >= 0: distance = point.DistanceTo(point_cloud[index].Location) if closest is None or distance < closest[0]: closest = distance, id, point_cloud[index].Location continue curve = geom if isinstance(curve, Rhino.Geometry.Curve): rc, t = curve.ClosestPoint(point) if rc: distance = point.DistanceTo(curve.PointAt(t)) if closest is None or distance < closest[0]: closest = distance, id, curve.PointAt(t) continue brep = geom if isinstance(brep, Rhino.Geometry.Brep): brep_closest = brep.ClosestPoint(point) distance = point.DistanceTo(brep_closest) if closest is None or distance < closest[0]: closest = distance, id, brep_closest continue mesh = geom if isinstance(mesh, Rhino.Geometry.Mesh): mesh_closest = mesh.ClosestPoint(point) distance = point.DistanceTo(mesh_closest) if closest is None or distance < closest[0]: closest = distance, id, mesh_closest continue if closest: return closest[1], closest[2]
def GetObjects(message=None, filter=0, group=True, preselect=False, select=False, objects=None, minimum_count=1, maximum_count=0, custom_filter=None): """Prompts user to pick or select one or more objects. Parameters: message (str, optional): a prompt or message. filter (number, optional): The type(s) of geometry (points, curves, surfaces, meshes,...) that can be selected. Object types can be added together to filter several different kinds of geometry. use the filter class to get values group (bool, optional) Honor object grouping. If omitted and the user picks a group, the entire group will be picked (True). Note, if filter is set to a value other than 0 (All objects), then group selection will be disabled. preselect (bool, optional): Allow for the selection of pre-selected objects. select (bool, optional): Select the picked objects. If False, the objects that are picked are not selected. objects ([guid, ...]): list of objects that are allowed to be selected minimum_count, maximum_count(number): limits on number of objects allowed to be selected custom_filter (str, optional): Calls a custom function in the script and passes the Rhino Object, Geometry, and component index and returns true or false indicating if the object can be selected Returns: list(guid, ...): identifiers of the picked objects Example: import rhinoscriptsyntax as rs objectIds = rs.GetObjects("Pick some curves", rs.filter.curve) for id in objectIds: print "Object identifier:", id See Also: GetCurveObject GetObject GetSurfaceObject """ if not preselect: scriptcontext.doc.Objects.UnselectAll() scriptcontext.doc.Views.Redraw() objects = rhutil.coerceguidlist(objects) class CustomGetObject(Rhino.Input.Custom.GetObject): def __init__(self, filter_function): self.m_filter_function = filter_function def CustomGeometryFilter(self, rhino_object, geometry, component_index): if objects and not rhino_object.Id in objects: return False rc = True if self.m_filter_function is not None: try: rc = self.m_filter_function(rhino_object, geometry, component_index) except: rc = True return rc go = CustomGetObject(custom_filter) go.SetCommandPrompt(message or "Select objects") geometry_filter = __FilterHelper(filter) if filter > 0: go.GeometryFilter = geometry_filter go.SubObjectSelect = False go.GroupSelect = group go.AcceptNothing(True) if go.GetMultiple(minimum_count, maximum_count) != Rhino.Input.GetResult.Object: return None if not select: scriptcontext.doc.Objects.UnselectAll() scriptcontext.doc.Views.Redraw() rc = [] count = go.ObjectCount for i in xrange(count): objref = go.Object(i) rc.append(objref.ObjectId) obj = objref.Object() if select and obj is not None: obj.Select(select) go.Dispose() return rc
def PointClosestObject(point, object_ids): """Finds the object that is closest to a test point Parameters: point = point to test object_id = identifiers of one or more objects Returns: (closest object_id, point on object) on success None on failure Example: import rhinoscriptsyntax as rs objs = rs.GetObjects("Select target objects for closest point", 63) if objs: point = rs.GetPoint("Test point") if point: results = rs.PointClosestObject(point, objs) if results: print "Object id:", results[0] rs.AddPoint( results[1] ) See Also: CurveClosestObject """ object_ids = rhutil.coerceguidlist(object_ids) point = rhutil.coerce3dpoint(point, True) closest = None for id in object_ids: geom = rhutil.coercegeometry(id, True) point_geometry = geom if isinstance(point_geometry, Rhino.Geometry.Point): distance = point.DistanceTo( point_geometry.Location ) if closest is None or distance<closest[0]: closest = distance, id, point_geometry.Location continue point_cloud = geom if isinstance(point_cloud, Rhino.Geometry.PointCloud): index = point_cloud.ClosestPoint(point) if index>=0: distance = point.DistanceTo( point_cloud[index].Location ) if closest is None or distance<closest[0]: closest = distance, id, point_cloud[index].Location continue curve = geom if isinstance(curve, Rhino.Geometry.Curve): rc, t = curve.ClosestPoint(point) if rc: distance = point.DistanceTo( curve.PointAt(t) ) if closest is None or distance<closest[0]: closest = distance, id, curve.PointAt(t) continue brep = geom if isinstance(brep, Rhino.Geometry.Brep): brep_closest = brep.ClosestPoint(point) distance = point.DistanceTo( brep_closest ) if closest is None or distance<closest[0]: closest = distance, id, brep_closest continue mesh = geom if isinstance(mesh, Rhino.Geometry.Mesh): mesh_closest = mesh.ClosestPoint(point) distance = point.DistanceTo( mesh_closest ) if closest is None or distance<closest[0]: closest = distance, id, mesh_closest continue if closest: return closest[1], closest[2]