openapi: 3.0.0
info:
version: 1.0.0
title: cove.tool API
termsOfService: https://www.cove.tools/terms-of-use
contact:
name: API Support
email: developers@covetool.com
x-logo:
url: ./covetool_logo.png
altText: cove.tool logo
href: https://cove.tools
x-apiVersions:
versions:
- v1
- v2
versionSpecs:
- openapi-v1.yaml
- openapi-v2.yaml
defaultVersionSpec: v1
description: "# Introduction\n\n The cove.tool API contain the following HTTP endpoints to upload your\
\ project's geometry and obtain an Energy Usage Intensity (EUI) breakdown. The cove.tool API is developed\
\ around the RESTful architecture which offers resource-based URLs, and uses standard HTTP methods\
\ and status codes.\n
\n We recently released the [cove.tool API v2](v2) as of February\
\ 2022! The cove.tool API v2 features a completely full-fledged way to start analyzing building performance\
\ metrics into your projects such as creating users, projects, obtaining user information and geometry\
\ values such as meshes and more! \n \n \n\n# Getting Started\nEvery call made to the cove.tool API requires\
\ the following:
1. **cove.tool account** - Make sure to have access to a valid (trial/licensed)\
\ cove.tool account.\n - If you do not have a cove.tool account, you can register for one [here](https://app.covetool.com/register).\n\
2. **Projects created with cove.tool** - Once you login to your cove.tool account, make\
\ sure to create project(s) you wish to update the geometry and obtain an EUI breakdown for! As these\
\ are the projects that the API relies on to obtain and retrieve information.
3. **Authentication\
\ token** - In order to start making calls to the API, each request will have to be authenticated.\
\ This is done by providing an authentication token on every request. It checks whether the user is\
\ authorized and has permission to perform the following actions. See more in the Authentication section\
\ below.\n\n# Prerequisite Knowledge\nIt is imperative to take note of the 3 basic objects (**project**,\
\ **runs**, **run values**); how they interact and relate with one another when trying to make updates\
\ to project geometry. _An individual project has many runs, and a run has many run values._\n
\n\
The run represents the data for a given building type/use type. We currently offer the following use\
\ types:\n - Office\n - Apartments\n - Education\n - Hospital\n - Hotel\n - Lab\n - Retail\n\
\ - Single Family Home\n \n\nA mixed use project with Office, Retail and Apartments would have 3\
\ runs. The _\"unique ID\"_ is the **url** which must be included when updating an object.\n# Authentication\n\
The following table contains more information on setting the Authentication token to each API request.\
\
Attempting to make API requests without authentication will fail.\
\ API requests must be made\n over HTTPS. Authentication tokens are used to help identify the user\n\
\ attempting to make the HTTP requests.\n
\n\n By providing an authentication token on\
\ every request, it checks whether\n the user is authorized and has permission to update and retrieve\
\ data.\n
\n Be sure to include it in every request header once you start making API calls.\n\
\
\nFor a concrete example, please see the [list all project details](v1#projects/get-project-info)\
\ section, particularly the **Header Parameters** section.\n# API Helper Functions\n\n The following\
\ code snippet contains a Python utility class function that enables your application to start utilizing\
\ the data returned from the cove.tool API. Passing in valid cove.tool credentials to the an instance\
\ of the helper class function will allow you to start making HTTP calls.\n
\n See the\
\ Python request samples in the appropriate endpoints below to see how you can make calls with `ApiHelpers`\
\ function.\n\n \n\n# Testing\n Utilizing standard API testing tools such as [HTTPie](https://httpie.io/)\
\ or [Postman](https://www.postman.com/) is a great way to start making calls to the cove.tool API.\n\
\n\n# Error Codes\n\n The cove.tool API uses conventional HTTP status codes to indicate\
\ the success or failure of an API request. Listed below are the general status codes our API currently\
\ returns, and how to further troubleshoot the most common errors you will see when trying to make\
\ API calls.\n
\n Status codes in the `2xx` range usually indicate a successful request.\n\
\
\n Status codes in the `4xx` range usually indicate an error in response to the information\
\ provided with the request.\n
\n Status codes in the `5xx` range usually indicate an unexpected\
\ error.\n\n |
HTTP Status Codes | Category | \
\ Description \
\ |\n |:-----------------:|:---------------------:|:---------------------------------------------------------------------------------------------------------------------------------------------------:|\n\
\ | 200 | Ok | \
\ Everything worked as expected. \
\ |\n | 201 | Successfully Updated | \
\ The resource was successfully created. \
\ |\n | 202 | Accepted | \
\ The request was accepted and is processing. \
\ |\n | 400 | Bad/Invalid Request | The request\
\ was unacceptable, Check and re-verify contents of required parameters in the response body. \
\ |\n | 401 | Unauthorized Request | No valid API token was provided.\
\ Check whether your API token is valid or whether it has the required permissions to perform the\
\ requested action. |\n | 403 | Forbidden Request | \
\ The API token doesn't have the permissions to perform the request. \
\ |\n | 404 | Resource Not Found | \
\ The requested resource doesn't exist. Verify if the URI is accurate. \
\ |\n | 5xx | Internal Server Error | \
\ An unexpected error occurred. Retry your request and if the problem persists, reach out for assistance\
\ using live chat. |\n\n
_Happy Developing!_"
servers:
- url: https://app.covetool.com/api
tags:
- name: Authentication Token
description: 'Attempting to make API requests without authentication will fail. API requests must be
made
over HTTPS. Authentication tokens are used to help identify the user
attempting to make the HTTP requests.
By providing an authentication token on every request, it checks whether
the user is authorized and has permission to update and retrieve data.
Be sure to include it in every request header once you start making API calls.'
- name: Projects
description: Lists all the projects of current user and returns a list of objects with project name,
runs, and its url.
- name: Project Geometry
description: Update project geometry and obtain an Energy Use Intensity (EUI) breakdown of a given model.
x-tagGroups:
- name: Authentication
tags:
- Authentication Header
- Authentication Token
- name: Projects
tags:
- Projects
- Project Geometry
paths:
/get-token:
post:
x-customPath:
name: /api-token
tags:
- Authentication Token
summary: Obtain an API token to authenticate requests
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/AuthTokenRequests'
description: API auth token request
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/AuthTokenResponses'
'400':
$ref: '#/components/responses/BadRequest'
x-codeSamples:
- lang: Python
label: Python
source: "import json, requests\n\nclass ApiHelpers:\n # Same credentials you use to log in to\
\ cove.tool\n def __init__(self, username, password):\n self.token = self._get_api_token(username,\
\ password)\n\n def post_request(self, path, data, use_token=True):\n url = self._api_url(path)\n\
\ headers = self._headers(use_token)\n response = requests.post(url, headers=headers,\
\ json=data)\n return self._handle_response(response)\n\n def get_request(self, path,\
\ use_token=True):\n url = self._api_url(path)\n headers = self._headers(use_token)\n\
\ response = requests.get(url, headers=headers)\n return self._handle_response(response)\n\
\n def _api_url(self, path):\n return 'https://app.covetool.com/api/' + path + '/'\n\n\
\ def _get_api_token(self, username, password):\n data = {\n 'username': username,\n\
\ 'password': password,\n }\n response_data = self.post_request('get-token',\
\ data, False)\n token = response_data['token']\n return str(token)\n\n def _headers(self,\
\ use_token):\n headers = {}\n if use_token:\n headers['Authorization'] =\
\ 'Token ' + self.token\n return headers\n\n def _handle_response(self, response):\n \
\ if response.ok:\n return response.json()\n else:\n return {'result':\
\ 'error'}\n\n# Set up helpers instance\nusername = 'username' # Replace with your cove.tool\
\ username\npassword = 'password' # Replace with your cove.tool password\nhelpers = ApiHelpers(username,\
\ password)\n\n# Print API token\nprint(helpers._get_api_token(username, password))\n"
description: Authentication tokens expire after 7 days and a new one must be fetched. When the token
will expire (in seconds) is included in the response.
Be sure to pass in valid cove.tool
associated credentials to obtain your authentication token.
/projects:
get:
x-customPath:
name: /get-project-info
tags:
- Projects
security:
- AuthToken: []
summary: List all projects and their associated information
parameters:
- name: Authorization
in: header
description: Authorization token
schema:
type: string
format: string
$ref: '#/components/schemas/AuthorizationToken'
responses:
'200':
description: Success
content:
application/json:
schema:
type: array
items:
oneOf:
- $ref: '#/components/schemas/AllProjectsRequestsA'
- $ref: '#/components/schemas/AllProjectsRequestsB'
'401':
$ref: '#/components/responses/Unauthorized'
x-codeSamples:
- lang: Python
label: Python
source: "import json, requests\n\nclass ApiHelpers:\n # Same credentials you use to log in to\
\ cove.tool\n def __init__(self, username, password):\n self.token = self._get_api_token(username,\
\ password)\n\n def post_request(self, path, data, use_token=True):\n url = self._api_url(path)\n\
\ headers = self._headers(use_token)\n response = requests.post(url, headers=headers,\
\ json=data)\n return self._handle_response(response)\n\n def get_request(self, path,\
\ use_token=True):\n url = self._api_url(path)\n headers = self._headers(use_token)\n\
\ response = requests.get(url, headers=headers)\n return self._handle_response(response)\n\
\n def _api_url(self, path):\n return 'https://app.covetool.com/api/' + path + '/'\n\n\
\ def _get_api_token(self, username, password):\n data = {\n 'username': username,\n\
\ 'password': password,\n }\n response_data = self.post_request('get-token',\
\ data, False)\n token = response_data['token']\n return str(token)\n\n def _headers(self,\
\ use_token):\n headers = {}\n if use_token:\n headers['Authorization'] =\
\ 'Token ' + self.token\n return headers\n\n def _handle_response(self, response):\n \
\ if response.ok:\n return response.json()\n else:\n return {'result':\
\ 'error'}\n\n# Set up helpers instance\nusername = 'username' # Replace with your cove.tool\
\ username\npassword = 'password' # Replace with your cove.tool password\nhelpers = ApiHelpers(username,\
\ password)\n\n# Get a list of projects\nproject_list = helpers.get_request('projects')\nnames\
\ = []\nvalues = []\nfor project in project_list:\n if project['run_set']:\n name\
\ = str(project['name'])\n value = str(project['run_set'][0])\n names.append(name)\n\
\ values.append(value)\n"
/run-values:
post:
x-customPath:
name: /update-project-geometry
tags:
- Project Geometry
security:
- AuthToken: []
summary: Update geometry values for a given project/run
requestBody:
required: true
content:
application/json:
schema:
anyOf:
- $ref: '#/components/schemas/Update3DGeometryAreasRequests'
- $ref: '#/components/schemas/Update2DGeometryAreasRequests'
responses:
'201':
description: Successfully updated
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateGeometryAreasResponses'
'400':
$ref: '#/components/responses/BadRequest'
description: "Update both 2D project geometry and 3D project geometry by passing in different request\
\ bodies. For more information on each of the required fields/categories, see the schemas in request\
\ body section of this endpoint.
\n2D and 3D project geometry both require at least\
\ one non-zero value in the **wall_area_X**, and **window_area_X** property (where **X** is the\
\ cardinal direction).\n
\n\n List of available cardinal directions (replace **X** with\
\ the following acceptable cardinal direction): \n - n\n - s\n - e\n - w\n - ne\n - nw\n\
\ - se\n - sw\n \n**3D Geometry**
Note that units should be in ft, so areas would be\
\ in ft2 regardless of project units. The _si_units_ parameter only affects the 2D\
\ geometry inputs.
Each category requires an array of objects represented as vertex\
\ and triangle data. Note that you can send each category separately. Each mesh must have a list\
\ of Vertices along with Triangles which refer to Vertices by index. Normal and Center are required\
\ for each mesh so that the faces are rendered in the correct direction/position. LevelId and\
\ DerivingElementUniqueId are optional fields.
\n**2D Geometry and 3D Geometry**
\
\ Note: All values will be converted to the project's units (in the web app interface) by default.\
\ This is controlled with the _si_units_ parameter - a value of true will save the values as SI\
\ while a value of false will convert them from imperial to SI before saving.
The\
\ EUI data in the response will always be in SI units."
x-codeSamples:
- lang: Python
name: Python
source: "import json, requests\n\nclass ApiHelpers:\n # Same credentials you use to log in to\
\ cove.tool\n def __init__(self, username, password):\n self.token = self._get_api_token(username,\
\ password)\n\n def post_request(self, path, data, use_token=True):\n url = self._api_url(path)\n\
\ headers = self._headers(use_token)\n response = requests.post(url, headers=headers,\
\ json=data)\n return self._handle_response(response)\n\n def get_request(self, path,\
\ use_token=True):\n url = self._api_url(path)\n headers = self._headers(use_token)\n\
\ response = requests.get(url, headers=headers)\n return self._handle_response(response)\n\
\n def _api_url(self, path):\n return 'https://app.covetool.com/api/' + path + '/'\n\n\
\ def _get_api_token(self, username, password):\n data = {\n 'username': username,\n\
\ 'password': password,\n }\n response_data = self.post_request('get-token',\
\ data, False)\n token = response_data['token']\n return str(token)\n\n def _headers(self,\
\ use_token):\n headers = {}\n if use_token:\n headers['Authorization'] =\
\ 'Token ' + self.token\n return headers\n\n def _handle_response(self, response):\n \
\ if response.ok:\n return response.json()\n else:\n return {'result':\
\ 'error'}\n\n# Set up helpers instance\nusername = 'username' # Replace with your cove.tool\
\ username\npassword = 'password' # Replace with your cove.tool password\nhelpers = ApiHelpers(username,\
\ password)\n\n# Update a run\n# Replace \"1\" with a run ID that belongs to one of your projects\n\
run = 'https://app.covetool.com/api/runs/1/'\nsi_units = 'true'\nbuilding_height = 15\nroof_area\
\ = 900\nfloor_area = 900\nskylight_area = 150\nwall_area_e = 450\nwall_area_ne = 0\nwall_area_n\
\ = 450\nwall_area_nw = 0\nwall_area_w = 450\nwall_area_sw = 0\nwall_area_s = 450\nwall_area_se\
\ = 0\nwindow_area_e = 200\nwindow_area_ne = 0\nwindow_area_n = 200\nwindow_area_nw = 0\nwindow_area_w\
\ = 200\nwindow_area_sw = 0\nwindow_area_s = 200\nwindow_area_se = 0\n\ndata = {\n'run': run,\n\
'si_units': si_units,\n'building_height': building_height,\n'roof_area': roof_area,\n'floor_area':\
\ floor_area,\n'skylight_area': skylight_area,\n'wall_area_e': wall_area_e,\n'wall_area_ne':\
\ wall_area_ne,\n'wall_area_n': wall_area_n,\n'wall_area_nw': wall_area_nw,\n'wall_area_w':\
\ wall_area_w,\n'wall_area_sw': wall_area_sw,\n'wall_area_s': wall_area_s,\n'wall_area_se':\
\ wall_area_se,\n'window_area_e': window_area_e,\n'window_area_ne': window_area_ne,\n'window_area_n':\
\ window_area_n,\n'window_area_nw': window_area_nw,\n'window_area_w': window_area_w,\n'window_area_sw':\
\ window_area_sw,\n'window_area_s': window_area_s,\n'window_area_se': window_area_se,\n}\n\n\
result = helpers.post_request('run-values', data)\neui_total = result['data']['eui_total']\n\
print('EUI Total:', eui_total)\n\ncooling = 0\nheating = 0\nlighting = 0\nequipment = 0\nfans\
\ = 0\npumps = 0\nhot_water = 0\neui_breakdown = result['data']['eui_breakdown']\nheaders =\
\ eui_breakdown['headers']\nvalues = eui_breakdown['values']\nfor i, header in enumerate(headers):\n\
\ if header == 'Cooling':\n cooling = float(values[i])\n print('Cooling:', cooling)\n\
\ elif header == 'Heating':\n heating = float(values[i])\n print('Heating:', heating)\n\
\ elif header == 'Lighting':\n lighting = float(values[i])\n print('Lighting:', lighting)\n\
\ elif header == 'Equipment':\n equipment = float(values[i])\n print('Equipment:',\
\ equipment)\n elif header == 'Fans':\n fans = float(values[i])\n print('Fans:',\
\ fans)\n elif header == 'Pumps':\n pumps = float(values[i])\n print('Pumps:', pumps)\n\
\ elif header == 'Hot Water':\n hot_water = float(values[i])\n print('Hot Water:',\
\ hot_water)\n"
components:
securitySchemes:
AuthToken:
type: apiKey
in: header
name: Authorization
responses:
BadRequest:
description: Bad/Invalid request
NotFound:
description: The specified resource was not found
Unauthorized:
description: Unauthorized request
InternalServerError:
description: Internal Server Error
schemas:
BasePathURL:
source: 'https://app.covetool.com/api
'
CurlCodeSample:
source: "import json, requests\n\nclass ApiHelpers:\n # Same credentials you use to log in to cove.tool\n\
\ def __init__(self, username, password):\n self.token = self._get_api_token(username, password)\n\
\n def post_request(self, path, data, use_token=True):\n url = self._api_url(path)\n \
\ headers = self._headers(use_token)\n response = requests.post(url, headers=headers, json=data)\n\
\ return self._handle_response(response)\n\n def get_request(self, path, use_token=True):\n\
\ url = self._api_url(path)\n headers = self._headers(use_token)\n response = requests.get(url,\
\ headers=headers)\n return self._handle_response(response)\n\n def _api_url(self, path):\n\
\ return 'https://app.covetool.com/api/' + path + '/'\n\n def _get_api_token(self, username,\
\ password):\n data = {\n 'username': username,\n 'password': password,\n\
\ }\n response_data = self.post_request('get-token', data, False)\n token = response_data['token']\n\
\ return str(token)\n\n def _headers(self, use_token):\n headers = {}\n if use_token:\n\
\ headers['Authorization'] = 'Token ' + self.token\n return headers\n\n def _handle_response(self,\
\ response):\n if response.ok:\n return response.json()\n else:\n \
\ return {'result': 'error'}\n"
AuthTokenRequests:
type: object
required:
- username
- password
properties:
username:
type: string
format: email
example: hello@covetool.com
password:
type: string
format: string
example: mysupersecurepassword
AuthTokenResponses:
type: object
required:
- expires_in
- token
properties:
expires_in:
type: boolean
format: string
example: '604799.998047'
token:
type: string
format: string
example: aaaa1111aaaa1111aaaa1111aaaa1111aaaa
AuthorizationToken:
type: string
format: string
example: 'Authorization: Token aaaa1111aaaa1111aaaa1111aaaa1111aaaa'
ProjectsRequests:
type: object
required:
- name
- run_set
- url
properties:
name:
type: string
format: string
run_set:
type: array
items:
type: string
url:
type: string
format: string
AllProjectsRequestsA:
oneOf:
- $ref: '#/components/schemas/ProjectsRequests'
example:
name: Project A
run_set:
- https://app.covetool.com/api/runs/1/
url: https://app.covetool.com/api/projects/1/
AllProjectsRequestsB:
oneOf:
- $ref: '#/components/schemas/ProjectsRequests'
example:
name: Project B
run_set:
- https://app.covetool.com/api/runs/2/
url: https://app.covetool.com/api/projects/2/
EuiBreakdownHeaders:
type: array
items:
type: string
example:
- Cooling
- Heating
- Lighting
- Equipment
- Fans
- Pumps
- Hot Water
UpdateGeometryAreasResponses:
type: object
required:
- data
- result
properties:
data:
type: object
required:
- eui_breakdown
- eui_total
properties:
eui_breakdown:
type: object
required:
- headers
- values
- total_gas
- total_electric
- total_electric_without_pv
- Primary Energy Heating
- Primary Energy Domestic Hot Water
properties:
headers:
$ref: '#/components/schemas/EuiBreakdownHeaders'
values:
type: array
items:
type: number
format: double
example:
- 42.69810373890001
- 215.9911661803
- 35.150749997999995
- 26.540714283
- 83.00345598700001
- 4.380000116000001
- 5.9237200512
total_gas:
type: number
format: double
example: 10.4080428009
total_electric:
type: number
format: double
example: 174.19649714809515
Primary Energy Heating:
type: string
example: electric
Primary Energy Domestic Hot Water:
type: string
example: gas
eui_total:
type: number
format: double
example: 413.68791035439995
result:
type: string
format: string
example: success
Update2DGeometryAreasRequests:
type: object
required:
- run
- building_height
- roof_area
- floor_area
properties:
run:
type: string
format: url
example: https://app.covetool.com/api/runs/1
window_area_ne:
type: number
minimum: 0
example: 0
roof_area:
type: number
minimum: 0
example: 900
skylight_area:
type: number
minimum: 0
example: 150
building_height:
type: number
minimum: 0
example: 15
window_area_nw:
type: number
minimum: 0
example: 0
window_area_se:
type: number
minimum: 0
example: 0
window_area_sw:
type: number
minimum: 0
example: 0
si_units:
type: boolean
example: true
floor_area:
type: number
minimum: 0
example: 900
wall_area_sw:
type: number
minimum: 0
example: 0
wall_area_nw:
type: number
minimum: 0
example: 0
wall_area_ne:
type: number
minimum: 0
example: 0
wall_area_se:
type: number
minimum: 0
example: 0
window_area_e:
type: number
minimum: 0
example: 200
wall_area_w:
type: number
minimum: 0
example: 450
wall_area_s:
type: number
minimum: 0
example: 450
window_area_n:
type: number
minimum: 0
example: 200
wall_area_n:
type: number
minimum: 0
example: 450
window_area_s:
type: number
minimum: 0
example: 200
window_area_w:
type: number
minimum: 0
example: 200
wall_area_e:
type: number
minimum: 0
example: 450
Update3DGeometryAreasRequests:
type: object
required:
- source
- run
- walls
- windows
- roofs
- floors
- building_height
properties:
run:
type: string
example: https://app.covetool.com/api/runs/1
source:
description: Your app name and version identifier
type: string
example: revit-2.2.0
building_height:
type: number
example: 15
window_area_ne:
type: number
example: 200
wall_area_e:
type: number
example: 450
walls:
note: refers to exterior walls
allOf:
- $ref: '#/components/schemas/MeshObject'
windows:
allOf:
- $ref: '#/components/schemas/MeshObject'
roofs:
allOf:
- $ref: '#/components/schemas/MeshObject'
floors:
allOf:
- $ref: '#/components/schemas/MeshObject'
rotation_angle:
description: The rotation angle in degrees from North in a clockwise direction
type: number
example: 45
interior_walls:
allOf:
- $ref: '#/components/schemas/MeshObject'
skylights:
allOf:
- $ref: '#/components/schemas/MeshObject'
shading_devices:
allOf:
- $ref: '#/components/schemas/MeshObject'
spandrels:
allOf:
- $ref: '#/components/schemas/MeshObject'
outdoor_floors:
allOf:
- $ref: '#/components/schemas/MeshObject'
furniture:
allOf:
- $ref: '#/components/schemas/MeshObject'
below_grade_walls:
allOf:
- $ref: '#/components/schemas/MeshObject'
VerticesObject:
type: object
allOf:
- $ref: '#/components/schemas/VerticesModel'
- type: object
example:
- X: 0.666022
Y: 226.752487
Z: 25.262917
- X: 0.66602
Y: 50.666023
Z: 25.262917
- X: 27.935207
Y: 50.666023
Z: 26.262917
- X: 27.935207
Y: 66.381523
Z: 25.262917
- X: 36.596779
Y: 66.281523
Z: 25.262917
- X: 36.596779
Y: 50.66023
Z: 25.262917
- X: 208.763153
Y: 50.666023
Z: 25.262917
- X: 208.763153
Y: 66.281523
Z: 25.262917
- X: 217.424728
Y: 66.381523
Z: 25.262917
- X: 217.424728
Y: 86.249985
Z: 25.262917
- X: 56.250347
Y: 86.249985
Z: 25.262917
- X: 56.250347
Y: 191.08519
Z: 25.262917
- X: 121.751503
Y: 191.08519
Z: 25.262917
- X: 121.751503
Y: 211.036987
Z: 25.262917
- X: 113.089935
Y: 211.036987
Z: 25.262917
- X: 113.089935
Y: 226.752487
Z: 25.262917
- X: 62.055077
Y: 70.138153
Z: 25.262917
- X: 62.055077
Y: 77.27903
Z: 25.262917
- X: 68.170013
Y: 77.27903
Z: 25.262917
- X: 68.170013
Y: 70.138153
Z: 25.262917
- X: 36.45314
Y: 112.458786
Z: 25.262917
- X: 45.705929
Y: 112.458786
Z: 25.262917
- X: 45.705929
Y: 86.458328
Z: 25.262917
- X: 36.45314
Y: 86.458328
Z: 25.262917
- X: 36.45314
Y: 148.459427
Z: 25.262917
- X: 45.705929
Y: 148.459427
Z: 25.262917
- X: 45.705929
Y: 122.458969
Z: 25.262917
- X: 36.45314
Y: 122.458969
Z: 25.262917
- X: 36.519417
Y: 184.460068
Z: 25.262917
- X: 45.673122
Y: 184.460068
Z: 25.262917
- X: 45.673122
Y: 158.45961
Z: 25.262917
- X: 36.519417
Y: 158.45961
Z: 25.262917
TrianglesArray:
allOf:
- type: array
example:
- - 1
- 2
- 3
- - 31
- 28
- 0
- - 31
- 0
- 24
- - 29
- 11
- 28
- - 27
- 24
- 1
- - 1
- 20
- 27
- - 24
- 25
- 31
- - 20
- 21
- 26
- - 0
- 1
- 24
- - 11
- 29
- 30
- - 12
- 13
- 14
- - 15
- 11
- 14
- - 12
- 14
- 11
- - 0
- 11
- 15
- - 26
- 21
- 10
- - 26
- 10
- 25
- - 11
- 30
- 25
- - 25
- 10
- 11
- - 4
- 22
- 23
- - 1
- 3
- 23
- - 18
- 9
- 10
- - 10
- 22
- 17
- - 3
- 4
- 23
- - 4
- 17
- 22
- - 1
- 2
- 3
- - 1
- 23
- 20
- - 5
- 16
- 4
- - 4
- 16
- 17
- - 18
- 7
- 9
- - 17
- 18
- 10
- - 7
- 19
- 6
- - 5
- 9
- 16
- - 7
- 8
- 9
- - 19
- 7
- 18
- - 19
- 5
- 6
- - 22
- 10
- 21
- - 25
- 30
- 31
- - 20
- 26
- 27
VerticesModel:
type: object
properties:
X:
type: number
format: double
Y:
type: number
format: double
Z:
type: number
format: double
MeshObject:
description: An array of objects represented as vertex and triangle data. Each mesh must have a
list of Vertices along with Triangles which refer to Vertices by index. Normal and Center are
required for each mesh so that the faces are rendered in the correct direction/position. LevelId
and DerivingElementUniqueId are optional fields
type: array
items:
type: object
required:
- Mesh
- Center
- Normal
properties:
Mesh:
type: object
required:
- Vertices
- Triangles
properties:
Vertices:
$ref: '#/components/schemas/VerticesObject'
Triangles:
$ref: '#/components/schemas/TrianglesArray'
Center:
$ref: '#/components/schemas/CenterObject'
Normal:
$ref: '#/components/schemas/NormalObject'
CenterObject:
allOf:
- $ref: '#/components/schemas/VerticesModel'
- type: object
example:
X: 72.45084
Y: 119.337007
Z: 25.262917
NormalObject:
allOf:
- $ref: '#/components/schemas/VerticesModel'
- type: object
example:
X: 0
Y: 0
Z: 1