XmlNode* Export::CreateXMLObject( INode* pNode, XmlNode* pParentXML )
{
Object* pObject = pNode->GetObjectRef();
if(pObject == NULL )
return NULL;
SClass_ID lSuperID = pObject->SuperClassID();
Class_ID lClassID = pObject->ClassID();
XmlNode* pXmlNode = NULL;
if(GEOMOBJECT_CLASS_ID == lSuperID)
{
if( BONE_OBJ_CLASSID == lClassID || Class_ID(BONE_CLASS_ID, 0) == lClassID)
{
pXmlNode = CreateXmlNode( "BONE_OBJ_CLASSID" );
pXmlNode->AddAttribute( "name", pNode->GetName() );
}
else
{
pXmlNode = CreateXmlNode( "GEOMOBJECT_CLASS_ID" );
pXmlNode->AddAttribute( "name", pNode->GetName() );
}
}
else if(CAMERA_CLASS_ID == lSuperID)
{
pXmlNode = CreateXmlNode( "CAMERA_CLASS_ID" );
pXmlNode->AddAttribute( "name", pNode->GetName() );
}
else if(LIGHT_CLASS_ID == lSuperID)
{
pXmlNode = CreateXmlNode( "LIGHT_CLASS_ID" );
pXmlNode->AddAttribute( "name", pNode->GetName() );
}
else if(SHAPE_CLASS_ID == lSuperID)
{
pXmlNode = CreateXmlNode( "SHAPE_CLASS_ID" );
pXmlNode->AddAttribute( "name", pNode->GetName() );
}
else if(HELPER_CLASS_ID == lSuperID)
{
pXmlNode = CreateXmlNode( "HELPER_CLASS_ID" );
pXmlNode->AddAttribute( "name", pNode->GetName() );
}
if( pXmlNode )
pParentXML->AttachChild( pXmlNode );
return pXmlNode;
}
void Export::CollectINode( INode* pNode, XmlNode* pParentXML )
{
if(!pNode)
return;
XmlNode* pXmlNode = CreateXMLObject(pNode, pParentXML );
if( pXmlNode == NULL )
{
pXmlNode = CreateXmlNode( "Node" );
pXmlNode->AddAttribute( "name", pNode->GetName() );
if( m_pXmlRoot == NULL )
pParentXML = m_pXmlRoot = pXmlNode;
else
pParentXML->AttachChild( pXmlNode );
}
int iChild = pNode->NumberOfChildren();
for(int i=0; i<iChild; ++i)
{
INode* pChild = pNode->GetChildNode(i);
if(pChild)
{
CollectINode(pChild, pXmlNode );
}
}
}