lib3mf 2.5 :

- aggiornamento versione
- utilizzate le nostre librerie esterne libzip e zlib e non quelle incluse in lib3mf.
This commit is contained in:
SaraP
2026-08-25 12:44:11 +02:00
parent ea6efc1e36
commit 513f08e691
544 changed files with 52634 additions and 30760 deletions
@@ -34,18 +34,23 @@ A mesh reader model node is a parser for the mesh node of an XML Model Stream.
#include "Model/Reader/v100/NMR_ModelReaderNode100_Mesh.h"
#include "Model/Reader/v100/NMR_ModelReaderNode100_Vertices.h"
#include "Model/Reader/v100/NMR_ModelReaderNode100_Triangles.h"
#include "Model/Reader/v100/NMR_ModelReaderNode100_TriangleSets.h"
#include "Model/Reader/BeamLattice1702/NMR_ModelReaderNode_BeamLattice1702_BeamLattice.h"
#include "Model/Reader/Volumetric2201/NMR_ModelReaderNode_Volumetric2201_VolumeData.h"
#include "Model/Classes/NMR_ModelConstants.h"
#include "Model/Classes/NMR_ModelVolumeData.h"
#include "Common/NMR_StringUtils.h"
#include "Common/NMR_Exception.h"
#include "Common/NMR_Exception_Windows.h"
namespace NMR {
CModelReaderNode100_Mesh::CModelReaderNode100_Mesh(_In_ CModel * pModel, _In_ CMesh * pMesh, _In_ PModelWarnings pWarnings,
CModelReaderNode100_Mesh::CModelReaderNode100_Mesh(_In_ CModel * pModel, PModelMeshObject pMesh, _In_ PModelWarnings pWarnings,
_In_ PProgressMonitor pProgressMonitor, _In_ PPackageResourceID pObjectLevelPropertyID, _In_ ModelResourceIndex nDefaultPropertyIndex)
: CModelReaderNode(pWarnings, pProgressMonitor)
: CModelReaderNode(pWarnings, pProgressMonitor),
m_pModel(pModel),
m_pMesh(pMesh)
{
__NMRASSERT(pMesh);
__NMRASSERT(pModel);
@@ -53,14 +58,14 @@ namespace NMR {
m_pObjectLevelPropertyID = pObjectLevelPropertyID;
m_nObjectLevelPropertyIndex = nDefaultPropertyIndex;
m_pMesh = pMesh;
m_pModel = pModel;
m_bHasClippingMeshID = false;
m_nClippingMeshID = 0;
m_eClipMode = eModelBeamLatticeClipMode::MODELBEAMLATTICECLIPMODE_NONE;
m_bHasRepresentationMeshID = false;
m_nRepresentationMeshID = 0;
m_bHasVolumeDataID = false;
m_nVolumeDataID = 0;
}
void CModelReaderNode100_Mesh::parseXML(_In_ CXmlReader * pXMLReader)
@@ -73,6 +78,23 @@ namespace NMR {
// Parse Content
parseContent(pXMLReader);
if(m_bHasVolumeDataID)
{
PPackageResourceID volumePackageId =
m_pModel->findPackageResourceID(m_pModel->currentPath(),
m_nVolumeDataID);
if(!volumePackageId.get())
{
throw CNMRException(NMR_ERROR_UNKNOWNMODELRESOURCE);
}
auto pVolumeData = m_pModel->findVolumeData(
volumePackageId->getUniqueID());
m_pMesh->setVolumeData(pVolumeData);
}
}
void CModelReaderNode100_Mesh::retrieveClippingInfo(_Out_ eModelBeamLatticeClipMode &eClipMode, _Out_ nfBool & bHasClippingMode, _Out_ ModelResourceID & nClippingMeshID)
@@ -88,36 +110,59 @@ namespace NMR {
nRepresentationMeshID = m_nRepresentationMeshID;
}
void CModelReaderNode100_Mesh::OnAttribute(_In_z_ const nfChar * pAttributeName, _In_z_ const nfChar * pAttributeValue)
void CModelReaderNode100_Mesh::OnNSAttribute(
_In_z_ const nfChar *pAttributeName,
_In_z_ const nfChar *pAttributeValue,
_In_z_ const nfChar *pNameSpace)
{
__NMRASSERT(pAttributeName);
__NMRASSERT(pAttributeValue);
__NMRASSERT(pNameSpace);
if(strcmp(pNameSpace, XML_3MF_NAMESPACE_VOLUMETRICSPEC) == 0)
{
if(strcmp(pAttributeName, XML_3MF_ATTRIBUTE_MESH_VOLUMEDATA) ==
0)
{
if(m_bHasVolumeDataID)
{
throw CNMRException(
NMR_ERROR_DUPLICATE_BOUNDARY_SHAPE_VOLUME_ID);
}
m_bHasVolumeDataID = true;
m_nVolumeDataID = fnStringToUint32(pAttributeValue);
}
}
}
void CModelReaderNode100_Mesh::OnNSChildElement(_In_z_ const nfChar * pChildName, _In_z_ const nfChar * pNameSpace, _In_ CXmlReader * pXMLReader)
void CModelReaderNode100_Mesh::OnNSChildElement(_In_z_ const nfChar * pChildName, _In_z_ const nfChar * pNameSpace, _In_ CXmlReader * pXMLReader)
{
__NMRASSERT(pChildName);
__NMRASSERT(pXMLReader);
__NMRASSERT(pNameSpace);
NMR::CMesh *mesh = m_pMesh->getMesh();
if (strcmp(pNameSpace, XML_3MF_NAMESPACE_CORESPEC100) == 0) {
if (strcmp(pChildName, XML_3MF_ELEMENT_VERTICES) == 0)
{
if (m_pMesh->getNodeCount() % PROGRESS_READUPDATE == PROGRESS_READUPDATE - 1) {
if (mesh->getNodeCount() % PROGRESS_READUPDATE == PROGRESS_READUPDATE - 1) {
m_pProgressMonitor->SetProgressIdentifier(ProgressIdentifier::PROGRESS_READMESH);
m_pProgressMonitor->ReportProgressAndQueryCancelled(true);
}
PModelReaderNode pXMLNode = std::make_shared<CModelReaderNode100_Vertices>(m_pMesh, m_pWarnings);
PModelReaderNode pXMLNode = std::make_shared<CModelReaderNode100_Vertices>(mesh, m_pWarnings);
pXMLNode->parseXML(pXMLReader);
}
else if (strcmp(pChildName, XML_3MF_ELEMENT_TRIANGLES) == 0)
{
if (m_pMesh->getFaceCount() % PROGRESS_READUPDATE == PROGRESS_READUPDATE - 1) {
if (mesh->getFaceCount() % PROGRESS_READUPDATE == PROGRESS_READUPDATE - 1) {
m_pProgressMonitor->SetProgressIdentifier(ProgressIdentifier::PROGRESS_READMESH);
m_pProgressMonitor->ReportProgressAndQueryCancelled(true);
}
PModelReaderNode100_Triangles pXMLNode = std::make_shared<CModelReaderNode100_Triangles>(m_pModel, m_pMesh, m_pWarnings,
PModelReaderNode100_Triangles pXMLNode = std::make_shared<CModelReaderNode100_Triangles>(m_pModel, mesh, m_pWarnings,
m_pObjectLevelPropertyID, m_nObjectLevelPropertyIndex);
pXMLNode->parseXML(pXMLReader);
if (m_pObjectLevelPropertyID && m_pObjectLevelPropertyID->getPackageModelPath() == 0) {
@@ -139,7 +184,7 @@ namespace NMR {
if (strcmp(pNameSpace, XML_3MF_NAMESPACE_BEAMLATTICESPEC) == 0) {
if (strcmp(pChildName, XML_3MF_ELEMENT_BEAMLATTICE) == 0)
{
PModelReaderNode_BeamLattice1702_BeamLattice pXMLNode = std::make_shared<CModelReaderNode_BeamLattice1702_BeamLattice>(m_pModel, m_pMesh, m_pWarnings);
PModelReaderNode_BeamLattice1702_BeamLattice pXMLNode = std::make_shared<CModelReaderNode_BeamLattice1702_BeamLattice>(m_pModel, mesh, m_pWarnings);
pXMLNode->parseXML(pXMLReader);
pXMLNode->retrieveClippingInfo(m_eClipMode, m_bHasClippingMeshID, m_nClippingMeshID);
@@ -150,6 +195,23 @@ namespace NMR {
m_pWarnings->addException(CNMRException(NMR_ERROR_NAMESPACE_INVALID_ELEMENT), mrwInvalidOptionalValue);
}
if (strcmp(pNameSpace, XML_3MF_NAMESPACE_TRIANGLESETS) == 0) {
if (strcmp(pChildName, XML_3MF_ELEMENT_TRIANGLESETS) == 0)
{
PModelReaderNode100_TriangleSets pXMLNode = std::make_shared<CModelReaderNode100_TriangleSets>(m_pModel, m_pMesh->getMesh(), m_pWarnings);
pXMLNode->parseXML(pXMLReader);
m_pTriangleSets = pXMLNode->getTriangleSets ();
}
else
m_pWarnings->addException(CNMRException(NMR_ERROR_NAMESPACE_INVALID_ELEMENT), mrwInvalidOptionalValue);
}
}
std::vector<PModelTriangleSet> CModelReaderNode100_Mesh::getTriangleSets()
{
return m_pTriangleSets;
}
}