void CModelWriter_3MF_Native::addAttachments(_In_ CModel * pModel, _In_ POpcPackageWriter pPackageWriter, _In_ POpcPackagePart pModelPart) { __NMRASSERT(pModel != nullptr); __NMRASSERT(pModelPart.get() != nullptr); __NMRASSERT(pPackageWriter.get() != nullptr); nfUint32 nCount = pModel->getAttachmentCount(); nfUint32 nIndex; if (nCount > 0) { for (nIndex = 0; nIndex < nCount; nIndex++) { PModelAttachment pAttachment = pModel->getModelAttachment(nIndex); PImportStream pStream = pAttachment->getStream(); std::wstring sPath = fnIncludeLeadingPathDelimiter(pAttachment->getPathURI()); std::wstring sRelationShipType = pAttachment->getRelationShipType(); if (pStream.get() == nullptr) throw CNMRException(NMR_ERROR_INVALIDPARAM); // create Texture Part POpcPackagePart pAttachmentPart = pPackageWriter->addPart(sPath); PExportStream pExportStream = pAttachmentPart->getExportStream(); // Copy data pStream->seekPosition(0, true); pExportStream->copyFrom(pStream.get(), pStream->retrieveSize(), MODELWRITER_NATIVE_BUFFERSIZE); // add relationships pModelPart->addRelationship(generateRelationShipID(), sRelationShipType.c_str(), pAttachmentPart->getURI()); } } }
void CModelWriter_3MF_Native::addTextureParts(_In_ CModel * pModel, _In_ POpcPackageWriter pPackageWriter, _In_ POpcPackagePart pModelPart) { __NMRASSERT(pModel != nullptr); __NMRASSERT(pModelPart.get() != nullptr); __NMRASSERT(pPackageWriter.get() != nullptr); nfUint32 nCount = pModel->getTextureStreamCount(); nfUint32 nIndex; if (nCount > 0) { for (nIndex = 0; nIndex < nCount; nIndex++) { PImportStream pStream = pModel->getTextureStream(nIndex); std::wstring sPath = fnIncludeLeadingPathDelimiter (pModel->getTextureStreamPath(nIndex)); if (pStream.get() == nullptr) throw CNMRException(NMR_ERROR_INVALIDPARAM); // create Texture Part POpcPackagePart pTexturePart = pPackageWriter->addPart(sPath); PExportStream pExportStream = pTexturePart->getExportStream(); // Copy data pStream->seekPosition(0, true); pExportStream->copyFrom(pStream.get(), pStream->retrieveSize(), MODELWRITER_NATIVE_BUFFERSIZE); // add relationships pModelPart->addRelationship(generateRelationShipID(), PACKAGE_TEXTURE_RELATIONSHIP_TYPE, pTexturePart.get()); } } }
void COpcPackageRelationship::writeToXML(_In_ CXmlWriter * pXMLWriter) { if (pXMLWriter == nullptr) throw CNMRException(NMR_ERROR_INVALIDPARAM); std::wstring sTarget = fnIncludeLeadingPathDelimiter(m_sTargetPartURI); pXMLWriter->WriteStartElement(nullptr, L"Relationship", nullptr); pXMLWriter->WriteAttributeString(nullptr, L"Type", nullptr, m_sType.c_str()); pXMLWriter->WriteAttributeString(nullptr, L"Target", nullptr, sTarget.c_str()); pXMLWriter->WriteAttributeString(nullptr, L"Id", nullptr, m_sID.c_str()); pXMLWriter->WriteEndElement(); }
void COpcPackageRelationship::writeToXML(_In_ CXmlWriter * pXMLWriter) { if (pXMLWriter == nullptr) throw CNMRException(NMR_ERROR_INVALIDPARAM); std::wstring sTarget = fnIncludeLeadingPathDelimiter(m_sTargetPartURI); pXMLWriter->WriteStartElement(nullptr, OPC_RELS_RELATIONSHIP_NODE, nullptr); pXMLWriter->WriteAttributeString(nullptr, OPC_RELS_ATTRIB_TYPE, nullptr, m_sType.c_str()); pXMLWriter->WriteAttributeString(nullptr, OPC_RELS_ATTRIB_TARGET, nullptr, sTarget.c_str()); pXMLWriter->WriteAttributeString(nullptr, OPC_RELS_ATTRIB_ID, nullptr, m_sID.c_str()); pXMLWriter->WriteEndElement(); }