Skip to content

THREE ‐ API v11.2.0

CI edited this page Apr 5, 2025 · 3 revisions

Introduction

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.

Overview

Getting Started

Connecting to the THREE

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())

Interacting with the THREE

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.

Task Messages

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"
    }
}

Task State

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.

Buffer Messages

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. A Size 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"
    }
}

Basic Usage

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.

Setup: Using Python

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 or python3 /path/to/example.py, depending on your system configuration.

Setup: Using JavaScript

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 or nodejs /path/to/example.js, depending on your system configuration.

Interacting with a Project

Connect to the server

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.

Creating a New Project

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"
}

Opening a Project

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.

Creating a Scan

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
}

Protocol Documentation

Table of Contents

Top

MF/V3/Settings/Merge

Merge

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.

Merge.Remesh

Remesh settings.

Field Type Label Description
quality RemeshQuality optional Remesh quality.
voxelSize float optional Voxel size.
depth int32 optional Depth.
scale float optional Scale.
linearInterpolation bool optional Linear Interpolation.

Merge.Simplify

Simplify settings.

Field Type Label Description
method Merge.Simplify.Method optional Simplify method.
faceCount int32 optional Target face count.

Merge.Simplify.Method

Remesh method.

Name Number Description
QuadraticDecimation 0 Quadratic decimation.
FlowTriangles 1 Flow remesh as triangles.
FlowQuads 2 Flow remesh as quads.
FlowQuadDominant 3 Flow remesh as quad-dominant mesh.

Top

MF/V3/Settings/Wifi

Wifi

Wifi connection settings.

Field Type Label Description
ssid string The wifi ssid.
password string The wifi password.

Top

MF/V3/Settings/RemoveVertices

RemoveVertices

Remove vertices.

Field Type Label Description
scans int32 repeated The scans indexes for which vertices are removed.

Top

MF/V3/Settings/Advanced

Advanced

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.
camera Advanced.Camera optional Camera settings.
turntable Advanced.Turntable optional Turntable settings.

Advanced.AdaptiveSampling

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.

Advanced.Camera

Camera settings.

Field Type Label Description
useContinuousExposureValues bool optional

Advanced.Capture

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.

Advanced.EdgeDetection

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. |

Advanced.NormalEstimation

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.

Advanced.OutlierRemoval

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.

Advanced.PhaseFilter

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. |

Advanced.PointClipping

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.

Advanced.Remesh

Remesh settings.

Field Type Label Description
quality RemeshQuality 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.

Advanced.Sampling

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.

Advanced.Turntable

Turntable settings.

Field Type Label Description
rampAngle int32 optional The angle in degrees to slow down the turntable at the end of a rotation.
pointClippingRadius double optional The radius of the point clipping cylinder.
pointClippingMinHeight double optional The minimum height of the point clipping cylinder.
pointClippingMaxHeight double optional The maximum height of the point clipping cylinder.
use bool optional Use the turntable settings.

Top

MF/V3/Settings/Group

Group

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.

Top

MF/V3/Settings/NewGroup

NewGroup

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.

Top

MF/V3/Settings/Project

Project

Project settings.

Field Type Label Description
index int32 optional The index identifying which project the settings applies to. If undefined the current open project is used.
name string optional Project name.

Top

MF/V3/Settings/Align

Align

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.

Align.Fine

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.

Align.Fine.Transform

Field Type Label Description
rotation double repeated
translation double repeated

Align.ICP

Iterative closest point alignment settings.

Field Type Label Description
matchDistance float The maximum distance for two points to be considered a match.

Align.Points

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.

Align.Ransac

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

Align.Rough

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.

Align.Fine.Method

Fine alignment methods.

Name Number Description
None 0 No fine alignment.
ICP 1 Iterative closest point alignment.

Align.Rough.Method

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.

Top

MF/V3/Settings/Export

Export

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.
scale double optional Scale factor of the exported geometry.
color Export.Color optional

Export.Color

Settings for mapping the vertex quality to a vertex color. The specific meaning of 'quality' depends on the broader context. In the case heat maps, the quality is the point-to-mesh distance of the vertex.

Field Type Label Description
scale float optional The scale in normalizedQuality = quality * scale + offset that normalizes the quality value to the range [0, 1] which maps to the color range [blue, red] . offset must also be specified.
offset float optional The offset in normalizedQuality = quality * scale + offset that normalizes the quality value to the range [0, 1] which maps to the color range [blue, red] . scale must also be specified.
min float optional The quality value that is mapped to the minimum color (blue). max must also be specified.
max float optional The quality value that is mapped to the maximum color (red). min must also be specified.

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.

Top

MF/V3/Settings/Video

Video

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.Codec

Video codecs.

Name Number Description
NoCodec 0 No codec specified.
RAW 1 Raw encoding.
JPEG 2 JPEG encoding.
H264 3 H264 encoding.

Video.Format

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.

Top

MF/V3/Settings/ScanSelection

ScanSelection

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'.

ScanSelection.Mode

Scan selection mode.

Name Number Description
selected 0 Select user-selected groups.
visible 1 Select visible scans.
all 2 Select all scans.

Top

MF/V3/Settings/Scanner

Scanner

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.
software Software optional Software update settings.

Top

MF/V3/Settings/Scan

Scan

Scan settings.

Field Type Label Description
camera Camera optional Camera settings.
projector Projector optional Projector settings.
turntable Turntable optional Turntable settings.
capture Capture optional Capture settings.
processing Scan.Processing optional Processing settings.
alignWithScanner bool optional Align the scan with the scanner.
centerAtOrigin bool optional Center the scan at the origin.

Scan.Processing

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.

Scan.Processing.AdaptiveSampling

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.

Scan.Processing.NormalEstimation

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.

Scan.Processing.OutlierRemoval

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.

Scan.Processing.PhaseEdgeDetection

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.

Scan.Processing.PhaseFilter

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 $\exp(-(r/s)^2)$ where $r$ is the distance to the central value and $s$ 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.

Scan.Processing.PointClipping

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.

Scan.Processing.AdaptiveSampling.Type

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.

Scan.Processing.NormalEstimation.Method

Name Number Description
NORMAL_LLS 0 Linear least squares method
NORMAL_OPEN3D 1 Open3D method using KD tree search for nearest neighbors

Scan.Processing.PointClipping.Type

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.

Top

MF/V3/Settings/CopyGroups

CopyGroups

Copy scan groups settings.

Field Type Label Description
sourceIndexes int32 repeated The indexes of the groups to copy.
targetIndex int32 optional The index of the group into which the source groups are copied. If unspecified the copied groups are inserted after their respective source groups within the same parent group.
childPosition int32 optional The position among the target group's children where the copied groups are inserted. If unspecified the copied groups are appended to the end of the target group's children. Ignored if the targetIndex is unspecified or specified but does not exist.
nameSuffix string optional Optional name suffix to append to the copied group names. If unspecified the copied group names are unchanged.
enumerate bool optional Append a copy index the copied group names. e.g. ("name-2", "name-3"). Default is true. If a name suffix is specified then the first copy of each source group is not enumerated, but subsequent copies are.

Top

MF/V3/Settings/ScanData

ScanData

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.

ScanData.Buffer

Scan buffer type.

Name Number Description
Position 0 Vertex position.
Normal 1 Vertex normal.
Color 2 Vertex color.
UV 3 Vertex UVs
Quality 4 Vertex quality.
Triangle 5 Triangle index.
Texture 6 Texture.
All 7 All buffer types.

ScanData.MergeStep

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.

ScanData.Metadata

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.

Top

MF/V3/Settings/Capture

Capture

Capture settings.

Field Type Label Description
quality CaptureQuality 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.
blendCount int32 optional The number of capture images blended together for noise reduction.
horizontalBlendFrequency int32 optional The starting horizontal frequency for blending capture images for noise reduction.
verticalBlendFrequency int32 optional The starting vertical frequency for blending capture images for noise reduction.

Top

MF/V3/Settings/Style

Style

Style settings.

Field Type Label Description
theme Style.Theme optional Theme setting.

Style.Theme

Themes.

Name Number Description
Light 0 Light mode.
Dark 1 Dark mode.

Top

MF/V3/Settings/Import

Import

Import mesh settings.

Field Type Label Description
name string optional Optional name of the impored mesh. Ignored if the imported file is a zip archive, in which case the archive filenames are used.
scale double optional Optional scale factor for mesh positions. Default is 1.0.
unit Import.Unit optional Unit of imported mesh positions. Default is millimeters. Ignored if the scale is specified.
center bool optional If true the mesh is centered at the world origin. Default is true.
groupIndex int32 optional Project group index in which to add the imported meshes. Default is 0 (root group).

Import.Unit

Unit of imported mesh positions.

Name Number Description
Millimeter 0 Mesh positions in millimeters.
Centimeter 1 Mesh positions in centimeters.
Meter 2 Mesh positions in meters.
Inch 3 Mesh positions in inches.
Foot 4 Mesh positions in feet.

Top

MF/V3/Settings/Rectangle

Rectangle

Rectangle settings.

Field Type Label Description
x int32 Rectangle x offset.
y int32 Rectangle y offset.
width int32 Rectangle width.
height int32 Rectangle height.

Top

MF/V3/Settings/I18n

I18n

I18n language settings.

Field Type Label Description
language I18n.Language optional The language setting. Supported languages are ["en", "fr", "de", "zh", "ja"].

I18n.Language

Available languages.

Name Number Description
en 0
fr 1
de 2
zh 3
ja 4

Top

MF/V3/Settings/BoundingBox

BoundingBox

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.

Top

MF/V3/Settings/Turntable

Turntable

Turntable settings.

Field Type Label Description
use bool optional Use the turntable.
scans int32 The number of turntable scans.
sweep int32 Turntable angle sweep in degrees.
pointClippingRadius double optional The radius of the point clipping cylinder.
pointClippingMinHeight double optional The minimum height of the point clipping cylinder.
pointClippingMaxHeight double optional The maximum height of the point clipping cylinder.
offsetAngle double optional The offset Angle of the turntable for starting position

Top

MF/V3/Settings/Viewer

Viewer

3D Viewer settings.

Field Type Label Description
textureOpacity float optional Texture opacity.

Top

MF/V3/Settings/Camera

Camera

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.

Top

MF/V3/Settings/Tutorials

Tutorials

Tutorials settings.

Field Type Label Description
show bool optional Show tutorials.
viewed Tutorials.Viewed optional Viewed tutorials.

