Get desktop application:
View/edit binary Protocol Buffers messages
axis aligned rectangular box in 2D defined by the x and y coordinates of the lower left (min) and upper right (max) corner
Used in: , , ,
BuildProcessorStrategy is a settings collection object for a build processor. This definition uses OpenVectorFormat definitions to save a collection of settings for a specific material that can be used to add parameters to OVF vector data based on the LPBF meta data of VectorBlock objects. For each meta data combination a process strategy and marking params can be stored. Handling parameter fallbacks is responsibility of the build processor.
Used in:
Represents one single production job. May be used as a central (very) large object containing all information, or as a "shell" with no or incomplete WorkPlane information to break down object size.
Number of Layer (LPBF) /3DPatches (Structuring)
Metadata: Represents metadata related to the job object itself
Used in:
jobCreationTime in UNIX time (number of seconds since January 1, 1970 12:00am UTC)
2D axis aligned bounding box of all workplanes vector block coordinates
positions are 64bit values in bytes only Int64 and not UInt64 because the length of a filestream is given bei Int64 (long) in C#.
Process parameters applying to the job as a whole
Used in:
setpoint temperature of a globally effective heating system (e.g. build chamber/substrate plate)
vector of main direction of a shielding gas flow (xy or xyz)
vector of main direction of a material feed (e.g. powder coater, powder feed, extrusion nozzle) (xy or xyz)
bounds of the scan fields associated with the respective laser_index found in vector blocks data
map of additional proprietary parameters
Parameters controlling the tool (e.g. laser beam) behaviour
Used in: ,
gives the number of exposure cycles executed applies for points only, for movement distance and speed implicitly define this
repition rate of the exposure cycle, e.g. pulses/bursts etc. per second 0 Hz is defined as continous wave (cw)
for burst mode, number of pulses per burst 0 is defined as no burst mode pulses in the burst are reapeated with oscillator frequency, pulseDurationInFemtoseconds applies to each pulse
length of one pulse, defines the duty cycle together with repetitionRateInHz and laserPowerInW
marking mode switches between normal marking and skywriting modes
Parameters for marking without Skywriting
Parameters for marking with Skywriting
limit angle to switch from polygon delay to skywriting [degrees]
maximum allowed deviation from the setpoint mark path to optimize scanner dynamics by "cutting corners" Only applies in CornerBlendMode.SWIFT_BLENDING_MAXIMIZE_SPEED and Synonyms: radial tolerance
minimum mark speed to guaranty by scanner dynamics mark speed may be reduced down between laser_speed_in_mm_per_s and minimum_mark_speed when "cutting corners"
Parameters for marking with Wobble
meta data: custom, human readable name of this marking parameter set
discrete beam shape profile number used to control beam shaping devices (e.g. nLight AFX) to switch between different beam shape profiles (e.g. from Gauss-shaped to donut-shaped)
Used in:
Uses the angle given by "limit" to choose between executing polygon delay or skywriting. When skywriting is not performed, a delay of length polygon_delay_in_us is inserted.
Keeps the marking speed constant to the speed defined in laser_speed_in_mm_per_s. Then optimizes the accuracy to be as close to the setpoint geometry as scanner dynamics allow. If the corner_tolerance cannot be fulfilled, the behaviour depends on the skywriting mode. If skywriting is DYNAMIC_LOOKAHEAD, a skywriting motion is inserted. If skywriting mode is NO_SKY, a dynamics violation is triggered.
Utilizes scanner dynamics lookahead to maximize the speed of the scanning process. Guaranties that the corner_tolerance is fulfilled. Maximizes the scanning speed possibly beyond the limits of minimum_mark_speed and laser_speed_in_mm_per_s. Does not insert sky writing-like motions, instead decelerates as needed on the trajectory. Ignores marking_mode.
Utilizes scanner dynamics lookahead to maximize the accuracy of the scanning process. Guaranties that the minimum_mark_speed is fulfilled. If the corner_tolerance cannot be fulfilled, the behaviour depends on the skywriting mode. If skywriting is DYNAMIC_LOOKAHEAD, a skywriting motion is inserted. If skywriting mode is NO_SKY, a dynamics violation is triggered.
Used in:
Skywriting modes 1-3
Controls Sky Writing jerk-limited based on a lookahead simulation of scanner dynamics. manual skywriting params (n_prev_in_us, n_post_in_us, time_lag_in_us, laser_on_shift_in_us, limit, polygon_delay_in_us) are ignored Synonyms: BlendMode (ScanLab), ScanPack (Novanta)
Used in:
ellipse-shape wobble movement perpendicular to the current movement direction
8-shape wobble movement perpendicular to the current movement direction
8-shape wobble movement parallel to the current movement direction
Part is a reference to a CAD 3D model instance in this Job. Instances in a job may differ in their position, orientation, process strategy, marking parameters or support structures, even if they are derived from the same parent part. Common parent parts of instances can be identified using the parent_part_name, if set.
Used in:
process strategy used for the in skin (volume) of the part
process strategy used for the down skin of the part, if differing
process strategy used for the up skin of the part, if differing
meta data defining the exposure order that was used to order the vector blocks of this part the first item gets exposed first, e.g. exposure starts with downskin hatches, followed by inskin hatches two LPBFMetadata objects are added with PartArea set to VOLUME in both, SkinType set to DOWN_SKIN in first and IN_SKIN in second
reference to the original CAD 3D model this instance was created from
Metadata related to the geometry of the part
Used in:
part volume in cubic millimeters
support volume in cubic millimeters
height (layer) of the top slice in millimeters
surface area of the 3D model in square millimeters
surface area projected on the biuld plate in square millimeters
Used in:
Metadata: parameters the job preprocessing program (e.g. Slicer, CAM) used to create the vector data
universal, vendor independent parameters
Used in: ,
start rotation angle of scan patches or layers
Angle increment of scan patches from layer to layer
Shift of patches in the pattern from layer to layer
Extension of patches in to each other. Synonym: overlap distance
maximum length of hatches when applying a pattern. Values <= 0 result in no limitation. for stripes and checkerboard this controls the size of the groups/patches for single tracks (uni- or bidirectional) this does not apply
pattern type of the hatches that fill the contours
thickness of a layer/workplane
distance between single material tracks
distance between contour and filling
critical angle that is considered as overhang
offset of the first contour relative to the computed contour of the geometry. often reffered to as "beam compensation" as well
number of generated contours. If <= 0, there will only be hatches.
distance inbetween multiple contour lines. Only takes effect if number_of_contours > 1.
meta data: custom, human readable name of this process strategy
Used in:
single hatch lines that follow the same direction. Long jumps are executed back to the start after each line.
single hatch lines that alternate directions with short jumps in between
hatches are seperated into patches with perpendicular direction following a checkerboard pattern size of each patch is quadratic pattern_hatch_length_in_mm times pattern_hatch_length_in_mm patch overlap (size of area with two patches) is of size extend_into_in_mm
hatches are seperated into patches ("stripes"), but opposed to checkerboard only in one direction perpendicular to the marking direction size of each patch is pattern_hatch_length_in_mm in marking direction, unrestricted perpendicular to the marking direction patch overlap (size of area with two patches) is of size extend_into_in_mm
hatches are seperated into patches ("hexagon") size of each sidelength is pattern_hatch_length_in_mm and the long and short diagonal is calculated from it patch overlap (size of area with two patches) is of size extend_into_in_mm
generic definition of proprietary parameters descriptor
Used in: ,
Used in:
Used in:
key used in Job/markingParamsMap
LaserIndex is used for assigning vectorBlocks to different actors, e.g. in multi scanner systems
vetor blocks are executed in order once by default (repeats = 0), then repeated [repeats] times starting with the first vector again etc.
An arc is defined by a start point on the circle, defined in relative cartesian coordinates to the center, a center point and an arc angle (degrees). Positive angles mean clockwise, negative counter-clockwise rotation. Multiple same radius/angle arcs are defined with repeated center coordinates (x,y).
Used in: ,
len % 2 == 0, len >= 2
An arc3D (edge of a plate) is defined by a start point on the circle, defined in relative cartesian coordinates to the center, a center point and an arc angle (degrees). Positive angles mean clockwise, negative counter-clockwise rotation. Multiple same radius/angle arcs are defined with repeated center coordinates (x,y,z) for 3D.
Used in:
len % 3 == 0, len >= 3
Cubic Bézier segments in 2D. Each segment: (x0, y0, c1x, c1y, c2x, c2y, x1, y1) => 8 floats/segment. Pack N: [x0,y0,c1x,c1y,c2x,c2y,x1,y1, ...]
Used in:
len % 8 == 0, len >= 8
Cubic Bézier segments in 3D. Each segment: (x0, y0, z0, c1x, c1y, c1z, c2x, c2y, c2z, x1, y1, z1) => 12 floats/segment. Pack N: [x0,y0,z0,c1x,c1y,c1z,c2x,c2y,c2z,x1,y1,z1, ...]
Used in:
len % 12 == 0, len >= 12
Linked Cubic Bézier spline in 2D (continuous). start_control packs tuples (x_i, y_i, c1x_i, c1y_i, c2x_i, c2y_i) => 6 floats/tuple.
Used in:
len % 6 == 0, len >= 6
Linked Cubic Bézier spline in 3D (continuous). start_control packs (x_i, y_i, z_i, c1x_i, c1y_i, c1z_i, c2x_i, c2y_i, c2z_i) => 9 floats/tuple.
Used in:
len % 9 == 0, len >= 9
An ellipse is defined like an arc, with additional parameters defining the ellipse shape: a/b length of ellipse half axis phi0 phase zero angle (start point of ellipse relative to end of a)
Used in:
Pause the exposure procedure. This can be necessary e.g. for thermal reasons, or for syncing mulitple laser scanner units, preventing overlap or smoke interaction.
Used in:
static wait time in the exposure
Hatches: A hatch is a set of independent straight lines, each defined by one start and one end point (x,y) for 2D.
Used in:
len % 4 == 0, len >= 4
Hatches3D: A hatch is a set of independent straight lines, each defined by one start and one end point (x,y,z) for 3D.
Used in:
len % 6 == 0, len >= 6
A hatch divided into a line sequence with adaption parameter this vector block type saves significant amounts of vector block meta data compared to writing every hatch as its own LineSequenceParaAdapt block
Used in:
ProcessMetaData for LPBF
Used in: , ,
states if this vector block is a reexposure of the area (true) or the first exposure (false)
Skin Core strategy uses two laser spots with different sizes for core (bigger spot) and outer hull (smaller spot) to increase productivity. Default value (also for not using the strategy) is OuterHull, using the small spot for the whole part.
Used in:
SkinType defines if the vectors of this block belong to the parts surface in vertical direction InSkin (default), vectors are found on this position on previous and next layer DownSkin, no vectors in previous layer, exposure in powder bed Upskin, no vectors in next layer
Used in:
LineSequence: A lineSequence is defined by a set of vertex points (x,y), connected contiguously in the listed order by straight line segments. A closed lineSequence can also be called a polygon.
Used in: ,
len % 2 == 0, len >= 4
LineSequence3D: A lineSequence3D is defined by a set of vertex points (x,y,z) in 3D space, connected contiguously in the listed order by straight line segments. A closed lineSequence can also be called a polygon.
Used in:
len % 3 == 0, len >= 6
A LineSequence with additional adaption of one or more laser parameters along the vectors. Each point consists of (x,y,parameterValue1,parameterValue2...) for 2D. The parameter field defines which parameter values are contained inside points_with_paras. The count of the parameter field defines how many floats define parameters (and which) after x and y. Each parameterValue is the goal value that will be reached at the end of the vector, scaling linear along the vector. The goal gets priority and overwrites settings of the marking parameter set. All other values are still statically set as defined in the marking parameter set.
Used in: ,
len % 3 == 0, len >= 3
Used in:
ProcessMetaData for MicroStructuring
Used in:
PartArea defines if the vectors belong to a part surface in horizontal direction (in layer). Contours are borders of the part in the layer, volume (or core) is the area inbetween. Transition contours are special additional contour lines connecting volume and contour.
Used in: ,
also called core or hatches
PointSequence: A point sequence is a set of points, each marked for a fixed period of time. Each point consists of (x,y) for 2D.
Used in:
len % 2 == 0, len >= 2
PointSequence3D: A point sequence is a set of points, each marked for a fixed period of time. Each point consists of (x,y,z) for 3D.
Used in:
len % 3 == 0, len >= 3
ProcessMetaData for Polishing
Todo: Define
Used in:
(message has no fields)
Quadratic Bézier segments in 2D. Each segment: (x0, y0, cx, cy, x1, y1) => 6 floats/segment. Pack N: [x0,y0,cx,cy,x1,y1, x0,y0,cx,cy,x1,y1, ...]
Used in:
len % 6 == 0, len >= 6
Quadratic Bézier segments in 3D. Each segment: (x0, y0, z0, cx, cy, cz, x1, y1, z1) => 9 floats/segment. Pack N: [x0,y0,z0,cx,cy,cz,x1,y1,z1, x0,y0,z0,cx,cy,cz,x1,y1,z1, ...]
Used in:
len % 9 == 0, len >= 9
Linked Quadratic Bézier spline in 2D (continuous). start_control packs tuples (x_i, y_i, cx_i, cy_i) => 4 floats/tuple. The end of segment i is the start (x_{i+1},y_{i+1}); the last segment ends at (last_x,last_y).
Used in:
len % 4 == 0, len >= 4
Linked Quadratic Bézier spline in 3D (continuous). start_control packs (x_i, y_i, z_i, cx_i, cy_i, cz_i) => 6 floats/tuple.
Used in:
len % 6 == 0, len >= 6
StructureType defines the type of structure model the vectors belong to. PART is default, usually refering to a tesselated model, e.g. STL models. Support structures don't belong to any part, but are needed for the process. Wirestructures can be tesselated. But it is more efficient to treat them seperatly in a parametrized format. They are similar to supports, but are not removed after the process. Points use is very limited. They may form a support or wirestructure.
Used in: ,
Synchronization block for multi laser scanner unit systems. Creates dynamic dependencies between multiple lasers exposure orders that shall be enforced by the machine controller in real time.
Used in:
The SynchronizationBlock references another vector block to wait on in the same workplane by index. Exposure of the laser of SynchronizationBlock (referenced by laser_index) will pause and not continue until the block referenced by vector_block_index_to_wait_on has been fully executed. Caution must be taken to not create cyclic synchronization dependencies, which would cause a deadlock.
Used in:
total scan distance of this vector block in mm
total scan distance of this vector block in mm
key used in Job/partsMap
key used in Job/Workplane/patchesMap
Index of the closedContour in the workplane/Metadata/contours field this vector block is contained in. Contours shall be enumerated ascending in each workplane to identifiy physical contours consisting of multiple vector blocks (e.g. when parameters change) as one. If this parameter is set to any value smaller than 0, this explicitly indicates that none of the vectors of the block are contained in any contour (this is the case for e.g. single vector/line supports). If contour_index is set to a valid contour index, all of the blocks vectors are contained in the contour. The case of a vector block that partly overlaps a contour is excluded on purpose. Overlapping blocks cause a reexposure that should be handled by the machine controller. If containing contour meta data is calculated, overlapping vector blocks should be split and properly indicate the reexposure in the meta data.
2D axis aligned bounding box of the vector block coordinates
Optional metadata defining a preferred 32bit RGBA color to render the vector data of this vector block in a viewer. int32 is interpreted as byte[4] with byte[0] = red, byte[1] = green, byte[2] = blue, byte[3] = alpha
internal execution time of the vector block, including block internal delays and skywriting this time stays constant when the vector block is translated/rotated, excludes jump_to_time_in_s the full execution time is the sum of exposure_time_in_s and jump_to_time_in_s
jump time from the end position of the previous vector block to the start position of this vector block this time changes when the vector block is translated/rotated the full execution time is the sum of exposure_time_in_s and jump_to_time_in_s
time the laser power was on can be used to calculate productive time percentage and theoretical energy input (multiply with laser_power_in_w)
A WorkingPlane is a 2D working plane of the tool (e.g. laser scanfield, electron beam scan field) in the global 3D coordinate system that is set by moving one or more physical axis relative to the workpiece. It follows the same concept as a sketch plane in CAD applications. Any axis movement that changes the work plane position will require a new WorkingPlane message. synonyms: Layer (LPBF) / 3DPatches (Structuring) / Scanfields (MultiBeam)
Used in:
Axis positions - can be used for tiling
for PBF processes bed position
how many times the WorkPlane will be executed this will execute all vector blocks in order once, then repeat [repeats] times starting with the first block again etc.
reference for syncing or asynchronious execution (keeping correct order)
identifier of the machine to prevent type mismatch, has to be verified by the machine controller
goal positions of the axis in order of machine axis number
A patch is a subdivision in a workPlane with an own local coordinate system. The local transformation is given by the 2D origin (u/v) Coordinates in the workplane may be tranformed by the machine depending on the patch
Used in:
optional 2D polygon that forms the outer contour (not marked) of this patch if the contour should get executed a separate vector block is used.
local transformation of workpiece coordinate x
local transformation of workpiece coordinate y
identifier of actual workpiece layer / stack for single patch processes like powder bed this equals the workPlane number
optional metadata of this work plane
Used in:
total scan distance of this WorkPlane in mm
total scan distance of this WorkPlane in mm
map containing all patches in this workplane
actually applied max laser power after dynamic parameter allocation in this workPlane
actually applied min laser power after dynamic parameter allocation in this workPlane
all closed contours present in this workplane
2D axis aligned bounding box of all the workplanes vector block coordinates
Used in:
indices of the vector blocks in vector_blocks repeated field that represent different sections of one closed contour sections are necessary to indicate parameter set changes along the contour with this meta data reconstruction of original contours is possible
this closed contours area in square millimeters
this closed contours total length in millimeters
index of the parent (containing) contour in this workplanes' repeated contours field if the parent index points to the contour itself, it is one outermost contour
defines the winding number of the contour around the contours centroid also indicateing its direction: negative = clockwise / positive = counterclockwise
indicates the ContourType of this contour
Used in:
an outer contour of the unprocessed part slice for non overlapping contour groups, outer an inner contours always alternate the hierarchy of the contours is stored in parent_index instead
an inner contour of the unprocessed part slice for non overlapping contour groups, outer an inner contours always alternate the hierarchy of the contours is stored in parent_index instead
an additional contour that has been offset from a contour of the unprocessed part slice e.g. because number_of_contours > 1 in the part process strategy these contours are not part of the unprocessed part slices contour hierarchy they instead are offset to their parent contour indicated by parent_index and typically are used to weld the parent contour to the hatches
positions are 64bit values in bytes only Int64 and not UInt64 because the length of a filestream is given bei Int64 (long) in C#.