Define Anchor Points through API
To prepare a cabinet for the Cabinet Editor and enable the customization feature, there are three prerequisites:
- The cabinet has a box sub-assembly type defined by the tag ID "Boxes"
- This box sub-assembly defines a list of anchor points with received tags (on BMA level)
- Some sub-assemblies products are available in the catalog with a "FurnitureConfigurator" free tag and defines an unique anchor point with a tag (on BMA level).
Anchor Point on a Sub-Assembly
Below is a sample of anchor definition on a guest component:
- The
type
has to beAnchorPoint
- The
tags
contains the list of the compatible guest components, i.e. "DRAWER_400" in this example.
By convention the anchor point of a guest component is near to the origin point of the axes, i.e. its coordinates are (0,0,0).
"anchors": [
{
"position": {
"x": 0,
"y": 0,
"z": 0
},
"directionY": {
"x": 0,
"y": 1,
"z": 0
},
"directionZ": {
"x": 0,
"y": 0,
"z": 1
},
"type": "AnchorPoint",
"tags": [
"DRAWER_400"
]
}
Example with a door front sub-assembly: the tag that identifies this guest component is "DOOR_800".
"anchors": [
{
"position": {
"x": 0,
"y": 0,
"z": 0
},
"directionY": {
"x": 0,
"y": 1,
"z": 0
},
"directionZ": {
"x": 0,
"y": 0,
"z": 1
},
"type": "AnchorPoint",
"tags": [
"DOOR_800"
]
}
Anchor Point on a Box Assembly
In the BMA file, the definition of anchor points for up to eight drawers on a box is the following.
Note that the Y and Z position use relations to adapt when the legHeight
value of the box changes.
"anchors": [
{
"position": {
"x": 0,
"y": "yAnchorPointPosition",
"z": "zAnchorPoint_0Position"
},
"directionY": {
"x": 0,
"y": 1,
"z": 0
},
"directionZ": {
"x": 0,
"y": 0,
"z": 1
},
"type": "AnchorPoint",
"receives": [
{
"tags": [
"DOOR_400",
"DOOR_600",
"DOOR_800",
"DOUBLEDOOR_400",
"DOUBLEDOOR_600",
"DOUBLEDOOR_800",
"DRAWER_100",
"DRAWER_200",
"DRAWER_400",
"DRAWER_600"
],
"rotationX": 0,
"rotationY": 0,
"rotationZ": 0
}
],
"availableSpace": {
"x": 0,
"y": 0,
"z": 0
}
},
],
Tags
For the receiving component, the tags are defined in a "receives" section, and these tags must be defined for every anchor point.
Below is the definition of the first point (point 1) where the tags
key has for value the list of all the possible front that are compatible with the receiving component.
"receives": [
{
"tags": [
"DOOR_400",
"DOOR_600",
"DOOR_800",
"DOUBLEDOOR_400",
"DOUBLEDOOR_600",
"DOUBLEDOOR_800",
"DRAWER_100",
"DRAWER_200",
"DRAWER_400",
"DRAWER_600"
],
}
But the list may be different for the second anchor point (point 2).
"receives": [
{
"tags": [
"SHELF",
"INTERNDRAWER_100",
"INTERNDRAWER_200"
],
"rotationX": 0,
"rotationY": 0,
"rotationZ": 0
}
And the last anchor point (point 9) can also have a fully different list: there is not enough space left between the anchor point 9 and the top of the frame to receive a 200 mm high drawer (there is only 100 mm left). Therefore, the list is limited to shelves or 100 mm high drawers.
{
"position": {
"x": 0,
"y": "yAnchorPointPosition",
"z": "zAnchorPoint_700Position"
},
"directionY": {
"x": 0,
"y": 1,
"z": 0
},
"directionZ": {
"x": 0,
"y": 0,
"z": 1
},
"type": "AnchorPoint",
"receives": [
{
"tags": [
"DRAWER_100",
"SHELF",
"INTERNDRAWER_100"
],
"rotationX": 0,
"rotationY": 0,
"rotationZ": 0
}
],
"availableSpace": {
"x": 0,
"y": 0,
"z": 0
}
Add a Free Tag to the Product
To be usable as a possible sub-component in the Cabinet Editor, components having an anchor point must be identified with a dedicated free tag at product level This free tag is FurnitureConfigurator
.
"classification": {
"styleTagIDs": [],
"roomTagIDs": [],
"colorTagIDs": [],
"materialTagIDs": [],
"freeTags": [
"FurnitureConfigurator"
]
},