Tutorials.Viewed

Viewed tutorials.

Field Type Label Description
pages string repeated Viewed tutorials pages.

Top

MF/V3/Settings/Software

Software

Software settings.

Field Type Label Description
updateMajor bool optional Enable major version updates which can have breaking API changes.
updateNightly bool optional Enable nightly release candidate updates.

Top

MF/V3/Settings/CopyProject

CopyProject

Copy project settings.

Field Type Label Description
index int32 The index of the project to copy.
copyName string optional The name of project copy. If unspecified a default copy name is generated.

Top

MF/V3/Settings/HeatMap

HeatMap

Scan heat map settings.

Field Type Label Description
sources int32 repeated Set of source group indexes.
targets int32 repeated Set of target group indexes.
outlierDistance float optional Threshold for which distances are excluded from the statistics in the descriptor.

Top

MF/V3/Settings/AutoFocus

AutoFocus

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.

AutoFocus.Camera

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.

Top

MF/V3/Settings/Quality

CaptureQuality

Capture quality settings.

Name Number Description
LowCapture 0 Low quality.
MediumCapture 1 Medium quality.
HighCapture 2 High quality.

RemeshQuality

Remesh quality settings.

Name Number Description
VeryLowRemesh 0 Very low remesh quality.
LowRemesh 1 Low remesh quality.
MediumRemesh 2 Medium remesh quality.
HighRemesh 3 High remesh quality.
VeryHighRemesh 4 Very high remesh quality.

Top

MF/V3/Settings/Projector

Projector

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

Projector image settings

Field Type Label Description
source Projector.Image.Source Image source.
target Rectangle Image target rectangle.

Projector.Image.Source

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.

Projector.Pattern

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]

Projector.Orientation

Pattern orientation.

Name Number Description
Horizontal 0 Horizontal pattern. Image columns are identical.
Vertical 1 Vertical pattern. Image rows are identical.

Top

MF/V3/Settings/CaptureImage

CaptureImage

Capture image settings.

Field Type Label Description
selection int32 repeated Camera selection. Default is all cameras.
codec CaptureImage.Codec optional Image codec. Default is jpg.
grayscale bool optional Capture 8-bit grayscale image. Default is false (BGR888).

CaptureImage.Codec

Image codecs.

Name Number Description
jpg 0 JPEG encoding.
png 1 PNG encoding.
bmp 2 Bitmap encoding.
raw 3 Raw pixel data (no encoding).

Top

MF/V3/Buffer

Buffer

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.

Top

MF/V3/Three

Three

Three scanner API.

Method Name Request Type Response Type Description
ListNetworkInterfaces Tasks.ListNetworkInterfaces.Request Tasks.ListNetworkInterfaces.Response List available wifi networks.
ListWifi Tasks.ListWifi.Request Tasks.ListWifi.Response List available wifi networks.
ConnectWifi Tasks.ConnectWifi.Request Tasks.ConnectWifi.Response Connect to a wifi network.
ForgetWifi Tasks.ForgetWifi.Request Tasks.ForgetWifi.Response Forget all wifi connections.
ListSettings Tasks.ListSettings.Request Tasks.ListSettings.Response Get scanner settings.
PushSettings Tasks.PushSettings.Request Tasks.PushSettings.Response Push the current scanner settings to the settings stack.
PopSettings Tasks.PopSettings.Request Tasks.PopSettings.Response Pop and restore scanner settings from the settings stack.
UpdateSettings Tasks.UpdateSettings.Request Tasks.UpdateSettings.Response Update scanner settings.
ListProjects Tasks.ListProjects.Request Tasks.ListProjects.Response List all projects.
DownloadProject Tasks.DownloadProject.Request Tasks.DownloadProject.Response Download a project from the scanner.
UploadProject Tasks.UploadProject.Request Tasks.UploadProject.Response Upload a project to the scanner.
NewProject Tasks.NewProject.Request Tasks.NewProject.Response Create a new project.
OpenProject Tasks.OpenProject.Request Tasks.OpenProject.Response Open an existing project.
ClearSettings Tasks.ClearSettings.Request Tasks.ClearSettings.Response Clear scanner settings and restore the default values.
CloseProject Tasks.CloseProject.Request Tasks.CloseProject.Response Close the current open project.
CopyGroups Tasks.CopyGroups.Request Tasks.CopyGroups.Response Copy a set of scan groups in the current open project.
RemoveProjects Tasks.RemoveProjects.Request Tasks.RemoveProjects.Response Remove selected projects.
ListGroups Tasks.ListGroups.Request Tasks.ListGroups.Response List the scan groups in the current open project.
ListScans Tasks.ListScans.Request Tasks.ListScans.Response List the scans in the current open project.
ScanData Tasks.ScanData.Request Tasks.ScanData.Response Download the raw scan data for a scan in the current open project.
SetProject Tasks.SetProject.Request Tasks.SetProject.Response Apply settings to the current open project.
SetGroup Tasks.SetGroup.Request Tasks.SetGroup.Response Set scan group properties.
NewGroup Tasks.NewGroup.Request Tasks.NewGroup.Response Create a new scan group.
MoveGroup Tasks.MoveGroup.Request Tasks.MoveGroup.Response Move a scan group.
FactoryReset Tasks.FactoryReset.Request Tasks.FactoryReset.Response Reset the scanner to factory settings.
FlattenGroup Tasks.FlattenGroup.Request Tasks.FlattenGroup.Response Flatten a scan group such that it only consists of single scans.
SplitGroup Tasks.SplitGroup.Request Tasks.SplitGroup.Response Split a scan group (ie. move its subgroups to its parent group).
TransformGroup Tasks.TransformGroup.Request Tasks.TransformGroup.Response Apply a rigid transformation to a group.
RemoveGroups Tasks.RemoveGroups.Request Tasks.RemoveGroups.Response Remove selected scan groups.
BoundingBox Tasks.BoundingBox.Request Tasks.BoundingBox.Response Get the bounding box of a set of scan groups.
Align Tasks.Align.Request Tasks.Align.Response Align two scan groups.
HeatMap Tasks.HeatMap.Request Tasks.HeatMap.Response Compute the point-to-mesh distances of a source mesh to a target mesh and visualize as a heat map.
Merge Tasks.Merge.Request Tasks.Merge.Response Merge two or more scan groups.
MergeData Tasks.MergeData.Request Tasks.MergeData.Response Download the raw scan data for the current merge process.
AddMergeToProject Tasks.AddMergeToProject.Request Tasks.AddMergeToProject.Response Add a merged scan to the current project.
Import Tasks.Import.Request Tasks.Import.Response Import a set of 3D meshes to the current open project. The meshes must be archived in a ZIP file.
ListExportFormats Tasks.ListExportFormats.Request Tasks.ListExportFormats.Response List all export formats.
Export Tasks.Export.Request Tasks.Export.Response Export a group of scans.
ExportHeatMap Tasks.ExportHeatMap.Request Tasks.ExportHeatMap.Response Export a mesh with vertex colors generated by the 'HeatMap' task.
ExportMerge Tasks.ExportMerge.Request Tasks.ExportMerge.Response Export a merged scan.
ExportLogs Tasks.ExportLogs.Request Tasks.ExportLogs.Response Export scanner logs.
ExportFactoryCalibrationLogs Tasks.ExportFactoryCalibrationLogs.Request Tasks.ExportFactoryCalibrationLogs.Response Export factory calibration logs.
HasCameras Tasks.HasCameras.Request Tasks.HasCameras.Response Check if the scanner has working cameras.
HasProjector Tasks.HasProjector.Request Tasks.HasProjector.Response Check if the scanner has a working projector.
HasTurntable Tasks.HasTurntable.Request Tasks.HasTurntable.Response Check if the scanner is connected to a working turntable.
SystemInfo Tasks.SystemInfo.Request Tasks.SystemInfo.Response Get system information.
CameraCalibration Tasks.CameraCalibration.Request Tasks.CameraCalibration.Response Get the camera calibration descriptor.
TurntableCalibration Tasks.TurntableCalibration.Request Tasks.TurntableCalibration.Response Get the turntable calibration descriptor.
CalibrationCaptureTargets Tasks.CalibrationCaptureTargets.Request Tasks.CalibrationCaptureTargets.Response Get the calibration capture target for each camera calibration capture.
CalibrateCameras Tasks.CalibrateCameras.Request Tasks.CalibrateCameras.Response Calibrate the cameras.
CalibrateTurntable Tasks.CalibrateTurntable.Request Tasks.CalibrateTurntable.Response Calibrate the turntable.
DetectCalibrationCard Tasks.DetectCalibrationCard.Request Tasks.DetectCalibrationCard.Response Detect the calibration card on one or both cameras.
RestoreFactoryCalibration Tasks.RestoreFactoryCalibration.Request Tasks.RestoreFactoryCalibration.Response Restore factory calibration.
StartVideo Tasks.StartVideo.Request Tasks.StartVideo.Response Start the video stream.
StopVideo Tasks.StopVideo.Request Tasks.StopVideo.Response Stop the video stream.
SetCameras Tasks.SetCameras.Request Tasks.SetCameras.Response Apply camera settings to one or both cameras.
SetProjector Tasks.SetProjector.Request Tasks.SetProjector.Response Apply projector settings.
AutoFocus Tasks.AutoFocus.Request Tasks.AutoFocus.Response Auto focus one or both cameras.
RotateTurntable Tasks.RotateTurntable.Request Tasks.RotateTurntable.Response Rotate the turntable.
NewScan Tasks.NewScan.Request Tasks.NewScan.Response Capture a new scan.
CaptureImage Tasks.CaptureImage.Request Tasks.CaptureImage.Response Capture a single Image.
DepthMap Tasks.DepthMap.Request Tasks.DepthMap.Response Capture a depth map.
Reboot Tasks.Reboot.Request Tasks.Reboot.Response Reboot the scanner.
Shutdown Tasks.Shutdown.Request Tasks.Shutdown.Response Shutdown the scanner.

Top

MF/V3/Tasks/Merge

Merge

Merge two or more scan groups.

> Request example:

{
    "Task":{
        "Index":1,
        "Type":"Merge",
        "Input":{
            "selection":{"mode":"visible"},
            "remesh":{
                "method": "FlowTriangles",
                "quality": "Medium"
            },
            "simplify":{"triangleCount": 20000 }
        }
    }
}

> Response example:

