Esempio n. 1
0
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
Esempio n. 2
0
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
Esempio n. 3
0
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)
Esempio n. 4
0
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))
Esempio n. 5
0
    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)))
Esempio n. 6
0
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где применена цветовая схема'
Esempio n. 7
0
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
Esempio n. 8
0
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
Esempio n. 9
0
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
Esempio n. 10
0
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)
                                                      ))
Esempio n. 12
0
    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))
Esempio n. 13
0
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
Esempio n. 14
0
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)
Esempio n. 15
0
def DeleteElement(elements):
    """
    delete elements in nD list
    """
    for element in elements:
        if isinstance(element, list):
            DeleteElement(element)
        else:
            doc.Delete(ElementId(element.Id))
Esempio n. 16
0
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
Esempio n. 19
0
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)
Esempio n. 20
0
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))
Esempio n. 21
0
    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
Esempio n. 23
0
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)
Esempio n. 24
0
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
Esempio n. 25
0
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()
Esempio n. 26
0
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)
Esempio n. 27
0
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")
Esempio n. 28
0
 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
Esempio n. 29
0
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
Esempio n. 30
0
 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()