-
Notifications
You must be signed in to change notification settings - Fork 0
THREE ‐ API v4.0.0
Welcome to the official documentation of the Matter and Form THREE scanner's public API. This documentation provides detailed information about the API calls available for controlling and interacting with the THREE scanner.
The THREE comes equipped with a backend server that activates on boot. This server communicates via a WebSocket protocol, allowing for full control over the scanner's functionalities—everything the THREE does, except for the GUI, is accessible through this server. All the calls our frontend system makes are also available for your personal projects.
Using the WebSocket server, you can build your own integrations with automation systems. Whether you want to take stereo images with the dual cameras, project graphics through the built-in projector, or even design a completely new front-end 3D scanning system, our API provides the flexibility for all these activities and more.
If you are new to WebSockets and would like to learn more, you can read about them here. Alternatively, you can search for WebSocket libraries that are compatible with the programming language of your choice.
Connect to the WebSocket server over port 8081: ws://matterandform.local:8081
, or use the local IP address of the device: ws://192.168.XXX.XXX:8081
. The projector displays the local IP address of the THREE scanner on boot.
Please note that the THREE scanner is a local network device and can only be communicated with from within the same network by default.
Refer to the Basic Usage section for a more complete code snippet in Python and JavaScript to help you get up and running.
const WebSocket = require('ws');
const ws = new WebSocket('ws://matterandform.local:8081');
import asyncio
import websockets
async def connect():
await websockets.connect("ws://matterandform.local:8081")
asyncio.run(connect())
The server and the client exchange messages mainly in JSON format. The two exceptions are 3D scan data, and image data. The server will normally only respond to requests that are sent by an application.
Every action, whether it’s starting a new scan, adjusting settings, or querying the device status, is encapsulated as a task. When a task is submitted to the server, it is queued and processed in sequence.
Refer to the Basic Usage section for code snippets in both Python and JavaScript to help you get up and running.
Generic task message for the Three Scanner.
A task message is a generic message encoded as JSON which is used for enqueuing a task to be performed by the THREE Scanner. The THREE scanner dispatches updates and results for tasks to the client using the same message type.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | A unique identifier generated by the client. This identifier associates all incoming and outgoing task messages with a specific task requested by the client. | |
Type | string | The string identifying the task type. See task definitions for the list of valid task strings. | |
Input | Any | optional | Optional input message. See each task definition for details. |
Output | Any | optional | Optional output message. See each task definition for details. |
State | TaskState | optional | The current state of the task. |
Error | string | optional | A string describing the error if the task has failed. |
The following is an example of a raw JSON request from the client and response from the server which modifies the current camera settings using the SetCameras task.
Example request:
{
"Task": {
"Index": 1,
"Type": "SetCameras"
"Input": {
"analogGain": 256,
"digitalGain": 128,
"exposure": 18000
}
}
}
Example response:
{
"Task": {
"Index": 1,
"Type": "SetCameras"
"Input": {
"analogGain": 256,
"digitalGain": 512,
"exposure": 18000
},
"Output": {
"analogGain": {
"default": 512.0,
"max": 1024.0,
"min": 256.0,
"value": 256.0
},
"digitalGain": {
"default": 256,
"max": 65536,
"min": 256,
"value": 512
},
"exposure": {
"default": 27000,
"max": 90000,
"min": 9000,
"value": 18000
}
},
"State": "Completed"
}
}
Name | Description |
---|---|
None | The task state is not defined. |
Sent | The task has been sent by the client. |
Received | The task has been received by the server. |
Started | The task started by the server. |
Completed | The task is completed by the server. |
Cancelled | The task has been cancelled by the client. |
Failed | The task has failed. A string describing the error is returned with the task. |
Dropped | The task has not been received by the server, or task IDs were sent out of sequence. |
Disconnected | The client has been disconnected from the server before the task could finish. |
Generic buffer message for the Three Scanner.
Some tasks require the server and/or client to transfer binary data. In such cases the buffer message is sent to inform the server/client what the data is and what task it belongs to. The binary data it refers to is sent immediately following the buffer message.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | The zero-based index identifying the data buffer. | |
Size | uint64 | The size of the incoming data buffer in bytes. | |
Task | Task | The task associated with the data buffer. This informs the client which request this data buffer corresponds to. | |
Descriptor | Any | optional | Optional data buffer descriptor. See each task definition for details. |
Example request: the
DownloadProject
task requests for the server to transfer a ZIP file containing the project data to the client.
{
"Task": {
"Index": 1,
"Type": "DownloadProject",
"Input": 5
}
}
The server responds with a buffer message informing the client to expect a binary data transfer. Notice that the buffer message
Task
field echoes the initial task request so that it is clear which request this data is a response to. ASize
field is also included so that the client knows how many bytes it should expect to receive.
{
"Buffer": {
"Descriptor": "Project-5.zip",
"Index": 0,
"Size": 15682096,
"Task": {
"Index": 1,
"Type": "DownloadProject",
"Input": 5
}
}
}
The server then sends the 15682096 byte data buffer of the project ZIP file (in 32MB chunks at most). Once the server is finished streaming the binary buffer it sends a task completion message.
{
"Task": {
"Index": 1,
"Type": "DownloadProject"
"Input": 5,
"State": "Completed"
}
}
This section contains step-by-step instructions for connecting to, and interacting with, the THREE WebSocket API. In particular, the example here demonstrates how to establish a connection, send tasks, and handle responses from the server, using Python and JavaScript.
To run the Python code snippet, Python 3.8 or newer is required. You will also need to install the websockets library.
- Ensure Python 3.8 or newer is installed. You can download it from python.org.
- To install websockets, run
pip install websockets
in your command line. - Copy and paste the code snippets into a file named
example.py
. - Run the script with
python /path/to/example.py
orpython3 /path/to/example.py
, depending on your system configuration.
To run the JavaScript code snippet, Node.js 10.0.0 or newer is required. You will also need to install the ws library.
- Ensure Node.js 10.0.0 or newer is installed. You can download it from nodejs.org.
- To install ws, run
npm install ws
in your project directory. - Copy and paste the code snippets into a file named
example.js
. - Run the script with
node /path/to/example.js
ornodejs /path/to/example.js
, depending on your system configuration.
In order to interact with the WebSocket API, we first need to connect to it. We can use the following Python or JavaScript code snippet to do that.
Using Python:
import asyncio
import json
import websockets
class THREE:
def __init__(self, url):
self.url = url
async def connect(self):
self.ws = await websockets.connect(self.url)
async def send(self, task):
await self.ws.send(json.dumps(task))
async for message in self.ws:
try:
response = json.loads(message)
if 'Task' in response and 'State' in response['Task'] and response['Task']['Index'] == task['Task']['Index']:
if response['Task']['State'] == 'Failed':
raise Exception(response['Task'])
elif response['Task']['State'] == 'Completed':
return response['Task'].get('Output', {})
except Exception as e:
raise e
async def main():
three = THREE('ws://matterandform.local:8081')
try:
# Open a connection with the server
await three.connect()
print(f"Connected to the server @ {three.url}")
# Your application logic here
except Exception as e:
print(f"Error: {e}")
finally:
await three.ws.close()
asyncio.run(main())
Using JavaScript:
const WebSocket = require('ws');
function THREE(url) { this.url = url; }
THREE.prototype.connect = function() {
this.ws = new WebSocket(this.url);
return new Promise((resolve, reject) => {
this.ws.onopen = resolve;
this.ws.onclose = reject;
});
};
THREE.prototype.send = function(task) {
return new Promise((resolve, reject) => {
this.ws.onmessage = event => {
try {
const response = JSON.parse(event.data);
if (!response.Task || response.Task.Index !== task.Task.Index) return;
if (response.Task.State === 'Failed') reject(response.Task);
if (response.Task.State === 'Completed') resolve(response.Task.Output ?? {});
} catch (error) { reject(error); }
};
this.ws.onerror = error => reject(error);
this.ws.send(JSON.stringify(task));
});
};
const main = async () => {
const three = new THREE('ws://matterandform.local:8081');
try {
// Open a connection with the server
await three.connect();
console.log(`Connected to the server @ ${three.url}`);
// Your application logic here
}
catch (error) { console.error('Error:', error); }
finally { three.ws?.close(); }
}
main();
Caution
Note: these code snippets are intended to help you get up and running, and for quick prototyping only. In a production environment you will want to enhance this code (or simply re-write it) to be more robust and fault tolerant.
Scans are stored in project, and so before we may create a new scan we must first open a project. We can create a new project by sending a NewProject
task with the Input
field set to the name we want to give the project.
Once successful, the NewProject
task will return a message with the State
field set to Completed
, and an Output
field containing metadata about the newly created project including an index
field which is used to identify it. We use the index
field in the next step.
Using Python:
create_project_response = await three.send({
"Task": {
"Index": 1,
"Type": "NewProject",
"Input": "My Project Name"
}
})
print('Project created:', create_project_response)
Using JavaScript:
const createProjectResponse = await three.send({
Task: {
Index: 1,
Type: "NewProject",
Input: "My Project Name"
}
});
console.log('Project created:', createProjectResponse);
Example response:
{
"groups": { "collapsed": false, "index": 0, "name": "", "visible": true },
"index": 19,
"name": "My Project Name"
}
After creating a new project, we can open it. Opening a project allows the current socket connection to interact with it, such as adding and editing scan data. To open a project we send a OpenProject
task with the Input
field set to be the index
obtained in the previous step.
Using Python:
# Open the project created in the previous step
open_project_response = await three.send({
"Task": {
"Index": 2,
"Type": "OpenProject",
"Input": create_project_response['index']
}
})
print('Project opened:', open_project_response)
Using JavaScript:
// Open the project created in the previous step
const openProjectResponse = await three.send({
Task: {
Index: 2,
Type: "OpenProject",
Input: createProjectResponse.index
}
});
console.log('Project opened:', openProjectResponse);
Example response:
{
"groups": { "collapsed": false, "index": 0, "name": "", "visible": true },
"index": 19,
"name": "My Project Name"
}
Note
Note that the project will remain open for the lifetime of the socket connection or until you explicitly close it by sending a CloseProject
task. Projects can only be open by a single socket connection at a given time.
Once we've opened a project we are ready to interact with it. For example, we can create a new scan by sending a NewScan
task with the Input
field set to be some scan configuration.
Using Python:
# Add a new scan to the opened project
new_scan_response = await three.send({
"Task": {
"Index": 3,
"Type": "NewScan",
"Input": {
"camera": { "exposure": 18000, "analogGain": 256, "digitalGain": 256 },
"capture": { "quality": "Medium", "texture": True },
"projector": { "brightness": 0.8 }
}
}
})
print('New scan added:', new_scan_response)
Using JavaScript:
// Add a new scan to the opened project
const newScanResponse = await three.send({
Task: {
Index: 3,
Type: "NewScan",
Input: {
camera: { exposure: 18000, analogGain: 256, digitalGain: 256 },
capture: { quality: "Medium", texture: true },
projector: { brightness: 0.8 }
}
}
});
console.log('New scan added:', newScanResponse);
Example response:
{
"index": 0,
"name": "",
"collapsed": false,
"groups": [
{
"index": 1,
"name":"Scan-1",
"collapsed": false,
"color": [0.6150012612342834,0.8566378951072693,0.916047215461731,1],
"rotation": [-0.003504337305992789,0.16057781988162367,-0.006117077953868702],
"scan": 1,
"translation": [-127.42007942138065,18.583630764869238,-293.1252968900822],
"visible": true
}
],
"visible": true
}
-
MF/V3/Descriptors/Settings/Advanced
- Advanced
- Advanced.AdaptiveSampling
- Advanced.AdaptiveSampling.Rate
- Advanced.AdaptiveSampling.Type
- Advanced.Capture
- Advanced.Capture.HorizontalFrequencies
- Advanced.Capture.VerticalFrequencies
- Advanced.EdgeDetection
- Advanced.EdgeDetection.GaussianBlurRadius
- Advanced.EdgeDetection.GaussianBlurStdDev
- Advanced.EdgeDetection.LaplacianKernelRadius
- Advanced.EdgeDetection.MaximumWidthForProcessing
- Advanced.EdgeDetection.Threshold
- Advanced.NormalEstimation
- Advanced.NormalEstimation.MaximumNeighbourCount
- Advanced.NormalEstimation.MaximumNeighbourRadius
- Advanced.NormalEstimation.Method
- Advanced.NormalEstimation.UseMaximumNeighbourCount
- Advanced.NormalEstimation.UseMaximumNeighbourRadius
- Advanced.OutlierRemoval
- Advanced.OutlierRemoval.NeighbourCount
- Advanced.OutlierRemoval.NeighbourRadius
- Advanced.PhaseFilter
- Advanced.PhaseFilter.KernelRadius
- Advanced.PhaseFilter.SpatialWeightStdDev
- Advanced.Remesh
- Advanced.Remesh.Depth
- Advanced.Remesh.LinearInterpolation
- Advanced.Remesh.Scale
- Advanced.Remesh.VoxelSize
- Advanced.Sampling
- Advanced.Sampling.ImageSampleRate
- Advanced.Sampling.ProjectorSampleRate
- Advanced.Use
-
Generic buffer message for the Three Scanner.
Some tasks require the server and/or client to transfer binary data. In such cases the buffer message is sent to inform the server/client what the data is and what task it belongs to. The binary data it refers to is sent immediately following the buffer message.
For example, DownloadProject
requires the server to transfer a ZIP file containing the project data to the client.
> First, the client sends the task request to the server:
{
"Task":{
"Index":1,
"Type":"DownloadProject",
"Input":5
}
}
> The server sends the buffer message telling the client to expect a binary data transfer and what to do with it. Note that the buffer message Task
field echoes the task request, making it clear which request this data is a response to.
{
"Buffer":{
"Descriptor":"Project-5.zip",
"Index":0,
"Size":15682096,
"Task":{
"Index":1,
"Type":"DownloadProject",
"Input":5
}
}
}
> The server then sends the 15682096 byte data buffer of the project ZIP file. > Finally, the server sends a task completion message.
{
"Task":{
"Index":1,
"Type":"DownloadProject"
"Input":5,
"State":"Completed"
}
}
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | The zero-based index identifying the data buffer. | |
Size | uint64 | The size of the incoming data buffer in bytes. | |
Task | Task | The task associated with the data buffer. This informs the client which request this data buffer corresponds to. | |
Descriptor | googlebuf.Any | optional | Optional data buffer descriptor. See each task definition for details. |
BoundingBox descriptor.
Field | Type | Label | Description |
---|---|---|---|
center | double | repeated | The center of the bounding box. |
size | double | repeated | The size of the bounding box. |
rotation | double | repeated | The 3x3 rotation matrix of the bounding box. The first, second and third column vectors are the x, y and z axes of the bounding box. |
transform | double | repeated | The 4x4 matrix that transforms the canonical cube with corners [±1, ±1, ±1] to the bounding box in world coordinates. The transform can be used as the model matrix for rendering the bounding box with an OpenGL shader. |
Camera calibration descriptor.
Field | Type | Label | Description |
---|---|---|---|
quality | Quality | Calibration quality. | |
date | int32 | repeated | Calibration date and time [year, month, day, hour, minute, second]. |
Calibration capture target.
The camera calibration capture targets are used to draw quad overlays on the video stream to guide a user as to where to position the calibration card for each capture during camera calibration.
Field | Type | Label | Description |
---|---|---|---|
camera | int32 | Index of the camera that is displayed to the user for this capture. | |
quads | float | repeated | The target quad for each camera. This is a set of 16 numbers defining the quad coordinates on the left and right camera. The first 4 pairs of numbers define the quad on the left camera. The last 4 pairs of numbers define the quad on the right camera. |
Detected calibration card descriptor.
Field | Type | Label | Description |
---|---|---|---|
size | int32 | repeated | The calibration card columns and rows. |
quad | float | repeated | The calibration card bounding quadrilateral. |
corners | float | repeated | The detected corners of the calibration card. |
target | DetectedCard.Target | optional | The capture target properties, if a capture target is specified. |
Calibration capture target properties.
Field | Type | Label | Description |
---|---|---|---|
match | float | A normalized value indicating how closely the calibration card matches the target overlay. 0 indicates a poor match. 1 indicates a good match. | |
hold | float | A normalized value indicating how long the user has held the calibration card steady over the target overlay. When the value reaches 1, the user has held the calibration card steady for the complete required duration. |
Turntable calibration descriptor.
Field | Type | Label | Description |
---|---|---|---|
quality | Quality | Calibration quality. | |
date | int32 | repeated | Calibration date and time [year, month, day, hour, minute, second]. |
focus | int32 | repeated | Focus values of each camera during calibration. |
Calibration quality.
Name | Number | Description |
---|---|---|
None | 0 | The calibration does not exist. |
Poor | 1 | Poor calibration quality. |
Fair | 2 | Fair calibration quality. |
Good | 3 | Good calibration quality. |
Excellent | 4 | Excellent calibration quality. |
Scan data descriptor.
Field | Type | Label | Description |
---|---|---|---|
format | MF.V3.Settings.Export.Format | Export format. | |
extension | string | Export file extension. e.g. ".ply" | |
description | string | Export format description. e.g. "Polygon format" | |
faces | Export.Face | repeated | Types of supported faces. |
normals | bool | Vertex normal support. | |
colors | bool | Vertex color support. | |
textures | Export.Texture | Texture (UV) support. |
Geometry face types.
Name | Number | Description |
---|---|---|
NoFace | 0 | No faces. |
Point | 1 | Point faces. |
Line | 2 | Line faces. |
Triangle | 3 | Triangle faces. |
Quad | 4 | Quad faces. |
Texture support types.
Name | Number | Description |
---|---|---|
None | 0 | The format does not support textures. |
Single | 1 | The format supports a single texture only. |
Multiple | 2 | The format supports multiple textures. |
Image descriptor.
Field | Type | Label | Description |
---|---|---|---|
width | int32 | Image width. | |
height | int32 | Image height. | |
step | int32 | Image row step in bytes. | |
type | int32 | OpenCV image type. |
Merge descriptor.
Field | Type | Label | Description |
---|---|---|---|
scans | uint32 | The number of input scans. | |
textures | uint32 | The number of input textures. | |
maxSimplifyCount | uint32 | The maximum number of faces for the simplify merge step. | |
meshes | Merge.Mesh | repeated | The set of merged mesh descriptors. |
Mesh descriptor.
Field | Type | Label | Description |
---|---|---|---|
name | string | The mesh name. | |
triangles | uint32 | Number of mesh triangle faces. | |
quads | uint32 | Number of quad faces. | |
positions | uint32 | Number of vertex positions. | |
normals | uint32 | Number of vertex normals. | |
uvs | uint32 | Number of UV coordinates. | |
size | uint32 | Total mesh size in bytes. |
Network interface descriptor.
Field | Type | Label | Description |
---|---|---|---|
name | string | The name of the interface. | |
ip | string | The address associated with the interface. | |
ssid | string | The ssid or name of the network. |
V3 project descriptor.
Field | Type | Label | Description |
---|---|---|---|
index | int32 | Project index. | |
name | string | Project name. | |
groups | Project.Group |
V3 project brief descriptor.
Field | Type | Label | Description |
---|---|---|---|
index | int32 | Project index. | |
name | string | Project name. | |
size | uint64 | Size in bytes. | |
modified | int32 | repeated | Project last modified date and time [year, month, day, hour, minute, second]. |
V3 project scan group tree descriptor.
Field | Type | Label | Description |
---|---|---|---|
index | int32 | Group index. | |
name | string | Group name. | |
color | float | repeated | Color in the renderer. |
visible | bool | Visibility in the renderer. | |
collapsed | bool | Collapsed state in the group tree. | |
rotation | double | repeated | Axis-angle rotation vector. The direction of the vector is the rotation axis. The magnitude of the vector is rotation angle in radians. |
translation | double | repeated | Translation vector. |
scan | int32 | optional | The scan index. If defined this group is a scan and cannot have subgroups. |
groups | Project.Group | repeated | Subgroups. |
Descriptor for a project undo/redo action.
Field | Type | Label | Description |
---|---|---|---|
task | string | The original websocket task that the action is undoing or redoing. | |
project | Project | optional | The updated project data after undo or redo. If undefined, then there was no change to the project. |
scans | ProjectAction.Scan | repeated | The list of scans whose vertex/triangle elements were changed by the undo/redo action. |
Scan vertices removal/insertion metadata.
Field | Type | Label | Description |
---|---|---|---|
index | int32 | The scan index. | |
vertices | int32 | The number of vertices after undo or redo. | |
triangles | int32 | The number of triangles after undo or redo. |
Project undo and redo action descriptors.
Field | Type | Label | Description |
---|---|---|---|
undo | string | repeated | Project undo action descriptors. |
redo | string | repeated | Project redo action descriptors. |
Scan data descriptor.
Field | Type | Label | Description |
---|---|---|---|
index | int32 | Scan index. | |
name | string | Scan name. | |
buffers | ScanData.Buffer | repeated | Scan buffer descriptors. |
mean | float | repeated | The mean (centroid) of the vertex positions. |
stddev | float | repeated | The standard deviation of the vertex positions. |
axisAlignedBoundingBox | float | repeated | The axis-aligned bounding box of the vertex positions. |
Scan buffer descriptor.
Field | Type | Label | Description |
---|---|---|---|
components | ScanData.Buffer.Component | repeated | Scan buffer components. |
stride | int32 | Scan buffer stride. This should be greater or equal to the sum of the component sizes. |
Scan buffer component descriptor.
Field | Type | Label | Description |
---|---|---|---|
type | ScanData.Buffer.Component.Type | Scan buffer component type. | |
size | int32 | Scan buffer component size (ie. the number of elements). | |
offset | int32 | Scan buffer component offset. This is the starting element for this component at every stride of the buffer. | |
normalized | bool | Indicates if the data is normalized. |
Scan buffer component types.
Name | Number | Description |
---|---|---|
Position | 0 | Vertex position. |
Normal | 1 | Vertex normal. |
Color | 2 | Vertex color. |
UV | 3 | Vertex texture coordinate. |
Triangle | 4 | Triangle index. |
Texture | 5 | Texture. |
Advanced settings descriptor.
Field | Type | Label | Description |
---|---|---|---|
capture | Advanced.Capture | Capture settings descriptor. | |
sampling | Advanced.Sampling | Sampling settings descriptor. | |
edgeDetection | Advanced.EdgeDetection | Edge detection settings descriptor. | |
phaseFilter | Advanced.PhaseFilter | Phase filter settings descriptor. | |
adaptiveSampling | Advanced.AdaptiveSampling | Adaptive sampling settings descriptor. | |
normalEstimation | Advanced.NormalEstimation | Normal estimation settings descriptor. | |
outlierRemoval | Advanced.OutlierRemoval | Outlier removal settings descriptor. | |
remesh | Advanced.Remesh | Remesh settings descriptor. |
Adaptive sampling settings descriptor.
Field | Type | Label | Description |
---|---|---|---|
use | Advanced.Use | ||
type | Advanced.AdaptiveSampling.Type | ||
rate | Advanced.AdaptiveSampling.Rate |
Field | Type | Label | Description |
---|---|---|---|
value | float | ||
default | float | ||
min | float | ||
max | float |
Field | Type | Label | Description |
---|---|---|---|
value | MF.V3.Settings.Scan.Processing.AdaptiveSampling.Type | ||
default | MF.V3.Settings.Scan.Processing.AdaptiveSampling.Type |
Capture settings descriptor.
Field | Type | Label | Description |
---|---|---|---|
use | Advanced.Use | ||
horizontalFrequencies | Advanced.Capture.HorizontalFrequencies | ||
verticalFrequencies | Advanced.Capture.VerticalFrequencies |
Field | Type | Label | Description |
---|---|---|---|
value | int32 | repeated | |
default | int32 | repeated | |
min | int32 | ||
max | int32 |
Field | Type | Label | Description |
---|---|---|---|
value | int32 | repeated | |
default | int32 | repeated | |
min | int32 | ||
max | int32 |
Edge detection settings descriptor.
Field | Type | Label | Description |
---|---|---|---|
use | Advanced.Use | ||
threshold | Advanced.EdgeDetection.Threshold | ||
laplacianKernelRadius | Advanced.EdgeDetection.LaplacianKernelRadius | ||
gaussianBlurRadius | Advanced.EdgeDetection.GaussianBlurRadius | ||
gaussianBlurStdDev | Advanced.EdgeDetection.GaussianBlurStdDev | ||
maximumWidthForProcessing | Advanced.EdgeDetection.MaximumWidthForProcessing |
Field | Type | Label | Description |
---|---|---|---|
value | int32 | ||
default | int32 | ||
min | int32 | ||
max | int32 |
Field | Type | Label | Description |
---|---|---|---|
value | float | ||
default | float | ||
min | float | ||
max | float |
Field | Type | Label | Description |
---|---|---|---|
value | int32 | ||
default | int32 | ||
min | int32 | ||
max | int32 |
Field | Type | Label | Description |
---|---|---|---|
value | int32 | ||
default | int32 | ||
min | int32 | ||
max | int32 |
Field | Type | Label | Description |
---|---|---|---|
value | float | ||
default | float | ||
min | float | ||
max | float |
Normal estimation settings descriptor.
Field | Type | Label | Description |
---|---|---|---|
use | Advanced.Use | ||
method | Advanced.NormalEstimation.Method | ||
maximumNeighbourCount | Advanced.NormalEstimation.MaximumNeighbourCount | ||
maximumNeighbourRadius | Advanced.NormalEstimation.MaximumNeighbourRadius | ||
useMaximumNeighbourCount | Advanced.NormalEstimation.UseMaximumNeighbourCount | ||
useMaximumNeighbourRadius | Advanced.NormalEstimation.UseMaximumNeighbourRadius |
Field | Type | Label | Description |
---|---|---|---|
value | int32 | ||
default | int32 | ||
min | int32 | ||
max | int32 |
Field | Type | Label | Description |
---|---|---|---|
value | float | ||
default | float | ||
min | float | ||
max | float |
Field | Type | Label | Description |
---|---|---|---|
value | MF.V3.Settings.Scan.Processing.NormalEstimation.Method | ||
default | MF.V3.Settings.Scan.Processing.NormalEstimation.Method |
Field | Type | Label | Description |
---|---|---|---|
value | bool | ||
default | bool |
Field | Type | Label | Description |
---|---|---|---|
value | bool | ||
default | bool |
Outlier removal settings descriptor.
Field | Type | Label | Description |
---|---|---|---|
use | Advanced.Use | ||
neighbourCount | Advanced.OutlierRemoval.NeighbourCount | ||
neighbourRadius | Advanced.OutlierRemoval.NeighbourRadius |
Field | Type | Label | Description |
---|---|---|---|
value | int32 | ||
default | int32 | ||
min | int32 | ||
max | int32 |
Field | Type | Label | Description |
---|---|---|---|
value | float | ||
default | float | ||
min | float | ||
max | float |
Phase filter settings descriptor.
Field | Type | Label | Description |
---|---|---|---|
use | Advanced.Use | ||
kernelRadius | Advanced.PhaseFilter.KernelRadius | ||
spatialWeightStdDev | Advanced.PhaseFilter.SpatialWeightStdDev |
Field | Type | Label | Description |
---|---|---|---|
value | int32 | ||
default | int32 | ||
min | int32 | ||
max | int32 |
Field | Type | Label | Description |
---|---|---|---|
value | float | ||
default | float | ||
min | float | ||
max | float |
Remesh settings descriptor.
Field | Type | Label | Description |
---|---|---|---|
use | Advanced.Use | ||
voxelSize | Advanced.Remesh.VoxelSize | ||
depth | Advanced.Remesh.Depth | ||
scale | Advanced.Remesh.Scale | ||
linearInterpolation | Advanced.Remesh.LinearInterpolation |
Field | Type | Label | Description |
---|---|---|---|
value | int32 | ||
default | int32 | ||
min | int32 | ||
max | int32 |
Field | Type | Label | Description |
---|---|---|---|
value | bool | ||
default | bool |
Field | Type | Label | Description |
---|---|---|---|
value | float | ||
default | float | ||
min | float | ||
max | float |
Field | Type | Label | Description |
---|---|---|---|
value | float | ||
default | float | ||
min | float | ||
max | float |
Sampling settings descriptor.
Field | Type | Label | Description |
---|---|---|---|
use | Advanced.Use | Use sampling settings. | |
projectorSampleRate | Advanced.Sampling.ProjectorSampleRate | ||
imageSampleRate | Advanced.Sampling.ImageSampleRate |
Field | Type | Label | Description |
---|---|---|---|
value | float | ||
default | float | ||
min | float | ||
max | float |
Field | Type | Label | Description |
---|---|---|---|
value | float | ||
default | float | ||
min | float | ||
max | float |
Use advanced settings.
Field | Type | Label | Description |
---|---|---|---|
value | bool | ||
default | bool |
Camera settings descriptor.
Field | Type | Label | Description |
---|---|---|---|
autoExposure | Camera.AutoExposure | Auto exposure. | |
exposure | Camera.Exposure | Exposure. | |
analogGain | Camera.AnalogGain | Analog gain. | |
digitalGain | Camera.DigitalGain | Digital gain. | |
focus | Camera.Focus | Focus settings descriptor. |
Analog gain.
Field | Type | Label | Description |
---|---|---|---|
value | float | ||
default | float | ||
min | float | ||
max | float |
Auto exposure.
Field | Type | Label | Description |
---|---|---|---|
value | bool | ||
default | bool |
Digital gain.
Field | Type | Label | Description |
---|---|---|---|
value | int32 | ||
default | int32 | ||
min | int32 | ||
max | int32 |
Exposure.
Field | Type | Label | Description |
---|---|---|---|
value | int32 | ||
default | int32 | ||
min | int32 | ||
max | int32 |
Focus settings descriptor.
Field | Type | Label | Description |
---|---|---|---|
value | Camera.Focus.Value | Focus value. | |
box | Camera.Focus.Box | Auto focus box. |
Auto focus box.
Field | Type | Label | Description |
---|---|---|---|
value | MF.V3.Settings.Rectangle | repeated | |
default | MF.V3.Settings.Rectangle | repeated |
Focus value.
Field | Type | Label | Description |
---|---|---|---|
value | int32 | repeated | |
default | int32 | repeated | |
min | int32 | ||
max | int32 |
Capture settings descriptor.
Field | Type | Label | Description |
---|---|---|---|
quality | Capture.Quality | Capture quality preset. | |
texture | Capture.Texture | Capture texture. |
Capture quality preset.
Field | Type | Label | Description |
---|---|---|---|
value | MF.V3.Settings.Quality | ||
default | MF.V3.Settings.Quality |
Capture texture.
Field | Type | Label | Description |
---|---|---|---|
value | bool | ||
default | bool |
I18n language settings descriptor.
Field | Type | Label | Description |
---|---|---|---|
language | I18n.Language | Language settings descriptor. |
Language settings descriptor.
Field | Type | Label | Description |
---|---|---|---|
value | MF.V3.Settings.I18n.Language | ||
default | MF.V3.Settings.I18n.Language |
Projector settings descriptor.
Field | Type | Label | Description |
---|---|---|---|
brightness | Projector.Brightness | Projector brightness. | |
on | Projector.On | Projector on/off. |
Projector brightness.
Field | Type | Label | Description |
---|---|---|---|
value | float | ||
default | float | ||
min | float | ||
max | float |
Projector on/off.
Field | Type | Label | Description |
---|---|---|---|
value | bool | ||
default | bool |
Scanner settings descriptor.
Field | Type | Label | Description |
---|---|---|---|
advanced | Advanced | Advanced settings descriptor. | |
camera | Camera | Camera settings descriptor. | |
capture | Capture | Capture settings descriptor. | |
projector | Projector | Projector settings descriptor. | |
i18n | I18n | Internalization setting descriptor. | |
style | Style | Style settings descriptor. | |
turntable | Turntable | Turntable settings descriptor. | |
tutorials | Tutorials | Tutorials settings descriptor. | |
viewer | Viewer | Viewer settings descriptor. |
Style settings descriptor.
Field | Type | Label | Description |
---|---|---|---|
theme | Style.Theme | Theme settings descriptor. |
Theme settings descriptor.
Field | Type | Label | Description |
---|---|---|---|
value | MF.V3.Settings.Style.Theme | ||
default | MF.V3.Settings.Style.Theme |
Turntable settings descriptor.
Field | Type | Label | Description |
---|---|---|---|
steps | Turntable.Steps | The number of turntable steps. | |
sweep | Turntable.Sweep | Turntable angle sweep in degrees. | |
use | Turntable.Use | Use the turntable. |
The number of turntable steps.
Field | Type | Label | Description |
---|---|---|---|
value | int32 | ||
default | int32 | ||
min | int32 | ||
max | int32 |
Turntable angle sweep in degrees.
Field | Type | Label | Description |
---|---|---|---|
value | int32 | ||
default | int32 | ||
min | int32 | ||
max | int32 |
Use the turntable.
Field | Type | Label | Description |
---|---|---|---|
value | bool | ||
default | bool |
Tutorials settings descriptor.
Field | Type | Label | Description |
---|---|---|---|
show | Tutorials.Show | Show tutorials. | |
viewed | Tutorials.Viewed | Viewed tutorials. |
Tutorials to show.
Field | Type | Label | Description |
---|---|---|---|
value | bool | ||
default | bool |
Viewed tutorials.
Field | Type | Label | Description |
---|---|---|---|
pages | Tutorials.Viewed.Pages | Viewed tutorials pages. |
Viewed tutorials pages.
Field | Type | Label | Description |
---|---|---|---|
value | string | repeated | |
default | string | repeated |
3D Viewer settings descriptor.
Field | Type | Label | Description |
---|---|---|---|
textureOpacity | Viewer.TextureOpacity | Texture opacity. |
Texture opacity.
Field | Type | Label | Description |
---|---|---|---|
value | float | ||
default | float | ||
min | float | ||
max | float |
System descriptor.
Field | Type | Label | Description |
---|---|---|---|
serialNumber | string | Serial number; | |
diskSpace | System.DiskSpace | Used and available disk space. | |
software | System.Software | Software descriptor. |
Disk space descriptor.
Field | Type | Label | Description |
---|---|---|---|
capacity | uint64 | Disk space capacity in bytes. | |
available | uint64 | Available disk space in bytes. |
Software descriptor.
Field | Type | Label | Description |
---|---|---|---|
installed | System.Software.Package | repeated | Installed software versions. |
available | System.Software.Package | repeated | Available software versions. |
Software package descriptor.
Field | Type | Label | Description |
---|---|---|---|
name | MF.V3.Settings.Software.Package | The package name. | |
version | System.Software.Version | The package version. |
Software version descriptor.
Field | Type | Label | Description |
---|---|---|---|
major | int32 | The major version. | |
minor | int32 | The minor version. | |
patch | int32 | The patch version. | |
suffix | string | The alphanumeric suffix. e.g. "rc0" | |
string | string | The version string. e.g. "1.2.3-rc0" |
V3 transform descriptor.
Field | Type | Label | Description |
---|---|---|---|
rotation | double | repeated | Axis-angle rotation vector. The direction of the vector is the rotation axis. The magnitude of the vector is rotation angle in radians. |
translation | double | repeated | Translation vector. |
Video frame descriptor.
Field | Type | Label | Description |
---|---|---|---|
codec | MF.V3.Settings.Video.Codec | Video codec. | |
format | MF.V3.Settings.Video.Format | Pixel format. | |
width | int32 | Image width. | |
height | int32 | Image height. | |
step | int32 | Image row step in bytes. | |
number | int64 | Frame number. | |
timestamp | uint64 | Frame timestamp. | |
duration | uint64 | Frame duration. | |
calibrationCard | Calibration.DetectedCard | Calibration card detection. |
The wifi descriptor.
Field | Type | Label | Description |
---|---|---|---|
ssid | string | The wifi ssid. | |
networks | Wifi.Network | repeated | The list of wifi networks. |
The wifi network descriptor.
Field | Type | Label | Description |
---|---|---|---|
ssid | string | The service set identifier. | |
isPublic | bool | Is the network public? | |
isActive | bool | Is the network active? | |
password | string | optional | The network password. |
quality | int32 | optional | Signal quality [0 ; 100]. |
Advanced settings.
Field | Type | Label | Description |
---|---|---|---|
capture | Advanced.Capture | optional | Capture settings. |
sampling | Advanced.Sampling | optional | Sampling settings. |
edgeDetection | Advanced.EdgeDetection | optional | Edge detection settings. |
phaseFilter | Advanced.PhaseFilter | optional | Phase filter settings. |
adaptiveSampling | Advanced.AdaptiveSampling | optional | Adaptive sampling settings. |
normalEstimation | Advanced.NormalEstimation | optional | Normal estimation settings. |
outlierRemoval | Advanced.OutlierRemoval | optional | Radius outlier removal settings. |
remesh | Advanced.Remesh | optional | Remesh settings. |
Adaptive sampling settings
Adaptive sampling will downsample points in regions of low detail and keep points in regions of high detail.
Field | Type | Label | Description |
---|---|---|---|
type | Scan.Processing.AdaptiveSampling.Type | optional | Sampling type. |
rate | float | The sample rate [0..1] for the regions of low detail. | |
use | bool | optional | Use the adaptive sampling settings. |
Capture settings.
Field | Type | Label | Description |
---|---|---|---|
horizontalFrequencies | int32 | repeated | Projector sample rate. |
verticalFrequencies | int32 | repeated | Image sample rate. |
use | bool | optional | Use the capture settings. |
Edge detection settings.
Field | Type | Label | Description |
---|---|---|---|
threshold | float | optional | The edge detection threshold. |
laplacianKernelRadius | int32 | optional | The Laplacian kernel radius. This must be in the range [1..5]. |
gaussianBlurRadius | int32 | optional | Gaussian blur kernel radius. (Optional) To disable, set to 0. |
The phase images can optionally blurred before taking the Laplacian to reduce noise. However as a result, the detected edges are wider. | | gaussianBlurStdDev | float | optional | Gaussian blur kernel standard deviation. This parameter is ignored if \p gaussianBlurSize is zero. | | maximumWidthForProcessing | int32 | optional | The maximum image width for processing. (Optional) To disable, set to 0.
If this value is greater than zero, the phase images are resized to the maximum width prior to computing the Laplacian and the the detected edges are then upsampled to the original size.
This would be done to speed up processing or to detect edges on a larger scale. | | use | bool | optional | Use the edge detection settings. |
Normal estimation settings.
Field | Type | Label | Description |
---|---|---|---|
method | Scan.Processing.NormalEstimation.Method | optional | Normal estimation method. |
maximumNeighbourCount | int32 | optional | Maximum number of nearest neighbors used to compute the normal. This value is only used with the NORMAL_OPEN3D method. |
maximumNeighbourRadius | float | optional | Maximum radius for a point32 to be considered a neighbour. |
useMaximumNeighbourCount | bool | optional | |
useMaximumNeighbourRadius | bool | optional | |
use | bool | optional | Use the normal estimation settings. |
Radius outlier removal settings.
Field | Type | Label | Description |
---|---|---|---|
neighbourCount | int32 | optional | The minimum number of points within the radius for a point32 to be retained. |
neighbourRadius | float | optional | The neighbour search radius. |
use | bool | optional | Use the outlier removal settings. |
Phase filter settings.
Field | Type | Label | Description |
---|---|---|---|
kernelRadius | int32 | optional | The filter kernel radius. |
A neighboring value must be within this radius to be included in the filter. If the kernel radius is set to zero, the phase filtering is disabled. | | spatialWeightStdDev | float | optional | The standard deviation of the spatial weights.
The weight of a neighboring value is \f$ exp(-(r/s)^2) \f$ where \f$ r \f$ is the distance to the central value and \f$ s \f$ is the spatial weight standard deviation.
If the spatial weight standard deviation is set to zero, all the spatial weights are uniformly set to 1. | | use | bool | optional | Use the phase filter settings. |
Point32 clipping settings.
Field | Type | Label | Description |
---|---|---|---|
type | Scan.Processing.PointClipping.Type | optional | Point32 clipping type. |
transform | double | repeated | 4x4 transform mapping 3D points to the canonical point32 clipping coordinates. |
use | bool | optional | Use the point32 clipping settings. |
Remesh settings.
Field | Type | Label | Description |
---|---|---|---|
quality | Quality | optional | Remesh quality preset. |
voxelSize | float | optional | Voxel size. |
depth | int32 | optional | Depth. |
scale | float | optional | Scale. |
linearInterpolation | bool | optional | Linear Interpolation. |
use | bool | optional | Use the remesh settings. |
Sampling settings.
Field | Type | Label | Description |
---|---|---|---|
projectorSampleRate | float | optional | Projector sample rate. |
imageSampleRate | float | optional | Image sample rate. |
use | bool | optional | Use the sampling settings. |
Alignment settings.
Field | Type | Label | Description |
---|---|---|---|
source | int32 | Index of the scan or group to align. | |
target | int32 | Index of the scan or group to align to. | |
rough | Align.Rough | optional | Rough alignment settings. |
fine | Align.Fine | optional | Fine alignment settings. |
Fine alignment settings.
Field | Type | Label | Description |
---|---|---|---|
method | Align.Fine.Method | Fine alignment method. | |
icp | Align.ICP | optional | Iterative closest point settings. |
initialTransform | Align.Fine.Transform | optional | The initial transform for fine alignment. |
Field | Type | Label | Description |
---|---|---|---|
rotation | double | repeated | |
translation | double | repeated |
Iterative closest point alignment settings.
Field | Type | Label | Description |
---|---|---|---|
matchDistance | float | The maximum distance for two points to be considered a match. |
Point pair alignment settings.
Field | Type | Label | Description |
---|---|---|---|
points | float | repeated | The set of corresponding point pairs. |
absoluteError | float | optional | The maximum absolute error for a point pair to be an inlier to the model. |
relativeError | float | optional | The maximum error relative to the size of the aligned scans for a point pair to be an inlier to the model. |
useAllPoints | bool | optional | Ignore alignment errors and use all selected points for alignment. |
Ransac alignment settings.
Field | Type | Label | Description |
---|---|---|---|
downsampleVoxelSize | float | optional | |
maximumFeatureRadius | float | optional | |
maximumFeaturePointCount | int32 | optional | |
maximumMatchDistance | float | optional | |
minimumMatchSimilarity | float | optional | |
mutualFilter | bool | optional |
Rough alignment settings.
Field | Type | Label | Description |
---|---|---|---|
method | Align.Rough.Method | Rough alignment method. | |
ransac | Align.Ransac | optional | FastGlobal fastGlobal; |
points | Align.Points | optional | Point pair alignment settings. |
Fine alignment methods.
Name | Number | Description |
---|---|---|
None | 0 | No fine alignment. |
ICP | 1 | Iterative closest point alignment. |
Rough alignment methods.
Name | Number | Description |
---|---|---|
None | 0 | No rough alignment. |
FastGlobal | 1 | Fast global alignment. |
Ransac | 2 | Ransac alignment. |
Points | 3 | Point pair alignment. |
Auto focus settings.
Field | Type | Label | Description |
---|---|---|---|
cameras | AutoFocus.Camera | repeated | The set of cameras on which to apply auto focus. |
applyAll | bool | Apply the final focus value to both cameras. This setting is ignored if more than one camera is selected. |
Auto focus camera settings.
Field | Type | Label | Description |
---|---|---|---|
index | int32 | The index of the camera on which to apply auto focus. | |
box | Rectangle | optional | The image rectangle in video image pixels on which to apply auto focus. |
Bounding box settings.
Field | Type | Label | Description |
---|---|---|---|
selection | ScanSelection | The scan selection. | |
axisAligned | bool | If true , align the bounding box with the world axes. Otherwise orient the bounding box with the scans. |
Camera settings.
Field | Type | Label | Description |
---|---|---|---|
selection | int32 | repeated | Camera selection. Default is all cameras. |
autoExposure | bool | optional | Auto exposure. |
exposure | int32 | optional | Exposure. |
analogGain | float | optional | Analog gain. |
digitalGain | int32 | optional | Digital gain. |
focus | int32 | optional | Focus value. |
Capture settings.
Field | Type | Label | Description |
---|---|---|---|
quality | Quality | optional | Capture quality preset. |
texture | bool | optional | Capture texture. |
calibrationCard | bool | optional | Detect the calibration card. |
horizontalFrequencies | int32 | repeated | Horizontal pattern frequencies. |
verticalFrequencies | int32 | repeated | Vertical pattern frequencies. |
Export settings.
Field | Type | Label | Description |
---|---|---|---|
selection | ScanSelection | optional | The scan selection. |
texture | bool | optional | Export textures. |
merge | bool | optional | Merge the scans into a single file. |
format | Export.Format | optional | The export format. |
Scan export formats.
Name | Number | Description |
---|---|---|
ply | 0 | Polygon format. |
dae | 1 | Digital asset exchange format. |
fbx | 2 | Autodesk format. |
glb | 3 | GL transmission format. |
obj | 4 | Wavefront format. |
stl | 5 | Stereolithography format. |
xyz | 6 | Chemical format. |
Scan group settings.
Field | Type | Label | Description |
---|---|---|---|
index | int32 | The unique group index that identifies the group within the group tree. | |
name | string | optional | Group name. |
color | float | repeated | Color in the renderer. |
visible | bool | optional | Visibility in the renderer. |
collapsed | bool | optional | Collapsed state in the group tree. |
rotation | double | repeated | Axis-angle rotation vector. The direction of the vector is the rotation axis. The magnitude of the vector is rotation angle in radians. |
translation | double | repeated | Translation vector. |
I18n language settings.
Field | Type | Label | Description |
---|---|---|---|
language | I18n.Language | optional | The language setting. Supported languages are ["en", "fr", "de"]. |
Available languages.
Name | Number | Description |
---|---|---|
en | 0 | |
fr | 1 | |
de | 2 |
Scan merge settings.
Field | Type | Label | Description |
---|---|---|---|
selection | ScanSelection | optional | The scan selection. |
remesh | Merge.Remesh | optional | Remesh settings. |
simplify | Merge.Simplify | optional | Simplify settings. |
texturize | bool | optional | Apply textures to the merged mesh. |
Remesh settings.
Field | Type | Label | Description |
---|---|---|---|
method | Merge.Remesh.Method | optional | Remesh method. |
quality | Quality | optional | Remesh quality. |
fast | Merge.Remesh.Fast | optional | Fast remesh options (Ignored if method is 'Poison'). |
poisson | Merge.Remesh.Poisson | optional | Poisson remesh options (Ignored if method is not 'Poisson'). |
voxelSize | float | optional | Temporary for backwards compatibility Voxel size. |
depth | int32 | optional | Depth. |
scale | float | optional | Scale. |
linearInterpolation | bool | optional | Linear Interpolation. |
Fast remesh settings
Field | Type | Label | Description |
---|---|---|---|
scale | float | optional | Output resolution scale. Smaller means more faces. |
faceCount | int32 | optional | The approximate number of remeshed faces. |
vertexCount | int32 | optional | The approximate number of remeshed vertices. |
creaseAngleThreshold | float | optional | The crease angle threshold. |
extrinsicSmoothness | bool | optional | Use extrinsic smoothness. |
alignToBoundaries | bool | optional | Align mesh to boundaries. |
smoothIterations | int32 | optional | The number of smoothing iterations. |
knnPoints | int32 | optional | The number of KNN points (point cloud input only). |
deterministic | bool | optional | Use deterministic (repeatable) remeshing. |
Field | Type | Label | Description |
---|---|---|---|
voxelSize | float | optional | Voxel size. |
depth | int32 | optional | Depth. |
scale | float | optional | Scale. |
linearInterpolation | bool | optional | Linear Interpolation. |
Simplify settings.
Field | Type | Label | Description |
---|---|---|---|
triangleCount | int32 | Target triangle count. |
Remesh method.
Name | Number | Description |
---|---|---|
FastTriangles | 0 | Fast remesh as triangles. |
FastQuads | 1 | Fast remesh as quads. |
FastQuadDominant | 2 | Fast remesh as quad-dominant mesh. |
PoissonTriangles | 3 | Poisson remesh as triangles. |
Scan group settings.
Field | Type | Label | Description |
---|---|---|---|
parentIndex | int32 | optional | The index of the parent group in which the new group is created. If unspecified the new group is added to the root of the group tree. |
baseName | string | optional | Group base name. The new group name will start with the base name followed by a unique index number chosen by the backend. |
color | float | repeated | Group color. |
visible | bool | optional | Group visibility. |
collapsed | bool | optional | Collapsed state in the group tree. |
rotation | double | repeated | Group axis-angle rotation vector. The direction of the vector is the rotation axis. The magnitude of the vector is rotation angle in radians. |
translation | double | repeated | Group translation vector. |
Project settings.
Field | Type | Label | Description |
---|---|---|---|
name | string | optional | Project name. |
Projector settings.
Field | Type | Label | Description |
---|---|---|---|
on | bool | optional | Projector on/off. |
brightness | float | optional | Projector brightness. |
pattern | Projector.Pattern | optional | Structured light pattern. |
image | Projector.Image | optional | Image to project |
color | float | repeated | Solid color |
Projector image settings
Field | Type | Label | Description |
---|---|---|---|
source | Projector.Image.Source | Image source. | |
target | Rectangle | Image target rectangle. |
Image source.
Field | Type | Label | Description |
---|---|---|---|
format | Video.Format | Source image format | |
width | int32 | Source image width. | |
height | int32 | Source image height. | |
step | int32 | Source image step in bytes. | |
fixAspectRatio | bool | Fix the source aspect ratio to the target rectangle. |
Structured light pattern.
Field | Type | Label | Description |
---|---|---|---|
orientation | Projector.Orientation | Pattern orientation. | |
frequency | int32 | Pattern frequency index. [0 - 8] | |
phase | int32 | Pattern phase. [0 - 2] |
Pattern orientation.
Name | Number | Description |
---|---|---|
Horizontal | 0 | Horizontal pattern. Image columns are identical. |
Vertical | 1 | Vertical pattern. Image rows are identical. |
Quality settings.
Name | Number | Description |
---|---|---|
Low | 0 | Low quality. |
Medium | 1 | Medium quality. |
High | 2 | High quality. |
Rectangle settings.
Field | Type | Label | Description |
---|---|---|---|
x | int32 | Rectangle x offset. | |
y | int32 | Rectangle y offset. | |
width | int32 | Rectangle width. | |
height | int32 | Rectangle height. |
Field aligned remesh settings.
Field | Type | Label | Description |
---|---|---|---|
scan | int32 | The scan index. | |
type | Remesh.Type | optional | The type of output mesh. |
scale | float | optional | Scale |
faceCount | int32 | optional | The approximate number of remeshed faces. |
vertexCount | int32 | optional | The approximate number of remeshed vertices. |
creaseAngleThreshold | float | optional | The crease angle threshold. |
extrinsicSmoothness | bool | optional | Use extrinsic smoothness. |
alignToBoundaries | bool | optional | Align mesh to boundaries. |
smoothIterations | int32 | optional | The number of smoothing iterations. |
knnPoints | int32 | optional | The number of KNN points (point cloud input only). |
deterministic | bool | optional | Use deterministic (repeatable) remeshing. |
Types of remesh output.
Name | Number | Description |
---|---|---|
triangle | 0 | Triangle mesh output. |
quad | 1 | Quad mesh output. |
quadDominant | 2 | Quad-dominant mesh output. |
Scan settings.
Field | Type | Label | Description |
---|---|---|---|
camera | Camera | Camera settings. | |
projector | Projector | Projector settings. | |
turntable | Turntable | optional | Turntable settings. |
capture | Capture | Capture settings. | |
processing | Scan.Processing | optional | Processing settings. |
Scan processing settings.
Field | Type | Label | Description |
---|---|---|---|
projectorSampleRate | float | optional | Projector sample rate. |
imageSampleRate | float | optional | Image sample rate. |
edgeDetection | Scan.Processing.PhaseEdgeDetection | optional | Phase edge detection settings. |
phaseFilter | Scan.Processing.PhaseFilter | optional | Phase filter settings. |
adaptiveSampling | Scan.Processing.AdaptiveSampling | optional | Adaptive sampling settings. |
pointClipping | Scan.Processing.PointClipping | repeated | Point clipping settings. |
normalEstimation | Scan.Processing.NormalEstimation | optional | Normal estimation settings. |
outlierRemoval | Scan.Processing.OutlierRemoval | optional | Outlier removal settings. |
Adaptive sampling settings
Adaptive sampling will downsample points in regions of low detail and keep points in regions of high detail.
Field | Type | Label | Description |
---|---|---|---|
type | Scan.Processing.AdaptiveSampling.Type | Sampling type. | |
rate | double | The sample rate [0..1] for the regions of low detail. |
Normal estimation settings.
Field | Type | Label | Description |
---|---|---|---|
method | Scan.Processing.NormalEstimation.Method | Normal estimation method. | |
maximumNeighbourCount | int32 | Maximum number of nearest neighbors used to compute the normal. This value is only used with the NORMAL_OPEN3D method. | |
maximumNeighbourRadius | float | Maximum radius for a point to be considered a neighbour. | |
useMaximumNeighbourCount | bool | Use the maximum neighbour count. | |
useMaximumNeighbourRadius | bool | Use the maximum neighbour radius. |
Outlier removal settings.
Field | Type | Label | Description |
---|---|---|---|
neighbourCount | int32 | The minimum number of points within the radius for a point to be retained. | |
neighbourRadius | float | The neighbour search radius. |
Phase edge detection settings.
Phase edge detection produces a binary mask indicating the edges of a horizontal/vertical pair of phase images. Since flat geometries give a constant phase image gradient, we use the second derivative (Laplacian) of the phase image to detect edges rather than the gradient.
The edge mask generated by phase edge detection is an input to both phase filtering and adaptive sampling. If neither of these are enabled, the phase edge detection settings have no effect on the output point cloud.
Field | Type | Label | Description |
---|---|---|---|
threshold | double | The edge detection threshold. | |
laplacianKernelRadius | int32 | The Laplacian kernel radius. This must be in the range [1..5]. | |
gaussianBlurRadius | int32 | Gaussian blur kernel radius. (Optional) To disable, set to 0. The phase images can optionally blurred before taking the Laplacian to reduce noise. However as a result, the detected edges are wider. | |
gaussianBlurStdDev | double | Gaussian blur kernel standard deviation. This parameter is ignored if gaussianBlurSize is zero. |
|
maximumWidthForProcessing | int32 | The maximum image width for processing. (Optional) To disable, set to 0. If this value is greater than zero, the phase images are resized to the maximum width prior to computing the Laplacian and the the detected edges are then upsampled to the original size. This would be done to speed up processing or to detect edges on a larger scale. |
Phase filter settings.
Field | Type | Label | Description |
---|---|---|---|
kernelRadius | int32 | The filter kernel radius. A neighboring value must be within this radius to be included in the filter. If the kernel radius is set to zero, the phase filtering is disabled. | |
spatialWeightStdDev | double | The standard deviation of the spatial weights. The weight of a neighboring value is |
Point clipping settings.
Field | Type | Label | Description |
---|---|---|---|
type | Scan.Processing.PointClipping.Type | Point clipping type. | |
transform | double | repeated | 4x4 transform mapping 3D points to the canonical point clipping coordinates. |
Name | Number | Description |
---|---|---|
NONE | 0 | Do not use adaptive sampling. |
REGULAR | 1 | Use a regular sampling mask in regions of low detail. |
RANDOM | 2 | Use a random sampling mask in regions of low detail. |
Name | Number | Description |
---|---|---|
NORMAL_LLS | 0 | Linear least squares method |
NORMAL_OPEN3D | 1 | Open3D method using KD tree search for nearest neighbors |
Point clipping type.
Name | Number | Description |
---|---|---|
OutsideCube | 0 | Clip points outside a unit cube. |
OutsideCylinder | 1 | Clip points outside a unit cylinder. |
OutsideSphere | 2 | Clip points outside a unit sphere. |
InsideCube | 3 | Clip points inside a unit cube. |
InsideCylinder | 4 | Clip points inside a unit cylinder. |
InsideSphere | 5 | Clip points inside a unit sphere. |
Scan data request.
Field | Type | Label | Description |
---|---|---|---|
index | int32 | Requested index of the scan in the current open project. | |
mergeStep | ScanData.MergeStep | optional | The merge process step if requesting merge data. |
buffers | ScanData.Buffer | repeated | Requested scan buffers. |
metadata | ScanData.Metadata | repeated | Requested scan metadata. |
Scan buffer type.
Name | Number | Description |
---|---|---|
Position | 0 | Vertex position. |
Normal | 1 | Vertex normal. |
Color | 2 | Vertex color. |
UV | 3 | Vertex UVs |
Triangle | 4 | Triangle index. |
Texture | 5 | Texture. |
All | 6 | All buffer types. |
The merge processing step.
Name | Number | Description |
---|---|---|
Combined | 0 | The scan meshes are simply combined into a single mesh. |
Remeshed | 1 | The combined mesh is remeshed to give a single geometric surface. |
Simplified | 2 | The combined or remeshed mesh is simplified to a reduced number of triangles. |
Textured | 3 | The merged mesh has been textured. |
Scan metadata type.
Name | Number | Description |
---|---|---|
Mean | 0 | The mean (centroid) of the vertex positions. |
StdDev | 1 | The standard deviation of the vertex positions. |
AxisAlignedBoundingBox | 2 | The axis-aligned bounding box of the vertex positions. |
Scan selection.
Field | Type | Label | Description |
---|---|---|---|
mode | ScanSelection.Mode | The scan selection mode. | |
groups | int32 | repeated | The set of user-selected groups. These are only used if the selection mode is 'selected'. |
Scan selection mode.
Name | Number | Description |
---|---|---|
selected | 0 | Select user-selected groups. |
visible | 1 | Select visible scans. |
all | 2 | Select all scans. |
Scanner settings.
Field | Type | Label | Description |
---|---|---|---|
advanced | Advanced | optional | Advanced settings. |
camera | Camera | optional | Camera settings. |
capture | Capture | optional | Capture settings. |
i18n | I18n | optional | I18n settings. |
projector | Projector | optional | Projector settings. |
style | Style | optional | Style settings. |
turntable | Turntable | optional | Turntable settings. |
tutorials | Tutorials | optional | Tutorials settings. |
viewer | Viewer | optional | Viewer settings. |
V3 software settings.
Field | Type | Label | Description |
---|---|---|---|
installed | Software.Package | repeated | Request installed software packages. If undefined all installed packages are returned. |
available | Software.Package | repeated | Request available software packages. If undefined all available packages are returned. |
Software package types.
Name | Number | Description |
---|---|---|
server | 0 | The server software package. |
frontend | 1 | The frontend software package. |
Style settings.
Field | Type | Label | Description |
---|---|---|---|
theme | Style.Theme | optional | Theme setting. |
Themes.
Name | Number | Description |
---|---|---|
Light | 0 | Light mode. |
Dark | 1 | Dark mode. |
Turntable settings.
Field | Type | Label | Description |
---|---|---|---|
use | bool | optional | Use the turntable. |
steps | int32 | The number of turntable steps. | |
sweep | int32 | Turntable angle sweep in degrees. |
Tutorials settings.
Field | Type | Label | Description |
---|---|---|---|
show | bool | optional | Show tutorials. |
viewed | Tutorials.Viewed | optional | Viewed tutorials. |
Viewed tutorials.
Field | Type | Label | Description |
---|---|---|---|
pages | string | repeated | Viewed tutorials pages. |
Video settings.
Field | Type | Label | Description |
---|---|---|---|
codec | Video.Codec | Video codec. | |
format | Video.Format | Pixel format. | |
width | int32 | Image width. | |
height | int32 | Image height. |
Video codecs.
Name | Number | Description |
---|---|---|
NoCodec | 0 | No codec specified. |
RAW | 1 | Raw encoding. |
JPEG | 2 | JPEG encoding. |
H264 | 3 | H264 encoding. |
Pixel formats.
Name | Number | Description |
---|---|---|
NoFormat | 0 | No format specified. |
RGB565 | 1 | RGB565 16-bit |
RGB888 | 2 | RGB888 24-bit. |
BGR888 | 3 | BGR888 24-bit. |
YUV420 | 4 | YUV 420 planar. |
3D Viewer settings.
Field | Type | Label | Description |
---|---|---|---|
textureOpacity | float | optional | Texture opacity. |
Wifi connection settings.
Field | Type | Label | Description |
---|---|---|---|
ssid | string | The wifi ssid. | |
password | string | The wifi password. |
Generic task message for the Three Scanner.
The task message is the generic message used for requesting a task of the Three Scanner and receiving updates and results.
Example: Apply camera settings with the "SetCameras" task.
> Example request:
{
"Task":{
"Index":1,
"Type":"SetCameras"
"Input":{
"analogGain":256,
"digitalGain":128,
"exposure":18000
},
}
}
> Example response:
{
"Task":{
"Index":1,
"Type":"SetCameras"
"Input":{
"analogGain":256,
"digitalGain":512,
"exposure":18000
},
"Output":{
"analogGain":{"default":512.0,"max":1024.0,"min":256.0,"value":256.0},
"digitalGain":{"default":256,"max":65536,"min":256,"value":512},
"exposure":{"default":27000,"max":90000,"min":9000,"value":18000},
},
"State":"Completed"
}
}
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | A unique identifier generated by the client. This identifier associates all incoming and outgoing task messages with a specific task requested by the client. | |
Type | string | The string identifying the task type. See task definitions for the list of valid task strings. | |
Input | googlebuf.Any | optional | Optional input message. See each task definition for details. |
Output | googlebuf.Any | optional | Optional output message. See each task definition for details. |
State | TaskState | optional | The current state of the task. |
Error | string | optional | A string describing the error if the task has failed. |
Name | Number | Description |
---|---|---|
None | 0 | The task state is not defined. |
Sent | 1 | The task has been sent by the client. |
Received | 2 | The task has been received by the server. |
Started | 3 | The task started by the server. |
Completed | 4 | The task is completed by the server. |
Cancelled | 5 | The task has been cancelled by the client. |
Failed | 6 | The task has failed. A string describing the error is returned with the task. |
Dropped | 7 | The task has not been received by the server, or task IDs were sent out of sequence. |
Disconnected | 8 | The client has been disconnected from the server before the task could finish. |
Add a merged scan to the current project.
> Request example:
{
"Task":{
"Index":1,
"Type":"AddMergeToProject"
}
}
> Response example:
{
"Task":{
"Index":1,
"Type":"AddMergeToProject",
"Output":{
"groups":[
{
"index":1,
"name":"Scan-1",
"scan": 1,
"color":[0.5, 0.8, 0.3]
}
]
},
"State":"Completed"
}
}
Client request for the AddMergeToProject
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | A unique identifier generated by the client. | |
Type | string | "AddMergeToProject" |
Server response for the AddMergeToProject
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | The unique identifier generated by the client. | |
Type | string | "AddMergeToProject" | |
Output | Descriptors.Project.Group | The root scan group in the current open project. | |
State | TaskState | optional | The current state of the task. |
Error | string | optional | A string describing the error if the task has failed. |
Align two scan groups.
> Request example:
{
"Task":{
"Index":1,
"Type":"Align",
"Input":{
"source":1,
"target":2,
"rough":{"method": "FastGlobal"},
"fine":{"method": "ICP"}
}
}
}
> Response example:
{
"Task":{
"Index":1,
"Type":"Align",
"Input":{
"source":1,
"target":2,
"rough":{"method": "FastGlobal"},
"fine":{"method": "ICP"}
},
"Output":{
"rotation":[0.2, 0.4, 0.6],
"translation":[11, -10, 24]
},
"State":"Completed"
}
}
Client request for the Align
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | A unique identifier generated by the client. | |
Type | string | "Align" | |
Input | Settings.Align | The align settings. |
Server response for the Align
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | The unique identifier generated by the client. | |
Type | string | "Align" | |
Input | Settings.Align | The requested align settings. | |
Output | Descriptors.Transform | The transform that aligns the source scan group to the target scan group. | |
State | TaskState | optional | The current state of the task. |
Error | string | optional | A string describing the error if the task has failed. |
Auto focus one or both cameras.
> Request example:
{
"Task":{
"Index":1,
"Type":"AutoFocus",
"Input":{
"cameras":[{
"index":1,
"box":{"x":196,"y":130,"width":64,"height":64}
}],
"applyAll":false
}
}
}
> Response example:
{
"Task":{
"Index":1,
"Type":"AutoFocus",
"Input":{
"cameras":[{
"index":1,
"box":{"x":196,"y":130,"width":64,"height":64}
}],
"applyAll":false
}
"Output":{
"analogGain":{"default":512.0,"max":1024.0,"min":256.0,"value":256.0},
"autoExposure":{"default":false,"value":true},
"digitalGain":{"default":256,"max":65536,"min":256,"value":320},
"exposure":{"default":27000,"max":90000,"min":9000,"value":18000},
"focus":{
"box":{
"default":[
{"height":64,"width":64,"x":224,"y":158},
{"height":64,"width":64,"x":224,"y":158}
],
"value":[
{"height":64,"width":64,"x":271,"y":134},
{"height":64,"width":64,"x":196,"y":130}
]
},
"value":{"default":[350,350],"max":1024,"min":0,"value":[396,392]}
}
},
"State":"Completed"
}
}
Client request for the AutoFocus
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | A unique identifier generated by the client. | |
Type | string | "AutoFocus" | |
Input | Settings.AutoFocus | optional | AutoFocus settings. |
Server response for the AutoFocus
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | The unique identifier generated by the client. | |
Type | string | "AutoFocus" | |
Input | Settings.AutoFocus | optional | Requested auto focus settings. |
Output | Descriptors.Settings.Camera | optional | Actual camera settings after auto focusing the camera(s). |
State | TaskState | optional | The current state of the task. |
Error | string | optional | A string describing the error if the task has failed. |
Get the bounding box of a set of scan groups.
> Request example:
{
"Task":{
"Index":1,
"Type":"BoundingBox",
"Input":{
"selection":{"mode":"visible"},
"axisAligned":false
}
}
}
> Response example:
{
"Task":{
"Index":1,
"Type":"BoundingBox",
"Input":{
"selection":{"mode":"visible"},
"axisAligned":false
},
"Output":{
"center":[11.9,-10.1,94.5],
"rotation":[
0.7, -0.7, 0.0,
0.7, 0.7, 0.0,
0.0, 0.0, 1.0],
"size":[442.2,253.1,447.1],
"transform":[
221, 0.0, 0.0, 11.9,
0.0, 126, 0.0, -10.1,
0.0, 0.0, 223, 94.5,
0.0, 0.0, 0.0, 1.0]
},
"State":"Completed"
}
}
Client request for the BoundingBox
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | A unique identifier generated by the client. | |
Type | string | "BoundingBox" | |
Input | Settings.BoundingBox | The bounding box settings. |
Server response for the BoundingBox
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | The unique identifier generated by the client. | |
Type | string | "BoundingBox" | |
Input | Settings.BoundingBox | The requested bounding box settings. | |
Output | Descriptors.BoundingBox | The root scan group in the current open project. | |
State | TaskState | optional | The current state of the task. |
Error | string | optional | A string describing the error if the task has failed. |
Calibrate the cameras.
This task starts the camera calibration capture sequence where the user is guided to place the calibration card with a card outline drawn on the video feed. Once each calibration card pose is captured, the cameras are calibrated and the calibration results are returned as a string. If the cameras cannot be calibrated the task finishes in a Failed
state.
> Request example:
{
"Task":{
"Index":1,
"Type":"CalibrateCameras"
}
}
> Response example:
{
"Task":{
"Index":1,
"Type":"CalibrateCameras",
"Output":"Camera calibration results: ...",
"State":"Completed"
}
}
Client request for the CalibrateCameras
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | A unique identifier generated by the client. | |
Type | string | "CalibrateCameras" |
Server response for the CalibrateCameras
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | The unique identifier generated by the client. | |
Type | string | "CalibrateCameras" | |
Output | string | optional | Camera calibration results. |
State | TaskState | optional | The current state of the task. |
Error | string | optional | A string describing the error if the task has failed. |
Calibrate the turntable.
> Request example:
{
"Task":{
"Index":1,
"Type":"CalibrateTurntable"
}
}
> Response example:
{
"Task":{
"Index":1,
"Type":"CalibrateTurntable",
"Output":"Turntable calibration results: ...",
"State":"Completed"
}
}
Client request for the CalibrateTurntable
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | A unique identifier generated by the client. | |
Type | string | "CalibrateTurntable" |
Server response for the CalibrateTurntable
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | The unique identifier generated by the client. | |
Type | string | "CalibrateTurntable" | |
Output | string | optional | Turntable calibration results. |
State | TaskState | optional | The current state of the task. |
Error | string | optional | A string describing the error if the task has failed. |
Get the camera calibration targets.
> Request example:
{
"Task":{
"Index":1,
"Type":"CalibrationCaptureTargets"
}
}
> Response example:
{
"Task":{
"Index":1,
"Type":"CalibrationCaptureTargets",
"Output":{[
{
"camera":0,
"quads":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]
},
{
"camera":1,
"quads":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]
},
]},
"State":"Completed"
}
}
Client request for the CalibrationCaptureTargets
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | A unique identifier generated by the client. | |
Type | string | "CalibrationCaptureTargets" |
Server response for the CalibrationCaptureTargets
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | The unique identifier generated by the client. | |
Type | string | "CalibrationCaptureTargets" | |
Output | Descriptors.Calibration.CaptureTarget | optional | The calibration capture target descriptor. |
State | TaskState | optional | The current state of the task. |
Error | string | optional | A string describing the error if the task has failed. |
Get the camera calibration descriptor.
> Request example:
{
"Task":{
"Index":1,
"Type":"CameraCalibration"
}
}
> Response example:
{
"Task":{
"Index":1,
"Type":"CameraCalibration",
"Output":{
"date":[2024,4,27,16,57,35],
"quality":"Excellent"
},
"State":"Completed"
}
}
Client request for the CameraCalibration
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | A unique identifier generated by the client. | |
Type | string | "CameraCalibration" |
Server response for the CameraCalibration
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | The unique identifier generated by the client. | |
Type | string | "CameraCalibration" | |
Output | Descriptors.Calibration.Camera | optional | The camera calibration descriptor. |
State | TaskState | optional | The current state of the task. |
Error | string | optional | A string describing the error if the task has failed. |
Close the current open project.
> Request example:
{
"Task":{
"Index":1,
"Type":"CloseProject",
}
}
> Response example:
{
"Task":{
"Index":1,
"Type":"CloseProject",
"State":"Completed"
}
}
Client request for the CloseProject
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | A unique identifier generated by the client. | |
Type | string | "CloseProject" |
Server response for the CloseProject
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | The unique identifier generated by the client. | |
Type | string | "CloseProject" | |
State | TaskState | optional | The current state of the task. |
Error | string | optional | A string describing the error if the task has failed. |
Connect to a wifi network.
> Request example:
{
"Task":{
"Index":1,
"Type":"ConnectWifi",
"Input":{
"ssid":"Network1"
"password":"password"
}
}
}
> Response example:
{
"Task":{
"Index":1,
"Type":"ConnectWifi",
"Input":{
{
"ssid":"Network1"
"password":"password"
}
"State":"Completed"
}
}
Client request for the ConnectWifi
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | A unique identifier generated by the client. | |
Type | string | "ConnectWifi" | |
Input | Settings.Wifi | Wifi settings. |
Server response for the ConnectWifi
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | The unique identifier generated by the client. | |
Type | string | "ConnectWifi" | |
Input | Settings.Wifi | The requested wifi settings. | |
State | TaskState | optional | The current state of the task. |
Error | string | optional | A string describing the error if the task has failed. |
Capture a new scan.
> Request example:
{
"Task":{
"Index":1,
"Type":"DepthMap"
"Input":{
"camera":{"exposure":18000,"analogGain":256,"digitalGain":256},
"capture":{"quality":"Medium","texture":true},
"projector":{"brightness":0.8}
},
}
}
> Depth map buffer message from server.
{
"Buffer":{
"Index":0,
"Size":13128960,
"Descriptor":{
"cols":2104,
"rows":1560,
"step":8416,
"type":5
},
"Task":{
"Index":1,
"Type":"DepthMap",
"Input":{
"camera":{"exposure":18000,"analogGain":256,"digitalGain":256},
"capture":{"quality":"Medium","texture":true},
"projector":{"brightness":0.8}
}
}
}
}
> Depth map binary data transfer from server [13128960 bytes].
> Texture buffer message from server.
{
"Buffer":{
"Index":1,
"Size":9846720,
"Descriptor":{
"cols":2104,
"rows":1560,
"step":6312,
"type":16
},
"Task":{
"Index":1,
"Type":"DepthMap",
"Input":{
"camera":{"exposure":18000,"analogGain":256,"digitalGain":256},
"capture":{"quality":"Medium","texture":true},
"projector":{"brightness":0.8}
}
}
}
}
> Texture binary data transfer from server [9846720 bytes].
> Response example:
{
"Task":{
"Index":1,
"Type":"DepthMap"
"Input":{
"camera":{"exposure":18000,"analogGain":256,"digitalGain":256},
"capture":{"quality":"Medium","texture":true},
"projector":{"brightness":0.8}
},
"Output":[2500,0,1052,0,2500,780,0,0,1],
"State":"Completed"
}
}
Server buffer message for the DepthMap
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | The zero-based index identifying the data buffer. | |
Size | uint64 | The size of the incoming data buffer in bytes. | |
Task | Task | The requested DepthMap task. | |
Descriptor | Descriptors.Image | The image descriptor. |
Client request for the DepthMap
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | A unique identifier generated by the client. | |
Type | string | "DepthMap" | |
Input | Settings.Scan | optional | Scan settings. |
Server response for the DepthMap
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | The unique identifier generated by the client. | |
Type | string | "DepthMap" | |
Input | Settings.Scan | optional | Requested scan settings. |
Output | double | repeated | The 9 values of the camera matrix corresponding to the depth map (row-major). |
State | TaskState | optional | The current state of the task. |
Error | string | optional | A string describing the error if the task has failed. |
Detect the calibration card on one or both cameras.
> Request example:
{
"Task":{
"Index":1,
"Type":"DetectCalibrationCard",
"Input":3
}
}
> Response example:
{
"Task":{
"Index":1,
"Input":3,
"Type":"DetectCalibrationCard",
"State":"Completed"
}
}
Client request for the DetectCalibrationCard
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | A unique identifier generated by the client. | |
Type | string | "DetectCalibrationCard" | |
Input | int32 | Flag specifying on which camera(s) to detect the calibration card. [0: neither camera (disable), 1: left camera, 2: right camera, 3: both cameras] |
Server response for the DetectCalibrationCard
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | The unique identifier generated by the client. | |
Type | string | "DetectCalibrationCard" | |
Input | int32 | Flag sent in the request specifying on which camera(s) to detect the calibration card. [0: neither camera (disable), 1: left camera, 2: right camera, 3: both cameras] | |
State | TaskState | optional | The current state of the task. |
Error | string | optional | A string describing the error if the task has failed. |
Download a project from the scanner.
> Request example:
{
"Task":{
"Index":1,
"Type":"DownloadProject",
"Input":5
}
}
> Buffer message from server.
{
"Buffer":{
"Descriptor":"Project-5.zip",
"Index":0,
"Size":15682096,
"Task":{
"Index":1,
"Type":"DownloadProject",
"Input":5
}
}
}
> Binary data transfer from server: The project zip file [15682096 bytes]. > Response example:
{
"Task":{
"Index":1,
"Type":"DownloadProject"
"Input":5,
"State":"Completed"
}
}
Server buffer message for the DownloadProject
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | The zero-based index identifying the data buffer. | |
Size | uint64 | The size of the incoming data buffer in bytes. | |
Task | Task | The requested DownloadProject task. | |
Descriptor | string | The downloaded project filename. |
Client request for the DownloadProject
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | A unique identifier generated by the client. | |
Type | string | "DownloadProject" | |
Input | int32 | Index of the project to download. |
Server response for the DownloadProject
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | The unique identifier generated by the client. | |
Type | string | "DownloadProject" | |
Input | int32 | Requested index of the project to download. | |
State | TaskState | optional | The current state of the task. |
Error | string | optional | A string describing the error if the task has failed. |
Export a group of scans.
> Request example:
{
"Task":{
"Index":1,
"Type":"Export",
"Input":{
"selection":{"mode":"visible"},
"format":"obj",
"texture":true,
"merge":false
}
}
}
> Export file buffer message from server.
{
"Buffer":{
"Index":0,
"Size":8413737,
"Task":{
"Index":1,
"Type":"Export",
"Input":{
"selection":{"mode":"visible"},
"format":"obj",
"texture":true,
"merge":false
}
}
}
}
> Export file binary data transfer from server [8413737 bytes].
> Response from server:
{
"Task":{
"Index":1,
"Type":"Export"
"Input":{
"selection":{"mode":"visible"},
"format":"obj",
"texture":true,
"merge":false
},
"State":"Completed"
}
}
Server buffer message for the Export
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | The zero-based index identifying the data buffer. | |
Size | uint64 | The size of the incoming data buffer in bytes. | |
Task | Task | The requested Export task. |
Client request for the Export
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | A unique identifier generated by the client. | |
Type | string | "Export" | |
Input | Settings.Export | Export settings. |
Server response for the Export
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | The unique identifier generated by the client. | |
Type | string | "Export" | |
Input | Settings.Export | Requested export settings. | |
State | TaskState | optional | The current state of the task. |
Error | string | optional | A string describing the error if the task has failed. |
Export scanner logs.
> Request example:
{
"Task":{
"Index":1,
"Type":"ExportLogs",
"Input":true
}
}
> Export file buffer message from server.
{
"Buffer":{
"Index":0,
"Size":41337,
"Task":{
"Index":1,
"Type":"ExportLogs",
"Input":true
}
}
}
> Export file binary data transfer from server [41337 bytes].
> Response example:
{
"Task":{
"Index":1,
"Type":"ExportLogs"
"Input":true,
"State":"Completed"
}
}
Server buffer message for the ExportLogs
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | The zero-based index identifying the data buffer. | |
Size | uint64 | The size of the incoming data buffer in bytes. | |
Task | Task | The requested ExportLogs task. |
Client request for the ExportLogs
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | A unique identifier generated by the client. | |
Type | string | "ExportLogs" | |
Input | bool | optional | Export log images. If unspecified, log images are not exported. |
Server response for the ExportLogs
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | The unique identifier generated by the client. | |
Type | string | "ExportLogs" | |
Input | bool | optional | Requested export log images. |
State | TaskState | optional | The current state of the task. |
Error | string | optional | A string describing the error if the task has failed. |
Export a merged scan.
> Request example:
{
"Task":{
"Index":1,
"Type":"ExportMerge",
"Input":{
"format":"obj",
"texture":true
}
}
}
> Export file buffer message from server.
{
"Buffer":{
"Index":0,
"Size":8413737,
"Task":{
"Index":1,
"Type":"ExportMerge",
"Input":{
"format":"obj",
"texture":true
}
}
}
}
> Export file binary data transfer from server [8413737 bytes].
> Response example:
{
"Task":{
"Index":1,
"Type":"ExportMerge"
"Input":{
"format":"obj",
"texture":true
},
"State":"Completed"
}
}
Server buffer message for the ExportMerge
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | The zero-based index identifying the data buffer. | |
Size | uint64 | The size of the incoming data buffer in bytes. | |
Task | Task | The requested ExportMerge task. |
Client request for the ExportMerge
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | A unique identifier generated by the client. | |
Type | string | "ExportMerge" | |
Input | Settings.Export | Export settings. |
Server response for the ExportMerge
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | The unique identifier generated by the client. | |
Type | string | "ExportMerge" | |
Input | Settings.Export | Requested export settings. | |
State | TaskState | optional | The current state of the task. |
Error | string | optional | A string describing the error if the task has failed. |
Flatten a scan group such that it only consists of single scans.
> Request example:
{
"Task":{
"Index":1,
"Type":"FlattenGroup",
"Input":0
}
}
> Response example:
{
"Task":{
"Index":1,
"Type":"FlattenGroup",
"Input":0,
"Output":{
"groups":[{
"index":2,
"name":"Group 2",
"groups":[{
"index":1,
"name":"Group 1"
}]
}],
},
"State":"Completed"
}
}
Client request for the FlattenGroup
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | A unique identifier generated by the client. | |
Type | string | "FlattenGroup" | |
Input | int32 | The index of the group to flatten. |
Server response for the FlattenGroup
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | The unique identifier generated by the client. | |
Type | string | "FlattenGroup" | |
Input | int32 | The requested index of the group to flatten. | |
Output | Descriptors.Project.Group | The root scan group in the current open project. | |
State | TaskState | optional | The current state of the task. |
Error | string | optional | A string describing the error if the task has failed. |
Forget all wifi connections.
> Request example:
{
"Task":{
"Index":1,
"Type":"ForgetWifi"
}
}
> Response example:
{
"Task":{
"Index":1,
"Type":"ForgetWifi"
"State":"Completed"
}
}
Client request for the ForgetWifi
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | A unique identifier generated by the client. | |
Type | string | "ForgetWifi" |
Server response for the ForgetWifi
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | The unique identifier generated by the client. | |
Type | string | "ForgetWifi" | |
State | TaskState | optional | The current state of the task. |
Error | string | optional | A string describing the error if the task has failed. |
Check if the scanner has working cameras.
> Request example:
{
"Task":{
"Index":1,
"Type":"HasCameras"
}
}
> Response example:
{
"Task":{
"Index":1,
"Type":"HasCameras",
"Output":true,
"State":"Completed"
}
}
Client request for the HasCameras
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | A unique identifier generated by the client. | |
Type | string | "HasCameras" |
Server response for the HasCameras
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | The unique identifier generated by the client. | |
Type | string | "HasCameras" | |
Output | bool | optional | The working state of the cameras. |
State | TaskState | optional | The current state of the task. |
Error | string | optional | A string describing the error if the task has failed. |
Check if the scanner has a working projector.
> Request example:
{
"Task":{
"Index":1,
"Type":"HasProjector"
}
}
> Response example:
{
"Task":{
"Index":1,
"Type":"HasProjector",
"Output":true,
"State":"Completed"
}
}
Client request for the HasProjector
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | A unique identifier generated by the client. | |
Type | string | "HasProjector" |
Server response for the HasProjector
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | The unique identifier generated by the client. | |
Type | string | "HasProjector" | |
Output | bool | optional | The working state of the projector. |
State | TaskState | optional | The current state of the task. |
Error | string | optional | A string describing the error if the task has failed. |
Check if the scanner is connected to a working turntable.
> Request example:
{
"Task":{
"Index":1,
"Type":"HasTurntable"
}
}
> Response example:
{
"Task":{
"Index":1,
"Type":"HasTurntable",
"Output":true,
"State":"Completed"
}
}
Client request for the HasTurntable
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | A unique identifier generated by the client. | |
Type | string | "HasTurntable" |
Server response for the HasTurntable
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | The unique identifier generated by the client. | |
Type | string | "HasTurntable" | |
Output | bool | optional | The working start of the connected turntable. |
State | TaskState | optional | The current state of the task. |
Error | string | optional | A string describing the error if the task has failed. |
List all export formats and the geometry elements they support.
> Request example:
{
"Task":{
"Index":1,
"Type":"ListExportFormats"
}
}
> Response example:
{
"Task":{
"Index":1,
"Type":"ListExportFormats",
"Output":{[
{
"format": "ply",
"colors": true,
"description": "Polygon format",
"extension": ".ply",
"faces": ["Point","Triangle","Quad"],
"normals": true,
"textures": "Single"
},
{
"format": "obj",
"colors": true,
"description": "Wavefront format",
"extension": ".obj",
"faces": ["Point","Triangle","Quad"],
"normals": true,
"textures": "Multiple"
},
{
"format": "stl",
"colors": false,
"description": "Stereolithography format",
"extension": ".stl",
"faces": ["Point","Triangle"],
"normals": true,
"textures": "None"
}
]},
"State":"Completed"
}
}
Client request for the ListExportFormats
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | A unique identifier generated by the client. | |
Type | string | "ListExportFormats" |
Server response for the ListExportFormats
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | The unique identifier generated by the client. | |
Type | string | "ListExportFormats" | |
Output | Descriptors.Export | repeated | The list of export format descriptors. |
State | TaskState | optional | The current state of the task. |
Error | string | optional | A string describing the error if the task has failed. |
List the scan groups in the current open project.
> Request example:
{
"Task":{
"Index":1,
"Type":"ListGroups"
}
}
> Response example:
{
"Task":{
"Index":1,
"Type":"ListGroups",
"Output":{
"groups":[
{
"index":1,
"scan":1,
"name":"Scan-1",
"color":[0.75,0.5,0.2,1.0],
"rotation":[0.03,0.1,-0.01],
"translation":[-101,67,-561],
"visible":true
},
{
"index":2,
"scan":2,
"name":"Scan-2",
"color":[0.7,0.9,0.6,1.0],
"rotation":[0.1,0.2,0.5],
"translation":[-90,64,-553],
"visible":true
},
{
"index":3,
"scan":3,
"name":"Scan-3",
"color":[0.6,0.8,0.9,1.0],
"visible":true
}
]
},
"State":"Completed"
}
}
Client request for the ListGroups
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | A unique identifier generated by the client. | |
Type | string | "ListGroups" |
Server response for the ListGroups
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | The unique identifier generated by the client. | |
Type | string | "ListGroups" | |
Output | Descriptors.Project.Group | The root scan group in the current open project. | |
State | TaskState | optional | The current state of the task. |
Error | string | optional | A string describing the error if the task has failed. |
List network interfaces.
> Request example:
{
"Task":{
"Index":1,
"Type":"ListNetworkInterfaces"
}
}
> Response example:
{
"Task":{
"Index":1,
"Type":"ListNetworkInterfaces",
"Output":[
{"ip":"192.168.1.234","name":"eth0","ssid":""},
{"ip":"127.0.0.1","name":"lo","ssid":""}
{"ip":"192.168.2.345","name":"wlan0","ssid":"Network1"}
],
"State":"Completed"
}
}
Client request for the ListNetworkInterfaces
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | A unique identifier generated by the client. | |
Type | string | "ListNetworkInterfaces" |
Server response for the ListNetworkInterfaces
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | The unique identifier generated by the client. | |
Type | string | "ListNetworkInterfaces" | |
Output | Descriptors.Network.Interface | optional | Network interface descriptors. |
State | TaskState | optional | The current state of the task. |
Error | string | optional | A string describing the error if the task has failed. |
List all projects.
> Request example:
{
"Task":{
"Index":1,
"Type":"ListProjects"
}
}
> Response example:
{
"Task":{
"Index":1,
"Type":"ListProjects",
"Output":[
{"index":1,"modified":[2024,5,12,11,23,17],"name":"Project 1","size":35409834},
{"index":2,"modified":[2024,5,12,11,2,37],"name":"Project 2","size":175025367},
{"index":3,"modified":[2024,5,6,17,15,53],"name":"Project 3","size":24314083}
],
"State":"Completed"
}
}
Client request for the ListProjects
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | A unique identifier generated by the client. | |
Type | string | "ListProjects" |
Server response for the ListProjects
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | The unique identifier generated by the client. | |
Type | string | "ListProjects" | |
Output | Descriptors.Project.Brief | optional | Brief project descriptors. |
State | TaskState | optional | The current state of the task. |
Error | string | optional | A string describing the error if the task has failed. |
List the scans in the current open project.
> Request example:
{
"Task":{
"Index":1,
"Type":"ListScans"
}
}
> Response example:
{
"Task":{
"Index":1,
"Type":"ListScans",
"Output":{[
{
"color":[0.8,0.5,0.6,1.0],
"index":1,
"name":"Scan-1",
"scan":1,
"rotation":[0.2,0.8,-0.1],
"translation":[-275,-32,-134],
"visible":true
},
{
"color":[0.5,0.7,0.2,1.0],
"index":2,
"name":"Scan-2",
"scan":2,
"rotation":[0.7,-0.5,0.3],
"translation":[75,-62,38],
"visible":true
},
]},
"State":"Completed"
}
}
Client request for the ListScans
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | A unique identifier generated by the client. | |
Type | string | "ListScans" |
Server response for the ListScans
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | The unique identifier generated by the client. | |
Type | string | "ListScans" | |
Output | Descriptors.Project.Group | repeated | The list of scans in the current open project. |
State | TaskState | optional | The current state of the task. |
Error | string | optional | A string describing the error if the task has failed. |
Get scanner settings.
> Request example:
{
"Task":{
"Index":1,
"Type":"ListSettings"
}
}
> Response example:
{
"Task":{
"Index":1,
"Type":"ListSettings",
"Output":{
"camera":{
"analogGain":{"default":512.0,"max":1024.0,"min":256.0,"value":256.0},
"autoExposure":{"default":false,"value":false},
"digitalGain":{"default":256,"max":65536,"min":256,"value":320},
"exposure":{"default":27000,"max":90000,"min":9000,"value":18000},
},
"projector":{
"brightness":{"default":0.5,"max":1.0,"min":0.0,"value":0.800000011920929},
"on":{"default":false,"value":true}
},
"turntable":{
"steps":{"default":8,"max":24,"min":1,"value":3},
"sweep":{"default":360,"max":360,"min":5,"value":90},
"use":{"default":true,"value":true}
},
"capture":{
"quality":{"default":"Medium","value":"Medium"},
"texture":{"default":true,"value":true}
},
"i18n":{
"language":{"default":"en","value":"en"}
},
"style":{
"theme":{"default":"Dark","value":"Dark"}
},
"viewer":{
"textureOpacity":{"default":0.5,"max":1.0,"min":0.0,"value":1.0}
}
},
"State":"Completed"
}
}
Client request for the ListSettings
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | A unique identifier generated by the client. | |
Type | string | "ListSettings" |
Server response for the ListSettings
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | The unique identifier generated by the client. | |
Type | string | "ListSettings" | |
Output | Descriptors.Settings.Scanner | optional | The scanner settings descriptor. |
State | TaskState | optional | The current state of the task. |
Error | string | optional | A string describing the error if the task has failed. |
List available wifi networks.
> Request example:
{
"Task":{
"Index":1,
"Type":"ListWifi"
}
}
> Response example:
{
"Task":{
"Index":1,
"Type":"ListWifi",
"Output":{
"networks":[
{"ssid":"Network1","isActive":true,"isPublic":false,"quality":90},
{"ssid":"Network2","isActive":true,"isPublic":true,"quality":50},
{"ssid":"Network3","isActive":true,"isPublic":true,"quality":75}
],
"ssid":"Network1"
},
"State":"Completed"
}
}
Client request for the ListWifi
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | A unique identifier generated by the client. | |
Type | string | "ListWifi" |
Server response for the ListWifi
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | The unique identifier generated by the client. | |
Type | string | "ListWifi" | |
Output | Descriptors.Wifi | optional | The wifi descriptor. |
State | TaskState | optional | The current state of the task. |
Error | string | optional | A string describing the error if the task has failed. |
Merge two or more scan groups.
> Request example:
{
"Task":{
"Index":1,
"Type":"Merge",
"Input":{
"selection":{"mode":"visible"},
"remesh":{
"method": "FastTriangles",
"quality": "Medium"
},
"simplify":{"triangleCount": 20000 }
}
}
}
> Response example:
{
"Task":{
"Index":1,
"Type":"Merge",
"Input":{
"selection":{"mode":"visible"},
"remesh":{
"method": "FastTriangles",
"quality": "Medium"
},
"simplify":{"triangleCount": 20000 }
},
"Output":{
"meshes":[
{
"name":"Combined",
"positions":237757,
"normals":237757,
"triangles":459622,
"size":11221632
},
{
"name":"Remeshed",
"positions":34311,
"normals":0,
"triangles":29738,
"size":945540
},
{
"name":"Simplified",
"positions":32415,
"normals":0,
"triangles":20000,
"size":628980
}
],
"scans":3,
"textures":3
},
"State":"Completed"
}
}
Client request for the Merge
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | A unique identifier generated by the client. | |
Type | string | "Merge" | |
Input | Settings.Merge | The merge settings. |
Server response for the Merge
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | The unique identifier generated by the client. | |
Type | string | "Merge" | |
Input | Settings.Merge | The requested merge settings. | |
Output | Descriptors.Merge | The merge descriptor. | |
State | TaskState | optional | The current state of the task. |
Error | string | optional | A string describing the error if the task has failed. |
Download the raw scan data for the current merge process.
> Request example:
{
"Task":{
"Index":1,
"Type":"MergeData",
"Input":{
"index":-1,
"buffers":["All"]
}
}
}
> Vertex position buffer message from server.
{
"Buffer":{
"Index":0,
"Size":1558188,
"Descriptor":{
"components":[{
"type":"Position"
"size":3,
"offset":0,
"normalized":false,
}],
"stride":3
},
"Task":{
"Index":1,
"Type":"MergeData",
"Input":{
"index":1,
"buffers":["All"]
}
}
}
}
> Vertex position binary data transfer from server [1558188 bytes].
> Vertex normal buffer message from server.
{
"Buffer":{
"Index":1,
"Size":1558188,
"Descriptor":{
"components":[{
"type":"Normal"
"size":3,
"offset":0,
"normalized":false,
}],
"stride":3
},
"Task":{
"Index":1,
"Type":"MergeData",
"Input":{
"index":1,
"buffers":["All"]
}
}
}
}
> Vertex normal binary data transfer from server [1558188 bytes].
> Vertex texture coordinate buffer message from server.
{
"Buffer":{
"Index":2,
"Size":1038792,
"Descriptor":{
"components":[{
"type":"UV"
"size":2,
"offset":0,
"normalized":false,
}],
"stride":2
},
"Task":{
"Index":1,
"Type":"MergeData",
"Input":{
"index":1,
"buffers":["All"]
}
}
}
}
> Vertex texture coordinate binary data transfer from server [1038792 bytes].
> Texture image buffer message from server.
{
"Buffer":{
"Index":3,
"Size":3504494,
"Descriptor":{
"components":[{
"type":"Texture"
"size":0,
"offset":0,
"normalized":false,
}],
"stride":0
},
"Task":{
"Index":1,
"Type":"MergeData",
"Input":{
"index":1,
"buffers":["All"]
}
}
}
}
> Texture binary data transfer from server [3504494 bytes].
> Triangle index buffer message from server.
{
"Buffer":{
"Index":4,
"Size":1996356,
"Descriptor":{
"components":[{
"type":"Triangle"
"size":1,
"offset":0,
"normalized":false,
}],
"stride":1
},
"Task":{
"Index":1,
"Type":"MergeData",
"Input":{
"index":1,
"buffers":["All"]
}
}
}
}
> Triangle index binary data transfer from server [1996356 bytes].
> Response example:
{
"Task":{
"Index":1,
"Type":"MergeData"
"Input":{"index":-1,"buffers":["All"]},
"Output":{
"buffers":[
{"components":[{"normalized":false,"offset":0,"size":3,"type":"Position"}],"stride":3},
{"components":[{"normalized":false,"offset":0,"size":3,"type":"Normal"}],"stride":3},
{"components":[{"normalized":false,"offset":0,"size":2,"type":"UV"}],"stride":2},
{"components":[{"normalized":false,"offset":0,"size":0,"type":"Texture"}],"stride":0},
{"components":[{"normalized":false,"offset":0,"size":1,"type":"Triangle"}],"stride":1}
],
"index":1,
"name":"Scan-1"
},
"State":"Completed"
}
}
Server buffer message for the MergeData
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | The zero-based index identifying the data buffer. | |
Size | uint64 | The size of the incoming data buffer in bytes. | |
Task | Task | The requested MergeData task. | |
Descriptor | Descriptors.ScanData.Buffer | The scan data buffer descriptor. |
Client request for the MergeData
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | A unique identifier generated by the client. | |
Type | string | "MergeData" | |
Input | Settings.ScanData | Requested scan data. |
Server response for the MergeData
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | The unique identifier generated by the client. | |
Type | string | "MergeData" | |
Input | Settings.ScanData | The scan data requested by the client. | |
Output | Descriptors.ScanData | The scan data sent from the server. | |
State | TaskState | optional | The current state of the task. |
Error | string | optional | A string describing the error if the task has failed. |
Move a scan group.
> Request example:
{
"Task":{
"Index":1,
"Type":"MoveGroup",
"Input":[1,2,0]
}
}
> Response example:
{
"Task":{
"Index":1,
"Type":"MoveGroup",
"Input":[1,2,0],
"Output":{
"groups":[{
"index":2,
"name":"Group 2",
"groups":[{
"index":1,
"name":"Group 1"
}]
}],
},
"State":"Completed"
}
}
Client request for the MoveGroup
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | A unique identifier generated by the client. | |
Type | string | "MoveGroup" | |
Input | int32 | repeated | The requested source and destination move indices. An Array of group indexes where 1. The first is the index of the source group: the group to be moved. 2. The second is the index of the parent group: the group into which the source group is moved. 3. (Optional) The third is the zero-based order in which the source group is placed the other children of the parent group. Use 0 to insert the source group at the beginning of the parent group's children. If omitted, the source group is inserted at the end of the parent group's children. |
Server response for the MoveGroup
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | The unique identifier generated by the client. | |
Type | string | "MoveGroup" | |
Input | int32 | repeated | The requested source and destination move indices. |
Output | Descriptors.Project.Group | The root scan group in the current open project. | |
State | TaskState | optional | The current state of the task. |
Error | string | optional | A string describing the error if the task has failed. |
Create a new scan group.
> Request example:
{
"Task":{
"Index":1,
"Type":"NewGroup",
"Input":{
"parentIndex":0,
"baseName":"Group"
}
}
}
> Response example:
{
"Task":{
"Index":1,
"Type":"NewGroup",
"Input":{
"parentIndex":0,
"baseName":"Group"
},
"Output":{
"groups":[
{
"index":1,
"name":"Group 1"
}
]
},
"State":"Completed"
}
}
Client request for the NewGroup
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | A unique identifier generated by the client. | |
Type | string | "NewGroup" | |
Input | Settings.NewGroup | optional | The requested new group settings. |
Server response for the NewGroup
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | The unique identifier generated by the client. | |
Type | string | "NewGroup" | |
Input | Settings.NewGroup | optional | The requested new group settings. |
Output | Descriptors.Project.Group | The root scan group in the current open project. | |
State | TaskState | optional | The current state of the task. |
Error | string | optional | A string describing the error if the task has failed. |
Create a new project.
> Request example:
{
"Task":{
"Index":1,
"Type":"NewProject",
"Input":"New Project Name"
}
}
> Response example:
{
"Task":{
"Index":1,
"Type":"NewProject",
"Input":{
"name":"New Project Name"
},
"Output":{
"index":5,
"name":"New Project Name"
}
"State":"Completed"
}
}
Client request for the NewProject
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | A unique identifier generated by the client. | |
Type | string | "NewProject" | |
Input | string | optional | Optional new project name. |
Server response for the NewProject
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | The unique identifier generated by the client. | |
Type | string | "NewProject" | |
Input | Settings.Project | optional | Requested new project name. |
Output | Descriptors.Project | optional | The new project descriptor. |
State | TaskState | optional | The current state of the task. |
Error | string | optional | A string describing the error if the task has failed. |
Capture a new scan.
> Request example:
{
"Task":{
"Index":1,
"Type":"NewScan"
"Input":{
"camera":{"exposure":18000,"analogGain":256,"digitalGain":256},
"capture":{"quality":"Medium","texture":true},
"projector":{"brightness":0.8}
},
}
}
> Response example:
{
"Task":{
"Index":1,
"Type":"NewScan"
"Input":{
"camera":{"exposure":18000,"analogGain":256,"digitalGain":256},
"capture":{"quality":"Medium","texture":true},
"projector":{"brightness":0.8}
},
"Output":{
"groups":[{
"color":[0.8,0.5,0.6,1.0],
"index":1,
"name":"Scan-1",
"scan":1,
"rotation":[0.2,0.8,-0.1],
"translation":[-275,-32,-134],
"visible":true
}],
},
"State":"Completed"
}
}
Client request for the NewScan
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | A unique identifier generated by the client. | |
Type | string | "NewScan" | |
Input | Settings.Scan | optional | Scan settings. |
Server response for the NewScan
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | The unique identifier generated by the client. | |
Type | string | "NewScan" | |
Input | Settings.Scan | optional | Requested scan settings. |
Output | Descriptors.Project.Group | optional | Project group descriptor with the updated list of scans. |
State | TaskState | optional | The current state of the task. |
Error | string | optional | A string describing the error if the task has failed. |
Create a new project.
> Request example:
{
"Task":{
"Index":1,
"Type":"OpenProject",
"Input":5
}
}
> Response example:
{
"Task":{
"Index":1,
"Type":"OpenProject",
"Input":5,
"Output":{
"index":5,
"name":"Project 5"
}
"State":"Completed"
}
}
Client request for the OpenProject
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | A unique identifier generated by the client. | |
Type | string | "OpenProject" | |
Input | int32 | The index of the project to open. Project indices can be obtained from the ListProjects task. |
Server response for the OpenProject
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | The unique identifier generated by the client. | |
Type | string | "OpenProject" | |
Input | int32 | The index of the project requested to open. | |
Output | Descriptors.Project | optional | The open project descriptor. |
State | TaskState | optional | The current state of the task. |
Error | string | optional | A string describing the error if the task has failed. |
Pop and restore scanner settings from the stack and optionally apply the popped settings.
> Request example:
{
"Task":{
"Index":1,
"Type":"PopSettings",
"Input":true
}
}
> Response example:
{
"Task":{
"Index":1,
"Type":"PopSettings",
"Input":true,
"Output":{
"camera":{
"analogGain":{"default":512.0,"max":1024.0,"min":256.0,"value":256.0},
"autoExposure":{"default":false,"value":false},
"digitalGain":{"default":256,"max":65536,"min":256,"value":320},
"exposure":{"default":27000,"max":90000,"min":9000,"value":18000},
},
"projector":{
"brightness":{"default":0.5,"max":1.0,"min":0.0,"value":0.800000011920929},
"on":{"default":false,"value":true}
},
"turntable":{
"steps":{"default":8,"max":24,"min":1,"value":3},
"sweep":{"default":360,"max":360,"min":5,"value":90},
"use":{"default":true,"value":true}
},
"capture":{
"quality":{"default":"Medium","value":"Medium"},
"texture":{"default":true,"value":true}
},
"i18n":{
"language":{"default":"en","value":"en"}
},
"style":{
"theme":{"default":"Dark","value":"Dark"}
},
"viewer":{
"textureOpacity":{"default":0.5,"max":1.0,"min":0.0,"value":1.0}
}
},
"State":"Completed"
}
}
Client request for the PopSettings
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | A unique identifier generated by the client. | |
Type | string | "PopSettings" | |
Input | bool | optional | Apply the popped settings. If unspecified popped settings are not applied. |
Server response for the PopSettings
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | The unique identifier generated by the client. | |
Type | string | "PopSettings" | |
Input | bool | optional | Request to apply the popped settings. |
Output | Descriptors.Settings.Scanner | optional | The scanner settings descriptor. |
State | TaskState | optional | The current state of the task. |
Error | string | optional | A string describing the error if the task has failed. |
Push the current scanner settings to a stack so they can be restored with PopSettings.
> Request example:
{
"Task":{
"Index":1,
"Type":"PushSettings"
}
}
> Response example:
{
"Task":{
"Index":1,
"Type":"PushSettings",
"Output":{
"camera":{
"analogGain":{"default":512.0,"max":1024.0,"min":256.0,"value":256.0},
"autoExposure":{"default":false,"value":false},
"digitalGain":{"default":256,"max":65536,"min":256,"value":320},
"exposure":{"default":27000,"max":90000,"min":9000,"value":18000},
},
"projector":{
"brightness":{"default":0.5,"max":1.0,"min":0.0,"value":0.800000011920929},
"on":{"default":false,"value":true}
},
"turntable":{
"steps":{"default":8,"max":24,"min":1,"value":3},
"sweep":{"default":360,"max":360,"min":5,"value":90},
"use":{"default":true,"value":true}
},
"capture":{
"quality":{"default":"Medium","value":"Medium"},
"texture":{"default":true,"value":true}
},
"i18n":{
"language":{"default":"en","value":"en"}
},
"style":{
"theme":{"default":"Dark","value":"Dark"}
},
"viewer":{
"textureOpacity":{"default":0.5,"max":1.0,"min":0.0,"value":1.0}
}
},
"State":"Completed"
}
}
Client request for the PushSettings
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | A unique identifier generated by the client. | |
Type | string | "PushSettings" |
Server response for the PushSettings
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | The unique identifier generated by the client. | |
Type | string | "PushSettings" | |
Output | Descriptors.Settings.Scanner | optional | The scanner settings descriptor. |
State | TaskState | optional | The current state of the task. |
Error | string | optional | A string describing the error if the task has failed. |
Reboot the scanner.
> Request example:
{
"Task":{
"Index":1,
"Type":"Reboot"
}
}
> Response example:
{
"Task":{
"Index":1,
"Type":"Reboot"
"State":"Completed"
}
}
Client request for the Reboot
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | A unique identifier generated by the client. | |
Type | string | "Reboot" |
Server response for the Reboot
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | The unique identifier generated by the client. | |
Type | string | "Reboot" | |
State | TaskState | optional | The current state of the task. |
Error | string | optional | A string describing the error if the task has failed. |
Remove selected scan groups.
> Request example:
{
"Task":{
"Index":1,
"Type":"RemoveGroups",
"Input":[1,2]
}
}
> Response example:
{
"Task":{
"Index":1,
"Type":"RemoveGroups",
"Input":[1,2],
"Output":{"groups":[]},
"State":"Completed"
}
}
Client request for the RemoveGroups
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | A unique identifier generated by the client. | |
Type | string | "RemoveGroups" | |
Input | int32 | repeated | The list of indices of the scan groups to remove. |
Server response for the RemoveGroups
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | The unique identifier generated by the client. | |
Type | string | "RemoveGroups" | |
Input | int32 | repeated | The requested of indices of the scan groups to remove. |
Output | Descriptors.Project.Group | The root scan group in the current open project. | |
State | TaskState | optional | The current state of the task. |
Error | string | optional | A string describing the error if the task has failed. |
Remove selected projects.
> Request example:
{
"Task":{
"Index":1,
"Type":"RemoveProjects",
"Input":[1,3,6]
}
}
> Response example:
{
"Task":{
"Index":1,
"Type":"RemoveProjects",
"Input":[1,3,6],
"Output":[
{"index":2,"modified":[2024,5,12,11,23,17],"name":"Project 2","size":35409834},
{"index":4,"modified":[2024,5,12,11,2,37],"name":"Project 4","size":175025367},
{"index":5,"modified":[2024,5,6,17,15,53],"name":"Project 5","size":24314083}
],
"State":"Completed"
}
}
Client request for the RemoveProjects
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | A unique identifier generated by the client. | |
Type | string | "RemoveProjects" | |
Input | int32 | repeated | The list of indices of the projects to remove. |
Server response for the RemoveProjects
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | The unique identifier generated by the client. | |
Type | string | "RemoveProjects" | |
Input | int32 | repeated | The list of indices of the requested projects to remove. |
Output | Descriptors.Project.Brief | optional | Brief descriptors of the remaining projects. |
State | TaskState | optional | The current state of the task. |
Error | string | optional | A string describing the error if the task has failed. |
Restore factory calibration.
> Request example:
{
"Task":{
"Index":1,
"Type":"RestoreFactoryCalibration"
}
}
> Response example:
{
"Task":{
"Index":1,
"Type":"RestoreFactoryCalibration",
"State":"Completed"
}
}
Client request for the RestoreFactoryCalibration
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | A unique identifier generated by the client. | |
Type | string | "RestoreFactoryCalibration" |
Server response for the RestoreFactoryCalibration
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | The unique identifier generated by the client. | |
Type | string | "RestoreFactoryCalibration" | |
State | TaskState | optional | The current state of the task. |
Error | string | optional | A string describing the error if the task has failed. |
Rotate the turntable.
> Request example:
{
"Task":{
"Index":1,
"Type":"RotateTurntable",
"Input":15
}
}
> Response example:
{
"Task":{
"Index":1,
"Type":"RotateTurntable",
"Input":15,
"State":"Completed"
}
}
Client request for the RotateTurntable
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | A unique identifier generated by the client. | |
Type | string | "RotateTurntable" | |
Input | int32 | The rotation angle in degrees. |
Server response for the RotateTurntable
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | The unique identifier generated by the client. | |
Type | string | "RotateTurntable" | |
Input | int32 | The requested rotation angle in degrees. | |
State | TaskState | optional | The current state of the task. |
Error | string | optional | A string describing the error if the task has failed. |
Download the raw scan data for a scan in the current open project.
> Request example:
{
"Task":{
"Index":1,
"Type":"ScanData",
"Input":{
"index":1,
"buffers":["All"]
}
}
}
> Vertex position buffer message from server.
{
"Buffer":{
"Index":0,
"Size":1558188,
"Descriptor":{
"components":[{
"type":"Position"
"size":3,
"offset":0,
"normalized":false,
}],
"stride":3
},
"Task":{
"Index":1,
"Type":"ScanData",
"Input":{
"index":1,
"buffers":["All"]
}
}
}
}
> Vertex position binary data transfer from server [1558188 bytes].
> Vertex normal buffer message from server.
{
"Buffer":{
"Index":1,
"Size":1558188,
"Descriptor":{
"components":[{
"type":"Normal"
"size":3,
"offset":0,
"normalized":false,
}],
"stride":3
},
"Task":{
"Index":1,
"Type":"ScanData",
"Input":{
"index":1,
"buffers":["All"]
}
}
}
}
> Vertex normal binary data transfer from server [1558188 bytes].
> Vertex texture coordinate buffer message from server.
{
"Buffer":{
"Index":2,
"Size":1038792,
"Descriptor":{
"components":[{
"type":"UV"
"size":2,
"offset":0,
"normalized":false,
}],
"stride":2
},
"Task":{
"Index":1,
"Type":"ScanData",
"Input":{
"index":1,
"buffers":["All"]
}
}
}
}
> Vertex texture coordinate binary data transfer from server [1038792 bytes].
> Texture image buffer message from server.
{
"Buffer":{
"Index":3,
"Size":3504494,
"Descriptor":{
"components":[{
"type":"Texture"
"size":0,
"offset":0,
"normalized":false,
}],
"stride":0
},
"Task":{
"Index":1,
"Type":"ScanData",
"Input":{
"index":1,
"buffers":["All"]
}
}
}
}
> Texture binary data transfer from server [3504494 bytes].
> Triangle index buffer message from server.
{
"Buffer":{
"Index":4,
"Size":1996356,
"Descriptor":{
"components":[{
"type":"Triangle"
"size":1,
"offset":0,
"normalized":false,
}],
"stride":1
},
"Task":{
"Index":1,
"Type":"ScanData",
"Input":{
"index":1,
"buffers":["All"]
}
}
}
}
> Triangle index binary data transfer from server [1996356 bytes].
> Response example:
{
"Task":{
"Index":1,
"Type":"ScanData",
"Input":{"buffers":["All"],"index":1},
"Output":{
"buffers":[
{"components":[{"normalized":false,"offset":0,"size":3,"type":"Position"}],"stride":3},
{"components":[{"normalized":false,"offset":0,"size":3,"type":"Normal"}],"stride":3},
{"components":[{"normalized":false,"offset":0,"size":2,"type":"UV"}],"stride":2},
{"components":[{"normalized":false,"offset":0,"size":0,"type":"Texture"}],"stride":0},
{"components":[{"normalized":false,"offset":0,"size":1,"type":"Triangle"}],"stride":1}
],
"index":1,
"name":"Scan-1"
},
"State":"Completed"
}
}
Server buffer message for the ScanData
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | The zero-based index identifying the data buffer. | |
Size | uint64 | The size of the incoming data buffer in bytes. | |
Task | Task | The requested ScanData task. | |
Descriptor | Descriptors.ScanData.Buffer | The scan data buffer descriptor. |
Client request for the ScanData
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | A unique identifier generated by the client. | |
Type | string | "ScanData" | |
Input | Settings.ScanData | Requested scan data. |
Server response for the ScanData
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | The unique identifier generated by the client. | |
Type | string | "ScanData" | |
Input | Settings.ScanData | The scan data requested by the client. | |
Output | Descriptors.ScanData | The scan data sent from the server. | |
State | TaskState | optional | The current state of the task. |
Error | string | optional | A string describing the error if the task has failed. |
Apply camera settings to one or both cameras.
> Request example:
{
"Task":{
"Index":1,
"Type":"SetCameras",
"Input":{
"analogGain":256,
"digitalGain":128,
"exposure":18000
},
}
}
> Response example:
{
"Task":{
"Index":1,
"Type":"SetCameras"
"Input":{
"analogGain":256,
"digitalGain":512,
"exposure":18000
},
"Output":{
"analogGain":{"default":512.0,"max":1024.0,"min":256.0,"value":256.0},
"digitalGain":{"default":256,"max":65536,"min":256,"value":512},
"exposure":{"default":27000,"max":90000,"min":9000,"value":18000},
},
"State":"Completed"
}
}
Client request for the SetCameras
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | A unique identifier generated by the client. | |
Type | string | "SetCameras" | |
Input | Settings.Camera | optional | Camera settings. |
Server response for the SetCameras
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | The unique identifier generated by the client. | |
Type | string | "SetCameras" | |
Input | Settings.Camera | optional | Requested camera settings. |
Output | Descriptors.Settings.Camera | optional | Actual camera settings after applying the requested settings. |
State | TaskState | optional | The current state of the task. |
Error | string | optional | A string describing the error if the task has failed. |
Set scan group properties.
> Request example:
{
"Task":{
"Index":1,
"Type":"SetGroup",
"Input":{
"index":2,
"name":"Amazing Scan"
"color":[1,0,0,1],
"rotation":[0,3.14,0],
"translation":[0,10,25]
}
}
}
> Response example:
{
"Task":{
"Index":1,
"Type":"SetGroup",
"Input":{
"index":2,
"name":"Amazing Scan"
"color":[1,0,0,1],
"rotation":[0,3.14,0],
"translation":[0,10,25]
}
"Output":{
"groups":[
{
"index":1,
"scan":1,
"name":"Scan-1",
"color":[0.75,0.5,0.2,1.0],
"rotation":[0.03,0.1,-0.01],
"translation":[-101,67,-561],
"visible":true
},
{
"index":2,
"scan":2,
"name":"Amazing Scan",
"color":[1,0,0,1],
"rotation":[0,3.14,0],
"translation":[0,10,25],
"visible":true
},
{
"index":3,
"scan":3,
"name":"Scan-3",
"color":[0.6,0.8,0.9,1.0],
"visible":true
}
]
},
"State":"Completed"
}
}
Client request for the SetGroup
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | A unique identifier generated by the client. | |
Type | string | "SetGroup" | |
Input | Settings.Group | The requested group settings. |
Server response for the SetGroup
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | The unique identifier generated by the client. | |
Type | string | "SetGroup" | |
Input | Settings.Group | The requested group settings. | |
Output | Descriptors.Project.Group | The root scan group in the current open project. | |
State | TaskState | optional | The current state of the task. |
Error | string | optional | A string describing the error if the task has failed. |
Apply settings to the current open project.
> Request example:
{
"Task":{
"Index":1,
"Type":"SetProject",
"Input":{
"name":"My Project"
},
}
}
> Response example:
{
"Task":{
"Index":1,
"Type":"SetProject",
"Input":{
"name":"My Project"
},
"Output":{
"index":5,
"name":"My Project",
"groups":[{
"color":[0.8,0.5,0.6,1.0],
"index":1,
"name":"Scan-1",
"scan":1,
"rotation":[0.2,0.8,-0.1],
"translation":[-275,-32,-134],
"visible":true
}],
}
"State":"Completed"
}
}
Client request for the SetProject
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | A unique identifier generated by the client. | |
Type | string | "SetProject" | |
Input | Settings.Project | optional | Project settings. |
Server response for the SetProject
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | The unique identifier generated by the client. | |
Type | string | "SetProject" | |
Input | Settings.Project | optional | Requested project settings. |
Output | Descriptors.Project | optional | Actual project settings after applying the requested settings. |
State | TaskState | optional | The current state of the task. |
Error | string | optional | A string describing the error if the task has failed. |
Apply projector settings.
> Request example:
{
"Task":{
"Index":1,
"Type":"SetProjector"
"Input":{
"on":true,
"brightness":0.75,
"color":[1.0, 1.0, 1.0]
},
}
}
> Response example:
{
"Task":{
"Index":1,
"Type":"SetProjector"
"Input":{
"on":true,
"brightness":0.75,
"color":[1.0, 1.0, 1.0]
},
"Output":{
"on":{"default":false,"value":true},
"brightness":{"default":0.5,"max":1.0,"min":0.0,"value":0.75}
},
"State":"Completed"
}
}
Client request for the SetProjector
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | A unique identifier generated by the client. | |
Type | string | "SetProjector" | |
Input | Settings.Projector | optional | Projector settings. |
Server response for the SetProjector
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | The unique identifier generated by the client. | |
Type | string | "SetProjector" | |
Input | Settings.Projector | optional | Requested projector settings. |
Output | Descriptors.Settings.Projector | optional | Actual projector settings after applying the requested settings. |
State | TaskState | optional | The current state of the task. |
Error | string | optional | A string describing the error if the task has failed. |
Shutdown the scanner.
> Request example:
{
"Task":{
"Index":1,
"Type":"Shutdown"
}
}
> Response example:
{
"Task":{
"Index":1,
"Type":"Shutdown"
"State":"Completed"
}
}
Client request for the Shutdown
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | A unique identifier generated by the client. | |
Type | string | "Shutdown" |
Server response for the Shutdown
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | The unique identifier generated by the client. | |
Type | string | "Shutdown" | |
State | TaskState | optional | The current state of the task. |
Error | string | optional | A string describing the error if the task has failed. |
Split a scan group (ie. move its subgroups to its parent group).
> Request example:
{
"Task":{
"Index":1,
"Type":"SplitGroup",
"Input":0
}
}
> Response example:
{
"Task":{
"Index":1,
"Type":"SplitGroup",
"Input":0,
"Output":{
"groups":[
{
"index":1,
"name":"Group 1",
},
{
"index":2,
"name":"Group 2"
}
]
},
"State":"Completed"
}
}
Client request for the SplitGroup
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | A unique identifier generated by the client. | |
Type | string | "SplitGroup" | |
Input | int32 | The index of the group to split. |
Server response for the SplitGroup
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | The unique identifier generated by the client. | |
Type | string | "SplitGroup" | |
Input | int32 | The requested index of the group to split. | |
Output | Descriptors.Project.Group | The root scan group in the current open project. | |
State | TaskState | optional | The current state of the task. |
Error | string | optional | A string describing the error if the task has failed. |
Start the video stream.
The video frames are sent as task buffers associated with the reserved video task index -1. The left and right camera frames are sent in buffer 0 and 1, respectively.
> Request example:
{
"Task":{
"Index":1,
"Type":"StartVideo"
}
}
> Response example:
{
"Task":{
"Index":1,
"Type":"StartVideo",
"Output":{
"codec":"JPEG",
"format":"YUV420",
"width":510,
"height":380
},
"State":"Completed"
}
}
Client request for the StartVideo
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | A unique identifier generated by the client. | |
Type | string | "StartVideo" |
Server response for the StartVideo
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | The unique identifier generated by the client. | |
Type | string | "StartVideo" | |
Output | Settings.Video | optional | The video settings. |
State | TaskState | optional | The current state of the task. |
Error | string | optional | A string describing the error if the task has failed. |
Stop the video stream.
> Request example:
{
"Task":{
"Index":1,
"Type":"StopVideo"
}
}
> Response example:
{
"Task":{
"Index":1,
"Type":"StopVideo",
"State":"Completed"
}
}
Client request for the StopVideo
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | A unique identifier generated by the client. | |
Type | string | "StopVideo" |
Server response for the StopVideo
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | The unique identifier generated by the client. | |
Type | string | "StopVideo" | |
State | TaskState | optional | The current state of the task. |
Error | string | optional | A string describing the error if the task has failed. |
Get system information including the serial number, disk space and installed and available software versions.
Request example:
{
"Task":{
"Index":1,
"Type":"SystemInfo",
"Input":{
"installed":["server","frontend"],
"available":["server","frontend"]
}
}
}
Response example:
{
"Task":{
"Index":1,
"Type":"SystemInfo"
"Input":{
"installed":["server","frontend"],
"available":["server","frontend"]
}
"Output":{
"serialNumber":"1000000012345678",
"diskSpace":{"available":8523210752,"capacity":15082610688},
"software:{
"installed":[
{
"name":"server",
"version":{
"major":2,
"minor":21,
"patch":119,
"string":"2.21.119"
}
},
{
"name":"frontend",
"version":{
"major":2,
"minor":14,
"patch":39,
"string":"2.14.39"
}
}
},
]
},
"State":"Completed"
}
}
Client request for the SystemInfo
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | A unique identifier generated by the client. | |
Type | string | "SystemInfo" | |
Input | Settings.Software | optional | Software settings. |
Server response for the SystemInfo
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | The unique identifier generated by the client. | |
Type | string | "SystemInfo" | |
Input | Settings.Software | optional | The requested software settings. |
Output | Descriptors.System | The system descriptor. | |
State | TaskState | optional | The current state of the task. |
Error | string | optional | A string describing the error if the task has failed. |
Apply a rigid transformation to a group.
> Request example:
{
"Task":{
"Index":1,
"Type":"TransformGroup",
"Input":{
"index":1,
"rotation":[0.5, 1.0, 1.5],
"translation":[10, 20, 30]
}
}
}
> Response example:
{
"Task":{
"Index":1,
"Type":"TransformGroup",
"Input":{
"index":1,
"rotation":[0.5, 1.0, 1.5],
"translation":[10, 20, 30]
},
"Output":{
"groups":[
{
"index":1,
"name":"Group 1",
"rotation":[0.5, 1.0, 1.5],
"translation":[10, 20, 30]
}
]
},
"State":"Completed"
}
}
Client request for the TransformGroup
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | A unique identifier generated by the client. | |
Type | string | "TransformGroup" | |
Input | Settings.Group | The group settings containing the requested rotation and translation. |
Server response for the TransformGroup
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | The unique identifier generated by the client. | |
Type | string | "TransformGroup" | |
Input | Settings.Group | The group settings containing the requested rotation and translation. | |
Output | Descriptors.Project.Group | The root scan group in the current open project. | |
State | TaskState | optional | The current state of the task. |
Error | string | optional | A string describing the error if the task has failed. |
Get the turntable calibration descriptor.
> Request example:
{
"Task":{
"Index":1,
"Type":"TurntableCalibration"
}
}
> Response example:
{
"Task":{
"Index":1,
"Type":"TurntableCalibration",
"Output":{
"date":[2024,4,27,16,57,35],
"quality":"Excellent",
"focus":[300,320]
},
"State":"Completed"
}
}
Client request for the TurntableCalibration
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | A unique identifier generated by the client. | |
Type | string | "TurntableCalibration" |
Server response for the TurntableCalibration
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | The unique identifier generated by the client. | |
Type | string | "TurntableCalibration" | |
Output | Descriptors.Calibration.Turntable | optional | The turntable calibration descriptor. |
State | TaskState | optional | The current state of the task. |
Error | string | optional | A string describing the error if the task has failed. |
Update scanner settings.
> Request example:
{
"Task":{
"Index":1,
"Type":"UpdateSettings",
"Input":{
"camera":{
"analogGain":256,
"digitalGain":320,
"exposure":18000
}
}
}
}
> Response example:
{
"Task":{
"Index":1,
"Type":"UpdateSettings",
"Input":{
"camera":{
"analogGain":256,
"digitalGain":320,
"exposure":18000
}
},
"Output":{
"camera":{
"analogGain":{"default":512.0,"max":1024.0,"min":256.0,"value":256.0},
"autoExposure":{"default":false,"value":false},
"digitalGain":{"default":256,"max":65536,"min":256,"value":320},
"exposure":{"default":27000,"max":90000,"min":9000,"value":18000},
},
"projector":{
"brightness":{"default":0.5,"max":1.0,"min":0.0,"value":0.800000011920929},
"on":{"default":false,"value":true}
},
"turntable":{
"steps":{"default":8,"max":24,"min":1,"value":3},
"sweep":{"default":360,"max":360,"min":5,"value":90},
"use":{"default":true,"value":true}
},
"capture":{
"quality":{"default":"Medium","value":"Medium"},
"texture":{"default":true,"value":true}
},
"i18n":{
"language":{"default":"en","value":"en"}
},
"style":{
"theme":{"default":"Dark","value":"Dark"}
},
"viewer":{
"textureOpacity":{"default":0.5,"max":1.0,"min":0.0,"value":1.0}
}
},
"State":"Completed"
}
}
Client request for the UpdateSettings
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | A unique identifier generated by the client. | |
Type | string | "UpdateSettings" | |
Input | Settings.Scanner | Scanner settings. |
Server response for the UpdateSettings
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | The unique identifier generated by the client. | |
Type | string | "UpdateSettings" | |
Input | Settings.Scanner | The requested scanner settings. | |
Output | Descriptors.Settings.Scanner | optional | The scanner settings descriptor. |
State | TaskState | optional | The current state of the task. |
Error | string | optional | A string describing the error if the task has failed. |
Upload a project to the scanner. The project must be archived in a ZIP file.
> Request example:
{
"Task":{
"Index":1,
"Type":"UploadProject"
}
}
> Buffer message from client.
{
"Buffer":{
"Index":0,
"Size":15682096,
"Task":{
"Index":1,
"Type":"UploadProject"
}
}
}
> Binary data transfer from client: The project zip file [15682096 bytes]. > Response example:
{
"Task":{
"Index":1,
"Type":"UploadProject"
"State":"Completed"
}
}
Client buffer message for the UploadProject
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | The zero-based index identifying the data buffer. | |
Size | uint64 | The size of the incoming data buffer in bytes. | |
Task | Task | The requested UploadProject task. |
Client request for the UploadProject
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | A unique identifier generated by the client. | |
Type | string | "UploadProject" |
Server response for the UploadProject
task.
Field | Type | Label | Description |
---|---|---|---|
Index | int32 | The unique identifier generated by the client. | |
Type | string | "UploadProject" | |
State | TaskState | optional | The current state of the task. |
Error | string | optional | A string describing the error if the task has failed. |
Three scanner API.
Method Name | Request Type | Response Type | Description |
---|---|---|---|
ListNetworkInterfaces | ListNetworkInterfaces.Request | ListNetworkInterfaces.Response | List available wifi networks. |
ListWifi | ListWifi.Request | ListWifi.Response | List available wifi networks. |
ConnectWifi | ConnectWifi.Request | ConnectWifi.Response | Connect to a wifi network. |
ForgetWifi | ForgetWifi.Request | ForgetWifi.Response | Forget all wifi connections. |
ListSettings | ListSettings.Request | ListSettings.Response | Get scanner settings. |
PushSettings | PushSettings.Request | PushSettings.Response | Push the current scanner settings to the settings stack. |
PopSettings | PopSettings.Request | PopSettings.Response | Pop and restore scanner settings from the settings stack. |
UpdateSettings | UpdateSettings.Request | UpdateSettings.Response | Update scanner settings. |
ListProjects | ListProjects.Request | ListProjects.Response | List all projects. |
DownloadProject | DownloadProject.Request | DownloadProject.Response | Download a project from the scanner. |
UploadProject | UploadProject.Request | UploadProject.Response | Upload a project to the scanner. |
NewProject | NewProject.Request | NewProject.Response | Create a new project. |
OpenProject | OpenProject.Request | OpenProject.Response | Open an existing project. |
CloseProject | CloseProject.Request | CloseProject.Response | Close the current open project. |
RemoveProjects | RemoveProjects.Request | RemoveProjects.Response | Remove selected projects. |
ListGroups | ListGroups.Request | ListGroups.Response | List the scan groups in the current open project. |
ListScans | ListScans.Request | ListScans.Response | List the scans in the current open project. |
ScanData | ScanData.Request | ScanData.Response | Download the raw scan data for a scan in the current open project. |
SetProject | SetProject.Request | SetProject.Response | Apply settings to the current open project. |
SetGroup | SetGroup.Request | SetGroup.Response | Set scan group properties. |
NewGroup | NewGroup.Request | NewGroup.Response | Create a new scan group. |
MoveGroup | MoveGroup.Request | MoveGroup.Response | Move a scan group. |
FlattenGroup | FlattenGroup.Request | FlattenGroup.Response | Flatten a scan group such that it only consists of single scans. |
SplitGroup | SplitGroup.Request | SplitGroup.Response | Split a scan group (ie. move its subgroups to its parent group). |
TransformGroup | TransformGroup.Request | TransformGroup.Response | Apply a rigid transformation to a group. |
RemoveGroups | RemoveGroups.Request | RemoveGroups.Response | Remove selected scan groups. |
BoundingBox | BoundingBox.Request | BoundingBox.Response | Get the bounding box of a set of scan groups. |
Align | Align.Request | Align.Response | Align two scan groups. |
Merge | Merge.Request | Merge.Response | Merge two or more scan groups. |
MergeData | MergeData.Request | MergeData.Response | Download the raw scan data for the current merge process. |
AddMergeToProject | AddMergeToProject.Request | AddMergeToProject.Response | Add a merged scan to the current project. |
ListExportFormats | ListExportFormats.Request | ListExportFormats.Response | List all export formats. |
Export | Export.Request | Export.Response | Export a group of scans. |
ExportMerge | ExportMerge.Request | ExportMerge.Response | Export a merged scan. |
ExportLogs | ExportLogs.Request | ExportLogs.Response | Export scanner logs. |
HasCameras | HasCameras.Request | HasCameras.Response | Check if the scanner has working cameras. |
HasProjector | HasProjector.Request | HasProjector.Response | Check if the scanner has a working projector. |
HasTurntable | HasTurntable.Request | HasTurntable.Response | Check if the scanner is connected to a working turntable. |
SystemInfo | SystemInfo.Request | SystemInfo.Response | Get system information. |
CameraCalibration | CameraCalibration.Request | CameraCalibration.Response | Get the camera calibration descriptor. |
TurntableCalibration | TurntableCalibration.Request | TurntableCalibration.Response | Get the turntable calibration descriptor. |
CalibrationCaptureTargets | CalibrationCaptureTargets.Request | CalibrationCaptureTargets.Response | Get the calibration capture target for each camera calibration capture. |
CalibrateCameras | CalibrateCameras.Request | CalibrateCameras.Response | Calibrate the cameras. |
CalibrateTurntable | CalibrateTurntable.Request | CalibrateTurntable.Response | Calibrate the turntable. |
DetectCalibrationCard | DetectCalibrationCard.Request | DetectCalibrationCard.Response | Detect the calibration card on one or both cameras. |
RestoreFactoryCalibration | RestoreFactoryCalibration.Request | RestoreFactoryCalibration.Response | Restore factory calibration. |
StartVideo | StartVideo.Request | StartVideo.Response | Start the video stream. |
StopVideo | StopVideo.Request | StopVideo.Response | Stop the video stream. |
SetCameras | SetCameras.Request | SetCameras.Response | Apply camera settings to one or both cameras. |
SetProjector | SetProjector.Request | SetProjector.Response | Apply projector settings. |
AutoFocus | AutoFocus.Request | AutoFocus.Response | Auto focus one or both cameras. |
RotateTurntable | RotateTurntable.Request | RotateTurntable.Response | Rotate the turntable. |
NewScan | NewScan.Request | NewScan.Response | Capture a new scan. |
DepthMap | DepthMap.Request | DepthMap.Response | Capture a depth map. |
Reboot | Reboot.Request | Reboot.Response | Reboot the scanner. |
Shutdown | Shutdown.Request | Shutdown.Response | Shutdown the scanner. |