{
    "Task":{
        "Index":1,
        "Type":"Merge",
        "Input":{
            "selection":{"mode":"visible"},
            "remesh":{
                "method": "FlowTriangles",
                "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"
    }
}

Merge.Request

Client request for the Merge task.

Field Type Label Description
Index int32 A unique identifier generated by the client.
Type string "Merge"
Input MF.V3.Settings.Merge The merge settings.

Merge.Response

Server response for the Merge task.

Field Type Label Description
Index int32 The unique identifier generated by the client.
Type string "Merge"
Input MF.V3.Settings.Merge The requested merge settings.
Output MF.V3.Descriptors.Merge The merge descriptor.
State MF.V3.TaskState optional The current state of the task.
Error string optional A string describing the error if the task has failed.

Top

MF/V3/Tasks/FlattenGroup

FlattenGroup

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"
    }
}

FlattenGroup.Request

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.

FlattenGroup.Response

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 MF.V3.Descriptors.Project.Group The root scan group in the current open project.
State MF.V3.TaskState optional The current state of the task.
Error string optional A string describing the error if the task has failed.

Top

MF/V3/Tasks/ListProjects

ListProjects

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"
    }
}

ListProjects.Request

Client request for the ListProjects task.

Field Type Label Description
Index int32 A unique identifier generated by the client.
Type string "ListProjects"

ListProjects.Response

Server response for the ListProjects task.

Field Type Label Description
Index int32 The unique identifier generated by the client.
Type string "ListProjects"
Output MF.V3.Descriptors.Project.Brief optional Brief project descriptors.
State MF.V3.TaskState optional The current state of the task.
Error string optional A string describing the error if the task has failed.

Top

MF/V3/Tasks/HasCameras

HasCameras

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"
    }
}

HasCameras.Request

Client request for the HasCameras task.

Field Type Label Description
Index int32 A unique identifier generated by the client.
Type string "HasCameras"

HasCameras.Response

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 MF.V3.TaskState optional The current state of the task.
Error string optional A string describing the error if the task has failed.

Top

MF/V3/Tasks/ListSettings

ListSettings

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":{
                "scans":{"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"
    }
}

ListSettings.Request

Client request for the ListSettings task.

Field Type Label Description
Index int32 A unique identifier generated by the client.
Type string "ListSettings"

ListSettings.Response

Server response for the ListSettings task.

Field Type Label Description
Index int32 The unique identifier generated by the client.
Type string "ListSettings"
Output MF.V3.Descriptors.Settings.Scanner optional The scanner settings descriptor.
State MF.V3.TaskState optional The current state of the task.
Error string optional A string describing the error if the task has failed.

Top

MF/V3/Tasks/TransformGroup

TransformGroup

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"
    }
}

TransformGroup.Request

Client request for the TransformGroup task.

Field Type Label Description
Index int32 A unique identifier generated by the client.
Type string "TransformGroup"
Input MF.V3.Settings.Group The group settings containing the requested rotation and translation.

TransformGroup.Response

Server response for the TransformGroup task.

Field Type Label Description
Index int32 The unique identifier generated by the client.
Type string "TransformGroup"
Input MF.V3.Settings.Group The group settings containing the requested rotation and translation.
Output MF.V3.Descriptors.Project.Group The root scan group in the current open project.
State MF.V3.TaskState optional The current state of the task.
Error string optional A string describing the error if the task has failed.

Top

MF/V3/Tasks/UpdateSettings

UpdateSettings

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":{
                "scans":{"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"
    }
}

UpdateSettings.Request

Client request for the UpdateSettings task.

Field Type Label Description
Index int32 A unique identifier generated by the client.
Type string "UpdateSettings"
Input MF.V3.Settings.Scanner Scanner settings.

UpdateSettings.Response

Server response for the UpdateSettings task.

Field Type Label Description
Index int32 The unique identifier generated by the client.
Type string "UpdateSettings"
Input MF.V3.Settings.Scanner The requested scanner settings.
Output MF.V3.Descriptors.Settings.Scanner optional The scanner settings descriptor.
State MF.V3.TaskState optional The current state of the task.
Error string optional A string describing the error if the task has failed.

Top

MF/V3/Tasks/SetGroup

SetGroup

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"
    }
}

SetGroup.Request

Client request for the SetGroup task.

Field Type Label Description
Index int32 A unique identifier generated by the client.
Type string "SetGroup"
Input MF.V3.Settings.Group The requested group settings.

SetGroup.Response

Server response for the SetGroup task.

Field Type Label Description
Index int32 The unique identifier generated by the client.
Type string "SetGroup"
Input MF.V3.Settings.Group The requested group settings.
Output MF.V3.Descriptors.Project.Group The root scan group in the current open project.
State MF.V3.TaskState optional The current state of the task.
Error string optional A string describing the error if the task has failed.

Top

MF/V3/Tasks/SystemInfo

SystemInfo

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"
    }
}

SystemInfo.Request

Client request for the SystemInfo task.

Field Type Label Description
Index int32 A unique identifier generated by the client.
Type string "SystemInfo"
Input MF.V3.Settings.Software optional Software settings.

SystemInfo.Response

Server response for the SystemInfo task.

Field Type Label Description
Index int32 The unique identifier generated by the client.
Type string "SystemInfo"
Input MF.V3.Settings.Software optional The requested software settings.
Output MF.V3.Descriptors.System The system descriptor.
State MF.V3.TaskState optional The current state of the task.
Error string optional A string describing the error if the task has failed.

Top

MF/V3/Tasks/UploadProject

UploadProject

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"
    }
}

UploadProject.Buffer

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 MF.V3.Task The requested UploadProject task.

UploadProject.Request

Client request for the UploadProject task.

Field Type Label Description
Index int32 A unique identifier generated by the client.
Type string "UploadProject"

UploadProject.Response

Server response for the UploadProject task.

Field Type Label Description
Index int32 The unique identifier generated by the client.
Type string "UploadProject"
State MF.V3.TaskState optional The current state of the task.
Error string optional A string describing the error if the task has failed.

Top

MF/V3/Tasks/CalibrateTurntable

CalibrateTurntable

Calibrate the turntable.

> Request example:

{
    "Task":{
        "Index":1,
        "Type":"CalibrateTurntable"
    }
}

> Response example:

{
    "Task":{
        "Index":1,
        "Type":"CalibrateTurntable",
        "Output":{
            "date":[2024,4,27,16,57,35],
            "quality":"Excellent",
            "focus":[300,320]
        },
        "State":"Completed"
    }
}

CalibrateTurntable.Request

Client request for the CalibrateTurntable task.

Field Type Label Description
Index int32 A unique identifier generated by the client.
Type string "CalibrateTurntable"

CalibrateTurntable.Response

Server response for the CalibrateTurntable task.

Field Type Label Description
Index int32 The unique identifier generated by the client.
Type string "CalibrateTurntable"
Output MF.V3.Descriptors.Calibration.Turntable optional The Turntable calibration descriptor.
State MF.V3.TaskState optional The current state of the task.
Error string optional A string describing the error if the task has failed.

Top

MF/V3/Tasks/ConnectWifi

ConnectWifi

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"
    }
}

ConnectWifi.Request

Client request for the ConnectWifi task.

Field Type Label Description
Index int32 A unique identifier generated by the client.
Type string "ConnectWifi"
Input MF.V3.Settings.Wifi Wifi settings.

ConnectWifi.Response

Server response for the ConnectWifi task.

Field Type Label Description
Index int32 The unique identifier generated by the client.
Type string "ConnectWifi"
Input MF.V3.Settings.Wifi The requested wifi settings.
State MF.V3.TaskState optional The current state of the task.
Error string optional A string describing the error if the task has failed.

Top

MF/V3/Tasks/NewGroup

NewGroup

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"
    }
}

NewGroup.Request

Client request for the NewGroup task.

Field Type Label Description
Index int32 A unique identifier generated by the client.
Type string "NewGroup"
Input MF.V3.Settings.NewGroup optional The requested new group settings.

NewGroup.Response

Server response for the NewGroup task.

Field Type Label Description
Index int32 The unique identifier generated by the client.
Type string "NewGroup"
Input MF.V3.Settings.NewGroup optional The requested new group settings.
Output MF.V3.Descriptors.Project.Group The root scan group in the current open project.
State MF.V3.TaskState optional The current state of the task.
Error string optional A string describing the error if the task has failed.

Top

MF/V3/Tasks/RemoveProjects

RemoveProjects

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"
    }
}

RemoveProjects.Request

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.

RemoveProjects.Response

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 MF.V3.Descriptors.Project.Brief optional Brief descriptors of the remaining projects.
State MF.V3.TaskState optional The current state of the task.
Error string optional A string describing the error if the task has failed.

Top

MF/V3/Tasks/SetProjector

SetProjector

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"
    }
}

SetProjector.Request

Client request for the SetProjector task.

Field Type Label Description
Index int32 A unique identifier generated by the client.
Type string "SetProjector"
Input MF.V3.Settings.Projector optional Projector settings.

SetProjector.Response

Server response for the SetProjector task.

Field Type Label Description
Index int32 The unique identifier generated by the client.
Type string "SetProjector"
Input MF.V3.Settings.Projector optional Requested projector settings.
Output MF.V3.Descriptors.Settings.Projector optional Actual projector settings after applying the requested settings.
State MF.V3.TaskState optional The current state of the task.
Error string optional A string describing the error if the task has failed.

Top

MF/V3/Tasks/Shutdown

Shutdown

Shutdown the scanner.

> Request example:

{
    "Task":{
        "Index":1,
        "Type":"Shutdown"
    }
}

> Response example:

{
    "Task":{
        "Index":1,
        "Type":"Shutdown"
        "State":"Completed"
    }
}

Shutdown.Request

Client request for the Shutdown task.

Field Type Label Description
Index int32 A unique identifier generated by the client.
Type string "Shutdown"

Shutdown.Response

Server response for the Shutdown task.

Field Type Label Description
Index int32 The unique identifier generated by the client.
Type string "Shutdown"
State MF.V3.TaskState optional The current state of the task.
Error string optional A string describing the error if the task has failed.

Top

MF/V3/Tasks/CloseProject

CloseProject

Close the current open project.

> Request example:

{
    "Task":{
        "Index":1,
        "Type":"CloseProject",
    }
}

> Response example:

{
    "Task":{
        "Index":1,
        "Type":"CloseProject",
        "State":"Completed"
    }
}

CloseProject.Request

