//------------------------------
	bool JointsLoader::beginJointPrimitive( COLLADAFW::JointPrimitive::Type jointPrimitiveType, const char * sid)
	{
		mCurrentJointPrimitive = FW_NEW COLLADAFW::JointPrimitive( getHandlingFilePartLoader()->createUniqueId( COLLADAFW::JointPrimitive::ID()), jointPrimitiveType );
		mCurrentJoint->getJointPrimitives().append( mCurrentJointPrimitive );
		getHandlingFilePartLoader()->addToSidTree(0, sid, mCurrentJointPrimitive);
		return true;
	}
	//------------------------------
	bool JointsLoader::end__joint()
	{
		getHandlingFilePartLoader()->getFileLoader()->addJoint(mCurrentJoint);
		mCurrentJoint = 0;
		getHandlingFilePartLoader()->moveUpInSidTree();
		return true;
	}
Пример #3
0
	//------------------------------
	bool NodeLoader::beginNode( const node__AttributeData& attributeData )
	{
		COLLADAFW::Node* newNode = new COLLADAFW::Node( getHandlingFilePartLoader()->createUniqueIdFromId(attributeData.id, COLLADAFW::Node::ID()));

		if ( attributeData.name )
			newNode->setName ( (const char*)attributeData.name );
		else if ( attributeData.id )
			newNode->setName ( (const char*)attributeData.id );

        if ( attributeData.id )
            newNode->setOriginalId ( (const char*)attributeData.id );

        if ( attributeData.type == ENUM__NodeType__JOINT )
            newNode->setType ( COLLADAFW::Node::JOINT );

		getHandlingFilePartLoader()->addToSidTree(attributeData.id, attributeData.sid, newNode);

		if ( mNodeStack.empty() )
		{
			// we are a direct child of a container
			handleRootNode(newNode);
		}
		else
		{
			//we are a child of another node
			COLLADAFW::Node* parentNode = mNodeStack.top();
			parentNode->getChildNodes().append(newNode);
		}
		mNodeStack.push(newNode);
		return true;
	}
//-----------------------------------------------------------------
bool FormulasLoader::end__formula()
{
    getHandlingFilePartLoader()->getFileLoader()->addFormula( mCurrentFormula );
    mCurrentFormula = 0;
    getHandlingFilePartLoader()->moveUpInSidTree();

    return true;
}
    //------------------------------
	bool NodeLoader::begin__instance_camera( const instance_camera__AttributeData& attributeData )
	{
        COLLADAFW::Node* currentNode = mNodeStack.top();
		COLLADAFW::UniqueId instantiatedCameraUniqueId = getHandlingFilePartLoader()->createUniqueIdFromUrl( attributeData.url, COLLADAFW::Camera::ID() );

        COLLADAFW::UniqueId instanceCameraUniqueId = getHandlingFilePartLoader()->createUniqueId( COLLADAFW::InstanceCamera::ID() );
		COLLADAFW::InstanceCamera* instanceCamera = FW_NEW COLLADAFW::InstanceCamera(instanceCameraUniqueId, instantiatedCameraUniqueId);
		currentNode->getInstanceCameras().append(instanceCamera);

		return true;
	}
    //------------------------------
	bool NodeLoader::begin__instance_light( const instance_light__AttributeData& attributeData )
	{
		COLLADAFW::Node* currentNode = mNodeStack.top();
		COLLADAFW::UniqueId instantiatedLightUniqueId = getHandlingFilePartLoader()->createUniqueIdFromUrl( attributeData.url, COLLADAFW::Light::ID() );

        COLLADAFW::UniqueId instanceLightUniqueId = getHandlingFilePartLoader()->createUniqueId( COLLADAFW::InstanceLight::ID() );
		COLLADAFW::InstanceLight* instanceLight = FW_NEW COLLADAFW::InstanceLight(instanceLightUniqueId, instantiatedLightUniqueId);
		currentNode->getInstanceLights().append(instanceLight);

		return true;
	}
	//------------------------------
	bool NodeLoader::begin__instance_node( const instance_node__AttributeData& attributeData )
	{
		COLLADAFW::Node* currentNode = mNodeStack.top();
		COLLADAFW::UniqueId instantiatedNodeUniqueId = getHandlingFilePartLoader()->createUniqueIdFromUrl( attributeData.url, COLLADAFW::Node::ID() );

        COLLADAFW::UniqueId instanceNodeUniqueId = getHandlingFilePartLoader()->createUniqueId( COLLADAFW::InstanceNode::ID() );
		COLLADAFW::InstanceNode* instanceNode = FW_NEW COLLADAFW::InstanceNode(instanceNodeUniqueId,instantiatedNodeUniqueId);
		if( attributeData.name )
			instanceNode->setName( attributeData.name );
		currentNode->getInstanceNodes().append(instanceNode);

		return true;
	}
    //------------------------------
	bool NodeLoader::begin__instance_geometry( const instance_geometry__AttributeData& attributeData )
	{
		COLLADAFW::Node* currentNode = mNodeStack.top();

		COLLADAFW::UniqueId instantiatedGeometryUniqueId = getHandlingFilePartLoader()->createUniqueIdFromUrl( attributeData.url, COLLADAFW::Geometry::ID());
		mCurrentMaterialInfo = &getHandlingFilePartLoader()->getMeshMaterialIdInfo();

        COLLADAFW::UniqueId uniqueId = getHandlingFilePartLoader()->createUniqueId ( COLLADAFW::InstanceGeometry::ID() );
		COLLADAFW::InstanceGeometry* instanceGeometry = FW_NEW COLLADAFW::InstanceGeometry ( uniqueId, instantiatedGeometryUniqueId );
		mCurrentInstanceGeometry = instanceGeometry;
		instanceGeometry->setName(currentNode->getName());
		currentNode->getInstanceGeometries().append(instanceGeometry);

		return true;
	}
