Functions

A3DStatus A3DAsmGetFixedComponents (const A3DAsmProductOccurrence *pOwnerNode, A3DUns32 *puiNumberOfFixedSubNodes, A3DAsmProductOccurrence ***pppFixedSubNodes)
 This function gives a list of components with locked position in a specific level. The fixed sub nodes can be direct sons or nodes defined in below levels. More...
 
A3DStatus A3DAsmGetFixedTogetherComponents (const A3DAsmProductOccurrence *pOwnerNode, A3DUns32 *ppuiSizeCount, A3DUns32 **ppuiSizeArray, A3DAsmProductOccurrence ***pppFixedTogetherNodes)
 This function gives a list of bodies rigidly connecting. More...
 
A3DStatus A3DAsmGetFlexibleComponents (const A3DAsmProductOccurrence *pOwnerNode, A3DUns32 *puiNumberOfFlexibleSubNodes, A3DAsmProductOccurrence ***pppFlexibleSubNodes)
 By default, all members defined in a sub assembly are considered as fix together and it is not possible to move one of them without moving the others. A Flexible node is a sub assembly that allows new position for his sons defined by one of his father node. More...
 

Detailed Description

Through the assembly there are constraints of fixity, of a component regarding the upper node or of between several components, can be exploited to regroup the components in body. A body being a set of components rigidly linked together. The following three functions provide this information.

Function Documentation

A3DStatus A3DAsmGetFixedComponents ( const A3DAsmProductOccurrence pOwnerNode,
A3DUns32 puiNumberOfFixedSubNodes,
A3DAsmProductOccurrence ***  pppFixedSubNodes 
)

This function gives a list of components with locked position in a specific level. The fixed sub nodes can be direct sons or nodes defined in below levels.

Version
11.2
Returns
A3D_INVALID_DATA_STRUCT_SIZE
A3D_INVALID_DATA_STRUCT_NULL
A3D_SUCCESS.
rb_lock.jpg
  • A3DAsmGetFixedComponents called with POA1 as owner will get POB1 as fixed node
  • A3DAsmGetFixedComponents called with PO root as owner will get POB2 as fixed node
A3DStatus A3DAsmGetFixedTogetherComponents ( const A3DAsmProductOccurrence pOwnerNode,
A3DUns32 ppuiSizeCount,
A3DUns32 **  ppuiSizeArray,
A3DAsmProductOccurrence ***  pppFixedTogetherNodes 
)

This function gives a list of bodies rigidly connecting.

Version
11.2
Returns
A3D_INVALID_DATA_STRUCT_SIZE
A3D_INVALID_DATA_STRUCT_NULL
A3D_SUCCESS.

With the following model, there will be two arrays: {POA1; POA2} and {POA4; POA5; POA6}. The function has to be recalled with no owner to desallocate arrays.

rb_fixedtogether.jpg

The following code show how to use the function.

A3DUns32 t = 0, u, v, uiSizeCount = 0;
A3DUns32* puiSizeArray = nullptr;
A3DAsmProductOccurrence** ppFixedTogetherNodes = nullptr;
if ( A3DAsmGetFixedTogetherComponents(pOwnerNode, &uiSizeCount, &puiSizeArray, &ppFixedTogetherNodes) == A3D_SUCCESS && uiSizeCount != 0)
{
for (u = 0; u < uiSizeCount; u++)
{
for (v = 0; v < puiSizeArray[u]; v++)// new set of components fixed together
{
ppFixedTogetherNodes[t];
t++;
}
}
A3DAsmGetFixedTogetherComponents(nullptr, &uiSizeCount, &puiSizeArray, &ppFixedTogetherNodes)); //to free arrays
}
A3DStatus A3DAsmGetFlexibleComponents ( const A3DAsmProductOccurrence pOwnerNode,
A3DUns32 puiNumberOfFlexibleSubNodes,
A3DAsmProductOccurrence ***  pppFlexibleSubNodes 
)

By default, all members defined in a sub assembly are considered as fix together and it is not possible to move one of them without moving the others. A Flexible node is a sub assembly that allows new position for his sons defined by one of his father node.

Version
11.2
Returns
A3D_INVALID_DATA_STRUCT_SIZE
A3D_INVALID_DATA_STRUCT_NULL
A3D_SUCCESS.
rb_flexible_node.jpg
In this context all members of POA1 will be moved; and for the second son, only PO2-POB1 will be repositioned.
rb_flexible_lock.jpg
  • POA1 not flexible / Rigid The sub assembly is considered as one body, so all positions are fixed by the lock POROOT on POA2/POB1POA1/POB2
  • POA2 flexible POA2 / POB1 is fixed by the lock POA2 on POB1 POA2/POB2 is fixed, by the lock POROOT on POA2/POB2 POA2/POB3 is movable