Client request for the CloseProject task.

Field Type Label Description
Index int32 A unique identifier generated by the client.
Type string "CloseProject"

CloseProject.Response

Server response for the CloseProject task.

Field Type Label Description
Index int32 The unique identifier generated by the client.
Type string "CloseProject"
State MF.V3.TaskState optional The current state of the task.
Error string optional A string describing the error if the task has failed.

Top

MF/V3/Tasks/AddMergeToProject

AddMergeToProject

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"
    }
}

AddMergeToProject.Request

Client request for the AddMergeToProject task.

Field Type Label Description
Index int32 A unique identifier generated by the client.
Type string "AddMergeToProject"

AddMergeToProject.Response

Server response for the AddMergeToProject task.

Field Type Label Description
Index int32 The unique identifier generated by the client.
Type string "AddMergeToProject"
Output MF.V3.Descriptors.Project.Group The root scan group in the current open project.
State MF.V3.TaskState optional The current state of the task.
Error string optional A string describing the error if the task has failed.

Top

MF/V3/Tasks/HasTurntable

HasTurntable

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"
    }
}

HasTurntable.Request

Client request for the HasTurntable task.

Field Type Label Description
Index int32 A unique identifier generated by the client.
Type string "HasTurntable"

HasTurntable.Response

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 MF.V3.TaskState optional The current state of the task.
Error string optional A string describing the error if the task has failed.

Top

MF/V3/Tasks/Reboot

Reboot

Reboot the scanner.

> Request example:

{
    "Task":{
        "Index":1,
        "Type":"Reboot"
    }
}

> Response example:

{
    "Task":{
        "Index":1,
        "Type":"Reboot"
        "State":"Completed"
    }
}

Reboot.Request

Client request for the Reboot task.

Field Type Label Description
Index int32 A unique identifier generated by the client.
Type string "Reboot"

Reboot.Response

Server response for the Reboot task.

Field Type Label Description
Index int32 The unique identifier generated by the client.
Type string "Reboot"
State MF.V3.TaskState optional The current state of the task.
Error string optional A string describing the error if the task has failed.

Top

MF/V3/Tasks/ExportMerge

ExportMerge

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"
    }
}

ExportMerge.Buffer

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 MF.V3.Task The requested ExportMerge task.

ExportMerge.Request

Client request for the ExportMerge task.

Field Type Label Description
Index int32 A unique identifier generated by the client.
Type string "ExportMerge"
Input MF.V3.Settings.Export Export settings.

ExportMerge.Response

Server response for the ExportMerge task.

Field Type Label Description
Index int32 The unique identifier generated by the client.
Type string "ExportMerge"
Input MF.V3.Settings.Export Requested export settings.
State MF.V3.TaskState optional The current state of the task.
Error string optional A string describing the error if the task has failed.

Top

MF/V3/Tasks/Align

Align

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"
    }
}

Align.Request

Client request for the Align task.

Field Type Label Description
Index int32 A unique identifier generated by the client.
Type string "Align"
Input MF.V3.Settings.Align The align settings.

Align.Response

Server response for the Align task.

Field Type Label Description
Index int32 The unique identifier generated by the client.
Type string "Align"
Input MF.V3.Settings.Align The requested align settings.
Output MF.V3.Descriptors.Transform The transform that aligns the source scan group to the target scan group.
State MF.V3.TaskState optional The current state of the task.
Error string optional A string describing the error if the task has failed.

Top

MF/V3/Tasks/DetectCalibrationCard

DetectCalibrationCard

Turns on the detection the calibration card on one or both cameras. Use the Video Frame Descriptor to get the results of the detection.

> Request example:

{
    "Task":{
        "Index":1,
        "Type":"DetectCalibrationCard",
        "Input":3
    }
}

> Response example:

{
    "Task":{
        "Index":1,
        "Input":3,
        "Type":"DetectCalibrationCard",
        "State":"Completed"
    }
}

DetectCalibrationCard.Request

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 start the detection the calibration card. [0: neither camera (disable), 1: left camera, 2: right camera, 3: both cameras]

DetectCalibrationCard.Response

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 start the detection the calibration card. [0: neither camera (disable), 1: left camera, 2: right camera, 3: both cameras]
State MF.V3.TaskState optional The current state of the task.
Error string optional A string describing the error if the task has failed.

Top

MF/V3/Tasks/ListWifi

ListWifi

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"
    }
}

ListWifi.Request

Client request for the ListWifi task.

Field Type Label Description
Index int32 A unique identifier generated by the client.
Type string "ListWifi"

ListWifi.Response

Server response for the ListWifi task.

Field Type Label Description
Index int32 The unique identifier generated by the client.
Type string "ListWifi"
Output MF.V3.Descriptors.Wifi optional The wifi descriptor.
State MF.V3.TaskState optional The current state of the task.
Error string optional A string describing the error if the task has failed.

Top

MF/V3/Tasks/TurntableCalibration

TurntableCalibration

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"
    }
}

TurntableCalibration.Request

Client request for the TurntableCalibration task.

Field Type Label Description
Index int32 A unique identifier generated by the client.
Type string "TurntableCalibration"

TurntableCalibration.Response

Server response for the TurntableCalibration task.

Field Type Label Description
Index int32 The unique identifier generated by the client.
Type string "TurntableCalibration"
Output MF.V3.Descriptors.Calibration.Turntable optional The turntable calibration descriptor.
State MF.V3.TaskState optional The current state of the task.
Error string optional A string describing the error if the task has failed.

Top

MF/V3/Tasks/Export

Export

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"
    }
}

Export.Buffer

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 MF.V3.Task The requested Export task.

Export.Request

Client request for the Export task.

Field Type Label Description
Index int32 A unique identifier generated by the client.
Type string "Export"
Input MF.V3.Settings.Export Export settings.

Export.Response

Server response for the Export task.

Field Type Label Description
Index int32 The unique identifier generated by the client.
Type string "Export"
Input MF.V3.Settings.Export Requested export settings.
State MF.V3.TaskState optional The current state of the task.
Error string optional A string describing the error if the task has failed.

Top

MF/V3/Tasks/NewScan

NewScan

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"
    }
}

NewScan.Request

Client request for the NewScan task.

Field Type Label Description
Index int32 A unique identifier generated by the client.
Type string "NewScan"
Input MF.V3.Settings.Scan optional Scan settings.

NewScan.Response

Server response for the NewScan task.

Field Type Label Description
Index int32 The unique identifier generated by the client.
Type string "NewScan"
Input MF.V3.Settings.Scan optional Requested scan settings.
Output MF.V3.Descriptors.Project.Group optional Project group descriptor with the updated list of scans.
State MF.V3.TaskState optional The current state of the task.
Error string optional A string describing the error if the task has failed.

Top

MF/V3/Tasks/SetProject

SetProject

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"
    }
}

SetProject.Request

Client request for the SetProject task.

Field Type Label Description
Index int32 A unique identifier generated by the client.
Type string "SetProject"
Input MF.V3.Settings.Project optional Project settings.

SetProject.Response

Server response for the SetProject task.

Field Type Label Description
Index int32 The unique identifier generated by the client.
Type string "SetProject"
Input MF.V3.Settings.Project optional Requested project settings.
Output MF.V3.Descriptors.Project optional Actual project settings after applying the requested settings.
State MF.V3.TaskState optional The current state of the task.
Error string optional A string describing the error if the task has failed.

Top

MF/V3/Tasks/MoveGroup

MoveGroup

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"
    }
}

MoveGroup.Request

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.

MoveGroup.Response

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 MF.V3.Descriptors.Project.Group The root scan group in the current open project.
State MF.V3.TaskState optional The current state of the task.
Error string optional A string describing the error if the task has failed.

Top

MF/V3/Tasks/StopVideo

StopVideo

Stop the video stream.

> Request example:

{
    "Task":{
        "Index":1,
        "Type":"StopVideo"
    }
}

> Response example:

{
    "Task":{
        "Index":1,
        "Type":"StopVideo",
        "State":"Completed"
    }
}

StopVideo.Request

Client request for the StopVideo task.

Field Type Label Description
Index int32 A unique identifier generated by the client.
Type string "StopVideo"

StopVideo.Response

Server response for the StopVideo task.

Field Type Label Description
Index int32 The unique identifier generated by the client.
Type string "StopVideo"
State MF.V3.TaskState optional The current state of the task.
Error string optional A string describing the error if the task has failed.

Top

MF/V3/Tasks/NewProject

NewProject

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"
    }
}

NewProject.Request

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.

NewProject.Response

Server response for the NewProject task.

Field Type Label Description
Index int32 The unique identifier generated by the client.
Type string "NewProject"
Input MF.V3.Settings.Project optional Requested new project name.
Output MF.V3.Descriptors.Project optional The new project descriptor.
State MF.V3.TaskState optional The current state of the task.
Error string optional A string describing the error if the task has failed.

Top

MF/V3/Tasks/CopyGroups

CopyGroups

Copy a set of scan groups.

Say we have a scan group three with three groups:

{
    "groups":[
        {"index":1, "name":"Group 1"},
        {"index":2, "name":"Group 2"},
        {"index":3, "name":"Group 3"}
    ],
}

and we want to copy groups 1 and 3.

> Request example:

{
    "Task":{
        "Index":1,
        "Type":"CopyGroups",
        "Input":{
            "sourceIndexes": [1,3],
            "nameSuffix": "-copy"
        }
    }
}

> Response example:

{
    "Task":{
        "Index":1,
        "Type":"CopyGroups",
        "Input":{"sourceIndexes":[1,3,5]},
        "Output":{
            "groups":[
                {"index":1, "name":"Group 1"},
                {"index":4, "name":"Group 1-copy"}
                {"index":2, "name":"Group 2"},
                {"index":3, "name":"Group 3"},
                {"index":5, "name":"Group 3-copy"},
            ],
        },
        "State":"Completed"
    }
}

CopyGroups.Request

Client request for the CopyGroups task.

Field Type Label Description
Index int32 A unique identifier generated by the client.
Type string "CopyGroups"
Input MF.V3.Settings.CopyGroups The copy groups settings.

CopyGroups.Response

Server response for the CopyGroups task.

Field Type Label Description
Index int32 The unique identifier generated by the client.
Type string "CopyGroups"
Input MF.V3.Settings.CopyGroups The requested copy groups settings.
Output MF.V3.Descriptors.Project.Group The root scan group in the current open project.
State MF.V3.TaskState optional The current state of the task.
Error string optional A string describing the error if the task has failed.

