def make_wall(new_wall, temp_type): wall_curves = new_wall.curve level = new_wall.level_id if new_wall.room_height > 0: wall_height = float(new_wall.room_height) / 304.8 else: wall_height = 1500 / 304.8 if new_wall.plug == 1: w = Wall.Create(doc, wall_curves, temp_type.Id, level, wall_height, 0.0, False, False) w.get_Parameter(BuiltInParameter.WALL_KEY_REF_PARAM).Set(2) try: db.Element( w).parameters['BA_AI_RoomName'].value = new_wall.room_name db.Element( w).parameters['BA_AI_RoomNumber'].value = new_wall.room_number db.Element(w).parameters['BA_AI_RoomID'].value = new_wall.room_id db.Element( w).parameters['BA_AI_FinishingType'].value = "Wall Finishing" db.Element(room).parameters['BA_AI_RoomID'].value = room.Id except: forms.alert('You need to add shared parameters for BA finishing') wallz.append(w) else: 0 return wallz
def set_value(self): scolumn_els = (FilteredElementCollector(doc).OfCategory( BuiltInCategory.OST_StructuralColumns). WhereElementIsNotElementType().ToElements()) with revit.Transaction("set value"): for scolumn_el in scolumn_els: db.Element( scolumn_el).parameters['Baseplate-Type'].value = 'A4' db.Element( scolumn_el).parameters['Baseplate-Width'].value = 0.15 db.Element( scolumn_el).parameters['Baseplate-Height'].value = 0.15 db.Element( scolumn_el).parameters['Baseplate-Thickness'].value = 0.05
def CreateBeam(Curves, FamilySymbol, Level, StructureType): for i in Curves: c = doc.Create.NewFamilyInstance(i, FamilySymbol, Level, StructureType) WrpedElement = db.Element(c) WrpedElement.parameters['Start Level Offset'] = Offset WrpedElement.parameters['End Level Offset'] = Offset print(WrpedElement)
def PlaceAdaptiveCommponent(FamilySymbol, Index, Locations): numberOfLocation = len(Locations) numberOfPoint = DB.AdaptiveComponentFamilyUtils.GetNumberOfAdaptivePoints( FamilySymbol.Family) if numberOfLocation != numberOfPoint: print("not same count location for point") return else: instance = DB.AdaptiveComponentInstanceUtils.CreateAdaptiveComponentInstance( doc, FamilySymbol) placePointIds = DB.AdaptiveComponentInstanceUtils.GetInstancePlacementPointElementRefIds( instance) instanceWraped = db.Element(instance) for i in range(0, numberOfPoint): point = doc.GetElement(placePointIds[i]) point.Position = DB.XYZ(CovertToFeet(float(Locations[i][0])), CovertToFeet(float(Locations[i][1])), CovertToFeet(float(Locations[i][2]))) instanceWraped.parameters['X'].value = float(Locations[i][0]) instanceWraped.parameters['Y'].value = float(Locations[i][1]) instanceWraped.parameters['Z'].value = float(Locations[i][2]) instanceWraped.parameters[ParameterName.InstanceMark].value = Index
def lasteCreated(): curview = revit.activeview elements = DB.FilteredElementCollector(revit.doc,curview.Id)\ .WhereElementIsNotElementType()\ .ToElementIds() element_to_isolate = [] Empty = [] for elid in elements: el = revit.doc.GetElement(elid) try: WrapedElement = db.Element(el).type if WrapedElement.unwrap().get_Parameter( DB.BuiltInParameter.UNIFORMAT_CODE).AsString() == '': print(WrapedElement.Id) except: pass try: if WrapedElement.unwrap().get_Parameter( DB.BuiltInParameter.UNIFORMAT_CODE).AsString() == "": Empty.append(WrapedElement) #print(WrapedElement.unwrap().get_Parameter(DB.BuiltInParameter.ALL_MODEL_TYPE_NAME).AsString()) except: pass if len(Empty) == 0: print("所有构件都包含了Assembly Code")
def AddGISLocation_Wall(WallElement): WrapedWall = db.Element(WallElement) LocationCurve = WallElement.Location StartPoint = LocationToValue(LocationCurve)[0] EndPoint = LocationToValue(LocationCurve)[1] Location = { "SP": StartPoint, "EP": EndPoint, "BL": "", "BO": "", "TL": "", "TO": "" } Location["BL"] = WrapedParameterValue( WrapedWall.parameters[ParameterName.WALL_BASE_CONSTRAINT]) Location["BO"] = WrapedParameterValue( WrapedWall.parameters[ParameterName.WALL_BASE_OFFSET]) Location["TL"] = WrapedParameterValue( WrapedWall.parameters[ParameterName.WALL_HEIGHT_TYPE]) Location["TO"] = WrapedParameterValue( WrapedWall.parameters[ParameterName.WALL_TOP_OFFSET]) with db.Transaction('add Gis Location'): WrapedWall.parameters["GISLocation"] = Location
def make_floor(new_floor): floor_curves = DB.CurveArray() for boundary_segment in new_floor.boundary: floor_curves.Append((boundary_segment).GetCurve()) floorType = doc.GetElement(new_floor.floor_type_id) level = doc.GetElement(new_floor.level_id) normal_plane = DB.XYZ.BasisZ f = doc.Create.NewFloor(floor_curves, floorType, level, False, normal_plane) fls.append(f) # Input parameter values from rooms if form.values['checkbox1'] == True: db.Element(f).parameters.builtins[ 'FLOOR_HEIGHTABOVELEVEL_PARAM'].value = float( new_floor.room_offset1) else: db.Element(f).parameters.builtins[ 'FLOOR_HEIGHTABOVELEVEL_PARAM'].value = float(offset3 / 304.8) try: db.Element(f).parameters['BA_AI_RoomName'].value = new_floor.room_name db.Element( f).parameters['BA_AI_RoomNumber'].value = new_floor.room_number db.Element(f).parameters['BA_AI_RoomID'].value = new_floor.room_id db.Element( f).parameters['BA_AI_FinishingType'].value = "Floor Finishing" db.Element(room).parameters['BA_AI_RoomID'].value = room.Id except: forms.toaster.send_toast( 'You need to add shared parameters for BA finishing') #forms.alert('You need to add shared parameters for BA finishing') pass
def make_ceiling(new_ceiling): ceiling_curves = DB.CurveArray() for boundary_segment in new_ceiling.boundary: try: ceiling_curves.Append(boundary_segment.Curve) # 2015, dep 2016 except AttributeError: ceiling_curves.Append(boundary_segment.GetCurve()) # 2017 ceilingType = doc.GetElement(new_ceiling.ceiling_type_id) ceil_thick = ceilingType.get_Parameter(BuiltInParameter.ROOF_ATTR_DEFAULT_THICKNESS_PARAM).AsDouble() level = doc.GetElement(new_ceiling.level_id) f = doc.Create.NewFootPrintRoof(ceiling_curves, level, ceilingType, clr.StrongBox[ModelCurveArray](ModelCurveArray())) if form.values['checkbox1'] == True : db.Element(f).parameters.builtins['ROOF_LEVEL_OFFSET_PARAM'].value = float(new_ceiling.room_offset - ceil_thick) else: db.Element(f).parameters.builtins['ROOF_LEVEL_OFFSET_PARAM'].value = float(offset3/304.8) try: db.Element(f).parameters['BA_AI_RoomName'].value = new_ceiling.room_name db.Element(f).parameters['BA_AI_RoomNumber'].value = new_ceiling.room_number db.Element(f).parameters['BA_AI_RoomID'].value = new_ceiling.room_id db.Element(f).parameters['BA_AI_FinishingType'].value = "Ceiling Finishing" db.Element(room).parameters['BA_AI_RoomID'].value = room.Id except: forms.toaster.send_toast('You need to add shared parameters for BA finishing') #forms.alert('You need to add shared parameters for BA finishing') pass
def SolidRoom(Room): roomName = Room.Id.ToString() solid = GetElementSolid(Room) build = FlipSolidNormal(solid[0]) newSolid = build.meshSolid().GetGeometricalObjects() new = List[DB.GeometryObject]() new.Add(newSolid[0]) directShapeLibrary = DB.DirectShapeLibrary.GetDirectShapeLibrary(doc) directShapeType = DB.DirectShapeType.Create( doc, roomName, DB.ElementId(DB.BuiltInCategory.OST_Mass)) directShapeType.SetShape(new) directShapeType.Parameter[DB.BuiltInParameter.UNIFORMAT_CODE].Set( "14-90.03") directShapeLibrary.AddDefinitionType(roomName, directShapeType.Id) ds = DB.DirectShape.CreateElementInstance(doc, directShapeType.Id, directShapeType.Category.Id, roomName, DB.Transform.Identity) #ds.SetTypeId(directShapeType.Id) ds.Parameter[DB.BuiltInParameter.ALL_MODEL_MARK].Set("Room:" + roomName) ds.Name = roomName wrapedNewRoom = db.Element(ds) wrapedNewRoom.parameters['Area'] = round(CovertToM2(Room.Area), 1) wrapedNewRoom.parameters['Price'] = Room.Area * 10000 wrapedNewRoom.parameters['BAT_Area'] = db.Element( Room).parameters['BAT_Area'].value wrapedNewRoom.parameters['InterWallType'] = Room.Parameter[ DB.BuiltInParameter.ROOM_FINISH_WALL].AsString() print("done")
def GetElementMaterial(Element): materialNames = ';' materialIds = [] materials = Element.GetMaterialIds(False) wrappedElement=db.Element(Element) for c in materials: if c.IntegerValue == -1: return None else: materialNames += doc.GetElement(c).Name return materialNames
def main(): selected_element_by_room = [] family_instance_reference = uidoc.Selection.PickObject( UI.Selection.ObjectType.Element, ClassISelectionFilter(), "Select FamilyInstance") room_reference = uidoc.Selection.PickObject( UI.Selection.ObjectType.Element, CategoryISelectionFilterByName("Rooms"), "Select Room") """ room_reference = uidoc.Selection.PickObject( UI.Selection.ObjectType.Element, CategoryISelectionFilterByBuiltInCategory( DB.BuiltInCategory.OST_Rooms), "Select Room") """ source_fi = doc.GetElement(family_instance_reference.ElementId) source_room = doc.GetElement(room_reference.ElementId) # print(source_fi) selected_elements = db.Collector( of_class="FamilyInstance", is_not_type=True, where=lambda x: x.GetTypeId() == source_fi.GetTypeId()).get_elements() view = uidoc.ActiveView phase_name = view.get_Parameter( DB.BuiltInParameter.VIEW_PHASE).AsValueString() phase = get_phase(phase_name) with db.Transaction("Selected Element by Python"): for e in selected_elements: if e.Room[phase].Id == source_room.Id: selected_element_by_room.append(e) e.parameters['Selected Comment'].value = "Selected" else: e.parameters['Selected Comment'].value = "" ui.forms.Alert("Family Name: {}\nType Name: {}\nFamily Count: {}".format( source_fi.Symbol.FamilyName, db.Element(source_fi).name, len(selected_element_by_room)), title="Selected Elements/Room", header="Room Name: {} Room Number: {}".format( db.Room(source_room).name, source_room.Number)) uidoc.Selection.SetElementIds(List[DB.ElementId]( e.Id for e in selected_element_by_room))
def CreateBeam(Curves, FamilySymbol, Level, StructureType): for i in Curves: c = doc.Create.NewFamilyInstance(i, FamilySymbol, Level, StructureType) DB.Structure.StructuralFramingUtils.DisallowJoinAtEnd(c, 0) DB.Structure.StructuralFramingUtils.DisallowJoinAtEnd(c, 1) WrpedElement = db.Element(c) WrpedElement.parameters[ ParameterName.BEAM_Start_Extension] = CovertToFeet(-12.5) WrpedElement.parameters[ ParameterName.BEAM_End_Extension] = CovertToFeet(-12.5) WrpedElement.parameters[ ParameterName.BEAM_z_Justification] = CovertToFeet(Offset) print(WrpedElement)
def GetWallData(WallElement): Guid = WallElement.UniqueId ExportJson = {"Guid": Guid, "UserData": []} _ParameterName_Constrain = [ ParameterName.WALL_BASE_CONSTRAINT, ParameterName.WALL_BASE_OFFSET, ParameterName.WALL_HEIGHT_TYPE, ParameterName.WALL_TOP_OFFSET ] _ParameterName_Quality = [ ParameterName.WALL_Length, ParameterName.WALL_Area, ParameterName.WALL_Volume ] WrapedWall = db.Element(WallElement) for i in _ParameterName_Constrain: parametername = WrapedWall.parameters[i].name parametervalue = WrapedParameterValue(WrapedWall.parameters[i]) _Constraints = { "Category": "Constrain", "Name": parametername.encode('GB2312'), "Value": parametervalue } ExportJson["UserData"].append(_Constraints) for i in _ParameterName_Quality: try: parametername = WrapedWall.parameters[i].name parametervalue = WrapedParameterValue(WrapedWall.parameters[i]) except: parametername = i parametervalue = None _Constraints = { "Category": "Quantity", "Name": parametername, "Value": parametervalue } ExportJson["UserData"].append(_Constraints) _GIS = { "Category": "GISLocation", "Name": "GISLocation", "Value": WrapedWall.parameters["GISLocation"].value } ExportJson["UserData"].append(_GIS) return ExportJson
def main(): start_number = (get_mark_selected_or_none() or 0) + 1 with db.TransactionGroup('Fill number of piles', assimilate=True): for number in xrange(start_number, 10**5): element = pick_element_by_category( DB.BuiltInCategory.OST_StructuralColumns, message='Next number [{}]'.format(number)) if element is None: logger.debug('User aborted pick operation') break else: renumber(db.Element(element), number) logger.debug('End Script')
def add_data(m_RoofTypeInfo): n = 1 #Add TypeMark parameter mark = m_RoofTypeInfo.t_rooftype.get_Parameter( BuiltInParameter.ALL_MODEL_TYPE_MARK).AsString() matt = str(mark) + '\r\n' for mat in m_RoofTypeInfo.t_materialid: try: m = doc.GetElement(mat).get_Parameter( BuiltInParameter.ALL_MODEL_DESCRIPTION).AsString() except: m = "No material or description" matt += '- ' + str(m) + "\r\n" #matt += str(n) + '.' + m + "\r\n" n = n + 1 db.Element( m_RoofTypeInfo.t_rooftype).parameters['BA_AI_Structure'].value = matt
def CreateBeam(i, FamilySymbol, Level, Offset, StructureType): c = doc.Create.NewFamilyInstance(i, FamilySymbol, Level, StructureType) DB.Structure.StructuralFramingUtils.DisallowJoinAtEnd(c, 0) DB.Structure.StructuralFramingUtils.DisallowJoinAtEnd(c, 1) WrpedElement = db.Element(c) try: WrpedElement.parameters[ ParameterName.BEAM_Start_Extension] = CovertToFeet(-12.5) WrpedElement.parameters[ ParameterName.BEAM_End_Extension] = CovertToFeet(-12.5) except: print("No Start Extension") WrpedElement.parameters[ ParameterName.BEAM_Start_Level_Offset] = CovertToFeet(Offset) WrpedElement.parameters[ ParameterName.BEAM_End_Level_Offset] = CovertToFeet(Offset) print(WrpedElement)
def __init__(self, Room): self.Room = Room self.WrapedRoom = db.Element(self.Room) self.RoomLevelId = self.Room.Level.Id self.RoomLevel = self.Room.Level
uidoc = __revit__.ActiveUIDocument doc = __revit__.ActiveUIDocument.Document walls = Autodesk.Revit.DB.FilteredElementCollector(doc).OfCategory(DB.BuiltInCategory.OST_Walls) rooms = Autodesk.Revit.DB.FilteredElementCollector(doc).OfCategory(DB.BuiltInCategory.OST_Rooms) roomId = [] dataset = [] RoomData = namedtuple('FinWalls',['wallid','roomid','walltype','wallarea','roomname','roomnumber']) for room in rooms: roomId.append(room.Id.ToString()) for wall in walls: if wall.ToString() == "Autodesk.Revit.DB.Wall" and db.Element(wall).parameters['BA_AI_FinishingType'].value == 'Wall Finishing': finishing_id = db.Element(wall).parameters['BA_AI_RoomID'].value if roomId.count(finishing_id) > 0 : wallarea = float(wall.get_Parameter(BuiltInParameter.HOST_AREA_COMPUTED).AsDouble()/10.764) roomname = db.Element(wall).parameters['BA_AI_RoomName'].value roomnumber = db.Element(wall).parameters['BA_AI_RoomNumber'].value data = RoomData(wall.Id, finishing_id, wall.WallType, wallarea, roomname, roomnumber) dataset.append(data) for unit in dataset: area = unit.wallarea operated_rooms = {} for unit in dataset: operated_rooms[unit.roomid] = ""
def __init__(self, Floor): self.Floor = Floor self.WrapedBeam = db.Element(Floor)
except Exception as errmsg: counter += 1 if counter > 100: raise Exception('Exceeded Maximum Loop') else: break else: break return viewplan NewView = namedtuple('NewView', ['name', 'bbox', 'level_id']) new_views = [] for room in selected_rooms: room = db.Element(room) room_level_id = room.Level.Id room_name = room.parameters['Имя'].value room_number = room.parameters['Номер'].value new_room_name = '{} {}'.format(room_name, room_number) room_bbox = room.get_BoundingBox(doc.ActiveView) new_bbox = offset_bbox(room_bbox, crop_offset) view_name = '{} - {}'.format(room.Level.Name, new_room_name) new_view = NewView(name=view_name, bbox=new_bbox, level_id=room_level_id) new_views.append(new_view) for new_view in new_views: view = create_plan(new_view=new_view, view_type_id=view_type_id)
def __init__(self, Light): self.Light = Light self.Wraped = db.Element(Light)
DB.BuiltInCategory.OST_Floors) rooms = Autodesk.Revit.DB.FilteredElementCollector(doc).OfCategory( DB.BuiltInCategory.OST_Rooms) roomId = [] dataset = [] RoomData = namedtuple( 'FinFloors', ['floorid', 'roomid', 'floortype', 'floorarea', 'roomname', 'roomnumber']) for room in rooms: roomId.append(room.Id.ToString()) for floor in floors: if floor.ToString() == "Autodesk.Revit.DB.Floor" and db.Element( floor ).parameters['BA_AI_FinishingType'].value == 'Floor Finishing': finishing_id = db.Element(floor).parameters['BA_AI_RoomID'].value if roomId.count(finishing_id) > 0: floorarea = float( floor.get_Parameter( BuiltInParameter.HOST_AREA_COMPUTED).AsDouble() / 10.764) roomname = db.Element(floor).parameters['BA_AI_RoomName'].value roomnumber = db.Element(floor).parameters['BA_AI_RoomNumber'].value data = RoomData(floor.Id, finishing_id, floor.FloorType, floorarea, roomname, roomnumber) #print(floor.GetType()) dataset.append(data) for unit in dataset: area = unit.floorarea
@property def name(self): return "定额编号:{}项目名称:{}概算基价:{}{}".format(self.get('coder'),self.get('coder_name'),self.get('bprice'),self.get('unit')) items=[MyOption(i) for i in items] res = forms.SelectFromList.show(items, title=element.name, button_name='选择定额') with revit.Transaction('Fake load'): cost = element.parameters['Cost'].value=res.get('bprice') sub=element.parameters['BudgetCode'].value=res.get('coder') print(res.get('coder')) forms.alert('{}定额添加完成'.format(items[0].get('coder_name')), exitscript=False) return True # you can also pass a list of objects # the form will show the str(object) of the objects in the list for i in [_elements]: i=db.Element(i).type if i.parameters['BudgetCode'].value==None or i.parameters['BudgetCode'].value=='': if SetElementTypePrice(i): print("{}Set Price Success".format(i.name)) else: print("break") break else: print('{} 已经都包含了定额价格')
def __init__(self, Beam): self.Beam = Beam self.WrapedBeam = db.Element(Beam)
return None #Read Rhino File allElementsInView=db.Collector(view=doc.ActiveView,is_type=False).get_elements(wrapped=False) #allElementsInView=DB.FilteredElementCollector(doc) NoProblem=[] Problem=[] for i in allElementsInView: materialNames =';' name = i.Name wrappedElement = db.Element(i) try: assemblyCode = wrappedElement.type.parameters[ParameterName.UNIFORMAT_CODE].value except: assemblyCode = None if isinstance(i,DB.View3D): continue elif isinstance(i,DB.Wall): materialNames=GetWallLayeredMaterial(i) elif isinstance(i,DB.Floor): materialNames=GetFloorLayeredMaterial(i) elif isinstance(i, DB.FamilyInstance): materialNames = GetFamilyInstanceMaterial(i) elif isinstance(i,DB.Plumbing.Pipe): materialNames=GetPipeMaterial(i) elif isinstance(i,DB.Mechanical.Duct):
DB.BuiltInCategory.OST_Roofs) rooms = Autodesk.Revit.DB.FilteredElementCollector(doc).OfCategory( DB.BuiltInCategory.OST_Rooms) roomId = [] dataset = [] RoomData = namedtuple( 'FinRoofs', ['roofid', 'roomid', 'rooftype', 'roofarea', 'roomname', 'roomnumber']) for room in rooms: roomId.append(room.Id.ToString()) for roof in roofs: if roof.ToString() == "Autodesk.Revit.DB.FootPrintRoof" and db.Element( roof ).parameters['BA_AI_FinishingType'].value == 'Ceiling Finishing': finishing_id = db.Element(roof).parameters['BA_AI_RoomID'].value #print(roomId.count(finishing_id)) if roomId.count(finishing_id) > 0: roofarea = float( roof.get_Parameter( BuiltInParameter.HOST_AREA_COMPUTED).AsDouble() / 10.764) roomname = db.Element(roof).parameters['BA_AI_RoomName'].value roomnumber = db.Element(roof).parameters['BA_AI_RoomNumber'].value #print(roof.GetType) data = RoomData(roof.Id, finishing_id, roof.RoofType, roofarea, roomname, roomnumber) dataset.append(data) else: forms.alert("No Ceiling Finishing in project!1")
# by Roman Golev # Blank Architects __doc__ = 'Записывает параметр ID помещения. / Retrieves Room ID and put it into properties.' __author__ = 'Roman Golev' __title__ = "Room\nID" import Autodesk.Revit.DB as DB from Autodesk.Revit.DB import * import rpw from rpw import doc, uidoc, UI, db, ui from rpw.ui.forms import (FlexForm, Label, ComboBox, TextBox, TextBox, Separator, Button, CheckBox) #import pyrevit modules from pyrevit import forms uidoc = __revit__.ActiveUIDocument doc = __revit__.ActiveUIDocument.Document elements = DB.FilteredElementCollector(doc) \ .OfCategory(DB.BuiltInCategory.OST_Rooms) \ .WhereElementIsNotElementType() \ .ToElements() with db.Transaction('Room ID'): try: for room in elements: db.Element(room).parameters['BA_AI_RoomID'].value = room.Id except: forms.alert('You need to add shared parameters for BA finishing')