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