~ubuntu-branches/ubuntu/wily/opencollada/wily-proposed

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
/*
    Copyright (c) 2008-2009 NetAllied Systems GmbH

    This file is part of DAE2MA.

    Licensed under the MIT Open Source License, 
    for details please see LICENSE file or the website
    http://www.opensource.org/licenses/mit-license.php
*/

#include "DAE2MAStableHeaders.h"
#include "DAE2MAExtraDataCallbackHandler.h"

#include "generated14/COLLADASaxFWLColladaParserAutoGen14Attributes.h"


namespace DAE2MA
{

    //------------------------------
    ExtraDataCallbackHandler::ExtraDataCallbackHandler() 
        : mIsOriginalIdField (false)
	{
	}
	
    //------------------------------
	ExtraDataCallbackHandler::~ExtraDataCallbackHandler()
	{
	}

    //------------------------------
    const ExtraInfo* ExtraDataCallbackHandler::findExtraInfo ( 
        const COLLADAFW::UniqueId& uniqueId, 
        const StringHash& hashElement ) const
    {
        ExtraInfosMap::const_iterator it = mExtraInfos.find ( uniqueId );
        if ( it != mExtraInfos.end () )
        {
            const std::vector<ExtraInfo>& extraInfos = it->second;
            size_t numInfos = extraInfos.size ();
            for ( size_t i=0; i<numInfos; ++i )
            {
                if ( extraInfos[i].getElementHash () == hashElement )
                    return &extraInfos[i];
            }
        }
        return 0;
    }

    //------------------------------
    bool ExtraDataCallbackHandler::parseElement ( 
        const GeneratedSaxParser::ParserChar* profileName, 
        const StringHash& elementHash, 
        const COLLADAFW::UniqueId& uniqueId,
		COLLADAFW::Object* object ) 
    {
        if ( COLLADABU::Utils::equals ( PROFILE_MAYA, profileName ) ) 
        {
            mCurrentExtraInfo.setElementHash ( elementHash );
            mCurrentExtraInfo.setUniqueId ( uniqueId );
            return true;
        }

        return false;
    }

    //------------------------------
    bool ExtraDataCallbackHandler::elementBegin ( const GeneratedSaxParser::ParserChar* elementName, const GeneratedSaxParser::xmlChar** attributes ) 
    {
        if ( COLLADABU::Utils::equals ( PARAMETER_MAYA_ID, String (elementName) ) )
        {
            mIsOriginalIdField = true;
        }

        return true;
    }

    //------------------------------
    bool ExtraDataCallbackHandler::elementEnd ( const GeneratedSaxParser::ParserChar* elementName ) 
    {
        if ( mIsOriginalIdField )
        {
            mIsOriginalIdField = false;
            mExtraInfos [mCurrentExtraInfo.getUniqueId ()].push_back ( mCurrentExtraInfo );
            mCurrentExtraInfo.setOriginalMayaId ( EMPTY_STRING );
        }

        return true;
    }

    //------------------------------
    bool ExtraDataCallbackHandler::textData ( const GeneratedSaxParser::ParserChar* text, size_t textLength ) 
    {
        if ( mIsOriginalIdField )
        {
            mCurrentExtraInfo.setOriginalMayaId ( text, textLength );
        }
        return true;
    }

} // namespace DAE2MA