Object selection and manipulation
In this example we demonstrate how to select entities in the scene using getter.Entity
and then manipulate them using the EntityManipulator
module.
Usage
Execute this in the BlenderProc main directory:
blenderproc run examples/basics/entity_manipulation/main.py examples/resources/scene.obj examples/basics/entity_manipulation/output
examples/basics/entity_manipulation/main.py
: path to the python file.examples/resources/scene.obj
: path to the object file with the basic scene.examples/basics/entity_manipulation/output
: path to the output directory.
Visualization
Visualize the generated data:
blenderproc vis hdf5 examples/basics/entity_manipulation/output/0.hdf5
Steps
Entity manipulation
# load the objects into the scene
objs = bproc.loader.load_obj(args.scene)
# Find object with name Suzanne
suzanne = bproc.filter.one_by_attr(objs, "name", "Suzanne")
# Set its location and rotation
suzanne.set_location(np.random.uniform([0, 1, 2], [1, 2, 3]))
suzanne.set_rotation_euler([1, 1, 0])
The focus of this example is the filter operation and the setting of the rotation and location of objects with blenderproc
.
Our condition in the filter operation is: "name": 'Suzanne'
, which means that we want to select all the objects with obj.name == 'Suzanne'
. In our case we have only one object which meets the requirement.
If we want more than just one element we could have used the bproc.filter.by_attr()
fct. This way it is possible to select multiple objects.
NOTE: any given attribute_value of the type string can be treated as a REGULAR EXPRESSION, by setting regex=True
in the one_by_attr
fct. call.
So "name": 'Cylinder.*'
condition will select us all three cylinders in the scene.
For all possible attribute_name
‘s check the official blender documentation: https://docs.blender.org/api/current/bpy.types.Object.html.