Hello,
for any reason i can get rooms geometry as solids, so whats missing
import sys
import clr
clr.AddReference('RevitAPI')
from Autodesk.Revit.DB import *
from Autodesk.Revit.DB.Structure import *
clr.AddReference('RevitAPIUI')
from Autodesk.Revit.UI import *
clr.AddReference('System')
from System.Collections.Generic import List
clr.AddReference('RevitNodes')
import Revit
clr.ImportExtensions(Revit.GeometryConversion)
clr.ImportExtensions(Revit.Elements)
clr.AddReference('RevitServices')
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
doc = DocumentManager.Instance.CurrentDBDocument
uidoc=DocumentManager.Instance.CurrentUIApplication.ActiveUIDocument
rooms = FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Rooms)
solids = []
for e in rooms:
calculator = SpatialElementGeometryCalculator(doc)
results = calculator.CalculateSpatialElementGeometry(e)
geo = results.GetGeometry()
solids.append(geo.ToProtoType())
OUT = rooms, solids
when i do it in the regular way it works partly!
when export ifc … it works… so whats going on?
KR
Andreas
Daan
2
Does this happen for every room in your model, or only for specific rooms, with i.e. curved edges?
Also, perhaps the Room.CoreBoundary node, together with a height parameter-value extrusion might work aswel.
1 Like
@Daan ,
just for a couple of rooms… i will test it.
I’ve had this happen in corners of rooms with columns that cause a self intersection.
2 Likes
revitapi solid when converted to dynamo solid, sometimes may have this kind of error
@john_pierson ,
for sure we have similar issues… Autodesk Revit need some progress there, particulary regarding MVD in IFCs…
@erfajo ,
is this kind of “solid” a “property” like in this exampe:
import sys
import clr
clr.AddReference('RevitAPI')
from Autodesk.Revit.DB import *
from Autodesk.Revit.DB.Structure import *
clr.AddReference('RevitAPIUI')
from Autodesk.Revit.UI import *
clr.AddReference('System')
from System.Collections.Generic import List
clr.AddReference('RevitNodes')
import Revit
clr.ImportExtensions(Revit.GeometryConversion)
clr.ImportExtensions(Revit.Elements)
clr.AddReference('RevitServices')
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
doc = DocumentManager.Instance.CurrentDBDocument
uidoc=DocumentManager.Instance.CurrentUIApplication.ActiveUIDocument
bip = BuiltInParameter.ROOM_AREA
provider = ParameterValueProvider(ElementId(bip))
evaluator = FilterNumericGreater()
rule = FilterDoubleRule(provider, evaluator, 0, False)
filter = ElementParameterFilter(rule)
rooms = FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Rooms).WherePasses(filter).ToElements()
def convertM(x):
vers = DocumentManager.Instance.CurrentDBDocument.Application.VersionNumber
if int(vers) < 2022: return UnitUtils.ConvertFromInternalUnits(x, DisplayUnitType.DUT_METERS)
else: return UnitUtils.ConvertFromInternalUnits(x, UnitTypeId.Meters)
def convertSquareM(x):
vers = DocumentManager.Instance.CurrentDBDocument.Application.VersionNumber
if int(vers) < 2022: return UnitUtils.ConvertFromInternalUnits(x, DisplayUnitType.DUT_SQUARE_METERS)
else: return UnitUtils.ConvertFromInternalUnits(x, UnitTypeId.SquareMeters)
def convertCubicM(x):
vers = DocumentManager.Instance.CurrentDBDocument.Application.VersionNumber
if int(vers) < 2022: return UnitUtils.ConvertFromInternalUnits(x, DisplayUnitType.DUT_CUBIC_METERS)
else: return UnitUtils.ConvertFromInternalUnits(x, UnitTypeId.CubicMeters)
upperLimit_ = [h.UpperLimit for h in rooms]
limit_offset = [convertM(h.LimitOffset) for h in rooms]
OUT = upperLimit_, limit_offset
or is it more complex to create ?
KR
Andreas
agree, and try to avoid convert revitapi solid to dynamo solid
if you really want to visialize it, you can make a directshape
2 Likes