def setFloorLevels(numFloors): """ sets the floor levels in document data input: int: the number of floors returns: None """ levelName = [] levels = [] for i in range(0, numFloors): levelName.append("L" + str(i + 1)) levelName.append("Roof") #if existing data, get for i in range(0, numFloors): if (rs.GetDocumentData("Levels", levelName[i]) is not None): levels.append(rs.GetDocumentData("Levels", levelName[i])) else: levels.append(None) if (rs.GetDocumentData("Levels", levelName[-1]) is not None): levels.append(rs.GetDocumentData("Levels", levelName[-1])) else: levels.append(None) #rs.DeleteDocumentData("Levels") newLevels = [] newLevels = rs.PropertyListBox(levelName, levels, "LEVELS", "Update the Levels below") if newLevels is None: return for i in range(0, numFloors + 1): rs.SetDocumentData("Levels", levelName[i], str(newLevels[i])) return None
def getDefaultValues(section, value): str_convert_for_biesse = rs.GetDocumentData(section, "convert_for_biesse") str_export_clamex_txt = rs.GetDocumentData("CheckAndExport", "export_clamex_txt") convert_for_biesse = str_convert_for_biesse == 'True' export_clamex_txt = str_export_clamex_txt == 'True' return (convert_for_biesse, export_clamex_txt)
def LoadExistingData(self): dataBaseExists = False try: self.drpDwnProjNum.SelectedValue = rs.GetDocumentData('PCPA', 'Project_Folder') dataBaseExists = True except: pass if dataBaseExists: self.tBoxProjCity.Text = rs.GetDocumentData('PCPA', 'Project_City')
def __undo_usertext(sender, e): """custom undo event - may be removed if bug in Rhino is fixed""" actuel = (rs.GetDocumentData("ScaleModel", "scale"), rs.GetDocumentData("ScaleModel", "state")) e.Document.AddCustomUndoEvent("Undo ScaleModel", __undo_usertext, actuel) old = e.Tag print(old) print("returning to %s scale" % (old[1])) rs.SetDocumentData("ScaleModel", "scale", old[0]) rs.SetDocumentData("ScaleModel", "state", old[1]) rs.ZoomExtents()
def getDefaultValues(): str_convert_for_biesse = rs.GetDocumentData("CheckAndExport", "convert_for_biesse") str_export_clamex_txt = rs.GetDocumentData("CheckAndExport", "export_clamex_txt") open_after_export = rs.GetDocumentData("CheckAndExport", "open_after_export") convert_for_biesse = str_convert_for_biesse == 'True' export_clamex_txt = str_export_clamex_txt == 'True' open_after_export = open_after_export == 'True' return (convert_for_biesse, export_clamex_txt, open_after_export)
def test_set_value(): dict_names = rs.GetDocumentData() counters_exists = 'counters' in dict_names if counters_exists: rs.DeleteDocumentData('counters') def try_good_args(): d.Dictionary.purge_dicts() good_value_set = c.Counter.set_value('shapes', 0) if not good_value_set == 0: print("good_value_set: expected 0; got %s" % good_value_set) def try_bad_arg_neg_int_value(): neg_int_value_set = c.Counter.set_value('shapes', -3) if not neg_int_value_set == None: print("neg_int_value_set: expected None; got %s" % (neg_int_value_set)) def try_bad_arg_float_value(): float_value_set = c.Counter.set_value('shapes', 3.7) if not float_value_set == None: print("float_value_set: expected None; got %s" % float_value_set) def try_bad_arg_str_value(): str_value_set = c.Counter.set_value('shapes', 'zero') if not str_value_set == None: print("str_value_set: expected None; got %s" % str_value_set) try_good_args() try_bad_arg_neg_int_value() try_bad_arg_float_value() try_bad_arg_str_value()
def getFloorLevels(): """ get the levels from document data input: None returns: List of levels """ numFloors = getNumFloors() levelName = [] levels = [] for i in range(0, numFloors): levelName.append("L" + str(i + 1)) levels.append(float(rs.GetDocumentData("Levels", levelName[i]))) levelName.append("Roof") levels.append(float(rs.GetDocumentData("Levels", levelName[-1]))) return levels
def setNumFloors(): try: curNum = int(rs.GetDocumentData("NumLevels", "NumLevels")) except: curNum = 1 a = rs.GetInteger("Number of Levels in the building", minimum=1, number=curNum) rs.SetDocumentData("NumLevels", "NumLevels", str(a)) return None
def command_line_menu(interface): """Create a Rhino-style command line menu. Parameters: interface (dict) : A (nested) dictionary with interface options. The structure of the dictionary is as follows: interface['options'] := [...] interface['message'] := '...' interface['default'] := '...' interface['show'] := '...' interface['ID'] := '...' Return: str : The selected option. None : If the command is interrupted, for example by pressing ``ESC`` Examples: .. code-block:: python # ... """ if rs.GetDocumentData(interface["ID"], interface["ID"]): interface["default"] = rs.GetDocumentData(interface["ID"], interface["ID"]) new_options = [] sub_menus = {} for option in interface["options"]: if isinstance(option, basestring): new_options.append(option) else: new_options.append(option["show"]) sub_menus[option["show"]] = option result = rs.GetString(interface["message"], interface["default"], new_options) interface["default"] = result rs.SetDocumentData(interface["ID"], interface["ID"], result) if result in sub_menus: result = command_line_menu(sub_menus[result]) return result
def GetLevels(): try: path = rs.GetDocumentData('PCPA', 'Project_Database') except: print "No level data set" path = '' levelData = dt.GetProjectLevelData(path, 0) finalHeights = [] for eachLevel in levelData: finalHeights.append(float(eachLevel[4])) return finalHeights
def main(): items = [ "Project Name", "Project Number", "Project Location", "Plot Ratio", "Min Green Coverage", "Max Site Coverage", "CAD coordinate (X,Y,Z)" ] values = [] if rs.GetDocumentData("Project Info", items[0]) is not None: for i in range(0, len(items)): values.append(rs.GetDocumentData("Project Info", items[i])) else: values = [None, None] values = rs.PropertyListBox(items, values, "Project Info", "Project Info") #if rs.ObjectsByLayer("SITE::BNDY") is not None: # siteArea = rs.Area(rs.ObjectsByLayer("SITE::BNDY")) #else: # siteArea = "No Site Boundary Layer" for i in range(0, len(items)): rs.SetDocumentData("Project Info", items[i], values[i]) rs.Command("_Show ")
def moveToOrigin(allObjects, CADinMilli): cadOrigin = rs.GetDocumentData("Project Info", "CAD coordinate (X,Y,Z)") cadOrigin = cadOrigin.split(",") try: moveVec = rs.VectorCreate([0,0,0], [float(cadOrigin[0]), float(cadOrigin[1]), float(cadOrigin[2])]) except: print "Move to origin FAILED. Make sure CAD Coordinate has been correctly entered into Project Info." return if CADinMilli: moveVec = rs.VectorScale(moveVec, .001) rs.MoveObjects(allObjects,moveVec) return
def Main(): try: data_name = "Rect2DogBone" curves = rs.GetObjects("Rectangle curve", rs.filter.curve, True, True) diam = rs.GetInteger( "DogBone circle diameter", 16 if not rs.GetDocumentData(data_name, "diam_external") else float(rs.GetDocumentData(data_name, "diam_external"))) diam_barrenos = rs.GetInteger( "Circle at centroid (0=None -1=Point n=Diameter)", 0 if not rs.GetDocumentData(data_name, "diam_barrenos") else float( rs.GetDocumentData(data_name, "diam_barrenos"))) tol = float( rs.GetReal( "External offset", 0 if not rs.GetDocumentData(data_name, "tolerance") else float( rs.GetDocumentData(data_name, "tolerance")))) if curves and diam: rs.EnableRedraw(False) dogbone(curves, diam, diam_barrenos, tol) rs.SetDocumentData(data_name, "diam_external", str(diam)) rs.SetDocumentData(data_name, "diam_barrenos", str(diam_barrenos)) rs.SetDocumentData(data_name, "tolerance", str(tol)) rs.EnableRedraw(True) print("%s DogBones created" % len(curves)) except Exception as e: print("Error: %s" % e)
def addLevelMarks(func): rs.EnableRedraw(False) leftAlign = True geometry = [] currentLevels = setLevels.getFloorLevels() for level in currentLevels: if level is None: print "Levels have not been set." return levelNames = rs.GetDocumentData("Levels") size = 10 i = 0 stPts = [] for level in currentLevels: vec1 = [size*.2,size*.1,0] ptA = [0, level, 0] ptB = [size*.5, level, 0] stPts.append(ptA) geometry.append(rs.AddLine(ptA, ptB)) geometry.append(rs.AddText(levelNames[i] + ": +" + str(level), rs.VectorAdd(ptA, vec1), size*.1)) #Triangle Marking triPts = [[0,0,0], [size*.05, size*.07,0], [-size*.05, size*.07,0], [0,0,0]] newPts = [] triPt = rs.VectorAdd(ptA, [size*.1, 0,0]) for j in range(0, 4): newPts.append(rs.VectorAdd(triPt, triPts[j])) tri = rs.AddPolyline(newPts) geometry.append(rs.CloseCurve(tri)) i=i+1 #Dimensions for i in range(0, len(currentLevels)-1): pt1 = [0,currentLevels[i], 0] pt2 = [0,currentLevels[i+1], 0] pt3 = [size*-.15,currentLevels[i+1], 0] geometry.append(rs.AddAlignedDimension(pt1, pt2, pt3)) firstPt = [0,currentLevels[0], 0] lastPt = [0,currentLevels[-1], 0] dimOffset = [size*-.3,currentLevels[-1], 0] geometry.append(rs.AddAlignedDimension(firstPt, lastPt, dimOffset)) rs.AddLayer("80_LAYOUT", visible = True) annoLayer = rs.AddLayer("ANNO", parent = "80_LAYOUT") for geo in geometry: rs.ObjectLayer(geo, annoLayer) rs.AddBlock(geometry, [0,0,0], "Level Marks", True) if (func == 0): block = rs.InsertBlock("Level Marks", [0,0,0]) rs.ObjectLayer(block, "ANNO") rs.EnableRedraw(True) return
def Initialize(self): #Setup the dialog self.Title = "Project Levels" self.Size = drawing.Size(550,565) self.Padding = drawing.Padding(5, 5) self.databasePath = r'C:\Users\twilliams\Desktop\TEMP\Database' self.versionName = r'Project_Info.yaml' try: self.databaseFile = rs.GetDocumentData('PCPA', 'Project_Database') except: self.databaseFile = ''
def main(): objs = rs.GetObjects("Select Objects to Send to CAD", preselect = True) if objs is None: return items = [ ["Units", "Millimeters", "Meters"] ] defaults = [False] CADinMeters = rs.GetBoolean("Autocad DWG units", items, defaults)[0] if CADinMeters is None: return coordRaw = rs.GetDocumentData("Project Info", "CAD coordinate (X,Y,Z)") if len(coordRaw) == 0: print "You have not specified a CAD Coordinate. Sending to 0,0,0." coord = [0,0,0] else: coordTemp = coordRaw.split(',') coord = [] for x in coordTemp: coord.append(float(x.lstrip())) send2CAD(objs, coord, CADinMeters)
def getDefaultValues(dict, section): new_dict = {} for key in dict: # copy existing value new_dict[key] = dict[key] str_value = rs.GetDocumentData(section, key) if str_value: if str_value == 'True': new_dict[key] = True elif str_value == 'False': new_dict[key] = False else: try: new_dict[key] = float(str_value) except: new_dict[key] = str_value return new_dict
__author__ = "dfmd" __version__ = "2019.07.12" import rhinoscriptsyntax as rs data_name = "OffsetAndClose" curve = rs.GetObject("Select curve", rs.filter.curve, True, True) dir = rs.GetPoint("Offset direction") dist = rs.GetReal( "Offset distance", 5 if not rs.GetDocumentData(data_name, "dist") else float( rs.GetDocumentData(data_name, "dist"))) def offset(): curves = [curve] offset_curve = rs.OffsetCurve(curve, dir, dist) curves.append(offset_curve) curves.append( rs.AddLine(rs.CurveEndPoint(offset_curve), rs.CurveEndPoint(curve))) curves.append( rs.AddLine(rs.CurveStartPoint(offset_curve), rs.CurveStartPoint(curve))) rs.JoinCurves(curves, True) print "Offset created." if curve and dir and dist: try: offset()
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 print_document_data(): document_data = rs.GetDocumentData() print('document data after: %s' % document_data)
def print_dict(dict_name): dict_keys = rs.GetDocumentData(dict_name) print('%s: %s' % (dict_name, dict_keys))
def delete_document_data(): rs.DeleteDocumentData() document_data = rs.GetDocumentData() print('document data before: %s' % document_data)
def GetLevelsFromRhinoDoc(): strLevels = rs.GetDocumentData('PCPA', 'Levels') levels = ast.literal_eval(strLevels) return levels
def test_GetDocumentData_Typical(self): s,e,v = sec_ent_val() rs.SetDocumentData(s,e,v) self.assertEqual(v, rs.GetDocumentData(s,e))
def test_GetDocumentDataSectionNameReturnsEntryNames(self): s,e1,v = sec_ent_val() rs.SetDocumentData(s, e1, v) _,e2,v = sec_ent_val() rs.SetDocumentData(s, e2, v) self.assertEqual([e1,e2], rs.GetDocumentData(s))
def test_GetDocumentDataNoArgsReturnsSectionNames(self): s,e,v = sec_ent_val() rs.SetDocumentData(s, e, v) _,e,v = sec_ent_val() rs.SetDocumentData(s, e, v) self.assertEqual([s], rs.GetDocumentData())
def test_GetDocumentDataReturnsNoneForBadSectionOrEntry(self): s, e, v = sec_ent_val() self.assertTrue(rs.GetDocumentData(s) == None) rs.SetDocumentData(s, e, v) self.assertTrue(rs.GetDocumentData(s, uniquestr()) == None)
def getNumFloors(): a = rs.GetDocumentData("NumLevels", "NumLevels") if a is None: return 1 else: return int(a)
def Main(): if not LANG: return if not rs.IsLayer(OFFSET_LAYER): rs.AddLayer(OFFSET_LAYER) else: rs.DeleteObjects(rs.ObjectsByLayer(OFFSET_LAYER)) if not rs.IsLayer(TRASH_LAYER): rs.AddLayer(TRASH_LAYER) else: rs.DeleteObjects(rs.ObjectsByLayer(TRASH_LAYER)) original_layer = rs.CurrentLayer() machining_settings = False general_settings = False user_data = False # if rs.IsAlias(alias_name): # if rs.AliasMacro(alias_name) != "-_RunPythonScript (\"%s\")" % os.path.realpath(__file__): # if rs.MessageBox("Rhino tiene registrado esta ubicacion en el comando de %s:\n\n%s\n\nDeseas cambiarla por esta?\n\n%s\n" % (alias_name,rs.AliasMacro(alias_name),os.path.realpath(__file__)) , 4 | 32) == 6: # rs.DeleteAlias(alias_name) # rs.AddAlias(alias_name,"-_RunPythonScript (\"%s\")" % os.path.realpath(__file__)) # else: # pass # else: # if rs.MessageBox("Vincular el comando \"%s\" a este archivo?\n\n%s\n\nPodras ejecutar directamente el plugin escribiendo \"%s\" en la consola." % (alias_name,os.path.realpath(__file__),alias_name) , 4 | 32) == 6: # rs.AddAlias(alias_name,"-_RunPythonScript (\"%s\")" % os.path.realpath(__file__)) # else: # pass try: machining_settings = eval(rs.GetDocumentData(REGISTRY_SECTION,"machining_settings")) except: pass try: general_settings = eval(rs.GetDocumentData(REGISTRY_SECTION,"general_settings")) except: pass try: f = open(SETTINGS_FILE,"r") r = f.read() f.close() persistant = eval(r) if machining_settings != False: machining_settings.update(persistant) else: machining_settings = persistant except: pass try: user_data = eval(rs.GetDocumentData(REGISTRY_SECTION,"user_data")) if not user_data["save_path"]: user_data["save_path"] = rs.DocumentPath().replace(".3dm","_gcode.txt") if rs.DocumentPath() else False except: pass if user_data and user_data["selected_preset"] not in machining_settings: user_data["selected_preset"] = False print TXT["init"] ui = SettingsControl(general_settings,machining_settings,user_data) Rhino.UI.Dialogs.ShowSemiModal(ui.form) temporal = {} persistant = {} for name in ui.machining_settings: if ui.machining_settings[name]["persistant"]: temporal[name] = ui.machining_settings[name] else: persistant[name] = ui.machining_settings[name] f = open(SETTINGS_FILE,"w") f.write(str(persistant)) f.close() rs.SetDocumentData(REGISTRY_SECTION,"machining_settings",str(temporal)) rs.SetDocumentData(REGISTRY_SECTION,"general_settings",str(ui.general_settings)) rs.SetDocumentData(REGISTRY_SECTION,"user_data",str(ui.user_data)) # print "to registry...." # print "machining_settings",str(ui.machining_settings) # print "general_settings",str(ui.general_settings) # print "user_data",str(ui.user_data) # print "temp",str([i for i in temporal]) # print "persistant",str([i for i in persistant]) ui.code_thread = False rs.CurrentLayer(original_layer) rs.DeleteObjects(rs.ObjectsByLayer(OFFSET_LAYER)) rs.DeleteObjects(rs.ObjectsByLayer(TRASH_LAYER)) rs.DeleteLayer(OFFSET_LAYER) rs.DeleteLayer(TRASH_LAYER) print TXT["bye"]
def AddTitleBlock(size): filelocations = config.GetDict() rs.EnableRedraw(False) if size == 11: offset = .354 row1 = offset row2 = row1 * 2 row3 = row1 * 3 row4 = row1 * 4 leftEdge = offset middle = 17 / 2 rightEdge = 17 - offset pt1 = [leftEdge, row4] pt2 = [rightEdge, 11 - row1] txtBase1 = [middle, row2] txtBase2 = [leftEdge, row2] txtBase3 = [rightEdge, row2] txtBase4 = [leftEdge, row1] txtBase5 = [rightEdge, row1] lineSt = [leftEdge, row3] lineEnd = [rightEdge, row3] txtSizeL = .125 txtSizeM = .094 logoPlane = [13.834, .247, 0] logoWidth = 2.823 logoHeight = .116 elif size == 8: offset = .229 row1 = offset row2 = row1 * 2 row3 = row1 * 3 row4 = row1 * 4 leftEdge = offset middle = 11 / 2 rightEdge = 11 - offset pt1 = [leftEdge, row4] pt2 = [rightEdge, 8.5 - row1] txtBase1 = [middle, row2] txtBase2 = [leftEdge, row2] txtBase3 = [rightEdge, row2] txtBase4 = [leftEdge, row1] txtBase5 = [rightEdge, row1] lineSt = [leftEdge, row3] lineEnd = [rightEdge, row3] txtSizeL = .125 txtSizeM = .063 logoPlane = [8.347, .157, 0] logoWidth = 2.434 logoHeight = .100 elif size == 18: offset = .5 row1 = offset row2 = row1 * 2 row3 = row1 * 3 row4 = row1 * 4 leftEdge = offset middle = 24 / 2 rightEdge = 24 - offset pt1 = [leftEdge, row4] pt2 = [rightEdge, 18 - row1] txtBase1 = [middle, row2] txtBase2 = [leftEdge, row2] txtBase3 = [rightEdge, row2] txtBase4 = [leftEdge, row1] txtBase5 = [rightEdge, row1] lineSt = [leftEdge, row3] lineEnd = [rightEdge, row3] txtSizeL = .250 txtSizeM = .125 logoPlane = [19.627, .367, 0] logoWidth = 3.885 logoHeight = .160 layout = sc.doc.Views.GetPageViews()[-1] if layout is None: return sc.doc.Views.ActiveView = layout if rs.GetDocumentData(section="PCPA", entry="Project_Name") is None: rs.SetDocumentData(section="PCPA", entry="Project_Name", value="PROJECT TITLE") projectTitle = '%<DocumentText("PCPA\Project_Name")>%' if rs.GetDocumentData(section="PCPA", entry="Client_Name") is None: rs.SetDocumentData(section="PCPA", entry="Client_Name", value="Client Name") clientName = '%<DocumentText("PCPA\Client_Name")>%' #Add text textList = [] textList.append(rs.AddText("Title", txtBase1, txtSizeL, justification=2)) textList.append( rs.AddText(projectTitle, txtBase2, txtSizeL, justification=1)) textList.append( rs.AddText('%<Date("MMMM d, yyyy")>%', txtBase3, txtSizeM, justification=4)) textList.append(rs.AddText(clientName, txtBase4, txtSizeM, justification=1)) #ADD Copyright copyright = 'COPYRIGHT ' + u"\u00a9" + ' %<Date("yyyy")>%' copyrightText = rs.AddText(copyright, txtBase5, txtSizeM, justification=4) #ADD Pelli Clarke Pelli pcp = 'Pelli Clarke Pelli' pcpText = rs.AddText(pcp, txtBase5, txtSizeM, justification=4) if rs.IsDimStyle('PCPA_10'): dimstyleID = sc.doc.DimStyles.FindName('PCPA_14') ############## #Just trying to change the dim style here #pcpRhobj = rs.coercerhinoobject(pcpText) #test = pcpRhobj.Attributes #pcpRhobj.CommitChanges() ############## #ADD Architects architects = 'Architects' architectsText = rs.AddText(architects, txtBase5, txtSizeM, justification=4) #Horizontal line line = rs.AddLine(lineSt, lineEnd) #Add detail detail = rs.AddDetail(layout.ActiveViewportID, pt1, pt2, "PCPA " + str(layout.PageName), 7) #Change layers AddLayerByNumber try: rs.ObjectLayer(line, layers.GetLayerNameByNumber(8204)) except: pass try: rs.ObjectLayer(detail, layers.GetLayerNameByNumber(8106)) except: pass try: for eachText in textList: rs.ObjectLayer(eachText, layers.GetLayerNameByNumber(8105)) except: pass try: rs.ObjectLayer(copyrightText, layers.GetLayerNameByNumber(8211)) except: pass try: rs.ObjectLayer(pcpText, layers.GetLayerNameByNumber(8210)) except: pass try: rs.ObjectLayer(architectsText, layers.GetLayerNameByNumber(8211)) except: pass rs.EnableRedraw(True)