Top

MF/V3/Tasks/ScanData

ScanData

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"
    }
}

ScanData.Buffer

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 MF.V3.Task The requested ScanData task.
Descriptor MF.V3.Descriptors.ScanData.Buffer The scan data buffer descriptor.

ScanData.Request

Client request for the ScanData task.

Field Type Label Description
Index int32 A unique identifier generated by the client.
Type string "ScanData"
Input MF.V3.Settings.ScanData Requested scan data.

ScanData.Response

Server response for the ScanData task.

Field Type Label Description
Index int32 The unique identifier generated by the client.
Type string "ScanData"
Input MF.V3.Settings.ScanData The scan data requested by the client.
Output MF.V3.Descriptors.ScanData The scan data sent from the server.
State MF.V3.TaskState optional The current state of the task.
Error string optional A string describing the error if the task has failed.

Top

MF/V3/Tasks/ListExportFormats

ListExportFormats

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"
    }
}

ListExportFormats.Request

Client request for the ListExportFormats task.

Field Type Label Description
Index int32 A unique identifier generated by the client.
Type string "ListExportFormats"

ListExportFormats.Response

Server response for the ListExportFormats task.

Field Type Label Description
Index int32 The unique identifier generated by the client.
Type string "ListExportFormats"
Output MF.V3.Descriptors.Export repeated The list of export format descriptors.
State MF.V3.TaskState optional The current state of the task.
Error string optional A string describing the error if the task has failed.

Top

MF/V3/Tasks/ExportFactoryCalibrationLogs

ExportFactoryCalibrationLogs

ExportFactoryCalibrationLogs.Buffer

Server buffer message for the ExportFactoryCalibrationLogs 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 MF.V3.Task The requested ExportFactoryCalibrationLogs task.

ExportFactoryCalibrationLogs.Request

Client request for the ExportFactoryCalibrationLogs task.

Field Type Label Description
Index int32 A unique identifier generated by the client.
Type string "ExportFactoryCalibrationLogs"

ExportFactoryCalibrationLogs.Response

Server response for the ExportFactoryCalibrationLogs task.

Field Type Label Description
Index int32 The unique identifier generated by the client.
Type string "ExportFactoryCalibrationLogs"
State MF.V3.TaskState optional The current state of the task.
Error string optional A string describing the error if the task has failed.

Top

MF/V3/Tasks/ListScans

ListScans

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"
    }
}

ListScans.Request

Client request for the ListScans task.

Field Type Label Description
Index int32 A unique identifier generated by the client.
Type string "ListScans"

ListScans.Response

Server response for the ListScans task.

Field Type Label Description
Index int32 The unique identifier generated by the client.
Type string "ListScans"
Output MF.V3.Descriptors.Project.Group repeated The list of scans in the current open project.
State MF.V3.TaskState optional The current state of the task.
Error string optional A string describing the error if the task has failed.

Top

MF/V3/Tasks/RemoveGroups

RemoveGroups

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"
    }
}

RemoveGroups.Request

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.

RemoveGroups.Response

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 MF.V3.Descriptors.Project.Group The root scan group in the current open project.
State MF.V3.TaskState optional The current state of the task.
Error string optional A string describing the error if the task has failed.

Top

MF/V3/Tasks/ForgetWifi

ForgetWifi

Forget all wifi connections.

> Request example:

{
    "Task":{
        "Index":1,
        "Type":"ForgetWifi"
    }
}

> Response example:

{
    "Task":{
        "Index":1,
        "Type":"ForgetWifi"
        "State":"Completed"
    }
}

ForgetWifi.Request

Client request for the ForgetWifi task.

Field Type Label Description
Index int32 A unique identifier generated by the client.
Type string "ForgetWifi"

ForgetWifi.Response

Server response for the ForgetWifi task.

Field Type Label Description
Index int32 The unique identifier generated by the client.
Type string "ForgetWifi"
State MF.V3.TaskState optional The current state of the task.
Error string optional A string describing the error if the task has failed.

Top

MF/V3/Tasks/Import

Import

Import a set of 3D meshes to the current open project. The meshes must be archived in a ZIP file. Supported formats are DAE, FBX, GLB, OBJ, PLY and STL.

> Request example:

{
    "Task":{
        "Index":1,
        "Type":"Import",
        "Input":{"unit":"Inch"}
    }
}

> Buffer message from client.

{
    "Buffer":{
        "Index":0,
        "Size":1052,
        "Task":{
            "Index":1,
            "Type":"Import",
            "Input":{"unit":"Inch"}
        }
    }
}

> Binary data transfer from client: The mesh zip file [1052 bytes]. > Response example:

{
    "Task":{
        "Index":1,
        "Type":"Import",
        "Input":{"unit":"Inch"},
        "Output":{
            "groups":[{"index":1,"name":"box","scan":1}],
            "imported":[{"file":"mesh.ply"}],
            "ignored":[],
        },
        "State":"Completed"
    }
}

Import.Buffer

Client buffer message for the Import 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 MF.V3.Task The requested Import task.

Import.Request

Client request for the Import task.

Field Type Label Description
Index int32 A unique identifier generated by the client.
Type string "Import"
Input MF.V3.Settings.Import optional Import settings.

Import.Response

Server response for the Import task.

Field Type Label Description
Index int32 The unique identifier generated by the client.
Type string "Import"
Input MF.V3.Settings.Import optional Requested export settings.
State MF.V3.TaskState optional The current state of the task.
Error string optional A string describing the error if the task has failed.

Top

MF/V3/Tasks/RotateTurntable

RotateTurntable

Rotate the turntable.

> Request example:

{
    "Task":{
        "Index":1,
        "Type":"RotateTurntable",
        "Input":15
    }
}

> Response example:

{
    "Task":{
        "Index":1,
        "Type":"RotateTurntable",
        "Input":15,
        "State":"Completed"
    }
}

RotateTurntable.Request

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.

RotateTurntable.Response

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 MF.V3.TaskState optional The current state of the task.
Error string optional A string describing the error if the task has failed.

Top

MF/V3/Tasks/DownloadProject

DownloadProject

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"
    }
}

DownloadProject.Buffer

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 MF.V3.Task The requested DownloadProject task.
Descriptor string The downloaded project filename.

DownloadProject.Request

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.

DownloadProject.Response

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 MF.V3.TaskState optional The current state of the task.
Error string optional A string describing the error if the task has failed.

Top

MF/V3/Tasks/ListNetworkInterfaces

ListNetworkInterfaces

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"
    }
}

ListNetworkInterfaces.Request

Client request for the ListNetworkInterfaces task.

Field Type Label Description
Index int32 A unique identifier generated by the client.
Type string "ListNetworkInterfaces"

ListNetworkInterfaces.Response

Server response for the ListNetworkInterfaces task.

Field Type Label Description
Index int32 The unique identifier generated by the client.
Type string "ListNetworkInterfaces"
Output MF.V3.Descriptors.Network.Interface optional Network interface descriptors.
State MF.V3.TaskState optional The current state of the task.
Error string optional A string describing the error if the task has failed.

Top

MF/V3/Tasks/BoundingBox

BoundingBox

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"
    }
}

BoundingBox.Request

Client request for the BoundingBox task.

Field Type Label Description
Index int32 A unique identifier generated by the client.
Type string "BoundingBox"
Input MF.V3.Settings.BoundingBox The bounding box settings.

BoundingBox.Response

Server response for the BoundingBox task.

Field Type Label Description
Index int32 The unique identifier generated by the client.
Type string "BoundingBox"
Input MF.V3.Settings.BoundingBox The requested bounding box settings.
Output MF.V3.Descriptors.BoundingBox The root scan group in the current open project.
State MF.V3.TaskState optional The current state of the task.
Error string optional A string describing the error if the task has failed.

Top

MF/V3/Tasks/HasProjector

HasProjector

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"
    }
}

HasProjector.Request

Client request for the HasProjector task.

Field Type Label Description
Index int32 A unique identifier generated by the client.
Type string "HasProjector"

HasProjector.Response

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 MF.V3.TaskState optional The current state of the task.
Error string optional A string describing the error if the task has failed.

Top

MF/V3/Tasks/RestoreFactoryCalibration

RestoreFactoryCalibration

Restore factory calibration.

> Request example:

{
    "Task":{
        "Index":1,
        "Type":"RestoreFactoryCalibration"
    }
}

> Response example:

{
    "Task":{
        "Index":1,
        "Type":"RestoreFactoryCalibration",
        "State":"Completed"
    }
}

RestoreFactoryCalibration.Request

Client request for the RestoreFactoryCalibration task.

Field Type Label Description
Index int32 A unique identifier generated by the client.
Type string "RestoreFactoryCalibration"

RestoreFactoryCalibration.Response

Server response for the RestoreFactoryCalibration task.

Field Type Label Description
Index int32 The unique identifier generated by the client.
Type string "RestoreFactoryCalibration"
State MF.V3.TaskState optional The current state of the task.
Error string optional A string describing the error if the task has failed.

Top

MF/V3/Tasks/PushSettings

PushSettings

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":{
                "scans":{"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"
    }
}

PushSettings.Request

Client request for the PushSettings task.

Field Type Label Description
Index int32 A unique identifier generated by the client.
Type string "PushSettings"

PushSettings.Response

Server response for the PushSettings task.

Field Type Label Description
Index int32 The unique identifier generated by the client.
Type string "PushSettings"
Output MF.V3.Descriptors.Settings.Scanner optional The scanner settings descriptor.
State MF.V3.TaskState optional The current state of the task.
Error string optional A string describing the error if the task has failed.

Top

MF/V3/Tasks/SplitGroup

SplitGroup

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"
    }
}

SplitGroup.Request

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.

SplitGroup.Response

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 MF.V3.Descriptors.Project.Group The root scan group in the current open project.
State MF.V3.TaskState optional The current state of the task.
Error string optional A string describing the error if the task has failed.

Top

MF/V3/Tasks/DepthMap

DepthMap

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"
    }
}

DepthMap.Buffer

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 MF.V3.Task The requested DepthMap task.
Descriptor MF.V3.Descriptors.Image The image descriptor.

DepthMap.Request

Client request for the DepthMap task.

Field Type Label Description
Index int32 A unique identifier generated by the client.
Type string "DepthMap"
Input MF.V3.Settings.Scan optional Scan settings.

DepthMap.Response

