import sys
import clr
sys. path.append("C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.10_3.10.1776.0_x64__qbz5n2kfra8p0\Lib")
import math
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
# Preparing input from dynamo to Revit
![1|690x411](upload://k2tL8U6VcRJD10VzqmGMer7igNA.png)
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
wallNames = []
wallAreas = []
wallVolumes = []
wallLengths = []
collector = FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Walls).WhereElementIsNotElementType()
for c in collector:
wallNames.append(c.Name)
Area = c.get_Parameter(BuiltInParameter.HOST_AREA_COMPUTED).AsDouble()
wallAreas.append(c.Area)
Volume = c.get_Parameter(BuiltInParameter.HOST_VOLUME_COMPUTED).AsDouble()
wallVolumes.append(c.Volume)
Length = c.get_Parameter(BuiltInParameter.CURVE_ELEM_LENGTH).AsDouble() * 0.3048
wallLengths.append(c.Length)
OUT = wallNames, wallAreas, wallVolumes, wallLengths
I have this code but I don’t know why I get this error “Wall Object has no Area attribute”
The first line is great. You get the area via get_Parameter
and then assigning it to the variable Area
.
The second line is the issue. You have the area but then you try to pull it again as a property of c
, which is not a valid attribute. You just need to append the value you already have, Area
.
Right now you’re essentially doing the same thing twice. Once in the correct way and once in the incorrect way. You just happen to be using the incorrect way to build your list.
3 Likes
Now on the same code, I get this error for the length
import sys
import clr
sys.path.append("C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.10_3.10.1776.0_x64__qbz5n2kfra8p0\Lib")
import math
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
# Preparing input from dynamo to revit
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
wallNames = []
wallAreas = []
wallVolumes = []
wallLengths = []
collector = FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Walls).WhereElementIsNotElementType()
for c in collector:
wallNames.append(c.Name)
Area = c.get_Parameter(BuiltInParameter.HOST_AREA_COMPUTED).AsValueString()
wallAreas.append(Area)
Volume = c.get_Parameter(BuiltInParameter.HOST_VOLUME_COMPUTED).AsValueString()
wallVolumes.append(Volume)
Length = c.get_Parameter(BuiltInParameter.CURVE_ELEM_LENGTH).AsDouble()
wallLengths.append(Length)
OUT = wallNames, wallAreas, wallVolumes,wallLengths
I can understand what is the problem here
As far as I can tell their is no issue, works for me. Try in the basic sample model, it gave me all the values there.