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