Hi, I’m trying to create bill of materials by python script. I followed an example given in this link:
https://forum.dynamobim.com/t/add-criteria-for-material-list/83155/8
However, when I use “MapSurface” it is returning “Null”.
In my material criteria there are three surfaces that I named “DATUM”, “LIMPEZA” and “DEMOLIÇÃO”. I am passing the corresponding surfaces into this routine.
# Load the Python Standard and DesignScript Libraries
import sys
import clr
# Add Assemblies for AutoCAD and Civil3D
clr.AddReference('AcMgd')
clr.AddReference('AcCoreMgd')
clr.AddReference('AcDbMgd')
clr.AddReference('AecBaseMgd')
clr.AddReference('AecPropDataMgd')
clr.AddReference('AeccDbMgd')
# Import references from AutoCAD
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 *
# Import references from Civil3D
from Autodesk.Civil.ApplicationServices import *
from Autodesk.Civil.DatabaseServices import *
# The inputs to this node will be stored as a list in the IN variables.
dataEnteringNode = IN
adoc = Application.DocumentManager.MdiActiveDocument
editor = adoc.Editor
QTOC = IN[0]
SLGl = IN[1][0]
SF1 = IN[2]
SF2 = IN[3]
SFD = IN[4]
with adoc.LockDocument():
with adoc.Database as db:
with db.TransactionManager.StartTransaction() as t:
#get input QTOCriteria object id
QTOCid = QTOC.InternalObjectId
#QTOCo = t.GetObject(id, OpenMode.ForWrite, True);
#get sample line group object id
slgid = SLGl.InternalObjectId
#open sample line group object
slgo = t.GetObject(slgid, OpenMode.ForWrite)
#create criteria name mapping for sample line group from QTOCriteria
QTOM = QTOCriteriaNameMapping(QTOCid,slgid)
SF1id = SF1.InternalObjectId
SF2id = SF2.InternalObjectId
SFDid = SFD.InternalObjectId
#sampled input surface id
surfacemapping1 = QTOM.MapSurface("LIMPEZA",SF1id)
surfacemapping2 = QTOM.MapSurface("DEMOLIÇÃO",SF2id)
surfacemapping3 = QTOM.MapSurface("DATUM",SFDid)
"""#TRUE if all surface mapped
completed = QTOM.isMappingCompleted
#add created mapping to sample line group aka compute materials
importcriteriatoslg = QTOMaterialListCollection.ImportCriteria(slgid.MaterialLists,QTOM)"""
t.Commit()
# Assign your output to the OUT variable.
OUT = surfacemapping1,surfacemapping2,surfacemapping3