Server response for the DepthMap task.

Field Type Label Description
Index int32 The unique identifier generated by the client.
Type string "DepthMap"
Input MF.V3.Settings.Scan optional Requested scan settings.
Output double repeated The 9 values of the camera matrix corresponding to the depth map (row-major).
State MF.V3.TaskState optional The current state of the task.
Error string optional A string describing the error if the task has failed.

Top

MF/V3/Tasks/FactoryReset

FactoryReset

Reset the scanner to factory settings. This removes all projects and restores factory calibration.

> Request example:

{
    "Task":{
        "Index":1,
        "Type":"FactoryReset"
    }
}

> Response example:

{
    "Task":{
        "Index":1,
        "Type":"FactoryReset"
        "State":"Completed"
    }
}

FactoryReset.Request

Client request for the FactoryReset task.

Field Type Label Description
Index int32 A unique identifier generated by the client.
Type string "FactoryReset"

FactoryReset.Response

Server response for the FactoryReset task.

Field Type Label Description
Index int32 The unique identifier generated by the client.
Type string "FactoryReset"
State MF.V3.TaskState optional The current state of the task.
Error string optional A string describing the error if the task has failed.

Top

MF/V3/Tasks/OpenProject

OpenProject

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"
    }
}

OpenProject.Request

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.

OpenProject.Response

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 MF.V3.Descriptors.Project optional The open project descriptor.
State MF.V3.TaskState optional The current state of the task.
Error string optional A string describing the error if the task has failed.

Top

MF/V3/Tasks/CalibrateCameras

CalibrateCameras

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"
    }
}

CalibrateCameras.Request

Client request for the CalibrateCameras task.

Field Type Label Description
Index int32 A unique identifier generated by the client.
Type string "CalibrateCameras"

CalibrateCameras.Response

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 MF.V3.TaskState optional The current state of the task.
Error string optional A string describing the error if the task has failed.

Top

MF/V3/Tasks/ClearSettings

ClearSettings

Clear scanner settings and restore the default factory settings.

> Request example:

{
    "Task":{
        "Index":1,
        "Type":"ClearSettings"
    }
}

> Response example:

{
    "Task":{
        "Index":1,
        "Type":"ClearSettings",
        "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":{
                "scans":{"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"
    }
}

ClearSettings.Request

Client request for the ClearSettings task.

Field Type Label Description
Index int32 A unique identifier generated by the client.
Type string "ClearSettings"

ClearSettings.Response

Server response for the ClearSettings task.

Field Type Label Description
Index int32 The unique identifier generated by the client.
Type string "ClearSettings"
Output MF.V3.Descriptors.Settings.Scanner optional The scanner settings descriptor.
State MF.V3.TaskState optional The current state of the task.
Error string optional A string describing the error if the task has failed.

Top

MF/V3/Tasks/ListGroups

ListGroups

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"
    }
}

ListGroups.Request

Client request for the ListGroups task.

Field Type Label Description
Index int32 A unique identifier generated by the client.
Type string "ListGroups"

ListGroups.Response

Server response for the ListGroups task.

Field Type Label Description
Index int32 The unique identifier generated by the client.
Type string "ListGroups"
Output MF.V3.Descriptors.Project.Group The root scan group in the current open project.
State MF.V3.TaskState optional The current state of the task.
Error string optional A string describing the error if the task has failed.

Top

MF/V3/Tasks/HeatMap

HeatMap

Compute the point-to-mesh distances of a source mesh to a target mesh and visualize as a heat map.

> Request example:

{
    "Task":{
        "Index":1,
        "Type":"HeatMap",
        "Input":{"sources":[2],"targets":[3]}
    }
}

> 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":"HeatMap",
            "Input":{"sources":[2],"targets":[3]}
        }
    }
}

> Vertex position binary data transfer from server [1558188 bytes].

> Vertex quality buffer message from server.

{
    "Buffer":{
        "Index":0,
        "Size":1558188,
        "Descriptor":{
            "components":[{
                "type":"Quality"
                "size":3,
                "offset":0,
                "normalized":false,
            }],
            "stride":3
        },
        "Task":{
            "Index":1,
            "Type":"HeatMap",
            "Input":{"sources":[2],"targets":[3]}
        }
    }
}

> Vertex quality binary data transfer from server [1558188 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":"HeatMap",
            "Input":{"sources":[2],"targets":[3]}
        }
    }
}

> Triangle index binary data transfer from server [1996356 bytes].

> Response example:

{
    "Task":{
        "Index":1,
        "Type":"HeatMap",
        "Input":{"sources":[2],"targets":[3]},
        "Output":{
            "count":96564,
             "max":32.734107971191406,
             "mean":1.964127540588379,
             "median":0.12784385681152344,
             "min":9.611248970031738e-07,
             "outlierDistance":0.0,
             "stddev":4.970643997192383
        },
        "State":"Completed"
    }
}

HeatMap.Request

Client request for the HeatMap task.

Field Type Label Description
Index int32 A unique identifier generated by the client.
Type string "HeatMap"
Input MF.V3.Settings.HeatMap The heat map settings.

HeatMap.Response

Server response for the HeatMap task.

Field Type Label Description
Index int32 The unique identifier generated by the client.
Type string "HeatMap"
Input MF.V3.Settings.HeatMap The requested heat map settings.
Output MF.V3.Descriptors.HeatMap The heat map descriptor.
State MF.V3.TaskState optional The current state of the task.
Error string optional A string describing the error if the task has failed.

Top

MF/V3/Tasks/AutoFocus

AutoFocus

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"
    }
}

AutoFocus.Request

Client request for the AutoFocus task.

Field Type Label Description
Index int32 A unique identifier generated by the client.
Type string "AutoFocus"
Input MF.V3.Settings.AutoFocus optional AutoFocus settings.

AutoFocus.Response

Server response for the AutoFocus task.

Field Type Label Description
Index int32 The unique identifier generated by the client.
Type string "AutoFocus"
Input MF.V3.Settings.AutoFocus optional Requested auto focus settings.
Output MF.V3.Descriptors.Settings.Camera optional Actual camera settings after auto focusing the camera(s).
State MF.V3.TaskState optional The current state of the task.
Error string optional A string describing the error if the task has failed.

Top

MF/V3/Tasks/CalibrationCaptureTargets

CalibrationCaptureTargets

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"
    }
}

CalibrationCaptureTargets.Request

Client request for the CalibrationCaptureTargets task.

Field Type Label Description
Index int32 A unique identifier generated by the client.
Type string "CalibrationCaptureTargets"

CalibrationCaptureTargets.Response

Server response for the CalibrationCaptureTargets task.

Field Type Label Description
Index int32 The unique identifier generated by the client.
Type string "CalibrationCaptureTargets"
Output MF.V3.Descriptors.Calibration.CaptureTarget optional The calibration capture target descriptor.
State MF.V3.TaskState optional The current state of the task.
Error string optional A string describing the error if the task has failed.

Top

MF/V3/Tasks/ExportHeatMap

ExportHeatMap

Export a mesh with vertex colors generated by the 'HeatMap' task.

> Request example:

{
    "Task":{
        "Index":1,
        "Type":"ExportHeatMap",
        "Input":{"color":{"min":0.0,"max":1.0}}
    }
}

> Export file buffer message from server.

{
    "Buffer":{
        "Index":0,
        "Size":8413737,
        "Task":{
            "Index":1,
            "Type":"ExportHeatMap",
            "Input":{"color":{"min":0.0,"max":1.0}}
        }
    }
}

> Export file binary data transfer from server [8413737 bytes].

> Response from server:

{
    "Task":{
        "Index":1,
        "Type":"ExportHeatMap",
        "Input":{"color":{"min":0.0,"max":1.0}},
        "State":"Completed"
    }
}

ExportHeatMap.Buffer

Server buffer message for the ExportHeatMap 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 MF.V3.Task The requested ExportHeatMap task.

ExportHeatMap.Request

Client request for the ExportHeatMap task.

Field Type Label Description
Index int32 A unique identifier generated by the client.
Type string "ExportHeatMap"
Input MF.V3.Settings.Export Export settings.

ExportHeatMap.Response

Server response for the ExportHeatMap task.

Field Type Label Description
Index int32 The unique identifier generated by the client.
Type string "ExportHeatMap"
Input MF.V3.Settings.Export Requested export settings.
State MF.V3.TaskState optional The current state of the task.
Error string optional A string describing the error if the task has failed.

Top

MF/V3/Tasks/PopSettings

PopSettings

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":{
                "scans":{"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"
    }
}

PopSettings.Request

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.

PopSettings.Response

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 MF.V3.Descriptors.Settings.Scanner optional The scanner settings descriptor.
State MF.V3.TaskState optional The current state of the task.
Error string optional A string describing the error if the task has failed.

Top

MF/V3/Tasks/CameraCalibration

CameraCalibration

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"
    }
}

CameraCalibration.Request

Client request for the CameraCalibration task.

Field Type Label Description
Index int32 A unique identifier generated by the client.
Type string "CameraCalibration"

CameraCalibration.Response

Server response for the CameraCalibration task.

Field Type Label Description
Index int32 The unique identifier generated by the client.
Type string "CameraCalibration"
Output MF.V3.Descriptors.Calibration.Camera optional The camera calibration descriptor.
State MF.V3.TaskState optional The current state of the task.
Error string optional A string describing the error if the task has failed.

Top

MF/V3/Tasks/MergeData

MergeData

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"
    }
}

MergeData.Buffer

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 MF.V3.Task The requested MergeData task.
Descriptor MF.V3.Descriptors.ScanData.Buffer The scan data buffer descriptor.

MergeData.Request

Client request for the MergeData task.

Field Type Label Description
Index int32 A unique identifier generated by the client.
Type string "MergeData"
Input MF.V3.Settings.ScanData Requested scan data.

MergeData.Response

Server response for the MergeData task.

Field Type Label Description
Index int32 The unique identifier generated by the client.
Type string "MergeData"
Input MF.V3.Settings.ScanData The scan data requested by the client.
Output MF.V3.Descriptors.ScanData The scan data sent from the server.
State MF.V3.TaskState optional The current state of the task.
Error string optional A string describing the error if the task has failed.

Top

MF/V3/Tasks/StartVideo

StartVideo

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"
    }
}

StartVideo.Request

Client request for the StartVideo task.

Field Type Label Description
Index int32 A unique identifier generated by the client.
Type string "StartVideo"

