def __init__(self, pipe, DisToBeam=0): self.pipe = pipe Level = pipe.LevelId self.DisToBeam = DisToBeam self.beams = db.Collector(of_category='OST_StructuralFraming', level=Level, is_not_type=True)
def make_wall(): level = db.Collector(of_category='Levels', is_type=False, where=lambda x: x.parameters['Name'] == 'Level 1')[0] levelid = level.Id DB.Wall.Create(doc, curve, levelid, False)
def get_local_gen_mods_for_link(family_filter, link_file_name): local_gen_mods = db.Collector(of_category="GenericModel", is_not_type=True).ToElements() filtered_gen_mods = [] for gen in local_gen_mods: if gen.LookupParameter("Linked_Source").AsString() == link_file_name: if gen.Symbol.FamilyName == family_filter: filtered_gen_mods.append(gen) return filtered_gen_mods
def get_levels(doc): level_list = [] levels = db.Collector(of_category='Levels', is_not_type=True).get_elements() for level in levels: level_dict = {} level_dict['name'] = level.name level_dict['Elevation'] = level.Elevation * 304.8 level_list.append(level_dict) sorted_level_list = sorted(level_list, key=lambda x: x['Elevation']) return routes.make_response(data=sorted_level_list)
def CollectAllElements(where, ignoreTags=False, categoriesFilter=[]): els = [] elsc = [] for cat in doc.Settings.Categories: try: #if "tags" in cat.Name.lower() and ignoreTags: # pass #else: if ValidCategory(cat, ignoreTags, categoriesFilter): if where == "ActiveView": els = db.Collector(view=doc.ActiveView, of_category=cat.Name) elif where == "Project": els = db.Collector(of_category=cat.Name) else: break els = els.get_elements(True) elsc += els except: pass return elsc
def GetTypeId(replace_familyName, replace_typeName): col = db.Collector(of_class=FamilySymbol) alltypes = col.GetElementIdIterator() alltypes.Reset() for el in alltypes: fsyb = doc.GetElement(el) if fsyb.Family.Name == replace_familyName: tyname = Element.Name.GetValue(fsyb) if tyname == replace_typeName: return fsyb.Id
def SelectSimilar(where='ActiveView'): els = ui.Selection() elTypes = FilterSelection(els) colEls = [] colElsc = [] for pmEnum, pmValues in elTypes.items(): for elt in pmValues: param_id = DB.ElementId(pmEnum) parameter_filter = db.ParameterFilter(param_id, equals=elt) if where == 'ActiveView': colEls = db.Collector(view=doc.ActiveView, parameter_filter=parameter_filter) elif where == 'Project': colEls = db.Collector(parameter_filter=parameter_filter) else: return False colEls = colEls.get_elements(True) colElsc += colEls SetFocus(colElsc)
def get_sheet_order_dict(): sheet_order_dict = {} rpw_sheets = (db.Collector(of_class=DB.ViewSheet, is_not_type=True).get_elements()) for sheet in rpw_sheets: sheet_category = sheet.SheetNumber[:2] sheet_order = sheet.SheetNumber[-2:] if str(sheet_category) in sheet_order_dict.keys( ) and sheet_order >= sheet_order_dict[str(sheet_category)]: sheet_order_dict[str(sheet_category)] = sheet_order elif str(sheet_category) not in sheet_order_dict.keys(): sheet_order_dict[str(sheet_category)] = sheet_order return sheet_order_dict
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 __init__(self): #set default family type families = db.Collector(of_category="OST_GenericModel",is_type=True) types = [] type_count = 0 for fam in families: if fam.FamilyName == "重量ラック(単列)": types.append(fam) type_count += 1 if type_count == 0: UI.TaskDialog.Show("ファミリエラー","重量ラックファミリがプロジェクトにロードされていないため,実行できません。") else: self.types = types
def duplicate_sheet_contents(sheet, new_sheet): copy_element_ids = [] elements_on_sheet = db.Collector(view=sheet.Id, is_not_type=True).get_elements() for element in elements_on_sheet: if not isinstance(element.unwrap(), DB.Viewport): copy_element_ids.append(element.Id) if copy_element_ids: with revit.Transaction('Copy View Contents'): new_contents = DB.ElementTransformUtils.CopyElements( sheet.unwrap(), List[DB.ElementId](copy_element_ids), new_sheet, None, None) return new_contents
def SelectAllInProject(catTypes=['Model', 'Annotation']): #els = db.Collector(where=lambda x: x.get_category().CategoryType.ToString() == 'Model') els = [] elsc = [] for cat in doc.Settings.Categories: try: els = db.Collector(of_category=cat.Name) elsc += els except: pass els = FilterCategoryType(elsc, catTypes) msg = "Any elements found in Project." if AlertSelection(els, msg): SetFocus(els)
def FloorFinishType(self): try: WallFinishName = self.Room.get_Parameter( DB.BuiltInParameter.ROOM_FINISH_FLOOR) param_id = DB.ElementId(DB.BuiltInParameter.SYMBOL_NAME_PARAM) parameter_filter = db.ParameterFilter( param_id, equals=WallFinishName.AsString()) FloorType = db.Collector(of_category='OST_Floors', parameter_filter=parameter_filter, is_type=True).get_first(wrapped=False) return FloorType except Exception as e: print("{Room}不能获取建筑楼面类型:{Problem}".format(Room=self.RoomName, Problem=e))
def __init__(self): #set default family type #families = DB.FilteredElementCollector(doc).WhereElementIsElementType().ToElements() families = db.Collector(of_category="OST_MechanicalEquipment", is_type=True) temp_count = 0 for fam in families: if fam.FamilyName == straightConveyorName: self.straightConveyorFamilySymbol = fam temp_count += 1 elif fam.FamilyName == curveConveyorName: self.curveConveyorFamilySymbol = fam temp_count += 1 if temp_count == 0: UI.TaskDialog.Show("ファミリエラー", "コンベヤファミリがプロジェクトにロードされていないため,実行できません。")
def get_furnitures(doc): furnitures = db.Collector(of_category='Furniture', is_not_type=True).get_elements() furniture_dict = {} furniture_type_dict = {} for f in furnitures: if f.Symbol.FamilyName in furniture_dict.keys(): furniture_dict[f.Symbol.FamilyName] += 1 else: furniture_dict[f.Symbol.FamilyName] = 1 if f.Symbol.FamilyName + ' - ' + f.name in furniture_type_dict.keys(): furniture_type_dict[f.Symbol.FamilyName + ' - ' + f.name] += 1 else: furniture_type_dict[f.Symbol.FamilyName + ' - ' + f.name] = 1 family_dict = { 'family': furniture_dict, 'family_type': furniture_type_dict } return routes.make_response(data=family_dict)
def WallFinishType(self): try: WallFinishName = self.WrapedRoom.parameters[ ParameterName.Room_Wall_Finish].value param_id = DB.ElementId(DB.BuiltInParameter.SYMBOL_NAME_PARAM) parameter_filter = db.ParameterFilter(param_id, equals=WallFinishName) WallType = db.Collector(of_category='OST_Walls', parameter_filter=parameter_filter, is_type=True).get_first() WallType = WallType.unwrap() return WallType except Exception as e: print("{roomname} 没有设置墙体类型,使用默认墙体".format(roomname=self.RoomName)) defaultWallTypeId = doc.GetDefaultElementTypeId( DB.ElementTypeGroup.WallType) WallType = doc.GetElement(defaultWallTypeId) return WallType
def WallFinishType(self): try: WallFinishName = self.WrapedRoom.parameters['Wall Finish'].value param_id = DB.ElementId(DB.BuiltInParameter.SYMBOL_NAME_PARAM) parameter_filter = db.ParameterFilter(param_id, equals=WallFinishName) WallType = db.Collector(of_category='OST_Walls', parameter_filter=parameter_filter, is_type=True).get_first() return WallType except Exception as e: print( "{roomname} is not set WallFinishType,We use Default Wall Type defaultType" .format(roomname=self.RoomName)) finally: defaultWallTypeId = doc.GetDefaultElementTypeId( DB.ElementTypeGroup.WallType) WallType = doc.GetElement(defaultWallTypeId) return WallType
def getStartDirectionLengthLevelFromLine(self, modelLine): # find start point XYZ location = modelLine.Location line = location.Curve start = line.Origin start = DB.XYZ(start.X, start.Y, 0) #find direction XYZ direction = line.Direction # find length double length = line.Length # find level sketchPlane = modelLine.SketchPlane levs = db.Collector(of_category="OST_Levels", is_not_type=True) level = 0 for lev in levs: if lev.Name == sketchPlane.Name: level = lev return start, direction, length, level
def duplicate_view(view, cropbox, name_suffix): duplicate_plan = doc.GetElement( view.Duplicate(DB.ViewDuplicateOption.AsDependent)) duplicate_plan.Name = sheet_name + name_suffix duplicate_plan.CropBoxActive = True duplicate_plan.CropBox = cropbox duplicate_plan.CropBoxVisible = False return duplicate_plan with db.Transaction("Duplicate View"): for sheet_name in all_sheet_names: # check if duplicate exists col_plan = db.Collector( of_class="ViewPlan", is_type=False, where=lambda x: sheet_name + "-Plan" in x.Name, ).unwrap() col_rcp = db.Collector( of_class="ViewPlan", is_type=False, where=lambda x: sheet_name + "-RCP" in x.Name, ).unwrap() # get cropbox region cropbox = DB.BoundingBoxXYZ() bbmin, bbmax = ui.Pick.pick_box(sheet_name) cropbox.Min = bbmin.unwrap() cropbox.Max = bbmax.unwrap() if col_plan.GetElementCount() < 1: # create duplicate
SelectMirroredWindows Selects All Window Instances that have been Mirrored. TESTED REVIT API: 2015 | 2016 Copyright (c) 2014-2016 Gui Talarico github.com/gtalarico This script is part of PyRevitPlus: Extensions for PyRevit github.com/gtalarico -------------------------------------------------------- PyRevit Notice: Copyright (c) 2014-2016 Ehsan Iran-Nejad pyRevit: repository at https://github.com/eirannejad/pyRevit """ #pylint: disable=E0401,W0621,W0631,C0413,C0111,C0103 __doc__ = "Selects All Window Instances that have been Mirrored." __author__ = '@gtalarico' __title__ = "Select Mirrored\nWindows" from rpw import db, ui windows = db.Collector(of_category='Windows').get_elements(wrapped=True) mirrored_windows = [x for x in windows if getattr(x, 'Mirrored', False)] msg = "Mirrored: {} of {} Windows".format(len(mirrored_windows), len(windows)) ui.forms.Alert(msg, title="Mirrored Windows") selection = ui.Selection(mirrored_windows)
all_sheet_numbers = [] all_sheet_names = [] for sheet_name in sheet_names: for i in range(1, 5): all_sheet_names.append(sheet_name + "-Type {}".format(i)) all_sheet_numbers.append(sheet_name.split("-")[0] + "." + str(i)) viewTypeId = DB.ElementId(10522069) view_data = { "WW-ViewCategory": "Working", "WW-ViewSubCategory": "0000 Architecture" } params = ["WW-ViewCategory", "WW-ViewSeries", "WW-ViewSubCategory"] with db.Transaction("Add Elevation Marker"): for sheet_name in all_sheet_names: print("pick point for {}".format(sheet_name)) pt = ui.Pick.pick_pt().unwrap() col = db.Collector(of_class="ViewSection", is_type=False, where=lambda x: sheet_name in x.Name) col = col.unwrap() if col.GetElementCount() < 1: marker = DB.ElevationMarker.CreateElevationMarker( doc, viewTypeId, pt, 20) viewPlanId = doc.ActiveView.Id for i in range(4): elevation = marker.CreateElevation(doc, viewPlanId, i) elevation.Name = sheet_name + " - Elevation {}".format(i + 1)
from rpw import db # is_type=False allows it to only return FamilyInstance rather than also FamilySymbol # LEVEL COLLECTOR level_filter = lambda x: x.Name == 'LEVEL 1' levels = db.Collector(of_class='Level', is_type=False, where=level_filter) level_elements = levels.get_elements() print 'levels', level_elements # ROOM COLLECTOR # create a filter that will pass through the 'where' method room_filter = lambda x: x.name == 'STUDIO' room_collector = db.Collector(of_category='OST_Rooms', is_type=False, where=room_filter) room_elements = room_collector.get_elements() print 'room elements', room_elements # room location for room in room_elements: room_name = room.Location print room_name.Point # FURNITURE COLLECTOR # OST_Furniture will collect all of the Instances and not the Parent Family. # create a furniture type name filter # furn_filter = lambda x:x.name == '54"' #is_type=False allows it to only return FamilyInstance rather than also FamilySymbol furn_collector = db.Collector(of_category='OST_Furniture', is_type=False)
doc = __revit__.ActiveUIDocument.Document Picked = uidoc.Selection.PickObject(UI.Selection.ObjectType.Element) PickedElementId = Picked.ElementId Picked_Selection = db.Element.from_id(PickedElementId) # 信息输入部分 Framing_types = rpw.db.Collector(of_category='OST_StructuralFraming', is_type=True).elements Framing_type_options = { t.FamilyName + DB.Element.Name.GetValue(t): t for t in Framing_types } Level_type = db.Collector(of_category='Levels', is_type=False).elements Level_type_options = {DB.Element.Name.GetValue(t): t for t in Level_type} components = [ Label('输入图层名称'), TextBox('图层名称', Text="S-STEL-BEAM"), Label('构件名称'), ComboBox('FamilyName', Framing_type_options), Label('标高'), ComboBox('Level', Level_type_options), Label('偏移标高'), TextBox('Offset', Text="-300"), Button('确定') ] form = FlexForm('结构', components) form.show()
Author: Pyline Tangsuvanich Overrides graphics of all linked CADs to gray. ''' # Import modules from RevitPythonWrapper from rpw import revit, db, ui, UI, DB # Set active document doc_active = revit.uidoc.ActiveView # Collect CAD links # Note: Because we import DB, we can call on ImportInstance dwg_collector = db.Collector(of_class='ImportInstance', is_type=False) dwg_elements = dwg_collector.get_elements() # Collect views view_collector = db.ViewPlan.collect() # Set Color color_gray = DB.Color(80, 80, 80) # Create Class for Override ogs = DB.OverrideGraphicSettings().SetProjectionLineColor(color_gray) # Start transaction
from Autodesk.Revit.DB.Architecture import Room import rpw from rpw import revit, doc, uidoc, DB, UI, db, ui DEFAULT_CROP = '0.75' # About 9" # Validate + Filter Selection selection = rpw.ui.Selection() selected_rooms = [e for e in selection.elements if isinstance(e, Room)] if not selected_rooms: ui.forms.Alert('MakeViews', 'You need to select at lest one Room.') # Get View Types and Prompt User plan_types = db.Collector(of_class='ViewFamilyType', is_type=True).wrapped_elements # Filter all view types that are FloorPlan or CeilingPlan plan_types_options = { t.name: t for t in plan_types if t.view_family.name in ('FloorPlan', 'CeilingPlan') } plan_type = ui.forms.SelectFromList('MakeViews', plan_types_options, description='Select View Type') view_type_id = plan_type.Id crop_offset = ui.forms.TextInput('MakeViews', default=DEFAULT_CROP, description='View Crop Offset [feet]')
Intersect_Lines.append(c.ToRevitType()) #Picked_Selection=db.Element.from_id(PickedElementId).unwrap() #信息输入部分 @rpw.db.Transaction.ensure('CreateBeam') def CreateBeam(Curves,FamilySymbol,Level,StructureType): for i in Curves: doc.Create.NewFamilyInstance(i,FamilySymbol,Level,StructureType) Level_Roof=db.Collector(of_category='Levels', is_type=False,where=lambda x: x.parameters['Name']=='Roof')[0] FramingSymbol=db.Collector(of_category='OST_StructuralFraming',is_not_type=False).wrapped_elements for i in FramingSymbol: if i.name==FamilyName: FramingSymbol=i.unwrap() StructuralType=DB.Structure.StructuralType.Beam c=CreateBeam(Intersect_Lines,FramingSymbol,Level_Roof,StructuralType) print(Intersect_Lines) print("绘制完成")
import revitron from revitron import _ from pyrevit import revit from rpw import db, ui, DB, UI cws = db.Collector(elements=ids.get_element_ids(), of_class='Wall', where=lambda x: x.get_family().name == 'Curtain') els = db.Collector(of_category='OST_Walls', level='1')
__doc__ = "DepthMap Analysis" import clr import time import sys import rpw import pyrevit from rpw import db, doc, uidoc from pyrevit import revit, DB, UI, forms, HOST_APP import System from System.Collections.Generic import List from pyrevit.framework import Stopwatch ###################################### #allElementsInView = DB.FilteredElementCollector(doc, doc.ActiveView.Id).ToElements() #for i in allElementsInView: # print(i) allElementsInView = db.Collector(view=doc.ActiveView, is_type=False).get_elements(wrapped=True) with db.Transaction('AddElementId'): for i in allElementsInView: #print(i.unwrap().Id) try: i.parameters['ElementId'].value = i.unwrap().Id except: pass
# Import modules from RevitPythonWrapper from rpw import revit, db, ui, UI, DB create = revit.doc.Create # Set active document doc_active = revit.uidoc.ActiveView alert = ui.forms.Alert wall_collector = db.Collector(view = doc_active, of_class='Wall', is_type=False) wall_elements = wall_collector.get_elements() level_collector = db.Collector(view = doc_active, of_class='Level', is_type=False) level_elements = level_collector.get_elements() #print level_elements # WALLS ON CURRENT LEVEL for wall in wall_elements: param_height = wall.parameters['Unconnected Height'] param_constraint = wall.parameters['Top Constraint'] param_constraint2 = wall.parameters.builtins['WALL_HEIGHT_TYPE'] elementid = param_constraint.AsElementId() #element1 = db.Element.from_int(elementid) # print param_height.value # print param_constraint # print param_constraint.AsValueString() # print elementid
print(hostapp.app.Language) if hostapp.app.Language.ToString() == "English_USA": ParameterName = LG_EUN() elif hostapp.app.Language.ToString() == "Chinese_Simplified": ParameterName = LG_CHS() LocationFile = select_file('CSV(*.csv)|*.csv') # 信息输入部分 GenericCategory = rpw.db.Collector(of_category='OST_GenericModel', is_type=True).get_elements(wrapped=False) Framing_type_options = {t.FamilyName: t for t in GenericCategory} Level_type = db.Collector(of_category='Levels', is_type=False).get_elements(wrapped=False) Level_type_options = {DB.Element.Name: t for t in Level_type} components = [ Label('构件名称'), ComboBox('FamilyName', Framing_type_options), Button('确定') ] Structure = [] form = FlexForm('结构', components) form.show() Value = form.values Locations = [] with open(LocationFile, 'rbU') as csvfile: