Пример #1
0
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)
Пример #2
0
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)
Пример #3
0
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)
Пример #4
0
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
Пример #5
0
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
Пример #6
0
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)
Пример #7
0
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)
Пример #8
0
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
Пример #9
0
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
Пример #10
0
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)
Пример #11
0
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
Пример #12
0
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();
Пример #13
0
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
Пример #14
0
    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
Пример #15
0
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
Пример #16
0
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
Пример #17
0
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
Пример #18
0
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)
Пример #19
0
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)
Пример #21
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
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)
Пример #23
0
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
Пример #24
0
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
Пример #25
0
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)