XML Exporter: Object

¸Æ½ºÀÇ ¿ÀºêÁ§Æ®¿¡¼­ ÆÄ»ýµÈ Derived Object¿Í Procedural Object µÎ Á¾·ù°¡ ÀÖ´Ù.

Procedural Object: 3DSMAX¿¡¼­ »ç¿ëµÇ´Â ¿ÀºêÁ§Æ®·Î   Gometric Objects:,  Helper Objects, Shape Objects, Lights, CamerasµîÀÌ ÀÖ´Ù.

Derived Object: »ó¼Ó Ŭ·¡½º´Â ¿ÀºêÁ§Æ®¿¡ ´ëÇÑ Æ÷ÀÎÅ͸¦ Æ÷ÇÔÇϸç,  Çϳª ÀÌ»óÀÇ modifier ÀÀ¿ëÇÁ·Î±×·¥À» Æ÷ÇÔÇÑ´Ù.

·çÆ® ³ëµå¸¦ Á¦¿ÜÇÑ ¸ðµç ³ëµå´Â ¿ÀºêÁ§Æ®¸¦ °¡Áö°í ÀÖ´Ù. Export½Ã »ç¿ëµÇ´Â ¿ÀºêÁ§Æ®´Â Procedural ObjectÀÌ´Ù. Export::CreateXMLObject() ÇÔ¼ö¿¡¼­ INode::GetObjectRef()ÀÇ Object°¡ ÀÖÀ¸¸é  SClass_ID¿¡ ÀÇÇØ ¿ÀºêÁ§Æ® ŸÀÔÀ» ¾Ë¾Æ³½´Ù. Áö¿À¸ÞÆ®¸® ¿ÀºêÁ§Æ®´Â º»°ú ¹ÙÀÌÆе尡  Æ÷ÇÔµÈ ¿ÀºêÁ§Æ®ÀÎÁö ÆÇ´ÜÇϱâ À§ÇØ Class_ID·Î °áÁ¤ÇÑ´Ù.

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

        }

    }

}

ÇÁ·ÎÁ§Æ®: maxProject_object.zip