Source code for blenderproc.python.modules.provider.sampler.DiskModule

from blenderproc.python.modules.main.Provider import Provider
from blenderproc.python.sampler.Disk import disk


[docs]class DiskModule(Provider): """ Samples a point on a 1-sphere (circle), or on a 2-ball (disk, i.e. circle + interior space), or on an arc/sector with an inner angle less or equal than 180 degrees. Returns a 3d mathutils.Vector sampled point. Example 1: Sample a point from a 1-sphere. .. code-block:: yaml { "provider": "sampler.Disk", "sample_from": "circle", "center": [0, 0, 4], "radius": 7 } Example 1: Sample a point from a sector. .. code-block:: yaml { "provider": "sampler.Disk", "sample_from": "sector", "center": [0, 0, 4], "radius": 7, "start_angle": 0, "end_angle": 90 } **Configuration**: .. list-table:: :widths: 25 100 10 :header-rows: 1 * - Parameter - Description - Type * - center - Center (in 3d space) of a 2d geometrical shape to sample from. - mathutils.Vector * - radius - The radius of the disk. - float * - rotation - List of three (XYZ) Euler angles that represent the rotation of the 2d geometrical structure used for sampling in 3d space. Default: [0, 0, 0]. - mathutils.Vector * - sample_from - Mode of sampling. Defines the geometrical structure used for sampling, i.e. the shape to sample from. Default: "disk". Available: ["disk", "circle", "sector", "arc"]. - string * - start_angle - Start angle in degrees that is used to define a sector/arc to sample from. Must be smaller than end_angle. Arc's/sector's inner angle (between start and end) must be less or equal than 180 degrees. Angle increases in the counterclockwise direction from the positive direction of X axis. Default: 0. - float * - end_angle - End angle in degrees that is used to define a sector/arc to sample from. Must be bigger than start_angle. Arc's/sector's inner angle (between start and end) must be less or equal than 180 degrees. Angle increases in the counterclockwise direction from the positive direction of X axis. Default: 180. - float """ def __init__(self, config): Provider.__init__(self, config)
[docs] def run(self): """ :return: A random point sampled point on a circle/disk/arc/sector. Type: mathutils.Vector. """ center = self.config.get_vector3d("center") radius = self.config.get_float("radius") euler_angles = self.config.get_vector3d("rotation", [0, 0, 0]) sample_from = self.config.get_string("sample_from", "disk") start_angle = self.config.get_float("start_angle", 0) end_angle = self.config.get_float("end_angle", 180) return disk( center=center, radius=radius, rotation=euler_angles, sample_from=sample_from, start_angle=start_angle, end_angle=end_angle )