def show_only(layer): rs.LayerVisible("Default", True) rs.CurrentLayer("Default") for sub in rs.LayerNames(): if sub == "Default": continue if sub in conf['blocks']: rs.LayerVisible(sub, True) continue rs.LayerVisible(sub, False) for block in conf['blocks']: for blockchild in rs.LayerChildren(block): rs.LayerVisible(blockchild, True) # show parent layers, if nested (two up, max) p_layer = rs.ParentLayer(layer) if p_layer: pp_layer = rs.ParentLayer(p_layer) if pp_layer: rs.LayerVisible(pp_layer, True) rs.LayerVisible(p_layer, True) # show the target layer rs.LayerVisible(layer, True) rs.CurrentLayer(layer) rs.LayerVisible("Default", False)
def RemoveMasterRootLayer(masterRoot): rs.EnableRedraw(False) subRoots = [] allLayers = rs.LayerNames() for each in allLayers: if rs.ParentLayer(each) == masterRoot: subRoots.append(each) for eachLayer in subRoots: rs.ParentLayer(eachLayer, '') rs.DeleteLayer(masterRoot) rs.EnableRedraw(True)
def addNumberTag(sortedPts, objs): for i, pt in enumerate(sortedPts): numTag = rs.AddText(str(i+1), pt, justification = 131074) objLay = rs.ObjectLayer(objs[i]) parentLayer = rs.ParentLayer(objLay) hostLayer = rs.AddLayer("ANNO_NUM", (128,128,128), parent = parentLayer) rs.ObjectLayer(numTag, hostLayer)
def areaTag(pline): #get area area = rs.CurveArea(pline)[0] area = str((int(area * 100)) / 100) + "m2" print area #move area tag below name tag location offset = [0, -2.5, 0] #add text tag objID = pline text = '%<area("' + str(objID) + '")>%m2' pt = rs.AddPoint(rs.CurveAreaCentroid(pline)[0]) rs.MoveObject(pt, offset) areaTag = rs.AddText(text, pt, 1, justification=131074) rs.DeleteObject(pt) parentLayer = rs.ParentLayer(rs.ObjectLayer(pline)) hostLayer = rs.AddLayer("ANNO_AREA", (128, 128, 128), parent=parentLayer) rs.ObjectLayer(areaTag, hostLayer) te = rs.coercerhinoobject(areaTag, True, True) te.Geometry.TextFormula = text te.CommitChanges() sc.doc.Views.Redraw() return None
def iterate(): colDelta = 20 origLayer = rs.GetLayer("Select Layer to Iterate") if origLayer is None: return shortName = origLayer.split("::")[-1] parentLay = rs.ParentLayer(origLayer) nameParts = shortName.split("_") if len(nameParts) > 1: num = int(nameParts[1]) + 1 else: num = 1 if len(str(num)) == 1: newNum = "0" + str(num) else: newNum = str(num) newName = nameParts[0] + "_" + newNum lay1 = rs.CurrentLayer(origLayer) #MAterials matIndex = rs.LayerMaterialIndex(lay1) #New Color oldCol = rs.LayerColor(lay1) oldRed = rs.ColorRedValue(oldCol) oldGreen = rs.ColorGreenValue(oldCol) oldBlue = rs.ColorBlueValue(oldCol) newRed = oldRed + randCol(colDelta) if newRed > 255: newRed = 255 - (newRed - 255) if newRed < 0: newRed = abs(newRed) newGreen = oldGreen + randCol(colDelta) if newGreen > 255: newGreen = 255 - (newGreen - 255) if newGreen < 0: newGreen = abs(newGreen) newBlue = oldBlue + randCol(colDelta) if newBlue > 255: newBlue = 255 - (newBlue - 255) if newBlue < 0: newBlue = abs(newBlue) newCol = (newBlue, newGreen, newBlue) newLay = rs.AddLayer(newName, color=newCol, parent=parentLay) #print nameParts #print newName finalLayer = rs.CurrentLayer(newLay) #sc.doc.Layers.CurrentLayer.RenderMaterialIndex = 3 #c = sc.doc.Layers.CurrentLayer.RenderMaterialIndex #sc.doc.Layers.Modify( #Rhino.DocObjects.Tables.LayerTable.CurrentLayer.r #sc.doc.Views.Redraw() #b = sc.doc.Layers.CurrentLayer #print "" return
def duplicateLayer(name, source, destination): newLayer = rs.AddLayer(name, color=rs.LayerColor(source), parent=destination) rs.ParentLayer(newLayer, destination) # print(name, source, destination) matchLayer(newLayer, source) return (newLayer)
def AddMasterRootLayer(masterRoot): rs.EnableRedraw(False) exceptionLayer = 'BLOCKS' parentLayers = [] allLayers = rs.LayerNames() for each in allLayers: if rs.ParentLayer(each) is None: parentLayers.append(each) newLayer = rs.AddLayer(str(masterRoot)) for eachLayer in parentLayers: if eachLayer == newLayer: pass elif eachLayer == exceptionLayer: pass else: rs.ParentLayer(eachLayer, newLayer) rs.EnableRedraw(True)
def RunCommand(is_interactive): config = get_sisufile() if not config: print('Sisufile not configured') return Rhino.Commands.Result.Failure layers = get_related_layers(config, derived_only=True) for layer in layers: rs.LayerVisible(layer, visible=False) parent = rs.ParentLayer(layer) rs.ExpandLayer(parent, False) # collapse parend layer return Rhino.Commands.Result.Success
def RunCommand(is_interactive): config = sisuconfig() if not config: print('Sisufile not configured') return Rhino.Commands.Result.Failure layers = get_sisu_layers(config, derived_only=True) for layer in layers: rs.LayerLocked(layer, True) parent = rs.ParentLayer(layer) rs.ExpandLayer(parent, False) # collapse parend layer print('Layers successfully locked!') return Rhino.Commands.Result.Success
def DupLayersSublayersAndObjs(): layer = rs.GetLayer() if layer == None: return #do initial run with selected layer color = rs.LayerColor(layer) objs = rs.ObjectsByLayer(layer) parentLayer = rs.ParentLayer(layer) copyName = UniqueLayerCopyName(layer, True) layerCopy = rs.AddLayer(copyName, color, parent=parentLayer) CopyObjectsToLayer(objs, layerCopy) rs.ExpandLayer(layerCopy, rs.IsLayerExpanded(layer)) DupAllSubLayers(layer, layerCopy) rs.CurrentLayer(layerCopy)
def RunCommand(is_interactive): config = get_sisufile() if not config: print('Sisufile not configured') return Rhino.Commands.Result.Failure layers = get_related_layers(config, derived_only=True) for layer in layers: if rs.IsLayerCurrent(layer): parent = rs.ParentLayer(layer) rs.CurrentLayer(parent) rs.PurgeLayer(layer) return Rhino.Commands.Result.Success
def lay_rand(): if rs.IsLayer("Temporary"): str_rand = str(random.randrange(0, 9999999999)) print str_rand if not rs.IsLayer(str_rand): lay_temp = rs.AddLayer(str_rand,randomcolor()) rs.ParentLayer(lay_temp,"Temporary") rs.CurrentLayer(lay_temp) return lay_temp else: lay_rand(); print "The random already exists, rerandomizing" else: rs.AddLayer("Temporary",Color.DarkViolet) lay_rand();
def nameTag(obj): roomName = rs.ObjectName(obj) try: text = str(roomName) pt0 = rs.BoundingBox(obj)[0] pt2 = rs.BoundingBox(obj)[2] pt = rs.PointDivide(rs.PointAdd(pt0, pt2), 2) areaTag = rs.AddText(text, pt, 1, justification=131074) except: print "Object has no name" return parentLayer = rs.ParentLayer(rs.ObjectLayer(obj)) hostLayer = rs.AddLayer("ANNO_NAME", (128, 128, 128), parent=parentLayer) rs.ObjectLayer(areaTag, hostLayer) return None
def LoadCurrentLayers(self, refLayers): # switch to RhinoDoc sc.doc = Rhino.RhinoDoc.ActiveDoc # retrieve current layer cl = rs.CurrentLayer() # check childcount childcount = rs.LayerChildCount(cl) # if no children, layer has to be childlayer or unrelated if childcount == 0: # get parent layer parent = rs.ParentLayer(cl) # switch back to GhDoc sc.doc = ghdoc if parent: allvalid = [parent + "::" + l for l in refLayers] # set message and return all valid children self.Message = "Referenced: " + str(parent) st[self.LNKEY] = allvalid return allvalid else: st[self.LNKEY] = None self.Message = None return None # if no children, layer has to be parent layer elif childcount > 0: parent = cl # switch back to GhDoc and return all valid layers scdoc = ghdoc if parent: allvalid = [parent + "::" + l for l in refLayers] # set message and return all valid children self.Message = "Referenced: " + str(parent) st[self.LNKEY] = allvalid return allvalid else: # switch back to GhDoc scdoc = ghdoc st[self.LNKEY] = None return None
def setup_layer(name, options): parent = options.get('parent', None) locked = options.get('locked', False) if not rs.IsLayer(name): layer = rs.AddLayer(name=name, parent=parent, locked=locked) else: rs.ParentLayer(name, parent) layer = rs.LayerName(name) color = options.get('color', (0, 0, 0)) print_width = options.get('lineWeight', 0) linetype = options.get('lineType', 'Continuous') rs.LayerColor(name, color) rs.LayerPrintWidth(name, print_width) rs.LayerLinetype(name, linetype) return layer
def mergeLayers(layA, layB): """ layA is kept, layB is deleted input: (layA, layB) each is a layer, the top parent in a tree to merge with another. returns: None """ rs.EnableRedraw(False) Alayers = rs.LayerChildren(layA) Blayers = rs.LayerChildren(layB) AlayersShort = [] BlayersShort = [] for Alayer in Alayers: AlayersShort.append(rs.LayerName(Alayer, False)) for Blayer in Blayers: BlayersShort.append(rs.LayerName(Blayer, False)) uniqueLayers = list(set(BlayersShort) - set(AlayersShort)) #move unique layers for uniqueLayer in uniqueLayers: rs.ParentLayer(uniqueLayer, layA) #get duplicate name layers duppedLayers = list(set(BlayersShort) - set(uniqueLayers)) #move objects to layA twin for duppedLayer in duppedLayers: newParent = layA + "::" + duppedLayer duppedObjs = rs.ObjectsByLayer(layB + "::" + duppedLayer) for duppedObj in duppedObjs: rs.ObjectLayer(duppedObj, newParent) #if it has children, recursively move them if rs.LayerChildCount(layB + "::" + duppedLayer) > 0: mergeLayers(layA + "::" + duppedLayer, layB + "::" + duppedLayer) else: rs.DeleteLayer(layB + "::" + duppedLayer) rs.DeleteLayer(layB) rs.EnableRedraw(True) return None
def layerTag(obj): roomName = rs.LayerName(rs.ObjectLayer(obj), False) #add text tag try: text = str(roomName) pt0 = rs.BoundingBox(obj)[0] pt2 = rs.BoundingBox(obj)[2] pt = rs.AddPoint(rs.PointDivide(rs.PointAdd(pt0, pt2), 2)) rs.MoveObject(pt, [0, 1.5, 0]) areaTag = rs.AddText(text, pt, 1, justification=131074) except: print "Object has no name" return rs.DeleteObject(pt) parentLayer = rs.ParentLayer(rs.ObjectLayer(obj)) hostLayer = rs.AddLayer("ANNO_LAYER", (128, 128, 128), parent=parentLayer) rs.ObjectLayer(areaTag, hostLayer) #te = rs.coercerhinoobject(id, True, True) #te.Geometry.TextFormula = text #te.CommitChanges() #sc.doc.Views.Redraw() return None
import rhinoscriptsyntax as rs obj = rs.GetObject("Pick any object") rs.EnableRedraw(False) layer = rs.ObjectLayer(obj) parent = rs.ParentLayer(layer) children = rs.LayerChildren(parent) map(lambda x: rs.ObjectsByLayer(x, True), children) rs.EnableRedraw(True) # layers = rs.LayerNames() # for layer in layers: # parent = rs.ParentLayer(layer) # print "Layer:", layer, ", Parent:", parent # layers = rs.LayerNames() # if layers: # layers = rs.MultiListBox(layers, "Layers to lock") # if layers: # for layer in layers: # rs.LayerLocked(layer, True)
headerline = "Area Name, Area in SF\n" file.write(headerline) returnList = [] for groupObj in groupSet: objs = rs.ObjectsByGroup(groupObj) for obj in objs: print(rs.TextObjectText(obj)) if rs.ObjectName(obj) == "Area Text": areaText = rs.TextObjectText(obj) elif rs.ObjectName(obj) == "Name Text": nameText = rs.TextObjectText(obj) objLayer = rs.ObjectLayer(obj) parentLayer = rs.ParentLayer(objLayer) if not parentLayer: parentLayer = "ROOT" else: parentLayer = parentLayer.split("::")[-1] returnList.append( [parentLayer, nameText.replace('\r', '').replace('\n', ' '), areaText]) returnList = sorted(returnList, key=lambda x: x[0]) for item in returnList: line = "{}, {}, {} \n".format( item[0], item[1], float((item[2].split(" ")[0]).replace(",", ""))) file.write(line)
""" For use with the Feasibility Study Workflow. See "F:\Resource\Strategic Initiatives\0702013.20 Research Initiative\Rhino Workflow" For use with Feasibility Study Assistant Grasshopper Script. See "F:\Resource\Strategic Initiatives\0702013.20 Research Initiative\Grasshopper\Grasshopper Toolset\Feasibility Drafting and modeling Assistant" This script is to create a subfolder to a hatch layer that specifies it as an open area, as you might label as "OPEN TO BELOW" in floor plans. Make sure the layer you want to add an OPEN layer to is the currently selected layer before running. """ import rhinoscriptsyntax as rs currentLayer = rs.CurrentLayer() layerName = rs.LayerName(currentLayer, fullpath=False) newLayer = rs.AddLayer(name=layerName+"_OPEN") rs.ParentLayer(newLayer, currentLayer) layer_c = rs.LayerColor(currentLayer) layer_m = rs.LayerMaterialIndex(currentLayer) if layer_m == -1: layer_m = rs.AddMaterialToLayer(newLayer) rs.MaterialColor(layer_m, layer_c) rs.LayerPrintColor(newLayer, layer_c) rs.LayerColor(newLayer, layer_c)
def importTEN_CAD(): savePath0 = rs.OpenFileName("Open", "Autocad (*.dwg)|*.dwg||") items = [["Units", "Meters", "Millimeters"]] defaults = [False] CADinMilli = rs.GetBoolean("Is that CAD file in meters or mm?", items, defaults)[0] explodeBlockBoo = True if savePath0 is None: return rs.EnableRedraw(False) #setup the layers rs.AddLayer("7_REF") rs.AddLayer("CAD", parent="7_REF") fileNameExt = savePath0.split('\\')[-1] fileName = fileNameExt.split('.')[0] savePath1 = '"' + savePath0 + '"' #create layer name now = datetime.date.today() dateList = [] if len(str(now.month)) > 1: month = str(now.month) else: month = "0" + str(now.month) if len(str(now.day)) > 1: day = str(now.day) else: day = "0" + str(now.day) time = str(now.year) + month + day layerName = time + "_" + fileName + "_01" children = rs.LayerChildren("7_REF::CAD") finalNums = [] for child in children: num = rs.LayerName(child, fullpath=False).split("_")[-1] try: finalNums.append(int(num)) except: finalNums.append(0) finalNums.sort() if rs.IsLayer("7_REF::CAD::" + layerName): num = int(finalNums[-1]) + 1 if len(str(num)) < 2: finalNum = "0" + str(num) else: finalNum = str(num) layerName = time + "_" + fileName + "_" + finalNum par = rs.AddLayer("7_REF") cat = rs.AddLayer("CAD", parent=par) element = rs.AddLayer(layerName, parent=cat) rs.CurrentLayer(element) #get intial list of all layers in the file currentLayers = rs.LayerNames() rs.Command('_-Import ' + savePath1 + ' _Enter') #get new layers added endLayersNames = rs.LayerNames() #newLayers = [item for item in currentLayers if item not in endLayersNames] newLayers = diff(endLayersNames, currentLayers) print newLayers for layer in newLayers: rs.ParentLayer(layer, element) objects = rs.ObjectsByLayer(layer) if rs.IsLayerEmpty(layer): rs.DeleteLayer(layer) else: for obj in objects: if rs.IsDimension(obj): rs.DeleteObject(obj) elif rs.IsHatch(obj): rs.DeleteObject(obj) #Get all the imported geometry allObjects = [] finalLayers = rs.LayerChildren(rs.CurrentLayer()) for finalLayer in finalLayers: allObjects.append(rs.ObjectsByLayer(finalLayer)) finalAllObjects = [item for sublist in allObjects for item in sublist] #Format Coordinate try: rawCoordinate = rs.GetDocumentData("Project Info", "CAD coordinate (X,Y,Z)") except: print "No CAD Coordinate specified in the Project Info" rawCoordinate = (0, 0, 0) coordinate = rawCoordinate.split(",") print "Aa" try: for i in range(0, 3): coordinate[i] = float(coordinate[i]) except: coordinate = None if coordinate is None: print "CAD coordinate has an error" else: #move all objects negVec = rs.VectorReverse(coordinate) rs.MoveObjects(finalAllObjects, negVec) if CADinMilli: rs.ScaleObjects(finalAllObjects, [0, 0, 0], [.001, .001, .001]) importGroup = rs.AddGroup(str(layerName)) rs.AddObjectsToGroup(finalAllObjects, importGroup) rs.ZoomSelected() print "Import EXECUTED" rs.EnableRedraw(True) return None
def RunCommand(is_interactive): #rs.EnableRedraw(False) cplane = rs.ViewCPlane() area = 0 defaultName = '' areaObjs = rs.GetObjects("Select Objects", filter=65536, preselect=True) if not areaObjs: rs.EnableRedraw(True) print("No object selected. Exiting command.") return areaName = rs.GetString( "Enter name of area to be displayed", object_names(areaObjs), ["RETAIL", "RESIDENTIAL", "AMENITY", "BOH", "LOBBY"]) if not areaName: rs.EnableRedraw(True) return # GRAPHIC SCALE OPTIONS nameOffset = .4 nameTextSize = 1 areaTextSize = .8 scale = rs.GetReal("Text height (in Rhino Units)", defaultScale) if not scale: print("Text height not entered, exiting command") rs.EnableRedraw(True) return nameOffset = nameOffset * scale nameTextSize = nameTextSize * scale areaTextSize = areaTextSize * scale # GET AREA and Format it to Integer with commas area = get_area(areaObjs) area = area * (rs.UnitScale(9))**2 area = int(area) area = "{:,} SF".format(area) bbox = rs.BoundingBox(areaObjs, cplane) pt_sum = bbox[0] for i in xrange(1, len(bbox)): pt_sum += bbox[i] area_avg = rs.AddPoint(pt_sum / len(bbox)) areaCenter = rs.PointCoordinates( rs.MoveObject(area_avg, cplane.YAxis * (nameOffset + areaTextSize) / -2)) nameCenter = rs.PointCoordinates( rs.MoveObject(area_avg, cplane.YAxis * (nameOffset + nameTextSize))) # print(nameCenter, areaCenter) # CREATE THE TEXT areaText = rs.AddText(area, areaCenter, areaTextSize, justification=2) nameText = rs.AddText(areaName, nameCenter, nameTextSize, justification=2) # CREATE BOX AROUND TEXT textBounds = rs.BoundingBox(areaText, cplane) textBoundary = rs.AddPolyline(textBounds[0:5]) nameTextHeight = rs.Distance( rs.BoundingBox(nameText, cplane)[2], rs.BoundingBox(nameText, cplane)[1]) textBorder = rs.OffsetCurve(textBoundary, (0, 0, 0), .25 * scale, style=1) rs.DeleteObject(textBoundary) rs.ObjectName(nameText, "Name Text") rs.ObjectName(areaText, "Area Text") rs.ObjectName(textBorder, "Text Border") parent = rs.ParentLayer( rs.ObjectLayer(areaObjs[0])) + '::' if rs.ParentLayer( rs.ObjectLayer(areaObjs[0])) else '' # print("LAYER NAME", rs.LayerName(parent+"A-ANNO-NOTE")) if not rs.IsLayer(parent + "A-ANNO-NOTE"): rs.AddLayer(parent + "A-ANNO-NOTE") rs.ObjectLayer(nameText, parent + "A-ANNO-NOTE") rs.ObjectLayer(areaText, parent + "A-ANNO-NOTE") rs.ObjectLayer(textBorder, parent + "A-ANNO-NOTE") areasGroup = rs.AddGroup() rs.AddObjectsToGroup([areaText, nameText, textBorder], areasGroup) rs.SelectObjects(rs.ObjectsByGroup(areasGroup)) rs.DeleteObject(area_avg) rs.EnableRedraw(True)
def importCAD(filePath, scaleDWG = False): explodeBlockBoo = True #setup the layers importLayerNumber = 6000 importLayerObj = layers.AddLayerByNumber(importLayerNumber, False) importLayerName = layers.GetLayerNameByNumber(importLayerNumber) #Shorten cad file name fileNameExt = os.path.basename(filePath) fileName = os.path.splitext(fileNameExt)[0] #create layer name time = utils.GetDatePrefix() iter = "01" layerName = time+"_"+fileName+"_"+iter #Check if this layer already exists while rs.IsLayer(importLayerName + "::" + time + "_" + fileName + "_" + iter): iterInt = int(iter)+1 if len(str(iterInt))<2: iter = "0" + str(iterInt) else: iter = str(iterInt) elementLayerName = importLayerName + "::" + time + "_" + fileName + "_" + iter elementLayer = rs.AddLayer(elementLayerName) rs.CurrentLayer(elementLayer) #get intial list of all layers in the file currentLayers = rs.LayerNames() rs.Command('_-Import "' + filePath + '" _IgnoreThickness=Yes _ModelUnits=Inches _Enter', False) #get new layers added endLayersNames = rs.LayerNames() newLayers = diff(endLayersNames, currentLayers) for layer in newLayers: rs.ParentLayer(layer, elementLayer) objects = rs.ObjectsByLayer(layer) if rs.IsLayerEmpty(layer): rs.DeleteLayer(layer) else: for obj in objects: if rs.IsDimension(obj): rs.DeleteObject(obj) elif rs.IsHatch(obj): rs.DeleteObject(obj) #Get all the imported geometry allObjects = [] finalLayers = rs.LayerChildren(rs.CurrentLayer()) blockNames = [] for finalLayer in finalLayers: layerObjects = rs.ObjectsByLayer(finalLayer) for layerObject in layerObjects: if rs.IsBlockInstance(layerObject): blockNames.append(rs.BlockInstanceName(layerObject)) allObjects.append(rs.ExplodeBlockInstance(layerObject, True)) else: allObjects.append(layerObject) finalAllObjects = list(flatten(allObjects)) for eachBlock in blockNames: try: rs.DeleteBlock(eachBlock) except: pass #Scale objects if scaleDWG: rs.ScaleObjects(finalAllObjects, [0,0,0], [.001, .001, .001]) #Collapse layers try: rootLay = sc.doc.Layers.FindId(rs.coerceguid(rs.LayerId(elementLayerName))) rootLay.IsExpanded = False except: pass print "Import Successful" return finalAllObjects
def translateLayer(layer): """ translates from Rhino Name to CAD Name input: one layer returns: new layer name """ rhinoLayerFilePath = "C:\\Users\\Tim\\Desktop\\temp\\RhinoLayersV2.csv" #Read the CSV file = open(rhinoLayerFilePath, "r") contents = file.readlines() file.close() #Variables CategoryCol = 1 RhinoLayerCol = 2 CADNameCol = 9 CADColorCol = 10 CADLineweightCol = 11 found = False layerShort = rs.LayerName(layer, False) newLayerName = "" #Check the CSV for row in contents: rowParts = row.split(",") if row.split(",")[RhinoLayerCol] == str( layerShort): #if layer name exists in CSV CADName = row.split(",")[CADNameCol] CADColor = translateColor(layer, row.split(",")[CADColorCol]) CADLineweight = row.split(",")[CADLineweightCol] #if Rhino name found but no CAD name associated with it if not CADName: CADName = "A-RHINO-" + layerShort newLayerName = CADName if len(CADLineweight) < 2: CADLineweight = 0 #Check if layer already exists. parent = rs.ParentLayer(layer) existLayers = rs.LayerChildren(parent) isExisting = False for existLayer in existLayers: #if new name already exists as a layer if rs.LayerName(existLayer, False) == CADName: layersObjs = rs.ObjectsByLayer(layer) for layersObj in layersObjs: rs.ObjectLayer(layersObj, existLayer) rs.DeleteLayer(layer) newLayerName = rs.LayerName(existLayer, False) print "Layer {} merged with existing layer {}.".format( layerShort, rs.LayerName(layer, False)) isExisting = True break #if layer does not already exist if isExisting == False: rs.LayerColor(layer, CADColor) rs.LayerPrintWidth(layer, float(CADLineweight)) newLayerName = CADName rs.RenameLayer(layer, CADName) print "Layer {} changed to layer {}.".format( layerShort, CADName) found = True break if not found: layerShort = rs.LayerName(layer, False) CADName = "A-RHINO-" + layerShort newLayerName = CADName rs.RenameLayer(layer, CADName) print "Layer {} has no matching CAD layer.".format(layerShort) return newLayerName return newLayerName
def RunCommand(is_interactive): rs.EnableRedraw(False) defaultName = '' areaObj = rs.GetObject("Select Object:", filter=65536, preselect=True) areaName = rs.ObjectName(areaObj) if not areaName: defaultName = rs.ObjectLayer(areaObj).split("-")[-1].replace("_", " ") print("default", defaultName) areaName = rs.GetString( "Enter name of area to be displayed", defaultName, ["RETAIL", "RESIDENTIAL", "AMENITY", "BOH", "LOBBY"]) else: areaName = areaName.upper() #areaName = areaName.replace(" ", "\n") nameOffset = 20 nameTextSize = 50 areaTextSize = 40 scale = rs.GetReal("Scale for text (.5 for towers)", 1) nameOffset = nameOffset * scale nameTextSize = nameTextSize * scale areaTextSize = areaTextSize * scale areaObjExp = rs.ExplodeHatch(areaObj) try: area = rs.Area(areaObjExp) except: print("Object not a solid hatch") rs.DeleteObject(areaObjExp) area = area * (rs.UnitScale(9))**2 area = int(area) area = "{:,} SF".format(area) areaCenter = rs.SurfaceAreaCentroid(areaObjExp)[0] rs.DeleteObject(areaObjExp) areaCenter = rs.PointAdd(areaCenter, (0, ((nameOffset + areaTextSize) / -2), 0)) nameCenter = rs.PointAdd(areaCenter, (0, nameOffset + nameTextSize, 0)) print(nameCenter, areaCenter) areaText = rs.AddText(area, areaCenter, areaTextSize, justification=2) nameText = rs.AddText(areaName, nameCenter, nameTextSize, justification=2) textBounds = rs.BoundingBox(areaText) textBoundary = rs.AddPolyline(textBounds[0:5]) nameTextHeight = rs.Distance( rs.BoundingBox(nameText)[2], rs.BoundingBox(nameText)[1]) print("AreaNameHeight", nameTextHeight) textBorder = rs.OffsetCurve(textBoundary, (0, 0, 0), 5 * scale, style=1) rs.DeleteObject(textBoundary) rs.ObjectName(nameText, "Name Text") rs.ObjectName(areaText, "Area Text") rs.ObjectName(textBorder, "Text Border") parent = rs.ParentLayer(rs.ObjectLayer(areaObj)) rs.ObjectLayer(nameText, parent + "::A-ANNO-NOTE") rs.ObjectLayer(areaText, parent + "::A-ANNO-NOTE") rs.ObjectLayer(textBorder, parent + "::A-ANNO-NOTE") areasGroup = rs.AddGroup() rs.AddObjectsToGroup([areaText, nameText, textBorder], areasGroup) rs.SelectObjects(rs.ObjectsByGroup(areasGroup)) rs.EnableRedraw(True)