BIM + Python
A cross-post for curious people. Thanks to PyRx.
import traceback
from pyrx_imp import Rx, Ge, Gs, Gi, Db, Ap, Ed, Bim
def PyRxCmd_Bim_cmdMyBimClassify() -> None:
try:
db = Db.curDb()
ourBuilding = Bim.BimBuilding.createNewBuilding(db, "TowerNorth")
ourBuilding.setDescription("the north side tower building")
ourBuilding.setName("TowerNorth")
ourBuilding.setLongName("TowerNorth")
floor_1 = Bim.BimStory.createNewStory(db, "TowerNorth", "Floor 1")
floor_1.setDescription("first floor")
floor_1.setElevation(1.0)
elev = floor_1.elevation()
floor_2 = Bim.BimStory.createNewStory(db, "TowerNorth", "Floor 2")
floor_2.setDescription("second floor")
floor_1.setElevation(6.0)
floor_3 = Bim.BimStory.createNewStory(db, "TowerNorth", "Floor X")
floor_3.setDescription("Floor 3")
floor_3.setElevation(11.0)
if not ourBuilding.assignedObjects(db):
print("creating building elements")
box = Db.Solid3d()
box.createBox(100.0,35.0,20.0)
box.transformBy(Ge.Matrix3d.translation(Ge.Vector3d(0,0,10.0)))
bid = db.addToModelspace(box)
ourBuilding.assignToEntity(bid)
Bim.BimClassification.setName(bid, ourBuilding.name())
Bim.BimClassification.setDescription(bid, ourBuilding.description())
if not floor_1.isBuilding():
print("creating floor 1")
box = Db.Solid3d()
box.createBox(98, 33, 4)
box.transformBy(Ge.Matrix3d.translation(Ge.Vector3d(0,0,3.0)))
bid = db.addToModelspace(box)
ourBuilding.assignToEntity(bid)
floor_1.assignToEntity(bid)
Bim.BimClassification.setName(bid, floor_1.name())
Bim.BimClassification.setDescription(bid, floor_1.description())
if not floor_2.isBuilding():
print("creating floor 2")
box = Db.Solid3d()
box.createBox(98, 33, 4)
box.transformBy(Ge.Matrix3d.translation(Ge.Vector3d(0,0,8.0)))
bid = db.addToModelspace(box)
ourBuilding.assignToEntity(bid)
floor_2.assignToEntity(bid)
Bim.BimClassification.setName(bid, floor_2.name())
Bim.BimClassification.setDescription(bid, floor_2.description())
if not floor_3.isBuilding():
print("creating floor 3")
box = Db.Solid3d()
box.createBox(98, 33, 4)
box.transformBy(Ge.Matrix3d.translation(Ge.Vector3d(0,0,13.0)))
bid = db.addToModelspace(box)
ourBuilding.assignToEntity(bid)
floor_3.assignToEntity(bid)
Bim.BimClassification.setName(bid, floor_3.name())
Bim.BimClassification.setDescription(bid, floor_3.description())
# put some objects to the floors
# floor1
box = Db.Solid3d()
box.createBox(2, 1, 0.5) # sofa
box.transformBy(Ge.Matrix3d.translation(Ge.Vector3d(0,0,3.0)))
bid = db.addToModelspace(box)
ourBuilding.assignToEntity(bid)
floor_1.assignToEntity(bid)
Bim.BimClassification.setName(bid, "sofa 1")
Bim.BimClassification.setDescription(bid, "leather, brown")
box = Db.Solid3d()
box.createBox(10, 0.5, 1) # railing 1
box.transformBy(Ge.Matrix3d.translation(Ge.Vector3d(0,0,3.0)))
bid = db.addToModelspace(box)
ourBuilding.assignToEntity(bid)
floor_1.assignToEntity(bid)
Bim.BimClassification.setName(bid, "railing 1")
Bim.BimClassification.setDescription(bid, "to 2nd floor")
box = Db.Solid3d()
box.createBox(10, 2.5, 0.5) # stair 1
box.transformBy(Ge.Matrix3d.translation(Ge.Vector3d(0,0,3.0)))
bid = db.addToModelspace(box)
ourBuilding.assignToEntity(bid)
floor_1.assignToEntity(bid)
Bim.BimClassification.setName(bid, "stair 1")
Bim.BimClassification.setDescription(bid, "to 2nd floor")
# floor2
box = Db.Solid3d()
box.createBox(2, 1, 0.5) # sofa 2
box.transformBy(Ge.Matrix3d.translation(Ge.Vector3d(0,0,8.0)))
bid = db.addToModelspace(box)
ourBuilding.assignToEntity(bid)
floor_2.assignToEntity(bid)
Bim.BimClassification.setName(bid, "sofa 2")
Bim.BimClassification.setDescription(bid, "cotton, white")
box = Db.Solid3d()
box.createBox(10, 0.5, 1) # railing 2
box.transformBy(Ge.Matrix3d.translation(Ge.Vector3d(0,0,8.0)))
bid = db.addToModelspace(box)
ourBuilding.assignToEntity(bid)
floor_2.assignToEntity(bid)
Bim.BimClassification.setName(bid, "railing 2")
Bim.BimClassification.setDescription(bid, "to 3rd floor")
box = Db.Solid3d()
box.createBox(10, 2.5, 0.5) # stair 1
box.transformBy(Ge.Matrix3d.translation(Ge.Vector3d(0,0,8.0)))
bid = db.addToModelspace(box)
ourBuilding.assignToEntity(bid)
floor_2.assignToEntity(bid)
Bim.BimClassification.setName(bid, "stair 2")
Bim.BimClassification.setDescription(bid, "to 3rd floor")
# floor3
box = Db.Solid3d()
box.createBox(2, 1, 0.5) # sofa 3
box.transformBy(Ge.Matrix3d.translation(Ge.Vector3d(0,0,13.0)))
bid = db.addToModelspace(box)
ourBuilding.assignToEntity(bid)
floor_2.assignToEntity(bid)
Bim.BimClassification.setName(bid, "sofa 3")
Bim.BimClassification.setDescription(bid, "leather, beige")
box = Db.Solid3d()
box.createBox(10, 0.5, 1) # railing 3
box.transformBy(Ge.Matrix3d.translation(Ge.Vector3d(0,0,13.0)))
bid = db.addToModelspace(box)
ourBuilding.assignToEntity(bid)
floor_2.assignToEntity(bid)
Bim.BimClassification.setName(bid, "railing 3")
Bim.BimClassification.setDescription(bid, "to roof")
except Exception as err:
traceback.print_exception(err)
3
Comments
-
This is what Mistral does of it:
def PyRxCmd_Bim_cmdMyBimClassify2() -> None: try: db = Db.curDb() # Create building ourBuilding = Bim.BimBuilding.createNewBuilding(db, "TowerNorth") ourBuilding.setDescription("the north side tower building") ourBuilding.setName("TowerNorth") ourBuilding.setLongName("TowerNorth") # Create floors floors = [ ("Floor 1", "first floor", 1.0), ("Floor 2", "second floor", 6.0), ("Floor X", "Floor 3", 11.0) ] floor_objects = [ ((2, 1, 0.5), "sofa", ["leather, brown", "cotton, white", "leather, beige"]), ((10, 0.5, 1), "railing", ["to 2nd floor", "to 3rd floor", "to roof"]), ((10, 2.5, 0.5), "stair", ["to 2nd floor", "to 3rd floor", "to roof"]) ] for i, (name, desc, elev) in enumerate(floors): floor = Bim.BimStory.createNewStory(db, "TowerNorth", name) floor.setDescription(desc) floor.setElevation(elev) if not floor.isBuilding(): print(f"creating {name}") box = Db.Solid3d() box.createBox(98, 33, 4) box.transformBy(Ge.Matrix3d.translation(Ge.Vector3d(0, 0, elev + 2.0))) bid = db.addToModelspace(box) floor.assignToEntity(bid) Bim.BimClassification.setName(bid, name) Bim.BimClassification.setDescription(bid, desc) for (dims, obj_name, obj_descs) in floor_objects: box = Db.Solid3d() box.createBox(*dims) box.transformBy(Ge.Matrix3d.translation(Ge.Vector3d(0, 0, elev + 2.0))) bid = db.addToModelspace(box) floor.assignToEntity(bid) Bim.BimClassification.setName(bid, f"{obj_name} {i + 1}") Bim.BimClassification.setDescription(bid, obj_descs[i]) # Create building elements if not assigned if not ourBuilding.assignedObjects(db): print("creating building elements") box = Db.Solid3d() box.createBox(100.0, 35.0, 20.0) box.transformBy(Ge.Matrix3d.translation(Ge.Vector3d(0, 0, 10.0))) bid = db.addToModelspace(box) ourBuilding.assignToEntity(bid) Bim.BimClassification.setName(bid, ourBuilding.name()) Bim.BimClassification.setDescription(bid, ourBuilding.description()) except Exception as err: traceback.print_exception(err)0
