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
Пример #2
0
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)
Пример #3
0
    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')
Пример #4
0
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()
Пример #5
0
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
Пример #9
0
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
Пример #10
0
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 ")
Пример #12
0
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
Пример #13
0
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)
Пример #14
0
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
Пример #15
0
    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)
Пример #17
0
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
Пример #18
0
__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()
Пример #19
0
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
Пример #20
0
def print_document_data():
    document_data = rs.GetDocumentData()
    print('document data after: %s' % document_data)
Пример #21
0
def print_dict(dict_name):
    dict_keys = rs.GetDocumentData(dict_name)
    print('%s: %s' % (dict_name, dict_keys))
Пример #22
0
def delete_document_data():
    rs.DeleteDocumentData()
    document_data = rs.GetDocumentData()
    print('document data before: %s' % document_data)
Пример #23
0
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)
Пример #28
0
def getNumFloors():
    a = rs.GetDocumentData("NumLevels", "NumLevels")
    if a is None:
        return 1
    else:
        return int(a)
Пример #29
0
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"]
Пример #30
0
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)