#include <cadex/LicenseManager_Activate.h>
#include <cadex/ModelAlgo_BRepMesher.hxx>
#include <cadex/ModelAlgo_BRepMesherParameters.hxx>
#include <cadex/ModelData_Appearance.hxx>
#include <cadex/ModelData_BRepRepresentation.hxx>
#include <cadex/ModelData_Instance.hxx>
#include <cadex/ModelData_Layer.hxx>
#include <cadex/ModelData_ModelReader.hxx>
#include <cadex/ModelData_ModelWriter.hxx>
#include <cadex/ModelData_Part.hxx>
#include <cadex/ModelData_PropertyTable.hxx>
#include <cadex/ModelData_PMITable.hxx>
#include <iostream>
#include <vector>
#include <stack>
#include <unordered_map>
#include "../../cadex_license.cxx"
{
public:
{
myInstances.push(theInstance);
return true;
}
{
myInstances.pop();
}
{
return;
}
if (myReplacedParts.find (thePart) != myReplacedParts.end() && myInstances.size() > 0) {
myInstances.top().SetReference (myReplacedParts[thePart]);
return;
}
aNewPart.AddPMI (thePart.
PMI());
aNewPart.AddToLayer (anIt.Next());
}
if (myInstances.empty()) {
myRootReplacements[thePart] = aNewPart;
} else {
myReplacedParts[thePart] = aNewPart;
myInstances.top().SetReference (aNewPart);
}
}
const unordered_map <ModelData_Part, ModelData_Part, ModelData_BaseObjectHash>& RootReplacements() const
{
return myRootReplacements;
}
private:
stack <ModelData_Instance> myInstances;
unordered_map <ModelData_Part, ModelData_Part, ModelData_BaseObjectHash> myRootReplacements;
unordered_map <ModelData_Part, ModelData_Part, ModelData_BaseObjectHash> myReplacedParts;
};
int main (int argc, char *argv[])
{
auto aKey = LicenseKey::Value();
if (!CADExLicense_Activate (aKey)) {
cerr << "Failed to activate CAD Exchanger license." << endl;
return 1;
}
if (argc != 3) {
cerr << "Usage: " << argv[0] << " <input_file> <output_file>, where:" << endl;
cerr << " <input_file> is a name of the SLD file to be read" << endl;
cerr << " <output_file> is a name of the VRML file to be saved" << endl;
return 1;
}
const char* aSource = argv[1];
const char* aDest = argv[2];
cout << "Conversion started..." << endl;
if (!aReader.
Read (aSource, aModel)) {
cerr << "Failed to open and convert the file " << aSource << endl;
return 1;
}
MeshReplacementVisitor aVisitor;
vector <ModelData_SceneGraphElement> aNewRoots;
if (aRoot.
TypeId() == ModelData_Part::GetTypeId()) {
const ModelData_Part* aRootPart = static_cast <ModelData_Part*> (&aRoot);
auto aNewRootIt = aVisitor.RootReplacements().find (*aRootPart);
assert (aNewRootIt != aVisitor.RootReplacements().end());
aNewRoots.push_back (aNewRootIt->second);
} else {
aNewRoots.push_back (aRoot);
}
}
for (auto& aRoot : aNewRoots) {
}
if (!aWriter.
Write (aModel, aDest)) {
cerr << "Failed to convert and write the file to specified format" << aDest << endl;
return 1;
}
return 0;
}