Room Boundary Location
Originally Published inWe already had a look at enabling the room volume computation in C#. Here is a closely related question that also prompted me to implement something similar in VB for a change.
Question: Could you please provide some VB.NET code showing how to set the Autodesk.Revit.Rooms.BoundaryLocationType in the document, for instance to ‘WallCenter’?
Answer: The boundary location type is applied when calculating the room volume. These settings are defined by the document settings volume calculation options. The post mentioned above discusses how to access and modify these settings.
I implemented a VB.NET sample application RoomBoundaryLocation for you to demonstrate this in VB as well. Here is the mainline code of its Execute method:
Public Function Execute( _
ByVal commandData As ExternalCommandData, _
ByRef message As String, _
ByVal elements As ElementSet) _
As CmdResult _
Implements IExternalCommand.Execute
Dim app As Application = commandData.Application
Dim doc As Document = app.ActiveDocument
Dim opt As VolumeCalculationOptions _
= doc.Settings.VolumeCalculationSetting _
.VolumeCalculationOptions
opt.VolumeComputationEnable = True
opt.RoomAreaBoundaryLocation _
= Rooms.BoundaryLocationType.WallCenter
doc.Settings.VolumeCalculationSetting _
.VolumeCalculationOptions = opt
Dim volumes As List(Of String) = New List(Of String)
Dim els As ElementSet = doc.Selection.Elements
Dim e As Autodesk.Revit.Element
For Each e In els
If TypeOf e Is Room Then
Dim room As Room = CType(e, Room)
volumes.Add(room.Volume.ToString("0.##"))
'Else
' volumes.Add("Not a room")
End If
Next
If 0 = volumes.Count Then
message = "Please select some rooms."
Else
Dim s As String = _
+"Selected room volumes in cubic feet: " _
+ String.Join(", ", volumes.ToArray()) _
+ "."
MsgBox(s)
End If
Return CmdResult.Failed
End Function
Here are some sample rooms and spaces selected in the Revit user interface:
This is the resulting dialogue displayed by running the command:
Here is the complete Visual Studio solution RoomBoundaryLocation implementing the new command.