def compare_elmnt_sets(elementset_a, elementset_b, compare_types=False, diff_results=None): dict_a = element_hash_dict(elementset_a, compare_types, diff_results) hash_list_a = sorted(dict_a.values()) dict_b = element_hash_dict(elementset_b, compare_types, diff_results) hash_list_b = sorted(dict_b.values()) if hash_list_a == hash_list_b: return True elif diff_results: rdict_a = reverse_dict(dict_a) rdict_b = reverse_dict(dict_b) for el_hash in set(hash_list_a) ^ set(hash_list_b): if el_hash in rdict_a: for el_id in rdict_a[el_hash]: diff_results.diff_elements.append(ElementId(el_id)) if el_hash in rdict_b: for el_id in rdict_b[el_hash]: diff_results.diff_elements.append(ElementId(el_id)) return False
def CreateRoundStrutwithCone(name, diameter, start, height, coneHeight, topDiameter, frameHeight): #print(name) vector = XYZ(0, 0, height*-1) coneVector = XYZ(0, 0, (coneHeight-frameHeight)*-1) frameVector = XYZ(0, 0, frameHeight * -1) pp = Plane.CreateByNormalAndOrigin(vector, start + coneVector + frameVector*2) ppCone = Plane.CreateByNormalAndOrigin(vector, start + frameVector) ppFrame = Plane.CreateByNormalAndOrigin(vector, start) frameProfile = CurveLoop().Create([Arc.Create(ppFrame, topDiameter/2, 0, math.pi), Arc.Create(ppFrame, topDiameter/2, math.pi, math.pi*2)]) coneProfile = CurveLoop().Create([Arc.Create(ppCone, topDiameter/2 + frameHeight + 1/12, 0, math.pi), Arc.Create(ppCone, topDiameter/2 + frameHeight + 1/12, math.pi, math.pi*2)]) profile = CurveLoop().Create([Arc.Create(pp, diameter/2, 0, math.pi), Arc.Create(pp, diameter/2, math.pi, math.pi*2)]) frame = GeometryCreationUtilities.CreateExtrusionGeometry([frameProfile], frameVector, frameHeight) geo = GeometryCreationUtilities.CreateExtrusionGeometry([profile], vector, height - coneHeight-frameHeight) try: cone = GeometryCreationUtilities.CreateLoftGeometry([coneProfile, profile], SolidOptions(ElementId.InvalidElementId, ElementId.InvalidElementId)) # Create Element ele = DirectShape.CreateElement(doc, ElementId(-2000151)) ele.SetShape([geo, cone, frame]) ele.SetName(name) return ele.Id except: ele = DirectShape.CreateElement(doc, ElementId(-2000151)) ele.SetShape([geo, frame]) ele.SetName(name) return ele.Id
def get_tasks(user_name, fixme_task_list): doc = __revit__.ActiveUIDocument.Document uidoc = __revit__.ActiveUIDocument jrn_drive = op.abspath(op.splitdrive(doc.Application.RecordingJournalFilename)[0]) disk_space_left(jrn_drive) if fixme_task_list.endswith("ini"): ini_file = fixme_task_list config = ConfigParser() config.read(ini_file) presented_ids = 0 for sec in config.sections(): this_script.output.print_md("**{}**".format(sec)) print("--- list of ids to fix:") for elem in config.items(sec): topic = elem[0] print("--- topic: {0}".format(topic)) for str_id in elem[1].split(","): # print(str_id) elem_id = ElementId(int(str_id.strip())) if doc.GetElement(elem_id): # print(elem_id) this_script.output.print_md("--- " + this_script.output.linkify(elem_id)) presented_ids += 1 if presented_ids == 5: break elif fixme_task_list.endswith(".json"): json_file = fixme_task_list presented_ids = 0 warn_id_dict = read_json_to_dict(json_file) for topic in warn_id_dict: this_script.output.print_md("**{}**".format(topic)) for date in warn_id_dict[topic]: for str_id in warn_id_dict[topic][date]: elem_id = ElementId(int(str_id)) elem = doc.GetElement(elem_id) elem_cat = elem.Category.Name.strip("<>") if elem.ViewSpecific: location = doc.GetElement(elem.OwnerViewId).Name else: location = doc.GetElement(elem.LevelId).Name elem_info = " - {} - {}".format(elem_cat, location) last_changer = WorksharingUtils.GetWorksharingTooltipInfo(doc, elem_id).LastChangedBy if last_changer == user_name: this_script.output.print_md("--- " + this_script.output.linkify(elem_id) + elem_info) this_script.output.print_md("--- " + elem.Category.Name) presented_ids += 1 if presented_ids == 9: break print("-" * 59) print("| thank you, that is all I have for now,") this_script.output.print_md("| **have a great day!**") print("-" * 59)
def parse(value,even=False,odd=False,saveSelection=True): logger.info(str([even,odd,saveSelection])) if(value!=None): value = value.strip("\n").strip(" ").strip("\t").strip("\r") value_lines = value.split("\n") errors = [] ids = [] ids_all = [] ids_text = [] for v in range(len(value_lines)): line_ok = False if(odd==True): if v%2 == 0: line_ok = True elif(even==True): if v%2 != 0: line_ok = True else: line_ok = True if line_ok==True: vl = value_lines[v] vl = vl.strip(" ").strip("\n").strip("\t").strip("\r") try: _id = int(vl) ids_all.append(str(int(_id))) ids.append(doc.GetElement(ElementId(int(_id))).Id) except: m = re.search(r"(id|Код)\s+([0-9]{1,})[^0-9]*", vl) try: _id=str(m.group(2)) ids_all.append(str(int(_id))) ids.append(doc.GetElement(ElementId(int(_id))).Id) except: errors.append(vl) a='' errors.append(str(len(ids))) errors.append( str(len(set(ids_all))) ) print(",".join(set(ids_all))) addtoclipboard(",".join(set(ids_all))) selection = uidoc.Selection selection_ids = List[ElementId](ids) selection.SetElementIds(selection_ids) if saveSelection==True: selection = {elId.ToString() for elId in selection_ids} f = open(datafile, 'w') pl.dump(selection, f) f.close() if(len(errors)): print("Error lines", "\n".join(errors))
def createSheetSetAction(self, sender, args): self.my_window.Close() __window__.Show() # get selected revision srindex = self.my_listView_revisionList.SelectedIndex if srindex >= 0: sr = doc.GetElement(ElementId(self.revs[srindex])) else: return # collect data sheets = FilteredElementCollector(doc).OfCategory( BuiltInCategory.OST_Sheets).WhereElementIsNotElementType( ).ToElements() cloudedsheets = [] affectedsheets = [] with Transaction(doc, 'Remove Revision from Sheets') as t: t.Start() for s in sheets: revs = set([x.IntegerValue for x in s.GetAllRevisionIds()]) addrevs = set( [x.IntegerValue for x in s.GetAdditionalRevisionIds()]) cloudrevs = revs - addrevs if sr.Id.IntegerValue in cloudrevs: cloudedsheets.append(s) continue elif len(addrevs) > 0: addrevs.remove(sr.Id.IntegerValue) revelids = [ElementId(x) for x in addrevs] s.SetAdditionalRevisionIds(List[ElementId](revelids)) affectedsheets.append(s) t.Commit() if len(affectedsheets) > 0: print('SELECTED REVISION REMOVED FROM THESE SHEETS:') print('-' * 100) for s in affectedsheets: print('NUMBER: {0} NAME:{1}'.format( s.LookupParameter('Sheet Number').AsString().rjust(10), s.LookupParameter('Sheet Name').AsString().ljust(50))) if len(cloudedsheets) > 0: print( 'SELECTED REVISION IS CLOUDED ON THESE SHEETS AND CAN NOT BE REMOVED.' ) print('-' * 100) for s in cloudedsheets: print('NUMBER: {0} NAME:{1}'.format( s.LookupParameter('Sheet Number').AsString().rjust(10), s.LookupParameter('Sheet Name').AsString().ljust(50)))
def create_directshape(room_collection, view_name): if room_collection: document = room_collection[0].Document delete_class_elements(DirectShape, document) delete_class_elements(DirectShapeType, document) datashape = [] bad_rooms = [] view = create_view(document, view_name) data_colors = get_color_from_colorscheme(document.ActiveView) if data_colors: for room in room_collection: try: calculator = SpatialElementGeometryCalculator(document) geometry_result = calculator.CalculateSpatialElementGeometry(room) room_solid = geometry_result.GetGeometry() geometry_objects = List[GeometryObject]() geometry_objects.Add(room_solid) room_name = room.get_Parameter(BuiltInParameter.ROOM_NAME).AsString() ds_type = get_directshape_type(room_name) ds = DirectShape.CreateElementInstance(document, ds_type.Id, \ ElementId(BuiltInCategory.OST_GenericModel), \ room_name, Transform.Identity) ds.ApplicationId = uiapp.ActiveAddInId.ToString() ds.ApplicationDataId = room.UniqueId ds.SetTypeId(ds_type.Id) ds.SetShape(geometry_objects) view.SetElementOverrides(ds.Id, get_overidegraphics(data_colors[room_name])) datashape.append(ds) except Exception: bad_rooms.append(room) return room_collection else: return 'Перейдите на вид,\r\nгде применена цветовая схема'
def CreateCurvePipe(name, diameter, thickness, startO, endO, middleO): #print(name) # print("Diameter" + str(diameter)) #correction = XYZ(0, 0, diameter / 2) correction = XYZ(0, 0, 0) start = startO + correction end = endO + correction middle = middleO + correction #print(name) #print(start) #print(end) #print(middle) path = Arc.Create(start, end, middle) pathCurve = CurveLoop().Create([path]) pp = Plane.CreateByNormalAndOrigin( path.ComputeDerivatives(0, True).BasisX, start) profile = CurveLoop().Create([ Arc.Create(pp, diameter / 2 + thickness, 0, math.pi), Arc.Create(pp, diameter / 2 + thickness, math.pi, math.pi * 2) ]) geo = GeometryCreationUtilities.CreateSweptGeometry( pathCurve, 0, path.GetEndParameter(0), [profile]) ele = DirectShape.CreateElement(doc, ElementId(-2000151)) ele.SetShape([geo]) ele.SetName(name) return ele.Id
def CreateStraightPipe(name, diameter, thickness, startO, endO, length): #correction = XYZ(0, 0, diameter/2) #print("Diameter" + str(diameter)) #print(name) correction = XYZ(0, 0, 0) start = startO + correction end = endO + correction #print(name) #print(length) if (end - start).GetLength() > 0.1: pp = Plane.CreateByNormalAndOrigin(end - start, start) profile = CurveLoop().Create([ Arc.Create(pp, diameter / 2 + thickness, 0, math.pi), Arc.Create(pp, diameter / 2 + thickness, math.pi, math.pi * 2) ]) geo = GeometryCreationUtilities.CreateExtrusionGeometry([profile], end - start, length) ele = DirectShape.CreateElement(doc, ElementId(-2000151)) ele.SetShape([geo]) ele.SetName(name) return ele.Id else: print("Duct too small") return None
def CreateCubeStrut(csdname, csdwidth, csdlength, csdheight, csdstart, csdrotation, scdthickness): #print(csdname) vector = XYZ(0, 0, csdheight * -1) pp = Plane.CreateByNormalAndOrigin(vector, csdstart) trans = Transform.CreateRotationAtPoint(vector, csdrotation, csdstart) point1 = csdstart + XYZ(csdwidth / 2, csdlength / 2, 0) point2 = csdstart + XYZ(csdwidth / 2 * -1, csdlength / 2, 0) point3 = csdstart + XYZ(csdwidth / 2 * -1, csdlength / 2 * -1, 0) point4 = csdstart + XYZ(csdwidth / 2, csdlength / 2 * -1, 0) profileorigion = CurveLoop().Create([ Line.CreateBound(point1, point2), Line.CreateBound(point2, point3), Line.CreateBound(point3, point4), Line.CreateBound(point4, point1) ]) finalProfile = CurveLoop.CreateViaTransform(profileorigion, trans) geo = GeometryCreationUtilities.CreateExtrusionGeometry([finalProfile], vector, csdheight) ele = DirectShape.CreateElement(doc, ElementId(-2000151)) ele.SetShape([geo]) ele.SetName(csdname) return ele.Id
def create_directshape(room_collection): if room_collection: document = room_collection[0].Document direct_shapes_col = FilteredElementCollector(document).OfClass(DirectShape).ToElements() if direct_shapes_col: for shape in direct_shapes_col: document.Delete(shape.Id) datashape = [] bad_rooms = [] for room in room_collection: try: calculator = SpatialElementGeometryCalculator(document) geometry_result = calculator.CalculateSpatialElementGeometry(room) room_solid = geometry_result.GetGeometry() geometry_objects = List[GeometryObject]() geometry_objects.Add(room_solid) room_name = room.get_Parameter(BuiltInParameter.ROOM_NAME).AsString() ds_type = get_directshape_type(room_name) ds = DirectShape.CreateElementInstance(document, ds_type.Id, ElementId(BuiltInCategory.OST_GenericModel), room_name, Transform.Identity) ds.SetTypeId(ds_type.Id) ds.SetShape(geometry_objects) datashape.append(ds) except Exception: bad_rooms.append(room) return datashape, bad_rooms
def createsheetset(self, sender, args): self.my_window.Close() __window__.Show() # get selected revision srindex = self.my_listView_revisionList.SelectedIndex if srindex >= 0: sr = doc.GetElement(ElementId(self.revs[srindex])) else: return # collect data sheets = FilteredElementCollector(doc).OfCategory( BuiltInCategory.OST_Sheets).WhereElementIsNotElementType().ToElements() affectedsheets = [] with Transaction(doc, 'Set Revision on Sheets') as t: t.Start() for s in sheets: revs = list(s.GetAdditionalRevisionIds()) revs.append(sr.Id) s.SetAdditionalRevisionIds(List[ElementId](revs)) affectedsheets.append(s) t.Commit() if len(affectedsheets) > 0: print('SELECTED REVISION ADDED TO THESE SHEETS:') print('-' * 100) for s in affectedsheets: print('NUMBER: {0} NAME:{1}'.format(s.LookupParameter('Sheet Number').AsString().rjust(10), s.LookupParameter('Sheet Name').AsString().ljust(50) ))
def set_coloristic_tag(self, obj): """ Устанавливает коллористические марки. Открывает файл с закрытыми рабочими наборами. Для этого создается конфиг open_opt Проходим по всем документам и панелям, которые переданы в obj Выгружаем связь. Открываем документ. Проверяем можно ли вносить изменения в документ. Пробуем внести изменения. Проходим по всем панелям и уровням. Получаем в документе связи панель по ID. Проходим по всем уровням. Для каждой колористик Tag устанавливаем марку по уровню. Если файл общий. Синхронизироваться. Если файл не общий - просто сохранить. В противном случае закрыть документ """ workset_config_option = WorksetConfigurationOption.CloseAllWorksets workset_config = WorksetConfiguration(workset_config_option) open_opt = OpenOptions() open_opt.SetOpenWorksetsConfiguration(workset_config) app = self.doc.Application for doc, panels in obj.items(): title = doc.Title m_p = ModelPathUtils.ConvertUserVisiblePathToModelPath( doc.PathName) rvt_type = self.rvt_docs[doc] rvt_type.Unload(None) cur_doc = app.OpenDocumentFile(m_p, open_opt) if not cur_doc.IsReadOnly: try: with Transaction(cur_doc, "Вносим изменения") as t: t.Start() for panel, levels in panels.items(): panel = cur_doc.GetElement(ElementId(panel.Id)) for level, mark in levels.items(): level = level if len( level) > 1 else "0" + level panel.LookupParameter( "BDS_ColoristicsTag_Floor" + level).Set(mark) t.Commit() if cur_doc.IsWorkshared: twc_opts = TransactWithCentralOptions() swc_opts = SynchronizeWithCentralOptions() swc_opts.SetRelinquishOptions(RelinquishOptions(True)) swc_opts.Comment = "Атоматическая синхронизация КЖС" cur_doc.SynchronizeWithCentral(twc_opts, swc_opts) cur_doc.Close(True) except: echo(sys.exc_info()[1]) cur_doc.Close(False) else: echo("Файл {} доступен только для чтения".format(title)) cur_doc.Close(False) rvt_type.Load() echo("Обработали связь {}".format(title))
def create_filter(key_parameter, element_value): """Function to create a RevitAPI filter.""" f_parameter = ParameterValueProvider(ElementId(key_parameter)) f_parameter_value = element_value #e.g. element.Category.Id f_rule = FilterElementIdRule(f_parameter, FilterNumericEquals(), f_parameter_value) filter = ElementParameterFilter(f_rule) return filter
def override_graphics_region(doc, view, region, fg_pattern_id, fg_color, bg_pattern_id, bg_color, line_color=None, line_pattern_id=None, lineweight=None): """Function to ovverride given region with the override settings. :param doc: Revit Document :param region: FilledRegion to apply OverrideGraphicsSettings :param fg_pattern_id: Foreground - Pattern id :param fg_color: Foreground - Colour :param bg_pattern_id: Background - Pattern id :param bg_color: Background - Colour :return: None """ try: override_settings = OverrideGraphicSettings() if fg_pattern_id != ElementId(-1): override_settings.SetSurfaceForegroundPatternId(fg_pattern_id) override_settings.SetSurfaceForegroundPatternColor(fg_color) else: override_settings.SetSurfaceForegroundPatternColor( Color(255, 255, 255)) if bg_pattern_id != ElementId(-1): override_settings.SetSurfaceBackgroundPatternId(bg_pattern_id) override_settings.SetSurfaceBackgroundPatternColor(bg_color) else: override_settings.SetSurfaceBackgroundPatternColor( Color(255, 255, 255)) # LINE if line_color: override_settings.SetProjectionLineColor(line_color) if line_pattern_id: override_settings.SetProjectionLinePatternId(line_pattern_id) if lineweight: override_settings.SetProjectionLineWeight(lineweight) view.SetElementOverrides(region.Id, override_settings) except: # DELETE REGIONS IF MODEL PATTERN IS USED ? doc.Delete(region.Id)
def DeleteElement(elements): """ delete elements in nD list """ for element in elements: if isinstance(element, list): DeleteElement(element) else: doc.Delete(ElementId(element.Id))
def create_rule(param, evaluator, value): param_id = ElementId(param) if isinstance(param, BuiltInParameter) else param.Id args = [param_id, value] if 'n' in evaluator: if '[id' in value: value = value.split('[id')[-1] value = int(value.replace('[id', '').replace(']', '')) args[1] = ElementId(value) elif value.isdigit(): args[1] = int(value) else: args[1] = float(value) args.append(0.00001) else: args.append(True) rule = evaluator_methods[evaluator](*args) return rule
def create_rule(param, evaluator, value): args = [ElementId(param), value] print(param.UnitType) if param.UnitType: 1 rule = evaluator_methods[evaluator](args) # rule = ParameterFilterRuleFactory.CreateNotEqualsRule(ElementId(param), value, True) return rule
def get_builtin_parameters(self): builtin_pars = set() bicId = [ElementId(BuiltInCategory.OST_MEPSpaces)] catlist = List[ElementId](bicId) paramIds = ParameterFilterUtilities.GetFilterableParametersInCommon( self.doc, catlist) for bpar in BuiltInParameter.GetValues( clr.GetClrType(BuiltInParameter)): try: bparId = ElementId(bpar) if bparId in paramIds: builtin_pars.add(LabelUtils.GetLabelFor(bpar)) except Exception as e: logger.error(e, exc_info=True) pass return builtin_pars
def create_string_equals_filter(key_parameter, element_value, caseSensitive=True): """Function to create ElementParameterFilter based on FilterStringRule.""" f_parameter = ParameterValueProvider(ElementId(key_parameter)) f_parameter_value = element_value caseSensitive = True f_rule = FilterStringRule(f_parameter, FilterStringEquals(), f_parameter_value, caseSensitive) return ElementParameterFilter(f_rule)
def process(datafile, saved_list=[], reverse=False): if not reverse: cl = FilteredElementCollector( doc).WhereElementIsNotElementType().OfCategory( BuiltInCategory.OST_Constraints) constraints = cl.ToElements() constraints_to_change = filter(lambda c: c.NumberOfSegments == 0, constraints) constraints_to_change = list( filter(lambda c: c.IsLocked, constraints_to_change)) td_text = "%d enabled Constraints found. Disable them?" % len( constraints_to_change) else: td_text = "Reverse mode.\n%d saved Constraints found. Recover them?" % len( saved_list) constraints_to_change = [] for id_int in saved_list: try: element = doc.GetElement(ElementId(id_int)) constraints_to_change.append(element) except: pass tdres = TaskDialog.Show( "Constraints", td_text, TaskDialogCommonButtons.Yes | TaskDialogCommonButtons.No) if tdres == TaskDialogResult.No: return t = Transaction(doc, __title__) t.Start() is_error = False try: for constraint in constraints_to_change: constraint.IsLocked = True if reverse else False if not reverse: saved_list.append(constraint.Id.IntegerValue) except Exception as exc: is_error = True t.RollBack() TaskDialog.Show(__title__, "Error. Changes cancelled.") else: t.Commit() result_text = "Finished." if not reverse: result_text += "\nChanged elements saved. To recover then run the same script with SHIFT button" TaskDialog.Show(__title__, result_text) if not is_error: save(datafile, saved_list) selection.set_to(map(lambda e: e.Id, constraints_to_change))
def GetFirstTextNoteUsingType(doc, texttype): bip = DB.BuiltInParameter.ELEM_TYPE_PARAM provider = DB.ParameterValueProvider(ElementId(bip)) evaluator = DB.FilterNumericEquals() rule = DB.FilterElementIdRule(provider, evaluator, texttype.Id) filter = DB.ElementParameterFilter(rule) fec = DB.FilteredElementCollector(doc, draftview.Id).OfClass(FilledRegion) \ .WherePasses( filter ) \ .FirstElement() return fec
def GetFirstDetailLineUsingType(doc, type, bip): bip = DB.BuiltInParameter.ELEM_TYPE_PARAM provider = DB.ParameterValueProvider(ElementId(bip)) evaluator = DB.FilterNumericEquals() rule = DB.FilterElementIdRule(provider, evaluator, type.Id) filter = DB.ElementParameterFilter(rule) fec = DB.FilteredElementCollector(doc).OfCategory(DB.BuiltInCategory.OST_Lines) \ .WherePasses( filter ) \ .FirstElement() return fec
def RemovePaintFromElement(el): solids = UnwrapElement(el).get_Geometry(Options()) # noqa if solids: for solid in solids: if hasattr(solid, "Faces"): for face in solid.Faces: elID = ElementId(el.Id) doc.RemovePaint(elID, face) if face.HasRegions: regions = face.GetRegions() for regFace in regions: doc.RemovePaint(elID, regFace)
def get_directshape_type(name): types = FilteredElementCollector(doc).OfClass(DirectShapeType).ToElements() types_name = [t.FamilyName for t in types] if name not in types_name: ds_type = DirectShapeType.Create(doc, name + '1', ElementId(BuiltInCategory.OST_GenericModel)) ds_library = DirectShapeLibrary.GetDirectShapeLibrary(doc) ds_library.AddDefinitionType(name, ds_type.Id) return ds_type else: for ds_type in types: if name == ds_type.FamilyName: return ds_type
def create_filter(key_parameter, element_value): """Function to create a RevitAPI filter.""" f_parameter = ParameterValueProvider(ElementId(key_parameter)) f_parameter_value = element_value # e.g. element.Category.Id f_rule = FilterElementIdRule(f_parameter, FilterNumericEquals(), f_parameter_value) filter = ElementParameterFilter(f_rule) return filter # EXAMPLE GET GROUP INSTANCE # filter = create_filter(BuiltInParameter.ELEM_TYPE_PARAM, group_type_id) # group = FilteredElementCollector(doc).WherePasses(filter).FirstElement()
def unjoin(pairs): # print(pairs) # rng = range(len(selection)) # checked_pairs = [] # joined_pairs = [] c = 0 # for x in rng: # for y in rng: # if x == y: # continue # _p = sorted([x,y]) # _t = (_p[0],_p[1]) # if _t in checked_pairs: # continue # checked_pairs.append(_t) # eid1 = selection[_p[0]] # eid2 = selection[_p[1]] # e1,e2 = doc.GetElement(eid1),doc.GetElement(eid2) # joined = JoinGeometryUtils.AreElementsJoined(doc,e1,e2) # if joined: # joined_pairs.append((e1,e2)) if len(pairs) > 0: t = Transaction(doc) t.Start("UnjoinSelected") for p in pairs: e1 = doc.GetElement(ElementId(p[0])) e2 = doc.GetElement(ElementId(p[1])) joined = JoinGeometryUtils.AreElementsJoined(doc, e1, e2) if joined: JoinGeometryUtils.UnjoinGeometry(doc, e1, e2) c += 1 t.Commit() TaskDialog.Show("R", "%d пар элементов разъединены" % c)
def selectDuplicateTags(selected_switch="OST_RoomTags"): uidoc = __revit__.ActiveUIDocument doc = __revit__.ActiveUIDocument.Document av = doc.ActiveView cl_tags = FilteredElementCollector(doc) tags = cl_tags.OfCategory(switches[selected_switch] ).WhereElementIsNotElementType().ToElementIds() logger.debug(str(len(tags)) + " tags found") tags_dict = {} views_dict = [] for eId in tags: e = doc.GetElement(eId) try: e.View except: logger.debug(str(eId) + " is element type") continue try: v = e.View #пропускает, если тэг не на текущем виде - оптимизировать через фильтр! if not __shiftclick__ and v.Id != av.Id: logger.debug(str(eId) + " not on active view" + v.Name) continue text = str(e.Room.Id) + "_" + str(v.Id) views_dict.append(int(str(e.View.Id))) if text not in tags_dict: tags_dict[text] = [] tags_dict[text].append(int(eId.ToString())) except: logger.info(str(eId) + " unknown exception") ttags = [] for t in tags_dict: if len(tags_dict[t]) > 1: i = 0 tags_dict[t].sort() for tt in tags_dict[t]: if i != 0: ttags.append(tt) i += 1 ttags_text = ",".join(map(lambda x: str(x), ttags)) selection = uidoc.Selection collection = List[ElementId](map(lambda x: ElementId(int(x)), ttags)) selection.SetElementIds(collection) logger.info(str(len(ttags)) + " tags selected")
def __init__(self, panel, name, from_memory=None): self.name = name self.panel = panel if not from_memory: self.elem = None self.is_clicked = False self.button = self.panel.add_button('Выбрать элемент') else: self.elem = ElementId(from_memory) self.is_clicked = True self.button = self.panel.add_button('Выбрать другой элемент') self.label = self.panel.add_label('') self.label.Text = 'Выбран элемент = ' + to_str(self.elem) self.button.BackColor = Color.Green self.button.Click += self.select_element
def RemovePaintFromElement(el): solids = UnwrapElement(el).get_Geometry(Options()) # noqa if solids: painted_face = [] for solid in solids: if hasattr(solid, "Faces"): for face in solid.Faces: elID = ElementId(el.Id) if doc.IsPainted(elID, face): painted_face.append(face) if face.HasRegions: for regFace in face.GetRegions(): if doc.IsPainted(elID, regFace): painted_face.append(regFace) return painted_face
def lookup(self, element): if not self.RevitLookup: print 'RevitLookup not installed. Visit https://github.com/jeremytammik/RevitLookup to install.' return if isinstance(element, int): element = self.revit.ActiveUIDocument.Document.GetElement( ElementId(element)) if isinstance(element, ElementId): element = self.revit.ActiveUIDocument.Document.GetElement(element) if isinstance(element, list): elementSet = ElementSet() for e in element: elementSet.Insert(e) element = elementSet form = self.RevitLookup.Snoop.Forms.Objects(element) form.ShowDialog()