Important!
The 3D print API is shutting down on January 15, 2017. See our end of life notice for more information.
Field Guide¶a>
This field guide presents the 3D Print API objects, and shows typical object examples. It also gives descriptions for each field.
Mesh¶
Meshes represent 3D objects to be printed. A mesh consists of 3D geometry, a name, an affine transform, and optional texture images.
geom
is the 3D geometry, a collection of triangles that define the exterior surface (and possibly multiple interior surfaces) of the 3D object. 3D geometry can include UV coordinates for texture mapping using the texture images.name
is a UTF8 string suitable for display to the end-user.transform
represents affine transform positions and scales the mesh in the printer’s three dimensional build space. It is specified as the first three columns of a 4x4 matrix in which the last column is implicit and set to[ 0, 0, 0, 1 ]
.In order to compute the positions of mesh vertices under the transform, the position vectors are implicitly extended to four elements with the scalar 1.0 and premultiplied as a row vector by the affine transform matrix. The last component is discarded and the result is the new position.
The unit of length in the endpoint is centimeters, so a scale factor that converts each unit to centimeters may be required in the affine transform.
Meshes are immutable: Mesh endpoints that appear to modify an existing mesh actually return a new mesh and leave the original mesh unchanged.
Meshes can be created from 3MF, binary STL, ASCII STL, OBJ, or a zip file containing an OBJ file with associated MTL file and texture images. The support formats for texture images (if specified) are PNG and JPEG.
Schema¶
Field |
Type |
Description |
---|---|---|
id | string: UUID | Mesh ID |
name | string | User-visible mesh name |
internal_file_id | int | The ID of the file generated when the mesh is imported and the imported 3D geometry is stored |
transform | array: array: int | An array of 12 numbers representing a 3D affine transformation matrix |
geom | object | Geometric summary information for the mesh |
geom.num_vertices | int | Number of mesh vertices |
geom.num_triangles | int | Number of mesh triangles |
geom.has_uvs | bool | Whether the mesh has texture coordinates |
geom.bounding_box | object | The axis-aligned bounding box of the mesh, reported in the object space coordinates |
geom.bounding_box.min | array: float | Minimum x, y, and z values of every vertex in the mesh |
geom.bounding_box.max | array: float | Maximum x, y, and z values of every vertex in the mesh |
analyzed | bool | Whether the mesh has been analyzed for problems |
problems | array: object | the problems detected on a mesh; only present if
analyzed is true At most 600 vertext positions will be returned
|
problems.type | enum: string | the type of problem
Possible values:
degenerate_triangles : triangles with zero area, which cause distortion, measurement errors, and slow the printing process
(triangles will hold an array of triangles with zero area.)duplicate_triangles : triangles with the same vertices, which cause redundant or overlapping edges
(triangles will hold an array of triangles with the same vertices.)nonmanifold_vertices : A vertex adjacent to more than two untwinned edges or a vertex adjacent to more than two triangles
at the same edge that causes incorrect orientation or intersection of the surface of the model
(vertices will hold an array of vertices.)duplicate_vertices : vertices that are co-located at edges
(vertices will hold an array of vertices.)inconsistently_oriented_triangles : a triangle edge adjacent to another triangle with the opposite orientation, which
causes gaps in the model or render the printer unable to distinguish the inside from the outside of the model
(edges will hold an array of edges.)holes : The mesh surface is incomplete and not a single “watertight” solid structure
(boundaries will hold an array of vertex arrays.)inverted_volume : The mesh has an orientation that implies a shape that is inside-out. In other words, the orientation of
the faces imply surface normals that points inward towards the supposed interior.unorientable_triangles : The mesh has triangles that do not have a consistent orientation in a way that can be repaired. |
problems.triangles | array: object | Triangles that have a problem
Each triangle is represented by three sets of numbers giving its position in the object space of the mesh.
At most 200 entries will be returned.
|
problems.vertices | array: object | Vertices that have a problem
Each vertex is represented by its position in the object space of the mesh.
|
problems.edges | array: object | Edges that have a problem
Each of these edges describes a pair of faces that do not share a consistent orientation. Each edge is represented by the
two vertices at each end of the edge, where for each endpoint a set of numbers giving the object space positions of the mesh.
At most 200 entries will be returned.
|
problems.boundaries | array: object | An array of vertex arrays representing problem boundaries
Each vertex array represents one of the holes in the mesh. Each vertex is represented by its position in the object space
of the mesh.
|
Example Object¶
{
"id": "8f7ef44b-d4ef-41c8-8ded-a0c9d0999e55",
"name": "image_damaged",
"geom": {
"num_vertices": 10046,
"num_triangles": 20081,
"has_uvs": false
},
"transform": [
[
1,
0,
0,
0
],
[
0,
1,
0,
0
],
[
0,
0,
1,
3
]
],
"analyzed": true,
"problems": [
{
"triangles": [
{
"v0": [
5.918893814086914,
33.73568344116211,
9.202703475952148
],
"v1": [
5.848534107208252,
33.87462615966797,
9.152109146118164
],
"v2": [
5.913722991943359,
33.85252380371094,
9.214763641357422
]
}
],
"type": "duplicate_triangles"
}
]
}
Tray¶
Trays are printable files, set up to match the build-platform (the tray) of a particular printer type. During tray preparation the mesh positions, slicing parameters and material settings are optimized for the intended printer. Completed trays can be output to the 3D printer. Tray creation uses printer type settings and print profiles from the Print Definitions section.
Trays are immutable: Tray endpoints return a new tray and leave the original tray unchanged.
Tray coordinate systems originate at the bottom center of the build volume. The X-axis points to the right for a user facing the front of the printer. The Y-axis points to the back of the printer and the Z-axis points up. The tray coordinate system is in units of centimeters.
Schema¶
Field |
Type |
Description |
---|---|---|
id | string: UUID | Tray ID |
printer_type_id | string: UUID | Type of printer that uses this tray |
settings | object | Settings for printing and slicing |
default_material_id | string: UUID | If a mesh does not have a material assigned to it, the default material is used. |
meshes | array: string: UUID | identifiers of meshes to be used in the tray |
mesh_attrs | object | Parameters for the algorithm that fits the mesh onto the tray, indexed by mesh |
mesh_attrs[meshID].reposition | bool | Whether the Tray Preparation endpoint will reposition and scale this mesh to fit multiple meshes on the tray. |
mesh_attrs[meshID].reorient | bool | Whether the Tray Preparation endpoint will rotate this mesh to fit multiple meshes on the tray |
mesh_attrs[meshID].support | bool | Whether the Tray Preparation endpoint will calculate support material requirements for the mesh |
state | enum: string | Possible values:
created : Tray created, no calculations made.repaired : All meshes have been repaired.oriented : Optimal orientations computed for meshes.positioned : Tray layout computed.supported : Support structures have been computed for the meshes. |
ready | bool | Whether the printable can be computed |
Example Object¶
{
"id": "c88a02c2-4868-4a6e-b7af-793ae23c76ff",
"printer_type_id": "7FAF097F-DB2E-45DC-9395-A30210E789AA",
"settings": {
"support_angle_tol": 1.3,
"layer_height": 0.0020,
"burn_in_layers": 3
},
"meshes": [
{
"id": "19f38eb7-4cb5-429c-8e25-0e440f8bfd2b",
"name": "mage_damaged",
"geom": {
"num_vertices": 10046,
"num_triangles": 20080,
"has_uvs": false,
"bounding_box": {
"max": [
12.562538146972656,
56.06819534301758,
16.380802154541016
],
"min": [
-16.40504264831543,
-0.0002610000083222985,
-13.500799179077148
]
}
},
"transform": [
[
1,
0,
0,
0
],
[
0,
1,
0,
0
],
[
0,
0,
1,
0
]
],
"analyzed": true,
"problems": [
{
"type": "nonmanifold_vertices"
}
]
}
],
"mesh_attrs": {
"19f38eb7-4cb5-429c-8e25-0e440f8bfd2b": {
"reposition": true,
"reorient": true,
"support": true
}
},
"state": "created",
"ready": false,
"default_material_id": "426F14FE-E6AF-496F-BBC7-7D6C0E16861D"
}
Task¶
Most print preparation endpoints are asynchronous; they do not halt execution of your program and instead initiate a task that runs in the background.
Your program must call the GET tasks/:id endpoint to monitor execution and get the response to the asynchronous endpoint.
Schema¶
Field |
Type |
Description |
---|---|---|
id | string: UUID | Task ID |
status | enum: string | Possible values: running , done , and error |
progress | float | A value between 0 (not started) and 1 (complete) |
result | object | The response if status is done |
error | object | The error message if status is error |
Example Object¶
A running task:
{
"id": "34F0E39A-9389-42BA-AB5A-4F2CD59C98E4",
"status": "running",
"progress": 0.75
}
A completed task where status
field value is done
:
{
"id": "5253850e-e876-49a0-bf94-aae1e7ef03ab",
"progress": 1,
"status": "done",
"task_update_time": "2016-05-15T07:06:30.348Z",
"result": {
"id": "d7a326ba-5208-4712-a67a-8f4929945676",
"name": "testPrintFlow",
"geom": {
"bounding_box": {
"max": [
31.225000381469727,
22.575000762939453,
12.225000381469727
],
"min": [
-31.225000381469727,
-41,
-12.225000381469727
]
},
"has_uvs": false,
"num_triangles": 4278,
"num_vertices": 2131
},
"analyzed": false
}
}
A completed task where status
field value is error
:
{
"id": "1d2400b5-b9c8-417b-ba51-49aba007eddb",
"progress": 1,
"status": "error",
"task_update_time": "2016-06-06T06:45:31.980Z",
"error": {
"error_id": "84257912-cfb9-4761-96b0-9d64a0f95e5c",
"message": "",
"code": -1
}
}
Printer Type¶
Printer types describe a particular 3D printer model. Data is provided by the printer manufacturer. Forge supports printers with a rectangular build volume.
Schema¶
Field |
Type |
Description |
---|---|---|
id | string: UUID | Printer type ID |
version | int | Incremented every time this printer type ID is updated |
profile_id | string: UUID | Profile that provides the printing and slicing settings (see Profile object) |
manufacturer | string | Printer hardware manufacturer’s name |
name | string | Printer model’s name |
technology | enum: string | Printing technology used by the hardware:
DLP (digital light processing)FDM (fused deposition modeling) |
default_material_id | string: UUID | ID of the default material for this printer type |
default_profile_id | string: UUID | ID of the default profile for this printer type |
icon_id | string | ID of a PNG icon file for the printer type |
supported_connections | array: object | Type of printer, printer protocol, and printer info |
build_volume | object | Information about the build volume of the printer hardware |
build_volume.type | enum: string | Possible values:
cartesian (a rectangular prism)cylindrical (a cylinder) |
build_volume.bed_size | array: int | Volume dimensions (usually width, depth, and height) |
build_volume.bed_file_id | string | ID of a bed visualization ZIP file containing OBJ data; must include one OBJ file, may also include an MTL file and PNG or JPG images |
build_volume.park_position | array: int | Specifies where to position the extruder (in cm) after the print is complete |
build_volume.home_position | array:int | Specifies the starting position of the extruder (in cm) |
printable | object | The data that is sent to the printer |
printable.packager_file_id | string | ID of a file containing a Lua script, which converts the slicer output into a printable file |
printable.packager_data_files | array: object | Data files for packager |
printer_capabilities | object | FDM printers only. The capabilities of the printer |
printer_capabilities.num_extruders | int | FDM printers only. Number of extruders on the printer |
printer_capabilities.nozzle_diameter | float | FDM printers only. Nozzle tip diameter in cm |
printer_capabilities.nozzle_temp_max | int | FDM printers only. Maximum nozzle temperature in degrees Celsius |
printer_capabilities.bed_temp_max | int | FDM printers only. Maximum temperature for the print bed in degrees Celsius
0 if not heated |
printer_capabilities.xy_speed_max | float | FDM printers only. Maximum travel speed in the xy-plane in cm/sec. |
printer_capabilities.z_speed_max | float | FDM printers only. Maximum travel speed in the z-plane in cm/sec. |
printer_capabilities.e_speed_max | float | FDM printers only. Maximum speed of filament retraction/engagement in cm/sec. |
Example Object¶
{
"id": "7B7F944D-5F30-4C49-AA95-837D4B441260",
"manufacturer": "Autodesk",
"model": "Ember",
"technology": "DLP",
"firmware": "Custom",
"output": "PNG-GZIP",
"supported_connections": [
"TCP_IP",
"SD"
],
"preferred_connection": "TCP_IP",
"connections": {},
"build_volume": {},
"materials_types": [
"PHOTORESIN"
],
"max_materials": 1,
"dlp_specs": {}
}
Material¶
Materials provide a variety of information about the substances used in 3D printing, including associated printing technology, color, extrusion details, and associated printer types.
Schema¶
Field |
Type |
Description |
---|---|---|
id | string: UUID | Material type ID |
version | int | Incremented every time this material ID is updated |
name | string | Material name |
technology | enum: string | Possible values:
DLP (digital light processing)FDM (fused deposition modeling) |
composition | string | Chemical names of materials present
Composites use the format
PLA/Bronze |
printer_types | array | Printer types that use this material |
cost | float | Cost in USD per kilogram net weight of material |
manufacturer | string | Material manufacturer |
website | string | Website of primary distributor |
color | string | HTML color code of the material
For example:
FB452B |
opacity | enum: int | Degree of transparency:
1 : opaque (impenetrable to light)2 : semi-translucent3 : translucent (penetrable by light) |
rating | enum: int | Quality of material compared to published manufacturer tolerances:
5 : excellent4 : good3 : okay2 : poor1 : unacceptable |
tags | array: string | Properties that are unique to the material, such as food-safe , high-strength ,
and bpa-free |
pct-shrink | float | Shrink percentage between additive forming state and finished product state
null means undefined by manufacturer |
is_user | bool | Whether the material is in the user’s inventory of available materials. |
filament_diameter | float | FDM printers only. Diameter of filament feedstock in millimeters |
filament_extrusion_to_flow_multiplier | float | FDM printers only. Ratio of input feedstock volume to output extrusion volume
Nominally
1.00 , but voids or predictable material obstructions make it > 0 |
temp_extrude_default | int | FDM printers only. Default material extrusion temperature in degrees Celsius |
temp_min_extrude | int | FDM printers only. Minimum material extrusion temperature in degrees Celsius |
temp_max_extrude | int | FDM printers only. Maximum material extrusion temperature in degrees Celsius |
temp_bed | int | FDM printers only. Heated build platform temperature in degrees Celsius for optimal adhesion. |
min_nozzle_diameter | float | FDM printers only. Minimum size of nozzle for use with this material
null means undefined by manufacturerFor example:
0.4mm is the minimum nozzle diameter for PLA / wood composite filament
without jamming. |
extruder_fan_speed | enum: int | FDM printers only. Intensity of the extrudite cooling fan
Range:
0 to 255 Fans are sized to machine parameters.
|
firstExposureSec | int | DLP printers only. Exposure time in seconds for DLP projection onto resin for first layer or material |
burnInLayers | int | DLP printers only. Number of layers in the “burn-in” period for the material |
burnInExposureSec | int | DLP printers only. Exposure time in seconds for DLP projection onto resin for each burn in layer of material |
modelExposureSec | int | DLP printers only. Exposure time in seconds for DLP projection onto normal layers of material. |
density | float | DLP printers only. Density of the resin in kg/L. |
Example Object¶
{
"id": "426F14FE-E6AF-496F-BBC7-7D6C0E16861D",
"version": 1,
"name": "PHOTORESIN BLACK",
"technology": "PHOTORESIN",
"printer_types": [
"7FAF097F-DB2E-45DC-9395-A30210E789AA"
],
"cost": 100,
"exposure_power": 1,
"cure_time_adhesion": 1,
"cure_time_intermediary": 1,
"cure_time_nominal_layers": 1,
"color": "0b0b0a",
"protein_ref": 1234,
"manufacturer": "Autodesk",
"composition": "urethane"
}
Profile¶
A profile is a set of slicing parameters associated with a printer type.
Schema¶
Field |
Type |
Description |
---|---|---|
id | string: UUID | Profile ID. Profile IDs are UUIDs. |
version | int | Incremented every time this profile ID is updated |
name | string | Profile’s public name |
technology | enum: string | Possible values:
DLP (digital light processing)FDM (fused deposition modeling) |
printer_types | array: string: UUID | Printer type IDs that can use this profile
See the Printer Type object for more information.
|
layer_height | float | The distance between vertical layers of material |
support_angle_tol | float | The angle from vertical above which faces are considered to be overhanging |
support_contact_tol | float | If an overhanging triangle has a vertex within this distance from the build platform it will
be excluded from support
|
Example Object¶
{
"id": "34F0E39A-9389-42BA-AB5A-4F2CD59C98E4",
"version": 1,
"technology": "PHOTORESIN",
"name": "Ember High Quality",
"printer_types": [
"7FAF097F-DB2E-45DC-9395-A30210E789AA"
],
"support_angle_tol": 45.0,
"support_contact_tol": 0.0,
"support_min_radius": 0.0,
"support_min_separation": 0.0,
"layer_height": 0.02,
"layer_height_first": 0.2,
"img_width": 912,
"img_height": 1140,
"brightness_blur_radius": 21,
"brightness_input_min": 0.01,
"brightness_input_max": 0.25,
"brightness_output_min": 1.0,
"brightness_output_max": 0.88
}