def _clear_objects(cls): """Deletes all drawn objects, including locked objects, if any. Returns: n_objects int. The number of objects deleted, if successful """ dummy_point = rs.AddPoint(0, 0, 0) value = rs.DeleteObject(dummy_point) include_lights = True include_grips = True objects = rs.AllObjects(include_lights, include_grips) n_objects = rs.DeleteObjects(objects) remaining_objects = rs.AllObjects(include_lights, include_grips) rs.UnlockObjects(remaining_objects) m_objects = rs.DeleteObjects(remaining_objects) return n_objects + m_objects
def outline_region(): go = Rhino.Input.Custom.GetObject() go.GeometryFilter = Rhino.DocObjects.ObjectType.Curve default_length = sc.sticky["length"] if sc.sticky.has_key("length") else 100 default_delete = sc.sticky["delete"] if sc.sticky.has_key("delete") else True opt_delete = Rhino.Input.Custom.OptionToggle(default_delete,"No","Yes") go.SetCommandPrompt("Select Curves") go.AddOptionToggle("DeleteInput", opt_delete) go.GroupSelect = True go.SubObjectSelect = False go.AcceptEnterWhenDone(True) go.AcceptNothing(True) go.EnableClearObjectsOnEntry(False) go.GroupSelect = True go.SubObjectSelect = False go.DeselectAllBeforePostSelect = False res = None bHavePreselectedObjects = False while True: res = go.GetMultiple(1,0) if res == Rhino.Input.GetResult.Option: #print res go.EnablePreSelect(False, True) continue #If not correct elif res != Rhino.Input.GetResult.Object: print "No curves selected!" return Rhino.Commands.Result.Cancel if go.ObjectsWerePreselected: bHavePreselectedObjects = True go.EnablePreSelect(False, True) continue break input_curves = [] for i in xrange(go.ObjectCount): b_obj = go.Object(i).Object() input_curves.append(b_obj.Id) #Get length extension_length = rs.GetInteger(message="Enter Extension Length",number=default_length) if not extension_length: rs.EnableRedraw(True) print "No Extension Length entered." return False arr_preview_geom = get_preview_geometry(input_curves) for indCrv in arr_preview_geom: rs.ExtendCurveLength(indCrv,0,2,extension_length) rs.EnableRedraw(False) #Get curveboolean and display it region_was_created = True rs.UnselectAllObjects() rs.SelectObjects(arr_preview_geom) rs.Command("_-CurveBoolean _AllRegions _Enter") pcurve_outline = rs.LastCreatedObjects() if isinstance(pcurve_outline,list): preview_srf = rs.AddPlanarSrf(pcurve_outline) rs.LockObjects(arr_preview_geom) rs.LockObjects(preview_srf) else: region_was_created = False rs.LockObjects(arr_preview_geom) preview_srf = [] rs.EnableRedraw(True) rs.Redraw() #Set up input object go = Rhino.Input.Custom.GetOption() optint = Rhino.Input.Custom.OptionDouble(extension_length) prompt = "Press Enter to accept" warning = "Insufficient overlap length. " s = prompt if region_was_created else warning+prompt go.SetCommandPrompt(s) go.AddOptionDouble("ExtensionLength", optint) go.AddOptionToggle("DeleteInput", opt_delete) go.AcceptEnterWhenDone(True) go.AcceptNothing(True) #control flow: can distinguish between inserting an option, cancelling, and pressing enter res = None while True: res = go.Get() rs.EnableRedraw(False) region_was_created = True #If new option entered, redraw a possible result if res == Rhino.Input.GetResult.Option: #Delete old preview rs.UnlockObjects(preview_srf+arr_preview_geom) rs.DeleteObjects(preview_srf+arr_preview_geom) if isinstance(pcurve_outline,list): rs.DeleteObjects(pcurve_outline) rs.SelectObjects(input_curves) #Draw new preview arr_preview_geom = get_preview_geometry(input_curves) if not extension_length: return False for indCrv in arr_preview_geom: rs.ExtendCurveLength(indCrv,0,2,optint.CurrentValue) rs.UnselectAllObjects() rs.SelectObjects(arr_preview_geom) rs.Command("_-CurveBoolean _AllRegions _Enter") pcurve_outline = rs.LastCreatedObjects() if isinstance(pcurve_outline,list): preview_srf = rs.AddPlanarSrf(pcurve_outline) rs.LockObjects(arr_preview_geom) rs.LockObjects(preview_srf) else: rs.LockObjects(arr_preview_geom) preview_srf = [] region_was_created = False rs.EnableRedraw(True) s = prompt if region_was_created else warning+prompt go.SetCommandPrompt(s) continue #If accepted, leave loop elif res == Rhino.Input.GetResult.Nothing: break #If cancelled, delete working geometry elif res != Rhino.Input.GetResult.Option: rs.UnlockObjects(preview_srf) rs.UnlockObjects(arr_preview_geom) rs.DeleteObjects(preview_srf) rs.DeleteObjects(arr_preview_geom) rs.DeleteObjects(pcurve_outline) rs.EnableRedraw(True) return Rhino.Commands.Result.Cancel #Clean up if successful if opt_delete.CurrentValue == True: rs.DeleteObjects(input_curves) rs.UnlockObjects(preview_srf) rs.UnlockObjects(arr_preview_geom) rs.DeleteObjects(preview_srf) rs.DeleteObjects(arr_preview_geom) if isinstance(pcurve_outline,list): rs.SelectObjects(pcurve_outline) sc.sticky["length"] = optint.CurrentValue sc.sticky["delete"] = opt_delete.CurrentValue rs.EnableRedraw(True)
import rhinoscriptsyntax as rs hatches = rs.ObjectsByType(65536) lock = True for hatch in hatches: if rs.IsObjectLocked(hatch): lock = False if lock: rs.LockObjects(hatches) else: rs.UnlockObjects(selblockhatches)
def MultiNestedBoundaryTrimCurves(): msg="Select closed boundary curves for trimming" TCrvs = rs.GetObjects(msg, 4, preselect=False) if not TCrvs: return cCrvs=[crv for crv in TCrvs if rs.IsCurveClosed(crv)] if len(cCrvs)==0: print "No closed trim curves found" return rs.LockObjects(cCrvs) origCrvs = rs.GetObjects("Select curves to trim", 4) rs.UnlockObjects(cCrvs) if not origCrvs : return #plane which is active when trim curve is chosen refPlane = rs.ViewCPlane() if sc.sticky.has_key("TrimSideChoice"): oldTSChoice = sc.sticky["TrimSideChoice"] else: oldTSChoice=True choice = [["Trim", "Outside", "Inside"]] res = rs.GetBoolean("Side to trim away?", choice, [oldTSChoice]) if not res: return trimIns = res[0] #False=Outside tol=sc.doc.ModelAbsoluteTolerance bb=rs.BoundingBox(origCrvs,refPlane) #CPlane box, world coords if not bb: return zVec=refPlane.ZAxis rs.EnableRedraw(False) botPlane=Rhino.Geometry.Plane(bb[0]-zVec,zVec) #check xform=rs.XformPlanarProjection(botPlane) cutCrvs=rs.TransformObjects(cCrvs,xform,True) ccc=CheckPlanarCurvesForCollision(cutCrvs) if ccc: msg="Boundary curves overlap, results may be unpredictable, continue?" res=rs.MessageBox(msg,1+32) if res!= 1: return bSrfs=rs.AddPlanarSrf(cutCrvs) rs.DeleteObjects(cutCrvs) if bSrfs == None: return line=rs.AddLine(bb[0]-zVec,bb[4]+zVec) vols=[] for srf in bSrfs: ext=rs.ExtrudeSurface(srf,line,True) if ext != None: vols.append(ext) rs.DeleteObjects(bSrfs) rs.DeleteObject(line) if len(vols)==0: return exGroup=rs.AddGroup() rs.AddObjectsToGroup(vols,exGroup) rs.Prompt("Splitting curves...") rs.SelectObjects(origCrvs) rs.Command("_Split _-SelGroup " + exGroup + " _Enter", False) splitRes=rs.LastCreatedObjects() rs.DeleteGroup(exGroup) rs.Prompt("Classifying trims...") noSplit=[] for crv in origCrvs: #add curve to list if it has not been split (still exists in doc) id=sc.doc.Objects.Find(crv) if id != None: noSplit.append(crv) errors=0 if splitRes: if len(noSplit)>0: splitRes.extend(noSplit) for crv in splitRes: inside=MultiTestInOrOut(crv,vols) if inside != None: if (inside and trimIns) or (not inside and not trimIns): rs.DeleteObject(crv) else: errors+=1 rs.DeleteObjects(vols) if errors>0: print "Problems with {} curves".format(errors) sc.sticky["TrimSideChoice"] = trimIns
rs.DeleteObjects(cb_crvs) rs.DeleteObject(frame_brep) rs.ObjectLayer(main_curves, "XXX_LCUT_01-CUT") rs.ObjectLayer(guide_curves, "XXX_LCUT_03-LSCORE") rs.ObjectLayer(etch_curves, "XXX_LCUT_04-ENGRAVE") rs.ObjectLayer(preview_geo, "XXX_LCUT_00-GUIDES") if join_dist > 0: s = "Had to force-close gaps up to a distance of " + str(join_dist) Rhino.RhinoApp.WriteLine(s) return 1 if __name__ == "__main__": set_globals() result = rc_getinput() if isinstance(result, Rhino.Commands.Result): print "Invalid Input: no surface selected" else: surface_geometry = result[0] b = result[1] e = result[2] rs.EnableRedraw(False) result = rc_terraincut2(surface_geometry, b, e) if result == 0: print "ERROR: topography slicing error. Try rebuilding the input surface with more control points and trying again." rs.EnableRedraw(True) rs.UnlockObjects([SHORT_GUIDE, LONG_GUIDE]) rs.DeleteObjects([SHORT_GUIDE, LONG_GUIDE]) rs.Redraw()