Assimp  v4.1. (December 2018)
X3DImporter_Macro.hpp File Reference

Useful macrodefines. More...

Macros

#define MACRO_ATTRREAD_CHECK_REF(pAttrName, pVarName, pFunction)
 Check curent attribute name and if it equal to requested then read value. More...
 
#define MACRO_ATTRREAD_CHECK_RET(pAttrName, pVarName, pFunction)
 Check curent attribute name and if it equal to requested then read value. More...
 
#define MACRO_ATTRREAD_CHECKUSEDEF_RET(pDEF_Var, pUSE_Var)
 Compact variant for checking "USE" and "DEF". More...
 
#define MACRO_ATTRREAD_LOOPBEG
 Begin of loop that read attributes values. More...
 
#define MACRO_ATTRREAD_LOOPEND
 End of loop that read attributes values. More...
 
#define MACRO_FACE_ADD_QUAD(pCCW, pOut, pP1, pP2, pP3, pP4)
 Add points as quad. More...
 
#define MACRO_FACE_ADD_QUAD_FA(pCCW, pOut, pIn, pP1, pP2, pP3, pP4)
 Add points as quad. More...
 
#define MACRO_NODECHECK_LOOPBEGIN(pNodeName)
 Begin of loop of parsing child nodes. More...
 
#define MACRO_NODECHECK_LOOPEND(pNodeName)
 End of loop of parsing child nodes. More...
 
#define MACRO_NODECHECK_METADATA(pNodeName)
 
#define MACRO_USE_CHECKANDAPPLY(pDEF, pUSE, pType, pNE)
 Used for regular checking while attribute "USE" is defined. More...
 

Detailed Description

Useful macrodefines.

Date
2015-2016
Author
smal..nosp@m.root.nosp@m.@gmai.nosp@m.l.co.nosp@m.m

Macro Definition Documentation

◆ MACRO_ATTRREAD_CHECK_REF

#define MACRO_ATTRREAD_CHECK_REF (   pAttrName,
  pVarName,
  pFunction 
)
Value:
if(an == pAttrName) \
{ \
pFunction(idx, pVarName); \
continue; \
}

Check curent attribute name and if it equal to requested then read value.

Result write to output variable by reference. If result was read then "continue" will called.

Parameters
[in]pAttrName- attribute name.
[out]pVarName- output variable name.
[in]pFunction- function which read attribute value and write it to pVarName.

◆ MACRO_ATTRREAD_CHECK_RET

#define MACRO_ATTRREAD_CHECK_RET (   pAttrName,
  pVarName,
  pFunction 
)
Value:
if(an == pAttrName) \
{ \
pVarName = pFunction(idx); \
continue; \
}

Check curent attribute name and if it equal to requested then read value.

Result write to output variable using return value of pFunction. If result was read then "continue" will called.

Parameters
[in]pAttrName- attribute name.
[out]pVarName- output variable name.
[in]pFunction- function which read attribute value and write it to pVarName.

◆ MACRO_ATTRREAD_CHECKUSEDEF_RET

#define MACRO_ATTRREAD_CHECKUSEDEF_RET (   pDEF_Var,
  pUSE_Var 
)
Value:
MACRO_ATTRREAD_CHECK_RET("DEF", pDEF_Var, mReader->getAttributeValue); \
MACRO_ATTRREAD_CHECK_RET("USE", pUSE_Var, mReader->getAttributeValue); \
if(an == "bboxCenter") continue; \
if(an == "bboxSize") continue; \
if(an == "containerField") continue; \
do {} while(false)
#define MACRO_ATTRREAD_CHECK_RET(pAttrName, pVarName, pFunction)
Check curent attribute name and if it equal to requested then read value.
Definition: X3DImporter_Macro.hpp:96

Compact variant for checking "USE" and "DEF".

Also skip bbox attributes: "bboxCenter", "bboxSize". If result was read then "continue" will called.

Parameters
[out]pDEF_Var- output variable name for "DEF" value.
[out]pUSE_Var- output variable name for "USE" value.

◆ MACRO_ATTRREAD_LOOPBEG

#define MACRO_ATTRREAD_LOOPBEG
Value:
for(int idx = 0, idx_end = mReader->getAttributeCount(); idx < idx_end; idx++) \
{ \
std::string an(mReader->getAttributeName(idx));
::std::string string
Definition: gtest-port.h:1097

Begin of loop that read attributes values.

◆ MACRO_ATTRREAD_LOOPEND

#define MACRO_ATTRREAD_LOOPEND
Value:
Throw_IncorrectAttr(an); \
}

