Greetings,
After importing IFC to Civil 3D.
I then need a report of the Autodesk.Aec.Structural.DatabaseServices.Member objects (Beams).
For each member, we have the WCS StartPoint. How do you get the WCS EndPoint?
I guessed at using the Orientation property with a TransformBy.
That’s not correct though. (refer strange red lines in image below).
Thx for your patience,
K.
import clr
clr.AddReference('AcMgd')
clr.AddReference('AcCoreMgd')
clr.AddReference('AcDbMgd')
clr.AddReference('AecBaseMgd')
clr.AddReference('AeccDbMgd')
clr.AddReference('AecPropDataMgd')
clr.AddReference('AecStructureMgd')
from Autodesk.AutoCAD.Runtime import *
from Autodesk.AutoCAD.ApplicationServices import *
from Autodesk.AutoCAD.EditorInput import *
from Autodesk.AutoCAD.DatabaseServices import *
from Autodesk.AutoCAD.Geometry import *
from Autodesk.Civil.ApplicationServices import CivilApplication
from Autodesk.Aec.PropertyData import *
from Autodesk.Aec.PropertyData.DatabaseServices import *
from Autodesk.Aec.Structural.DatabaseServices import *
from traceback import format_exc
doc = Application.DocumentManager.MdiActiveDocument
db = doc.Database
tm = db.TransactionManager
extents_list = []
elog = []
with tm.StartTransaction() as tr:
try:
msid = SymbolUtilityServices.GetBlockModelSpaceId(db);
btr = tr.GetObject(msid, OpenMode.ForRead)
for obj_id in btr:
obj = tr.GetObject(obj_id, OpenMode.ForRead)
if(obj is None):
continue
xd = []
sm = obj
if not isinstance(sm, Member):
continue
otrans = sm.Orientation
sp = str(sm.StartPoint)
ep = str(sm.EndPoint.TransformBy(otrans))
sp = sp.replace("(","")
sp = sp.replace(")","")
sp = sp.replace(","," ")
#
ep = ep.replace("(","")
ep = ep.replace(")","")
ep = ep.replace(","," ")
#
xd.append(sp)
xd.append(ep)
xd.append("")
xd.append("")
xd.append("")
propSets = PropertyDataServices.GetPropertySets(obj)
for propSet in propSets:
pset = tr.GetObject(propSet,OpenMode.ForRead)
psd = tr.GetObject(pset.PropertySetDefinition, OpenMode.ForRead)
for d in psd.Definitions:
propertyId = pset.PropertyNameToId(d.Name)
value = pset.GetAt(propertyId);
if(d.Name == "Name"):
xd[2] = value
if(d.Name == "ObjectType"):
xd[3] = value
if(d.Name == "Reference"):
xd[4] = value
extents_list.append(xd)
except:
elog.append(format_exc())
tr.Commit()
OUT = [extents_list,elog]
C3D-aecs-members-03.dyn (12.8 KB)
a-Roof.dwg (3.9 MB)