//-----------------------------------------------------------------
bool FormulasLoader::begin__formula( const formula__AttributeData& attributeData )
{
    mCurrentFormula = FW_NEW COLLADAFW::Formula( getHandlingFilePartLoader()->createUniqueIdFromId( attributeData.id, COLLADAFW::Formula::ID()) );
    if ( attributeData.name )
        mCurrentFormula->setName( attributeData.name );
    else if ( attributeData.id )
        mCurrentFormula->setName( attributeData.id );
    else if ( attributeData.sid )
        mCurrentFormula->setName( attributeData.sid );

    if ( attributeData.id )
        mCurrentFormula->setOriginalId ( attributeData.id );

    getHandlingFilePartLoader()->addToSidTree( attributeData.id, attributeData.sid, mCurrentFormula );

    return true;
}
	//------------------------------
	bool NodeLoader::endTransformation()
	{
		COLLADABU_ASSERT(!mNodeStack.empty());
		mNodeStack.top()->getTransformations().append( mTransformationLoader.getCurrentTransformation());
		getHandlingFilePartLoader()->moveUpInSidTree();
		mTransformationLoader.endTransformation();
		return true;
	}
	//------------------------------
	bool NodeLoader::begin__instance_controller( const instance_controller__AttributeData& attributeData )
	{
		COLLADAFW::Node* currentNode = mNodeStack.top();
		COLLADAFW::UniqueId instantiatedControllerUniqueId = getHandlingFilePartLoader()->createUniqueIdFromUrl( attributeData.url, COLLADAFW::SkinControllerData::ID() );
		mCurrentMaterialInfo = &getHandlingFilePartLoader()->getMeshMaterialIdInfo();

        COLLADAFW::UniqueId uniqueId = getHandlingFilePartLoader()->createUniqueId ( COLLADAFW::InstanceController::ID() );
		COLLADAFW::InstanceController* instanceController = FW_NEW COLLADAFW::InstanceController( uniqueId, instantiatedControllerUniqueId);
		mCurrentInstanceController = instanceController;
		currentNode->getInstanceControllers().append(instanceController);

		Loader::InstanceControllerData instanceControllerData;
		instanceControllerData.instanceController = instanceController;
		Loader::InstanceControllerDataList& instanceControllerDataList = getHandlingFilePartLoader()->getInstanceControllerDataListByControllerUniqueId(instantiatedControllerUniqueId);
		instanceControllerDataList.push_back(instanceControllerData);
		mCurrentInstanceControllerData = &instanceControllerDataList.back();

		return true;
	}
	//------------------------------
	bool JointsLoader::begin__joint( const joint__AttributeData& attributeData )
	{
		mCurrentJoint = FW_NEW COLLADAFW::Joint( getHandlingFilePartLoader()->createUniqueIdFromId( attributeData.id, COLLADAFW::Joint::ID()) );
		if ( attributeData.name )
		{
			mCurrentJoint->setName(attributeData.name);
		}
		else if ( attributeData.id )
		{
			mCurrentJoint->setName(attributeData.id);
		}

		if ( attributeData.id )
		{
			mCurrentJoint->setOriginalId(attributeData.id);
		}
		getHandlingFilePartLoader()->addToSidTree( attributeData.id, attributeData.sid, mCurrentJoint);
		return true;
	}
	//------------------------------
	bool NodeLoader::begin__bind_vertex_input( const bind_vertex_input__AttributeData& attributeData )
	{
        if ( mCurrentInstanceGeometry || mCurrentInstanceController )
        {
            COLLADAFW::TextureCoordinateBinding texCoordinateBinding;
            texCoordinateBinding.setSetIndex ( (size_t)attributeData.input_set );
            texCoordinateBinding.setSemantic( attributeData.semantic );
            texCoordinateBinding.setTextureMapId ( getHandlingFilePartLoader()->getTextureMapIdBySematic( attributeData.semantic ) );
            mCurrentTextureCoordinateBindings.insert(texCoordinateBinding);
        }
		return true;
	}
	//------------------------------
	bool NodeLoader::begin__instance_material( const instance_material__AttributeData& attributeData )
	{
        if ( mCurrentInstanceGeometry || mCurrentInstanceController )
        {
            COLLADAFW::MaterialId materialId = attributeData.symbol ? mCurrentMaterialInfo->getMaterialId((const char*)attributeData.symbol) : 0;
            mCurrentMaterialBinding = new COLLADAFW::MaterialBinding(materialId, getHandlingFilePartLoader()->createUniqueIdFromUrl(attributeData.target, COLLADAFW::Material::ID()));

            if ( attributeData.symbol )
                mCurrentMaterialBinding->setName((const char*)attributeData.symbol);
        }

		return true;
	}