StartVideo.Response

Server response for the StartVideo task.

Field Type Label Description
Index int32 The unique identifier generated by the client.
Type string "StartVideo"
Output MF.V3.Settings.Video optional The video settings.
State MF.V3.TaskState optional The current state of the task.
Error string optional A string describing the error if the task has failed.

Top

MF/V3/Tasks/ExportLogs

ExportLogs

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"
    }
}

ExportLogs.Buffer

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 MF.V3.Task The requested ExportLogs task.

ExportLogs.Request

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.

ExportLogs.Response

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 MF.V3.TaskState optional The current state of the task.
Error string optional A string describing the error if the task has failed.

Top

MF/V3/Tasks/CaptureImage

CaptureImage

Capture an image from one or both cameras.

> Request example:

{
    "Task":{
        "Index":1,
        "Type":"CaptureImage"
        "Input":{
            "selection":{0,1},
            "grayscale":false,
            "codec":jpg
        }
    }
}

> Buffer messages from server.

{
    "Buffer":{
        "Descriptor":"{"camera":0,"codec":"jpg","grayscale":false,"height":1560,"step":6312,"width":2104},
        "Index":0,
        "Size":856664,
        "Task":{
            "Index":1,
            "Type":"CaptureImage",
            "Input":{"selection":{0,1}, "grayscale":false, "codec":jpg}
        }
    }
}
{
    "Buffer":{
        "Descriptor":"{"camera":1,"codec":"jpg","grayscale":false,"height":1560,"step":6312,"width":2104},
        "Index":1,
        "Size":847726,
        "Task":{
            "Index":1,
            "Type":"CaptureImage",
            "Input":{"selection":{0,1}, "grayscale":false, "codec":jpg}
        }
    }
}

> Response example:

{
    "Task":{
        "Index":1,
        "Type":"CaptureImage"
        "Input":{
            "selection":{0,1},
            "grayscale":false,
            "codec":jpg
        }
        "Output":[
            {"camera":0,"codec":"jpg","grayscale":false,"height":1560,"step":6312,"width":2104},
            {"camera":1,"codec":"jpg","grayscale":false,"height":1560,"step":6312,"width":2104}
         ],
        "State":"Completed"
    }
}

CaptureImage.Buffer

Server buffer message for the CaptureImage 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 MF.V3.Task The requested CaptureImage task.
Descriptor MF.V3.Descriptors.CaptureImage The capture image descriptor.

CaptureImage.Request

Client request for the CaptureImage task.

Field Type Label Description
Index int32 A unique identifier generated by the client.
Type string "CaptureImage"
Input MF.V3.Settings.CaptureImage The Image settings

CaptureImage.Response

Server response for the CaptureImage task.

Field Type Label Description
Index int32 The unique identifier generated by the client.
Type string "CaptureImage"
Input MF.V3.Settings.CaptureImage Requested capture image settings.s
Output MF.V3.Descriptors.CaptureImage repeated A capture image descriptors for each selected camera.
State MF.V3.TaskState optional The current state of the task.
Error string optional A string describing the error if the task has failed.

Top

MF/V3/Tasks/SetCameras

SetCameras

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"
    }
}

SetCameras.Request

Client request for the SetCameras task.

Field Type Label Description
Index int32 A unique identifier generated by the client.
Type string "SetCameras"
Input MF.V3.Settings.Camera optional Camera settings.

SetCameras.Response

Server response for the SetCameras task.

Field Type Label Description
Index int32 The unique identifier generated by the client.
Type string "SetCameras"
Input MF.V3.Settings.Camera optional Requested camera settings.
Output MF.V3.Descriptors.Settings.Camera optional Actual camera settings after applying the requested settings.
State MF.V3.TaskState optional The current state of the task.
Error string optional A string describing the error if the task has failed.

Top

MF/V3/Task

Task

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.
Progress googlebuf.Any optional A Progress object for tasks that give updates on long running tasks

TaskState

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.

Top

MF/V3/Descriptors/Merge

Merge

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.

Merge.Mesh

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.

Top

MF/V3/Descriptors/Wifi

Wifi

The wifi descriptor.

Field Type Label Description
ssid string The wifi ssid.
networks Wifi.Network repeated The list of wifi networks.

Wifi.Network

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].

Top

MF/V3/Descriptors/RemoveVertices

RemoveVertices

Descriptor a remove vertices task.

Field Type Label Description
scans RemoveVertices.Scan repeated The list of scans whose vertices were removed.
groups Project.Group optional The updated project data after undo or redo. If undefined, then there was no change to the project.

RemoveVertices.Scan

Scan vertex and triangle removal metadata.

Field Type Label Description
index int32 The scan index.
vertices int32 The number of vertices after the removal.
triangles int32 The number of triangles after the removal.

Top

MF/V3/Descriptors/Calibration

Camera

Camera calibration descriptor.

Field Type Label Description
quality Quality Calibration quality.
date int32 repeated Calibration date and time [year, month, day, hour, minute, second].

CaptureTarget

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.

DetectedCard

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.

DetectedCard.Target

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

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.

Quality

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.

Top

MF/V3/Descriptors/Settings/Advanced

Advanced

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.
camera Advanced.Camera Camera settings descriptor.
turntable Advanced.Turntable Turntable settings descriptor.

Advanced.AdaptiveSampling

Adaptive sampling settings descriptor.

Field Type Label Description
use Advanced.Use
type Advanced.AdaptiveSampling.Type
rate Advanced.AdaptiveSampling.Rate

Advanced.AdaptiveSampling.Rate

Field Type Label Description
value float
default float
min float
max float

Advanced.AdaptiveSampling.Type

Field Type Label Description
value MF.V3.Settings.Scan.Processing.AdaptiveSampling.Type
default MF.V3.Settings.Scan.Processing.AdaptiveSampling.Type

Advanced.Camera

Camera settings descriptor.

Field Type Label Description
useContinuousExposureValues Advanced.Camera.UseContinuousExposureValues Use continuous exposure values settings descriptor.

Advanced.Camera.UseContinuousExposureValues

Use continuous exposure values settings descriptor.

Field Type Label Description
value bool
default bool

Advanced.Capture

Capture settings descriptor.

Field Type Label Description
use Advanced.Use
horizontalFrequencies Advanced.Capture.HorizontalFrequencies
verticalFrequencies Advanced.Capture.VerticalFrequencies

Advanced.Capture.HorizontalFrequencies

Field Type Label Description
value int32 repeated
default int32 repeated
min int32
max int32

Advanced.Capture.VerticalFrequencies

Field Type Label Description
value int32 repeated
default int32 repeated
min int32
max int32

Advanced.EdgeDetection

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

Advanced.EdgeDetection.GaussianBlurRadius

Field Type Label Description
value int32
default int32
min int32
max int32

Advanced.EdgeDetection.GaussianBlurStdDev

Field Type Label Description
value float
default float
min float
max float

Advanced.EdgeDetection.LaplacianKernelRadius

Field Type Label Description
value int32
default int32
min int32
max int32

Advanced.EdgeDetection.MaximumWidthForProcessing

Field Type Label Description
value int32
default int32
min int32
max int32

Advanced.EdgeDetection.Threshold

Field Type Label Description
value float
default float
min float
max float

Advanced.NormalEstimation

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

Advanced.NormalEstimation.MaximumNeighbourCount

Field Type Label Description
value int32
default int32
min int32
max int32

Advanced.NormalEstimation.MaximumNeighbourRadius

Field Type Label Description
value float
default float
min float
max float

Advanced.NormalEstimation.Method

Field Type Label Description
value MF.V3.Settings.Scan.Processing.NormalEstimation.Method
default MF.V3.Settings.Scan.Processing.NormalEstimation.Method

Advanced.NormalEstimation.UseMaximumNeighbourCount

Field Type Label Description
value bool
default bool

Advanced.NormalEstimation.UseMaximumNeighbourRadius

Field Type Label Description
value bool
default bool

Advanced.OutlierRemoval

Outlier removal settings descriptor.

Field Type Label Description
use Advanced.Use
neighbourCount Advanced.OutlierRemoval.NeighbourCount
neighbourRadius Advanced.OutlierRemoval.NeighbourRadius

Advanced.OutlierRemoval.NeighbourCount

Field Type Label Description
value int32
default int32
min int32
max int32

Advanced.OutlierRemoval.NeighbourRadius

Field Type Label Description
value float
default float
min float
max float

Advanced.PhaseFilter

Phase filter settings descriptor.

Field Type Label Description
use Advanced.Use
kernelRadius Advanced.PhaseFilter.KernelRadius
spatialWeightStdDev Advanced.PhaseFilter.SpatialWeightStdDev

Advanced.PhaseFilter.KernelRadius

Field Type Label Description
value int32
default int32
min int32
max int32

Advanced.PhaseFilter.SpatialWeightStdDev

Field Type Label Description
value float
default float
min float
max float

Advanced.Remesh

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

Advanced.Remesh.Depth

Field Type Label Description
value int32
default int32
min int32
max int32

Advanced.Remesh.LinearInterpolation

Field Type Label Description
value bool
default bool

Advanced.Remesh.Scale

Field Type Label Description
value float
default float
min float
max float

Advanced.Remesh.VoxelSize

Field Type Label Description
value float
default float
min float
max float

Advanced.Sampling

Sampling settings descriptor.

Field Type Label Description
use Advanced.Use Use sampling settings.
projectorSampleRate Advanced.Sampling.ProjectorSampleRate
imageSampleRate Advanced.Sampling.ImageSampleRate

Advanced.Sampling.ImageSampleRate

Field Type Label Description
value float
default float
min float
max float

Advanced.Sampling.ProjectorSampleRate

Field Type Label Description
value float
default float
min float
max float

Advanced.Turntable

Turntable settings descriptor.

Field Type Label Description
use Advanced.Use Use the advanced turntable settings.
rampAngle Advanced.Turntable.RampAngle The angle in degrees to slow down the turntable at the end of a rotation.
pointClippingRadius Advanced.Turntable.PointClippingRadius The radius of the point clipping cylinder.
pointClippingMinHeight Advanced.Turntable.PointClippingMinHeight The minimum height of the point clipping cylinder.
pointClippingMaxHeight Advanced.Turntable.PointClippingMaxHeight The maximum height of the point clipping cylinder.

Advanced.Turntable.PointClippingMaxHeight

Field Type Label Description
value double
default double
min double
max double

Advanced.Turntable.PointClippingMinHeight

