The GC Floor Node can be used to create and update AECOsim Building Designer floors.
[Updated 29 April 2016 for ABD/GC SS6 Update 1]
The simplest workflow to achieve this is to start with a project floor master file that contains the Site but no Buildings. All floors will then be managed by the GC script that follows. The GC script will be used for all subsequent floor management.
Create a file for exclusive use by the team members responsible for floor management, e.g. FloorManagement_GC.dgn. The only use for this file should be floor creation/update.
Note that when GC is started for the first time in your project it will create a required folder "support\Assemblies" within your project folder.
The GC Nodes that will be used are:
As you progress it is a good idea to give meaningful names to the GC Nodes that you create and to the transactions that you save. This helps to make both the GC Graph and the underlying script legible when working with and maintaining them, particularly when revisiting a GC graph/script after a significant time interval.
This example has been updated to demonstrate
The steps required are:
Obviously copying and editing the floor node many times in the Graph view is a fairly tedious process. At this point go to the transactions panel and click on the 'Edit this transaction file' icon. Take a look at the structure of the script.
Note: More detailed descriptions of the transactions can be found in the Building Help documents, look for the Bentley GenerativeComponents Extension > Getting Started > Transactions topic.
Rather than copying the floor nodes in the Graph view, copy and paste the node within this third transaction as many times as required, then edit the names and elevation values in the transaction script, this is much quicker than using the GUI and gives an understanding of what lies behind the GUI.
For very tall buildings this will also be relatively time consuming. If floors can be grouped logically into sets with the same floor to floor height, GC scripting could be used to generate groups of floors based on variables. Doing that is beyond the scope of this introductory article but the possibilities available through scripting are endless. The object of this article is to demonstrate a relatively simple example.
transaction modelChange 'Add Upper Floors'{ node User.Objects.Floor_08 Bentley.GC.NodeTypes.Floor { Technique = 'CreateAtBuilding'; CatalogItem = {'Floor','Default'}; OwningBuilding = Building_A; ArchFloor_FloorName = 'A_Floor_09'; ArchFloor_FinishedFloorElevation = 8000; GraphLocation = {505.0, 372.0}; }}
The Red text is the transaction, the green text is the node. Copy and paste as many nodes as you need.
See the attached text file for an example. To use this:
You can:
You cannot (in SS6):
The reason for adding the 'Building_A_RelElev coordinate system node is to add a control for the Floor Manager Relative Elevation value. The default Z value for a new node is 0.0 so it does not initially change the Relative Elevation value. Once this Z value is modified the Relative Elevation value will be updated:
The workflow for utilising Relative Elevation in the Floor Manager and drawing output will be covered in another article shortly.
Be aware that undoing the GC transactions will remove the floors created so take care with the timing of any changes/updates.
Any changes made within the Floor Manager interface would be overwritten by later GC updates as a GC script will run every time the file containing it is opened.(If the transactions are undone, removing all floors, and the file is then saved in that state, every time it runs it will remove any floors related to the Building in the script.)
Regularly backup the BB_Floormaster.dgnlib and the text of scripts used. Export to GCT is available for the latter.
transaction modelChange 'Add GC Building and Coordinate System' { node User.Objects.Basetransaction modelChange 'Create Building A' { node User.Objects.Building_A_CS Bentley.GC.NodeTypes.CoordinateSystem { Technique = 'AtModelOrigin'; DGNModelName = 'Design Model'; GraphLocation = {43.0, 19.0}; } node User.Objects.Building_A_RelElev Bentley.GC.NodeTypes.CoordinateSystem { Technique = 'ByCartesianCoordinates'; XTranslation = 0.0; YTranslation = 0.0; ZTranslation = <free> 120000.0; GraphLocation = {43.0, 165.333}; } node User.Objects.Building_A Bentley.GC.NodeTypes.Building { Technique = 'CreateNewBuilding'; BaseElevation = Building_A_RelElev.Z; GraphLocation = {230.0, 19.0}; CatalogItem = {'Building','Default'}; ArchBuilding_BuildingName = 'Building_A'; } } transaction modelChange 'Add Floors B1 to 02' { node User.Objects.A_Floor_B1 Bentley.GC.NodeTypes.Floor { Technique = 'CreateAtBuilding'; CatalogItem = {'Floor','Default'}; OwningBuilding = Building_A; ArchFloor_FloorName = 'A_Floor_B1'; ArchFloor_FinishedFloorElevation = -4000; ArchFloor_Description = 'Basement 1'; GraphLocation = {424.0, 19.0}; } node User.Objects.A_Floor_00 Bentley.GC.NodeTypes.Floor { Technique = 'CreateAtBuilding'; CatalogItem = {'Floor','Default'}; OwningBuilding = Building_A; ArchFloor_FloorName = 'A_Floor_00'; ArchFloor_Description = 'Ground Floor'; GraphLocation = {424.0, 165.333}; } node User.Objects.A_Floor_01 Bentley.GC.NodeTypes.Floor { Technique = 'CreateAtBuilding'; CatalogItem = {'Floor','Default'}; OwningBuilding = Building_A; ArchFloor_FloorName = 'A_Floor_02'; ArchFloor_FinishedFloorElevation = 4000; ArchFloor_Description = 'First Floor'; GraphLocation = {424.0, 311.667}; } node User.Objects.A_Floor_02 Bentley.GC.NodeTypes.Floor { Technique = 'CreateAtBuilding'; CatalogItem = {'Floor','Default'}; OwningBuilding = Building_A; ArchFloor_FloorName = 'A_Floor_03'; ArchFloor_FinishedFloorElevation = 8000; ArchFloor_Description = 'Second Floor'; GraphLocation = {424.0, 458.0}; } } transaction modelChange 'Add Floors 03 to 02' { node User.Objects.A_Floor_03 Bentley.GC.NodeTypes.Floor { Technique = 'CreateAtBuilding'; CatalogItem = {'Floor','Default'}; OwningBuilding = Building_A; ArchFloor_FloorName = 'A_Floor_04'; ArchFloor_FinishedFloorElevation = 12000; ArchFloor_Description = 'Second Floor'; GraphLocation = {424.0, 480.0}; } node User.Objects.A_Floor_04 Bentley.GC.NodeTypes.Floor { Technique = 'CreateAtBuilding'; CatalogItem = {'Floor','Default'}; OwningBuilding = Building_A; ArchFloor_FloorName = 'A_Floor_05'; ArchFloor_FinishedFloorElevation = 16000; ArchFloor_Description = 'Second Floor'; GraphLocation = {424.0, 520.0}; } node User.Objects.A_Floor_05 Bentley.GC.NodeTypes.Floor { Technique = 'CreateAtBuilding'; CatalogItem = {'Floor','Default'}; OwningBuilding = Building_A; ArchFloor_FloorName = 'A_Floor_06'; ArchFloor_FinishedFloorElevation = 20000; ArchFloor_Description = 'Second Floor'; GraphLocation = {424.0, 550.0}; } node User.Objects.A_Floor_06 Bentley.GC.NodeTypes.Floor { Technique = 'CreateAtBuilding'; CatalogItem = {'Floor','Default'}; OwningBuilding = Building_A; ArchFloor_FloorName = 'A_Floor_07'; ArchFloor_FinishedFloorElevation = 24000; ArchFloor_Description = 'Second Floor'; GraphLocation = {424.0, 580.0}; } node User.Objects.A_Floor_07 Bentley.GC.NodeTypes.Floor { Technique = 'CreateAtBuilding'; CatalogItem = {'Floor','Default'}; OwningBuilding = Building_A; ArchFloor_FloorName = 'A_Floor_08'; ArchFloor_FinishedFloorElevation = 28000; ArchFloor_Description = 'Second Floor'; GraphLocation = {424.0, 610.0}; } node User.Objects.A_Floor_08 Bentley.GC.NodeTypes.Floor { Technique = 'CreateAtBuilding'; CatalogItem = {'Floor','Default'}; OwningBuilding = Building_A; ArchFloor_FloorName = 'A_Floor_09'; ArchFloor_FinishedFloorElevation = 32000; ArchFloor_Description = 'Second Floor'; GraphLocation = {424.0, 640.0}; } } _CS Bentley.GC.NodeTypes.CoordinateSystem { Technique = 'AtModelOrigin'; DGNModelName = 'Design Model'; GraphLocation = {-56.0, 231.0}; } node User.Objects.GC_building_01_CS Bentley.GC.NodeTypes.CoordinateSystem { Technique = 'ByCartesianCoordinates'; CoordinateSystem = Base_CS; XTranslation = 0.0; YTranslation = 0.0; ZTranslation = <free> 20000.0; } node User.Objects.GC_building_01 Bentley.GC.NodeTypes.Building { Technique = 'CreateNewBuilding'; CatalogItem = {'Building','Default'}; BaseElevation = GC_building_01_CS.Z; ArchBuilding_BuildingName = 'GC_building_01'; ArchBuilding_YearConstructed = '2015'; ObjectClassification_Uniclass = 'D33'; ObjectClassification_Uniclass2015 = '00 00 00'; ObjectClassification_NBS = '10'; GraphLocation = {227.0, 33.0}; } } transaction modelChange 'Add Basements and Ground Floors' { node User.Objects.B_02 Bentley.GC.NodeTypes.Floor { Technique = 'CreateAtBuilding'; CatalogItem = {'Floor','Default'}; OwningBuilding = GC_building_01; ArchFloor_FloorName = 'Basement_01'; ArchFloor_FinishedFloorElevation = -8000; ArchFloor_ApproxLength = 8000; ArchFloor_ApproxWidth = 5000; GraphLocation = {509.0, 51.0}; } node User.Objects.B_01 Bentley.GC.NodeTypes.Floor { Technique = 'CreateAtBuilding'; CatalogItem = {'Floor','Default'}; OwningBuilding = GC_building_01; ArchFloor_FloorName = 'Basement_00'; ArchFloor_FinishedFloorElevation = -4000; ArchFloor_ApproxLength = 8000; ArchFloor_ApproxWidth = 5000; GraphLocation = {508.0, 209.0}; } node User.Objects.Floor_00 Bentley.GC.NodeTypes.Floor { Technique = 'CreateAtBuilding'; CatalogItem = {'Floor','Default'}; OwningBuilding = GC_building_01; ArchFloor_FloorName = 'Floor_00'; ArchFloor_FinishedFloorElevation = 0; ArchFloor_ApproxLength = 8000; ArchFloor_ApproxWidth = 5000; GraphLocation = {505.0, 372.0}; } } transaction modelChange 'Add Upper Floors' { node User.Objects.Floor_01 Bentley.GC.NodeTypes.Floor { Technique = 'CreateAtBuilding'; CatalogItem = {'Floor','Default'}; OwningBuilding = GC_building_01; ArchFloor_FloorName = 'Floor_01'; ArchFloor_FinishedFloorElevation = 6000; ArchFloor_ApproxLength = 8000; ArchFloor_ApproxWidth = 5000; GraphLocation = {505.0, 372.0}; } node User.Objects.Floor_02 Bentley.GC.NodeTypes.Floor { Technique = 'CreateAtBuilding'; CatalogItem = {'Floor','Default'}; OwningBuilding = GC_building_01; ArchFloor_FloorName = 'Floor_02'; ArchFloor_FinishedFloorElevation = 10000; ArchFloor_ApproxLength = 8000; ArchFloor_ApproxWidth = 5000; GraphLocation = {505.0, 372.0}; } node User.Objects.Floor_03 Bentley.GC.NodeTypes.Floor { Technique = 'CreateAtBuilding'; CatalogItem = {'Floor','Default'}; OwningBuilding = GC_building_01; ArchFloor_FloorName = 'Floor_03'; ArchFloor_FinishedFloorElevation = 14000; ArchFloor_ApproxLength = 8000; ArchFloor_ApproxWidth = 5000; GraphLocation = {505.0, 372.0}; } node User.Objects.Floor_04 Bentley.GC.NodeTypes.Floor { Technique = 'CreateAtBuilding'; CatalogItem = {'Floor','Default'}; OwningBuilding = GC_building_01; ArchFloor_FloorName = 'Floor_04'; ArchFloor_FinishedFloorElevation = 18000; ArchFloor_ApproxLength = 8000; ArchFloor_ApproxWidth = 5000; GraphLocation = {505.0, 372.0}; } node User.Objects.Floor_05 Bentley.GC.NodeTypes.Floor { Technique = 'CreateAtBuilding'; CatalogItem = {'Floor','Default'}; OwningBuilding = GC_building_01; ArchFloor_FloorName = 'Floor_05'; ArchFloor_FinishedFloorElevation = 22000; ArchFloor_ApproxLength = 8000; ArchFloor_ApproxWidth = 5000; GraphLocation = {505.0, 372.0}; } node User.Objects.Floor_06 Bentley.GC.NodeTypes.Floor { Technique = 'CreateAtBuilding'; CatalogItem = {'Floor','Default'}; OwningBuilding = GC_building_01; ArchFloor_FloorName = 'Floor_06'; ArchFloor_FinishedFloorElevation = 26000; ArchFloor_ApproxLength = 8000; ArchFloor_ApproxWidth = 5000; GraphLocation = {505.0, 372.0}; } node User.Objects.Floor_07 Bentley.GC.NodeTypes.Floor { Technique = 'CreateAtBuilding'; CatalogItem = {'Floor','Default'}; OwningBuilding = GC_building_01; ArchFloor_FloorName = 'Floor_07'; ArchFloor_FinishedFloorElevation = 29500; ArchFloor_ApproxLength = 8000; ArchFloor_ApproxWidth = 5000; GraphLocation = {505.0, 372.0}; } node User.Objects.Floor_08 Bentley.GC.NodeTypes.Floor { Technique = 'CreateAtBuilding'; CatalogItem = {'Floor','Default'}; OwningBuilding = GC_building_01; ArchFloor_FloorName = 'Floor_08'; ArchFloor_FinishedFloorElevation = 33000; ArchFloor_ApproxLength = 8000; ArchFloor_ApproxWidth = 5000; GraphLocation = {505.0, 372.0}; } node User.Objects.Floor_08a Bentley.GC.NodeTypes.Floor { Technique = 'CreateAtBuilding'; CatalogItem = {'Floor','Default'}; OwningBuilding = GC_building_01; ArchFloor_FloorName = 'Floor_08a'; ArchFloor_FinishedFloorElevation = 35000; ArchFloor_ApproxLength = 8000; ArchFloor_ApproxWidth = 5000; GraphLocation = {505.0, 372.0}; } node User.Objects.Floor_09 Bentley.GC.NodeTypes.Floor { Technique = 'CreateAtBuilding'; CatalogItem = {'Floor','Default'}; OwningBuilding = GC_building_01; ArchFloor_FloorName = 'Floor_09'; ArchFloor_FinishedFloorElevation = 39000; ArchFloor_ApproxLength = 8000; ArchFloor_ApproxWidth = 5000; GraphLocation = {505.0, 372.0}; } } transaction modelChange 'Add Floor 10 and 11' { node User.Objects.Floor_10 Bentley.GC.NodeTypes.Floor { Technique = 'CreateAtBuilding'; CatalogItem = {'Floor','Default'}; OwningBuilding = GC_building_01; ArchFloor_FloorName = 'Floor_10'; ArchFloor_FinishedFloorElevation = 42000; ArchFloor_ApproxLength = 8000; ArchFloor_ApproxWidth = 5000; GraphLocation = {505.0, 372.0}; } node User.Objects.Floor_11 Bentley.GC.NodeTypes.Floor { Technique = 'CreateAtBuilding'; CatalogItem = {'Floor','Default'}; OwningBuilding = GC_building_01; ArchFloor_FloorName = 'Floor_11'; ArchFloor_FinishedFloorElevation = 45000; ArchFloor_ApproxLength = 8000; ArchFloor_ApproxWidth = 5000; GraphLocation = {505.0, 372.0}; } }
Just open in notepad and paste into the Transaction Script Editor.