//-----------------------------------------------------------------
bool FormulasLoader::begin__csymbol( const csymbol__AttributeData& attributeData )
{
    if ( !mCurrentApplyHasChild )
    {
        // The csymbol appears as first child of apply. I must be a user defined function.
        mOperatorStack.push(USER_DEFINED_FUNCTION);
        mCurrentCSymbolIsFunction = true;
        if (attributeData.definitionURL)
        {
            mCurrentCSymbolFunctionUniqueId = getHandlingFilePartLoader()->createUniqueIdFromUrl(attributeData.definitionURL, COLLADAFW::Formula::ID());
        }
    }
    mCurrentApplyHasChild = true;
    return true;
}
	bool NodeLoader::beginTransformation( const char* sid )
	{
		mTransformationLoader.beginTransformation<Transformationtype>();
		getHandlingFilePartLoader()->addToSidTree( 0, sid, mTransformationLoader.getCurrentTransformation());
		return true;
	}
	//------------------------------
	bool NodeLoader::endNode()
	{
		mNodeStack.pop();
		getHandlingFilePartLoader()->moveUpInSidTree();
		return true;
	}
	//------------------------------
	bool JointsLoader::end__axis____axis_type()
	{
		getHandlingFilePartLoader()->moveUpInSidTree();
		mAxisNumbersReceived = 0;
		return true;
	}
	//------------------------------
	bool JointsLoader::endJointPrimitive()
	{
		mCurrentJointPrimitive = 0;
		getHandlingFilePartLoader()->moveUpInSidTree();
		return true;
	}
	//------------------------------
	bool JointsLoader::begin__axis____axis_type( const axis____axis_type__AttributeData& attributeData )
	{
		getHandlingFilePartLoader()->addToSidTree( 0, attributeData.sid);
		return true;
	}