End of loop that read attributes values.

◆ MACRO_FACE_ADD_QUAD

#define MACRO_FACE_ADD_QUAD (   pCCW,
  pOut,
  pP1,
  pP2,
  pP3,
  pP4 
)
Value:
do { \
if(pCCW) \
{ \
pOut.push_back(pP1); \
pOut.push_back(pP2); \
pOut.push_back(pP3); \
pOut.push_back(pP4); \
} \
else \
{ \
pOut.push_back(pP4); \
pOut.push_back(pP3); \
pOut.push_back(pP2); \
pOut.push_back(pP1); \
} \
} while(false)

Add points as quad.

Means that pP1..pP4 set in CCW order.

◆ MACRO_FACE_ADD_QUAD_FA

#define MACRO_FACE_ADD_QUAD_FA (   pCCW,
  pOut,
  pIn,
  pP1,
  pP2,
  pP3,
  pP4 
)
Value:
do { \
if(pCCW) \
{ \
pOut.push_back(pIn[pP1]); \
pOut.push_back(pIn[pP2]); \
pOut.push_back(pIn[pP3]); \
pOut.push_back(pIn[pP4]); \
} \
else \
{ \
pOut.push_back(pIn[pP4]); \
pOut.push_back(pIn[pP3]); \
pOut.push_back(pIn[pP2]); \
pOut.push_back(pIn[pP1]); \
} \
} while(false)

Add points as quad.

Means that pP1..pP4 set in CCW order.

◆ MACRO_NODECHECK_LOOPBEGIN

#define MACRO_NODECHECK_LOOPBEGIN (   pNodeName)
Value:
do { \
bool close_found = false; \
\
while(mReader->read()) \
{ \
if(mReader->getNodeType() == irr::io::EXN_ELEMENT) \
{
A xml element, like <foo>
Definition: irrXML.h:186

Begin of loop of parsing child nodes.

Do not add ';' at end.

Parameters
[in]pNodeName- current node name.

◆ MACRO_NODECHECK_LOOPEND

#define MACRO_NODECHECK_LOOPEND (   pNodeName)
Value:
}/* if(mReader->getNodeType() == irr::io::EXN_ELEMENT) */ \
else if(mReader->getNodeType() == irr::io::EXN_ELEMENT_END) \
{ \
if(XML_CheckNode_NameEqual(pNodeName)) \
{ \
close_found = true; \
\
break; \
} \
}/* else if(mReader->getNodeType() == irr::io::EXN_ELEMENT_END) */ \
}/* while(mReader->read()) */ \
\
if(!close_found) Throw_CloseNotFound(pNodeName); \
\
} while(false)
End of an xml element, like </foo>
Definition: irrXML.h:189

End of loop of parsing child nodes.

Parameters
[in]pNodeName- current node name.

◆ MACRO_NODECHECK_METADATA

#define MACRO_NODECHECK_METADATA (   pNodeName)
Value:
/* and childs must be metadata nodes */ \
if(!ParseHelper_CheckRead_X3DMetadataObject()) XML_CheckNode_SkipUnsupported(pNodeName); \
#define MACRO_NODECHECK_LOOPEND(pNodeName)
End of loop of parsing child nodes.
Definition: X3DImporter_Macro.hpp:131
#define MACRO_NODECHECK_LOOPBEGIN(pNodeName)
Begin of loop of parsing child nodes.
Definition: X3DImporter_Macro.hpp:119

◆ MACRO_USE_CHECKANDAPPLY

#define MACRO_USE_CHECKANDAPPLY (   pDEF,
  pUSE,
  pType,
  pNE 
)
Value:
do { \
XML_CheckNode_MustBeEmpty(); \
if(!pDEF.empty()) Throw_DEF_And_USE(); \
if(!FindNodeElement(pUSE, CX3DImporter_NodeElement::pType, &pNE)) Throw_USE_NotFound(pUSE); \
\
NodeElement_Cur->Child.push_back(pNE);/* add found object as child to current element */ \
} while(false)

Used for regular checking while attribute "USE" is defined.

Parameters
[in]pDEF- string holding "DEF" value.
[in]pUSE- string holding "USE" value.
[in]pType- type of element to find.
[out]pNE- pointer to found node element.