Field Type Label Description
value double
default double
min double
max double

Advanced.Turntable.PointClippingRadius

Field Type Label Description
value double
default double
min double
max double

Advanced.Turntable.RampAngle

The angle in degrees to slow down the turntable at the end of a rotation.

Field Type Label Description
value int32
default int32
min int32
max int32

Advanced.Use

Use advanced settings.

Field Type Label Description
value bool
default bool

Top

MF/V3/Descriptors/Settings/Scanner

Scanner

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.
software Software Software settings descriptor.

Top

MF/V3/Descriptors/Settings/Capture

Capture

Capture settings descriptor.

Field Type Label Description
quality Capture.Quality Capture quality preset.
texture Capture.Texture Capture texture.
blendCount Capture.BlendCount Capture blend count.
horizontalBlendFrequency Capture.BlendFrequency Starting horizontal blend frequency.
verticalBlendFrequency Capture.BlendFrequency Starting vertical blend frequency.

Capture.BlendCount

Capture image blend count for noise reduction.

Field Type Label Description
value int32
default int32
min int32
max int32

Capture.BlendFrequency

The starting frequency for which multiple capture images are blended.

Field Type Label Description
value int32
default int32
min int32
max int32

Capture.Quality

Capture quality preset.

Field Type Label Description
value MF.V3.Settings.CaptureQuality
default MF.V3.Settings.CaptureQuality

Capture.Texture

Capture texture.

Field Type Label Description
value bool
default bool

Top

MF/V3/Descriptors/Settings/Style

Style

Style settings descriptor.

Field Type Label Description
theme Style.Theme Theme settings descriptor.

Style.Theme

Theme settings descriptor.

Field Type Label Description
value MF.V3.Settings.Style.Theme
default MF.V3.Settings.Style.Theme

Top

MF/V3/Descriptors/Settings/I18n

I18n

I18n language settings descriptor.

Field Type Label Description
language I18n.Language Language settings descriptor.

I18n.Language

Language settings descriptor.

Field Type Label Description
value MF.V3.Settings.I18n.Language
default MF.V3.Settings.I18n.Language

Top

MF/V3/Descriptors/Settings/Turntable

Turntable

Turntable settings descriptor.

Field Type Label Description
scans Turntable.Scans The number of turntable scans.
sweep Turntable.Sweep Turntable angle sweep in degrees.
use Turntable.Use Use the turntable.

Turntable.Scans

The number of turntable scans.

Field Type Label Description
value int32
default int32
min int32
max int32

Turntable.Sweep

Turntable angle sweep in degrees.

Field Type Label Description
value int32
default int32
min int32
max int32

Turntable.Use

Use the turntable.

Field Type Label Description
value bool
default bool

Top

MF/V3/Descriptors/Settings/Viewer

Viewer

3D Viewer settings descriptor.

Field Type Label Description
textureOpacity Viewer.TextureOpacity Texture opacity.

Viewer.TextureOpacity

Texture opacity.

Field Type Label Description
value float
default float
min float
max float

Top

MF/V3/Descriptors/Settings/Camera

Camera

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.

Camera.AnalogGain

Analog gain.

Field Type Label Description
value float
default float
min float
max float

Camera.AutoExposure

Auto exposure.

Field Type Label Description
value bool
default bool

Camera.DigitalGain

Digital gain.

Field Type Label Description
value int32
default int32
min int32
max int32

Camera.Exposure

Exposure.

Field Type Label Description
value int32
default int32
min int32
max int32

Camera.Focus

Focus settings descriptor.

Field Type Label Description
value Camera.Focus.Value Focus value.
box Camera.Focus.Box Auto focus box.

Camera.Focus.Box

Auto focus box.

Field Type Label Description
value MF.V3.Settings.Rectangle repeated
default MF.V3.Settings.Rectangle repeated

Camera.Focus.Value

Focus value.

Field Type Label Description
value int32 repeated
default int32 repeated
min int32
max int32

Top

MF/V3/Descriptors/Settings/Tutorials

Tutorials

Tutorials settings descriptor.

Field Type Label Description
show Tutorials.Show Show tutorials.
viewed Tutorials.Viewed Viewed tutorials.

Tutorials.Show

Tutorials to show.

Field Type Label Description
value bool
default bool

Tutorials.Viewed

Viewed tutorials.

Field Type Label Description
pages Tutorials.Viewed.Pages Viewed tutorials pages.

Tutorials.Viewed.Pages

Viewed tutorials pages.

Field Type Label Description
value string repeated
default string repeated

Top

MF/V3/Descriptors/Settings/Software

Software

Software settings descriptor.

Field Type Label Description
updateMajor Software.UpdateMajor Enable major version updates which can have breaking API changes.

Software.UpdateMajor

Enable major version updates which can have breaking API changes.

Field Type Label Description
value bool
default bool

Top

MF/V3/Descriptors/Settings/Projector

Projector

Projector settings descriptor.

Field Type Label Description
brightness Projector.Brightness Projector brightness.
on Projector.On Projector on/off.

Projector.Brightness

Projector brightness.

Field Type Label Description
value float
default float
min float
max float

Projector.On

Projector on/off.

Field Type Label Description
value bool
default bool

Top

MF/V3/Descriptors/Project

Project

V3 project descriptor.

Field Type Label Description
index int32 Project index.
name string Project name.
groups Project.Group

Project.Brief

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].

Project.Group

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.

Top

MF/V3/Descriptors/VideoFrame

VideoFrame

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.

Top

MF/V3/Descriptors/Export

Export

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.

Export.Face

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.

Export.Texture

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.

Top

MF/V3/Descriptors/Transform

Transform

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.

Top

MF/V3/Descriptors/ScanData

ScanData

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.

ScanData.Buffer

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.

ScanData.Buffer.Component

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.

ScanData.Buffer.Component.Type

Scan buffer component types.

Name Number Description
Position 0 Vertex position.
Normal 1 Vertex normal.
Color 2 Vertex color.
UV 3 Vertex texture coordinate.
Quality 4 Vertex quality.
Triangle 5 Triangle index.
Texture 6 Texture.

Top

MF/V3/Descriptors/Import

Import

Import scan descriptor.

Field Type Label Description
imported Import.Imported repeated The list of successfully imported files.
ignored Import.Ignored repeated The list of ignored files.
groups Project.Group The updated project group tree.

Import.Ignored

A file that failed to be imported to the project.

Field Type Label Description
file string The file name.
error Import.Error The import error code.

Import.Imported

A file that was successfully imported to the project.

Field Type Label Description
file string The file name.

Import.Error

Import error codes.

Name Number Description
Unspecified 0 The error is unspecified.
FileNotSupported 1 The file format is not supported.
CannotReadFile 2 The file format is supported but cannot be read.
MeshIsEmpty 3 The imported mesh has no faces.
NotEnoughStorage 4 There is not enough filesystem memory to store the mesh.

Top

MF/V3/Descriptors/ProjectActions

ProjectAction

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.

ProjectAction.Scan

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.

ProjectActions

Project undo and redo action descriptors.

Field Type Label Description
undo string repeated Project undo action descriptors.
redo string repeated Project redo action descriptors.

Top

MF/V3/Descriptors/BoundingBox

BoundingBox

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.

Top

MF/V3/Descriptors/Image

Image

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.

Top

MF/V3/Descriptors/Software

Software

Software descriptor.

Field Type Label Description
frontend Software.Package Frontend software package.
server Software.Package Server software package.

Software.Package

Software package descriptor.

Field Type Label Description
installed string The package installed version.
update string The package update version. Empty if no update is available.
changelog string The package changelog. Empty if no update is available or the update is a downgrade.

Top

MF/V3/Descriptors/HeatMap

HeatMap

Heat map descriptor.

Field Type Label Description
count uint32 The of points included in the point-to-mesh statistics.
min float The minimum point-to-mesh distance.
max float The maximum point-to-mesh distance.
median float The median point-to-mesh distance.
mean float The mean point-to-mesh distance.
stddev float The standard deviation of the point-to-mesh distances.
outlierDistance float The point-to-mesh outlier distance. Distances greater than this value are excluded from the statistics.

Top

MF/V3/Descriptors/Network

Interface

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.

Top

MF/V3/Descriptors/System

System

System descriptor.

Field Type Label Description
serialNumber string Serial number;
diskSpace System.DiskSpace Used and available disk space.
publicKey string GPG public key.

System.DiskSpace

Disk space descriptor.

Field Type Label Description
capacity uint64 Disk space capacity in bytes.
available uint64 Available disk space in bytes.

Top

MF/V3/Descriptors/CaptureImage

CaptureImage

Capture image descriptor.

Field Type Label Description
camera int32 The index of the camera that produced the image.
codec MF.V3.Settings.CaptureImage.Codec Image codec.
grayscale bool If true, image is 8-bit grayscale. Otherwise image is BGR888.
width int32 Image width.
height int32 Image height.
step int32 Image row step in bytes.

Scalar Value Types

Type Notes C++ Java Python Go C# PHP Ruby
double double double float float64 double float Float
float float float float float32 float float Float
int32 Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint32 instead. int32 int int int32 int integer Bignum or Fixnum (as required)
int64 Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint64 instead. int64 long int/long int64 long integer/string Bignum
uint32 Uses variable-length encoding. uint32 int int/long uint32 uint integer Bignum or Fixnum (as required)
uint64 Uses variable-length encoding. uint64 long int/long uint64 ulong integer/string Bignum or Fixnum (as required)
sint32 Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int32s. int32 int int int32 int integer Bignum or Fixnum (as required)
sint64 Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int64s. int64 long int/long int64 long integer/string Bignum
fixed32 Always four bytes. More efficient than uint32 if values are often greater than 2^28. uint32 int int uint32 uint integer Bignum or Fixnum (as required)
fixed64 Always eight bytes. More efficient than uint64 if values are often greater than 2^56. uint64 long int/long uint64 ulong integer/string Bignum
sfixed32 Always four bytes. int32 int int int32 int integer Bignum or Fixnum (as required)
sfixed64 Always eight bytes. int64 long int/long int64 long integer/string Bignum
bool bool boolean boolean bool bool boolean TrueClass/FalseClass
string A string must always contain UTF-8 encoded or 7-bit ASCII text. string String str/unicode string string string String (UTF-8)
bytes May contain any arbitrary sequence of bytes. string ByteString str []byte ByteString string String (ASCII-8BIT)

Clone this wiki locally