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

Useful macrodefines. More...

Macros

#define MACRO_ATTRREAD_CHECK_REF(pAttrName, pVarName, pFunction)
 
#define MACRO_ATTRREAD_CHECK_RET(pAttrName, pVarName, pFunction)
 
#define MACRO_ATTRREAD_CHECKUSEDEF_RET(pDEF_Var, pUSE_Var)
 
#define MACRO_ATTRREAD_LOOPBEG
 
#define MACRO_ATTRREAD_LOOPEND
 
#define MACRO_FACE_ADD_QUAD(pCCW, pOut, pP1, pP2, pP3, pP4)
 
#define MACRO_FACE_ADD_QUAD_FA(pCCW, pOut, pIn, pP1, pP2, pP3, pP4)
 
#define MACRO_NODECHECK_LOOPBEGIN(pNodeName)
 
#define MACRO_NODECHECK_LOOPEND(pNodeName)
 
#define MACRO_NODECHECK_METADATA(pNodeName)
 
#define MACRO_USE_CHECKANDAPPLY(pDEF, pUSE, pType, pNE)
 

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 current 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 current 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)

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));

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) \
{

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 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); \

◆ 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.
CX3DImporter_NodeElement
Definition: X3DImporter_Node.hpp:61
MACRO_ATTRREAD_CHECK_RET
#define MACRO_ATTRREAD_CHECK_RET(pAttrName, pVarName, pFunction)
Definition: X3DImporter_Macro.hpp:97
irr::io::EXN_ELEMENT_END
@ EXN_ELEMENT_END
End of an xml element, like </foo>
Definition: irrXML.h:195
irr::io::EXN_ELEMENT
@ EXN_ELEMENT
A xml element, like <foo>
Definition: irrXML.h:192
testing::internal::string
::std::string string
Definition: gtest-port.h:1097
MACRO_NODECHECK_LOOPEND
#define MACRO_NODECHECK_LOOPEND(pNodeName)
Definition: X3DImporter_Macro.hpp:132
MACRO_NODECHECK_LOOPBEGIN
#define MACRO_NODECHECK_LOOPBEGIN(pNodeName)
Definition: X3DImporter_Macro.hpp:120