Product Structure Management
Check the following examples below to learn how to handle entities of the Product Structure (or Scene tree) with Python scripting:
Parsing scene tree
scene.getRoot()
scene.getChildren(occurrence)
scene.getParent(occurrence)
scene.hasComponent(occurrence, scene.ComponentType.Part)
scene.getComponent(occurrence, scene.ComponentType.Part)
Parsing scene tree example
def traverseTree(occurrence):
print("Occurrence " + str(occurrence))
if scene.hasComponent(occurrence, scene.ComponentType.Part):
print("-> has part")
for child in scene.getChildren(occurrence):
traverseTree(child)
traverseTree(scene.getRoot())
Node creation
scene.createOccurrence()
scene.addComponent(occurrence, componentType)
scene.prototypeSubTree(occurrence)
scene.setParent(occurrence, parent)
scene.setLocalMatrix(occurrence, matrix)
Node creation example
part = scene.createOccurrence("Part1")
scene.addComponent(part, scene.ComponentType.Part)
instance1 = scene.prototypeSubTree(part)
instance2 = scene.prototypeSubTree(part)
assembly = scene.createOccurrence("Assembly")
scene.setParent(instance1, assembly)
scene.setParent(instance2, assembly)
scene.setParent(assembly, scene.getRoot())
Accessing part geometry
scene.getPartActiveShape(part)
For TessellatedShape type:
tessellation = scene.getPartMesh(shape)
polygonal.getMeshDefinitions(tessellation)
polygonal.createMeshFromDefinition(meshDefinition)
For BRepShape type
scene.getPartModel(shape)
Simple CAD geometry example
torus = cad.createTorusSurface(100, 10)
face = cad.createFace(torus)
model = cad.createModel()
cad.addToModel(face, model)
occurrence = scene.createOccurrence("Torus")
part = scene.addComponent(occurrence, scene.ComponentType.Part)
scene.setPartModel(part, model)
scene.setParent(occurrence, scene.getRoot())
algo.tessellate([occurrence], 0.200000, -1, -1)
Properties
Not all entity types support custom properties
core.supportCustomProperties(entity)
core.addCustomProperty(node, "propertyName", "propertyValue")
core.getProperty(node, "property") # like any other built-in property
scene.getMetadata(occurrence, propertyName)
Find nodes by properties
scene.findByActiveMaterial()
scene.findByProperty("propertyName", "regex")
scene.findMaterialByProperty("propertyName", "regex")
scene.findByMetadata("propertyName", "regex")
ECMAScript type regex