void CModelReaderNode093_Resources::OnNSChildElement(_In_z_ const nfWChar * pChildName, _In_z_ const nfWChar * pNameSpace, _In_ CXmlReader * pXMLReader)
	{
		__NMRASSERT(pChildName);
		__NMRASSERT(pXMLReader);
		__NMRASSERT(pNameSpace);

		if ((wcscmp(pNameSpace, XML_3MF_NAMESPACE_CORESPEC093) == 0) || (wcscmp(pNameSpace, L"") == 0)) {

			if (wcscmp(pChildName, XML_3MF_ELEMENT_OBJECT) == 0) {
				PModelReaderNode pXMLNode = std::make_shared<CModelReaderNode093_Object>(m_pModel, m_pColorMapping, m_pMaterialResource, m_pWarnings);
				pXMLNode->parseXML(pXMLReader);
			}

			if (wcscmp(pChildName, XML_3MF_ELEMENT_COLOR) == 0) {
				PModelReaderNode093_Color pXMLNode = std::make_shared<CModelReaderNode093_Color>(m_pWarnings);
				pXMLNode->parseXML(pXMLReader);

				ModelResourceID nResourceID = pXMLNode->retrieveID();
				ModelResourceID nTextureRefID = pXMLNode->retrieveTextureID();

				if (nTextureRefID > 0) {
					m_pColorMapping->registerTextureReference(nResourceID, nTextureRefID);
				}
				else {
					m_pColorMapping->registerColor(pXMLNode->retrieveID(), 0, pXMLNode->retrieveColor());
				}
			}

			if (wcscmp(pChildName, XML_3MF_ELEMENT_TEXTURE) == 0) {
				PModelReaderNode093_Texture pXMLNode = std::make_shared<CModelReaderNode093_Texture>(m_pModel, m_pWarnings);
				pXMLNode->parseXML(pXMLReader);
			}

			if (wcscmp(pChildName, XML_3MF_ELEMENT_MATERIAL) == 0) {
				PModelReaderNode093_Material pXMLNode = std::make_shared<CModelReaderNode093_Material>(m_pWarnings);
				pXMLNode->parseXML(pXMLReader);

				if (m_pMaterialResource.get() == nullptr) {
					m_pMaterialResource = std::make_shared<CModelBaseMaterialResource> (m_pModel->generateResourceID(), m_pModel);
					m_pModel->addResource(m_pMaterialResource);
				}

				nfColor cColor;
				if (!m_pColorMapping->findColor(pXMLNode->retrieveColorID(), 0, cColor)) {
					cColor = 0xffffffff;
				}

				ModelResourceIndex nMaterialIndex;
				nMaterialIndex = m_pMaterialResource->addBaseMaterial(pXMLNode->retrieveName(), cColor);
				m_pColorMapping->registerMaterialReference(pXMLNode->retrieveID(), nMaterialIndex);
			}

		}
	}
void CModelReaderNode093_Object::OnNSChildElement(_In_z_ const nfWChar * pChildName, _In_z_ const nfWChar * pNameSpace, _In_ CXmlReader * pXMLReader)
{
    __NMRASSERT(pChildName);
    __NMRASSERT(pXMLReader);
    __NMRASSERT(pNameSpace);

    if ((wcscmp(pNameSpace, XML_3MF_NAMESPACE_CORESPEC093) == 0) || (wcscmp(pNameSpace, L"") == 0)) {

        // Read a mesh object
        if (wcscmp(pChildName, XML_3MF_ELEMENT_MESH) == 0) {
            // If we already have parsed an object, the node is duplicate
            if (m_pObject.get())
                throw CNMRException(NMR_ERROR_AMBIGUOUSOBJECTDEFINITON);

            // Create Empty Mesh
            PMesh pMesh = std::make_shared<CMesh>();
            // Create Mesh Object
            m_pObject = std::make_shared<CModelMeshObject>(m_nID, m_pModel, pMesh);

            // Read Mesh
            PModelReaderNode pXMLNode = std::make_shared<CModelReaderNode093_Mesh>(m_pModel, pMesh.get(), m_pColorMapping, m_pMaterialResource, m_pWarnings);
            pXMLNode->parseXML(pXMLReader);

            // Add Object to Parent
            m_pModel->addResource(m_pObject);

        }


        // Read a component object
        if (wcscmp(pChildName, XML_3MF_ELEMENT_COMPONENTS) == 0) {
            // If we already have parsed an object, the node is duplicate
            if (m_pObject.get())
                throw CNMRException(NMR_ERROR_AMBIGUOUSOBJECTDEFINITON);

            // Create Component List Object
            PModelComponentsObject pComponentsObject = std::make_shared<CModelComponentsObject>(m_nID, m_pModel);
            m_pObject = pComponentsObject;

            // Read Components
            PModelReaderNode pXMLNode = std::make_shared<CModelReaderNode093_Components>(pComponentsObject.get(), m_pWarnings);
            pXMLNode->parseXML(pXMLReader);

            // Add Object to Parent
            m_pModel->addResource(m_pObject);

        }


    }
}
	void CModelReaderNode093_Build::OnNSChildElement(_In_z_ const nfWChar * pChildName, _In_z_ const nfWChar * pNameSpace, _In_ CXmlReader * pXMLReader)
	{
		__NMRASSERT(pChildName);
		__NMRASSERT(pXMLReader);
		__NMRASSERT(pNameSpace);

		if ((wcscmp(pNameSpace, XML_3MF_NAMESPACE_CORESPEC093) == 0 ) || (wcscmp(pNameSpace, L"") == 0)) {

			if (wcscmp(pChildName, XML_3MF_ELEMENT_ITEM) == 0) {
				PModelReaderNode pXMLNode = std::make_shared<CModelReaderNode093_BuildItem>(m_pModel, m_pWarnings);
				pXMLNode->parseXML(pXMLReader);

			}
		}
	}
	void CModelReaderNode_BeamLattice1702_BeamSets::OnNSChildElement(_In_z_ const nfWChar * pChildName, _In_z_ const nfWChar * pNameSpace, _In_ CXmlReader * pXMLReader)
	{
		__NMRASSERT(pChildName);
		__NMRASSERT(pXMLReader);
		__NMRASSERT(pNameSpace);

		if (wcscmp(pNameSpace, XML_3MF_NAMESPACE_BEAMLATTICESPEC) == 0) {
			if (wcscmp(pChildName, XML_3MF_ELEMENT_BEAMSET) == 0)
			{
				PBEAMSET pBeamSet = m_pMesh->addBeamSet();
				PModelReaderNode pXMLNode = std::make_shared<CModelReaderNode_BeamLattice1702_BeamSet>(pBeamSet.get(), m_pWarnings);
				pXMLNode->parseXML(pXMLReader);
			}
			else
				m_pWarnings->addException(CNMRException(NMR_ERROR_NAMESPACE_INVALID_ELEMENT), mrwInvalidOptionalValue);
		}
	}