Example #1
0
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
Example #2
0
 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
Example #3
0
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
Example #5
0
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
Example #8
0
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")
Example #10
0
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
Example #11
0
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))
Example #12
0
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)
Example #13
0
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
Example #16
0
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)
Example #17
0
 def __init__(self, Room):
     self.Room = Room
     self.WrapedRoom = db.Element(self.Room)
     self.RoomLevelId = self.Room.Level.Id
     self.RoomLevel = self.Room.Level
Example #18
0
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] = ""
Example #19
0
 def __init__(self, Floor):
     self.Floor = Floor
     self.WrapedBeam = db.Element(Floor)
Example #20
0
            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)
Example #21
0
 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
Example #23
0
		@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('{} 已经都包含了定额价格')
Example #24
0
 def __init__(self, Beam):
     self.Beam = Beam
     self.WrapedBeam = db.Element(Beam)
Example #25
0
        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):
Example #26
0
    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")
Example #27
0
# 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')