Calculating Volume and Surface Area
OCCT provides built-in functions to calculate geometric properties of solid shapes, including volume and surface area. This tutorial demonstrates how to:
- Create a parametric cone solid
- Calculate the volume of the solid using
getSolidVolume - Calculate the surface area using
getSolidSurfaceArea - Format and display the results with proper units
- Use pin labels for visual annotation
The example shows a practical workflow for measuring and displaying geometric properties, which is essential for engineering calculations, material estimates, and design validation.
- Rete
- Blockly
- TypeScript
Script Source (rete)
{
"id": "rete-v2-json",
"nodes": {
"bef75e4e7ff3c3b7": {
"id": "bef75e4e7ff3c3b7",
"name": "bitbybit.occt.shapes.solid.createCone",
"customName": "cone",
"async": true,
"drawable": true,
"data": {
"genericNodeData": {
"hide": false,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"radius1": 2,
"radius2": 1,
"height": 2,
"angle": 360,
"center": [
0,
0,
0
],
"direction": [
0,
1,
0
]
},
"inputs": {
"height": {
"connections": [
{
"node": "3451ed6841849bc5",
"output": "result",
"data": {}
}
]
}
},
"position": [
316.4713600560928,
429.3616724479225
]
},
"7983606b99981835": {
"id": "7983606b99981835",
"name": "bitbybit.occt.shapes.solid.getSolidVolume",
"customName": "get solid volume",
"async": true,
"drawable": false,
"data": {
"genericNodeData": {
"hide": false,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
}
},
"inputs": {
"shape": {
"connections": [
{
"node": "bef75e4e7ff3c3b7",
"output": "result",
"data": {}
}
]
}
},
"position": [
776.8984375,
228.30078125
]
},
"76186587e6ec91af": {
"id": "76186587e6ec91af",
"name": "bitbybit.occt.dimensions.pinWithLabel",
"customName": "pin with label",
"async": true,
"drawable": true,
"data": {
"genericNodeData": {
"hide": false,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"startPoint": [
0,
0,
0
],
"endPoint": [
0,
5,
2
],
"direction": [
0,
0,
1
],
"offsetFromStart": 0,
"label": "Pin",
"labelOffset": 0.3,
"labelSize": 0.3
},
"inputs": {
"startPoint": {
"connections": [
{
"node": "1ece96f4b7f7b2f0",
"output": "result",
"data": {}
}
]
},
"endPoint": {
"connections": [
{
"node": "194d1fdaff71b010",
"output": "result",
"data": {}
}
]
},
"direction": {
"connections": [
{
"node": "51a8898dbf972632",
"output": "result",
"data": {}
}
]
},
"label": {
"connections": [
{
"node": "0efa312769a4d07b",
"output": "result",
"data": {}
}
]
}
},
"position": [
3856.438127809349,
-1015.9733606944596
]
},
"9c4a703b6e556e1a": {
"id": "9c4a703b6e556e1a",
"name": "bitbybit.text.toString",
"customName": "to string",
"async": false,
"drawable": false,
"data": {
"genericNodeData": {
"hide": false,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
}
},
"inputs": {
"item": {
"connections": [
{
"node": "30dea4d862516011",
"output": "result",
"data": {}
}
]
}
},
"position": [
1536.26953125,
224.28515625
]
},
"30dea4d862516011": {
"id": "30dea4d862516011",
"name": "bitbybit.math.roundToDecimals",
"customName": "round to decimals",
"async": false,
"drawable": false,
"data": {
"genericNodeData": {
"hide": false,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"number": 1.123456,
"decimalPlaces": 2
},
"inputs": {
"number": {
"connections": [
{
"node": "7983606b99981835",
"output": "result",
"data": {}
}
]
}
},
"position": [
1162.9375,
227.17578125
]
},
"1ece96f4b7f7b2f0": {
"id": "1ece96f4b7f7b2f0",
"name": "bitbybit.point.pointXYZ",
"customName": "point xyz",
"async": false,
"drawable": true,
"data": {
"genericNodeData": {
"hide": true,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"x": 0,
"y": 0,
"z": 0
},
"inputs": {
"y": {
"connections": [
{
"node": "3451ed6841849bc5",
"output": "result",
"data": {}
}
]
}
},
"position": [
320.1503492475161,
-823.8345351273548
]
},
"3451ed6841849bc5": {
"id": "3451ed6841849bc5",
"name": "bitbybit.math.numberSlider",
"customName": "number slider",
"data": {
"number": 5
},
"inputs": {},
"position": [
-471.18057504668485,
55.287555693302465
]
},
"194d1fdaff71b010": {
"id": "194d1fdaff71b010",
"name": "bitbybit.point.pointXYZ",
"customName": "point xyz",
"async": false,
"drawable": true,
"data": {
"genericNodeData": {
"hide": true,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"x": 1,
"y": 0,
"z": 0
},
"inputs": {
"y": {
"connections": [
{
"node": "9d44a01eb843e2d1",
"output": "result",
"data": {}
}
]
}
},
"position": [
875.337940721461,
-614.8163334681311
]
},
"9d44a01eb843e2d1": {
"id": "9d44a01eb843e2d1",
"name": "bitbybit.math.add",
"customName": "add",
"async": false,
"drawable": false,
"data": {
"genericNodeData": {
"hide": false,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"first": 1,
"second": 3
},
"inputs": {
"first": {
"connections": [
{
"node": "3451ed6841849bc5",
"output": "result",
"data": {}
}
]
}
},
"position": [
312.3284556725623,
-445.57119812816956
]
},
"51a8898dbf972632": {
"id": "51a8898dbf972632",
"name": "bitbybit.vector.vectorXYZ",
"customName": "vector xyz",
"async": false,
"drawable": true,
"data": {
"genericNodeData": {
"hide": false,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"x": 1,
"y": 0,
"z": 0
},
"inputs": {},
"position": [
3014.8799127241427,
-730.5519639853317
]
},
"0efa312769a4d07b": {
"id": "0efa312769a4d07b",
"name": "bitbybit.text.format",
"customName": "format",
"async": false,
"drawable": false,
"data": {
"genericNodeData": {
"hide": false,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"text": "Volume {0} m3",
"values": [
"World"
]
},
"inputs": {
"values": {
"connections": [
{
"node": "599e0c7d46fb3220",
"output": "list",
"data": {}
}
]
}
},
"position": [
2318.784938903148,
183.34330157468807
]
},
"599e0c7d46fb3220": {
"id": "599e0c7d46fb3220",
"name": "bitbybit.lists.createList",
"customName": "create list",
"data": {},
"inputs": {
"listElements": {
"connections": [
{
"node": "9c4a703b6e556e1a",
"output": "result",
"data": {}
}
]
}
},
"position": [
1904.7372263660575,
259.0413088840905
]
},
"cf44076aa095e6be": {
"id": "cf44076aa095e6be",
"name": "bitbybit.occt.shapes.solid.getSolidSurfaceArea",
"customName": "get solid surface area",
"async": true,
"drawable": false,
"data": {
"genericNodeData": {
"hide": false,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
}
},
"inputs": {
"shape": {
"connections": [
{
"node": "bef75e4e7ff3c3b7",
"output": "result",
"data": {}
}
]
}
},
"position": [
781.1595294729707,
561.0577770468958
]
},
"ffa937c14c398763": {
"id": "ffa937c14c398763",
"name": "bitbybit.math.roundToDecimals",
"customName": "round to decimals",
"async": false,
"drawable": false,
"data": {
"genericNodeData": {
"hide": false,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"number": 1.123456,
"decimalPlaces": 2
},
"inputs": {
"number": {
"connections": [
{
"node": "cf44076aa095e6be",
"output": "result",
"data": {}
}
]
}
},
"position": [
1155.6690292844728,
559.5658471840296
]
},
"67d5a769c297f8ac": {
"id": "67d5a769c297f8ac",
"name": "bitbybit.text.toString",
"customName": "to string",
"async": false,
"drawable": false,
"data": {
"genericNodeData": {
"hide": false,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
}
},
"inputs": {
"item": {
"connections": [
{
"node": "ffa937c14c398763",
"output": "result",
"data": {}
}
]
}
},
"position": [
1536.7464934260677,
557.6073820788339
]
},
"1c0ab3180b9f1f7c": {
"id": "1c0ab3180b9f1f7c",
"name": "bitbybit.lists.createList",
"customName": "create list",
"data": {},
"inputs": {
"listElements": {
"connections": [
{
"node": "67d5a769c297f8ac",
"output": "result",
"data": {}
}
]
}
},
"position": [
1906.1380856366695,
592.2885091683142
]
},
"07fa1b295ea8f41b": {
"id": "07fa1b295ea8f41b",
"name": "bitbybit.text.format",
"customName": "format",
"async": false,
"drawable": false,
"data": {
"genericNodeData": {
"hide": false,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"text": "Area {0} m2",
"values": [
"World"
]
},
"inputs": {
"values": {
"connections": [
{
"node": "1c0ab3180b9f1f7c",
"output": "list",
"data": {}
}
]
}
},
"position": [
2320.154705372718,
513.2889897780375
]
},
"34136572848d000a": {
"id": "34136572848d000a",
"name": "bitbybit.occt.dimensions.pinWithLabel",
"customName": "pin with label",
"async": true,
"drawable": true,
"data": {
"genericNodeData": {
"hide": false,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"startPoint": [
0,
0,
0
],
"endPoint": [
0,
5,
2
],
"direction": [
0,
0,
1
],
"offsetFromStart": 0,
"label": "Pin",
"labelOffset": 0.3,
"labelSize": 0.3
},
"inputs": {
"startPoint": {
"connections": [
{
"node": "1ece96f4b7f7b2f0",
"output": "result",
"data": {}
}
]
},
"endPoint": {
"connections": [
{
"node": "e484b4c9d7d6c427",
"output": "result",
"data": {}
}
]
},
"label": {
"connections": [
{
"node": "07fa1b295ea8f41b",
"output": "result",
"data": {}
}
]
},
"direction": {
"connections": [
{
"node": "51a8898dbf972632",
"output": "result",
"data": {}
}
]
}
},
"position": [
3855.9347930048825,
-299.2942260650964
]
},
"e484b4c9d7d6c427": {
"id": "e484b4c9d7d6c427",
"name": "bitbybit.point.pointXYZ",
"customName": "point xyz",
"async": false,
"drawable": true,
"data": {
"genericNodeData": {
"hide": true,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"x": 1,
"y": 0,
"z": 0
},
"inputs": {
"y": {
"connections": [
{
"node": "2b0e56a3f84f7519",
"output": "result",
"data": {}
}
]
}
},
"position": [
873.8268720660141,
-264.68433278373993
]
},
"2b0e56a3f84f7519": {
"id": "2b0e56a3f84f7519",
"name": "bitbybit.math.add",
"customName": "add",
"async": false,
"drawable": false,
"data": {
"genericNodeData": {
"hide": false,
"oneOnOne": false,
"flatten": 0,
"forceExecution": false
},
"first": 1,
"second": 4
},
"inputs": {
"first": {
"connections": [
{
"node": "3451ed6841849bc5",
"output": "result",
"data": {}
}
]
}
},
"position": [
307.39199038507314,
-134.11228446887458
]
}
}
}
Script Source (blockly)
<xml xmlns="https://developers.google.com/blockly/xml"><variables><variable id="height">height</variable><variable id="cone">cone</variable><variable id="volume">volume</variable><variable id="surfaceArea">surfaceArea</variable><variable id="roundedVolume">roundedVolume</variable><variable id="roundedSurfaceArea">roundedSurfaceArea</variable><variable id="volumeText">volumeText</variable><variable id="areaText">areaText</variable><variable id="volumePin">volumePin</variable><variable id="areaPin">areaPin</variable></variables><block type="variables_set" id="set_height" x="50" y="50"><field name="VAR" id="height">height</field><value name="VALUE"><block type="math_number" id="height_value"><field name="NUM">5</field></block></value><next><block type="variables_set" id="create_cone"><field name="VAR" id="cone">cone</field><value name="VALUE"><block type="bitbybit.occt.shapes.solid.createCone" id="cone_solid"><value name="Radius1"><block type="math_number" id="cone_radius1"><field name="NUM">2</field></block></value><value name="Radius2"><block type="math_number" id="cone_radius2"><field name="NUM">1</field></block></value><value name="Height"><block type="variables_get" id="get_height"><field name="VAR" id="height">height</field></block></value><value name="Angle"><block type="math_number" id="cone_angle"><field name="NUM">360</field></block></value><value name="Center"><block type="bitbybit.point.pointXYZ" id="cone_center"><value name="X"><block type="math_number" id="cone_center_x"><field name="NUM">0</field></block></value><value name="Y"><block type="math_number" id="cone_center_y"><field name="NUM">0</field></block></value><value name="Z"><block type="math_number" id="cone_center_z"><field name="NUM">0</field></block></value></block></value><value name="Direction"><block type="bitbybit.vector.vectorXYZ" id="cone_direction"><value name="X"><block type="math_number" id="cone_dir_x"><field name="NUM">0</field></block></value><value name="Y"><block type="math_number" id="cone_dir_y"><field name="NUM">1</field></block></value><value name="Z"><block type="math_number" id="cone_dir_z"><field name="NUM">0</field></block></value></block></value></block></value><next><block type="variables_set" id="get_volume"><field name="VAR" id="volume">volume</field><value name="VALUE"><block type="base_time_await_return" id="?!}liA;Ms08=A,o6bcAG"><value name="Promise"><block type="bitbybit.occt.shapes.solid.getSolidVolume" id="solid_volume"><value name="Shape"><block type="variables_get" id="get_cone_for_volume"><field name="VAR" id="cone">cone</field></block></value></block></value></block></value><next><block type="variables_set" id="get_surface_area"><field name="VAR" id="surfaceArea">surfaceArea</field><value name="VALUE"><block type="base_time_await_return" id=";XuhcK~CC^:Z}@@{@;a="><value name="Promise"><block type="bitbybit.occt.shapes.solid.getSolidSurfaceArea" id="solid_surface_area"><value name="Shape"><block type="variables_get" id="get_cone_for_area"><field name="VAR" id="cone">cone</field></block></value></block></value></block></value><next><block type="variables_set" id="round_volume"><field name="VAR" id="roundedVolume">roundedVolume</field><value name="VALUE"><block type="bitbybit.math.roundToDecimals" id="round_vol"><value name="Number"><block type="variables_get" id="get_volume_to_round"><field name="VAR" id="volume">volume</field></block></value><value name="DecimalPlaces"><block type="math_number" id="volume_decimals"><field name="NUM">2</field></block></value></block></value><next><block type="variables_set" id="round_surface_area"><field name="VAR" id="roundedSurfaceArea">roundedSurfaceArea</field><value name="VALUE"><block type="bitbybit.math.roundToDecimals" id="round_area"><value name="Number"><block type="variables_get" id="get_area_to_round"><field name="VAR" id="surfaceArea">surfaceArea</field></block></value><value name="DecimalPlaces"><block type="math_number" id="area_decimals"><field name="NUM">2</field></block></value></block></value><next><block type="variables_set" id="format_volume_text"><field name="VAR" id="volumeText">volumeText</field><value name="VALUE"><block type="bitbybit.text.format" id="volume_format"><value name="Text"><block type="text" id="volume_template"><field name="TEXT">Volume {0} m3</field></block></value><value name="Values"><block type="lists_create_with" id="volume_values"><mutation items="1"></mutation><value name="ADD0"><block type="bitbybit.text.toString" id="volume_to_string"><value name="Item"><block type="variables_get" id="get_rounded_volume"><field name="VAR" id="roundedVolume">roundedVolume</field></block></value></block></value></block></value></block></value><next><block type="variables_set" id="format_area_text"><field name="VAR" id="areaText">areaText</field><value name="VALUE"><block type="bitbybit.text.format" id="area_format"><value name="Text"><block type="text" id="area_template"><field name="TEXT">Area {0} m3</field></block></value><value name="Values"><block type="lists_create_with" id="area_values"><mutation items="1"></mutation><value name="ADD0"><block type="bitbybit.text.toString" id="area_to_string"><value name="Item"><block type="variables_get" id="get_rounded_area"><field name="VAR" id="roundedSurfaceArea">roundedSurfaceArea</field></block></value></block></value></block></value></block></value><next><block type="variables_set" id="create_volume_pin"><field name="VAR" id="volumePin">volumePin</field><value name="VALUE"><block type="bitbybit.occt.dimensions.pinWithLabel" id="volume_pin"><value name="StartPoint"><block type="bitbybit.point.pointXYZ" id="volume_start_point"><value name="X"><block type="math_number" id="vol_start_x"><field name="NUM">0</field></block></value><value name="Y"><block type="variables_get" id="get_height_for_vol_pin"><field name="VAR" id="height">height</field></block></value><value name="Z"><block type="math_number" id="vol_start_z"><field name="NUM">0</field></block></value></block></value><value name="EndPoint"><block type="bitbybit.point.pointXYZ" id="volume_end_point"><value name="X"><block type="math_number" id="vol_end_x"><field name="NUM">1</field></block></value><value name="Y"><block type="math_arithmetic" id="vol_end_y"><field name="OP">ADD</field><value name="A"><block type="variables_get" id="get_height_for_vol_end"><field name="VAR" id="height">height</field></block></value><value name="B"><block type="math_number" id="vol_offset"><field name="NUM">3</field></block></value></block></value><value name="Z"><block type="math_number" id="vol_end_z"><field name="NUM">0</field></block></value></block></value><value name="Direction"><block type="bitbybit.vector.vectorXYZ" id="volume_direction"><value name="X"><block type="math_number" id="vol_dir_x"><field name="NUM">1</field></block></value><value name="Y"><block type="math_number" id="vol_dir_y"><field name="NUM">0</field></block></value><value name="Z"><block type="math_number" id="vol_dir_z"><field name="NUM">0</field></block></value></block></value><value name="OffsetFromStart"><block type="math_number" id="vol_offset_start"><field name="NUM">0</field></block></value><value name="Label"><block type="variables_get" id="get_volume_text"><field name="VAR" id="volumeText">volumeText</field></block></value><value name="LabelOffset"><block type="math_number" id="vol_label_offset"><field name="NUM">0.3</field></block></value><value name="LabelSize"><block type="math_number" id="vol_label_size"><field name="NUM">0.3</field></block></value></block></value><next><block type="variables_set" id="create_area_pin"><field name="VAR" id="areaPin">areaPin</field><value name="VALUE"><block type="bitbybit.occt.dimensions.pinWithLabel" id="area_pin"><value name="StartPoint"><block type="bitbybit.point.pointXYZ" id="area_start_point"><value name="X"><block type="math_number" id="area_start_x"><field name="NUM">0</field></block></value><value name="Y"><block type="variables_get" id="get_height_for_area_pin"><field name="VAR" id="height">height</field></block></value><value name="Z"><block type="math_number" id="area_start_z"><field name="NUM">0</field></block></value></block></value><value name="EndPoint"><block type="bitbybit.point.pointXYZ" id="area_end_point"><value name="X"><block type="math_number" id="area_end_x"><field name="NUM">1</field></block></value><value name="Y"><block type="math_arithmetic" id="area_end_y"><field name="OP">ADD</field><value name="A"><block type="variables_get" id="get_height_for_area_end"><field name="VAR" id="height">height</field></block></value><value name="B"><block type="math_number" id="area_offset"><field name="NUM">4</field></block></value></block></value><value name="Z"><block type="math_number" id="area_end_z"><field name="NUM">0</field></block></value></block></value><value name="Direction"><block type="bitbybit.vector.vectorXYZ" id="area_direction"><value name="X"><block type="math_number" id="area_dir_x"><field name="NUM">1</field></block></value><value name="Y"><block type="math_number" id="area_dir_y"><field name="NUM">0</field></block></value><value name="Z"><block type="math_number" id="area_dir_z"><field name="NUM">0</field></block></value></block></value><value name="OffsetFromStart"><block type="math_number" id="area_offset_start"><field name="NUM">0</field></block></value><value name="Label"><block type="variables_get" id="get_area_text"><field name="VAR" id="areaText">areaText</field></block></value><value name="LabelOffset"><block type="math_number" id="area_label_offset"><field name="NUM">0.3</field></block></value><value name="LabelSize"><block type="math_number" id="area_label_size"><field name="NUM">0.3</field></block></value></block></value><next><block type="bitbybit.draw.drawAnyAsyncNoReturn" id="draw_cone"><value name="Entity"><block type="variables_get" id="get_cone_to_draw"><field name="VAR" id="cone">cone</field></block></value><next><block type="bitbybit.draw.drawAnyAsyncNoReturn" id="draw_volume_pin"><value name="Entity"><block type="variables_get" id="get_volume_pin_to_draw"><field name="VAR" id="volumePin">volumePin</field></block></value><next><block type="bitbybit.draw.drawAnyAsyncNoReturn" id="draw_area_pin"><value name="Entity"><block type="variables_get" id="get_area_pin_to_draw"><field name="VAR" id="areaPin">areaPin</field></block></value></block></next></block></next></block></next></block></next></block></next></block></next></block></next></block></next></block></next></block></next></block></next></block></next></block></xml>
Script Source (typescript)
// Import required DTOs and types
const { ConeDto, PinWithLabelDto } = Bit.Inputs.OCCT;
type Point3 = Bit.Inputs.Base.Point3;
type Vector3 = Bit.Inputs.Base.Vector3;
// Get access to OCCT modules
const { solid } = bitbybit.occt.shapes;
const { dimensions } = bitbybit.occt;
const { math, text } = bitbybit;
// Define the main function to demonstrate volume and surface area calculation
const start = async () => {
// Parametric height value
const height = 5;
// Create a cone
const coneOptions = new ConeDto();
coneOptions.radius1 = 2;
coneOptions.radius2 = 1;
coneOptions.height = height;
coneOptions.angle = 360;
coneOptions.center = [0, 0, 0] as Point3;
coneOptions.direction = [0, 1, 0] as Vector3;
const cone = await solid.createCone(coneOptions);
// Get volume and surface area
const volume = await solid.getSolidVolume({ shape: cone });
const surfaceArea = await solid.getSolidSurfaceArea({ shape: cone });
// Round to 2 decimal places
const roundedVolume = math.roundToDecimals({ number: volume, decimalPlaces: 2 });
const roundedSurfaceArea = math.roundToDecimals({ number: surfaceArea, decimalPlaces: 2 });
// Format as text with units
const volumeText = text.format({
text: "Volume {0} m3",
values: [text.toString({ item: roundedVolume })]
});
const areaText = text.format({
text: "Area {0} m2",
values: [text.toString({ item: roundedSurfaceArea })]
});
// Create pin labels to display the measurements
const volumePinOptions = new PinWithLabelDto();
volumePinOptions.startPoint = [0, height, 0] as Point3;
volumePinOptions.endPoint = [1, height + 3, 0] as Point3;
volumePinOptions.direction = [1, 0, 0] as Vector3;
volumePinOptions.offsetFromStart = 0;
volumePinOptions.label = volumeText;
volumePinOptions.labelOffset = 0.3;
volumePinOptions.labelSize = 0.3;
const volumePin = await dimensions.pinWithLabel(volumePinOptions);
const areaPinOptions = new PinWithLabelDto();
areaPinOptions.startPoint = [0, height, 0] as Point3;
areaPinOptions.endPoint = [1, height + 4, 0] as Point3;
areaPinOptions.direction = [1, 0, 0] as Vector3;
areaPinOptions.offsetFromStart = 0;
areaPinOptions.label = areaText;
areaPinOptions.labelOffset = 0.3;
areaPinOptions.labelSize = 0.3;
const areaPin = await dimensions.pinWithLabel(areaPinOptions);
// Draw the cone and labels
bitbybit.draw.drawAnyAsync({ entity: cone });
bitbybit.draw.drawAnyAsync({ entity: volumePin });
bitbybit.draw.drawAnyAsync({ entity: areaPin });
}
// Execute the function
start();



