#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"
using namespace std;
{
public:
{
myInstances.push(theInstance);
return true;
}
{
myInstances.pop();
}
{
return;
}
if (myReplacedParts.find (thePart) != myReplacedParts.end() && myInstances.size() > 0) {
myInstances.top().SetReference (myReplacedParts[thePart]);
return;
}
}
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()) {
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;
}
Computes a polygonal representation from a B-Rep one.
Definition: ModelAlgo_BRepMesher.hxx:48
void Compute(const ModelData_Model &theModel, bool theEnforceAddition=false) const
Computes polygonal representations for all parts in the model.
Definition: ModelAlgo_BRepMesher.cxx:478
Defines parameters used by the B-Rep mesher.
Definition: ModelAlgo_BRepMesherParameters.hxx:33
IdType TypeId() const
Returns an object type id.
Definition: ModelData_BaseObject.cxx:199
Base_UTF16String Name() const
Definition: ModelData_BaseObject.cxx:218
bool IsNull() const
Returns true if the object is nullified.
Definition: ModelData_BaseObject.cxx:256
Defines an occurrence of assembly or part in a scene graph.
Definition: ModelData_Instance.hxx:34
Iterator over scene graph elements.
Definition: ModelData_Model.hxx:138
Element visitor with empty implementation.
Definition: ModelData_Model.hxx:113
Provides CAD Exchanger data model.
Definition: ModelData_Model.hxx:43
const ModelData_SceneGraphElement & AddRoot(const ModelData_SceneGraphElement &theElement)
Adds new root element into the scene graph.
Definition: ModelData_Model.cxx:830
void Clear()
Clears the model contents.
Definition: ModelData_Model.cxx:801
void Accept(ElementVisitor &theVisitor) const
Accepts a visitor.
Definition: ModelData_Model.cxx:882
Reads any format that CAD Exchanger can import.
Definition: ModelData_ModelReader.hxx:33
bool Read(const Base_UTF16String &theFilePath, ModelData_Model &theModel)
Reads the file at the specified path into the specified model.
Definition: ModelData_ModelReader.cxx:182
Writes any format that CAD Exchanger can export.
Definition: ModelData_ModelWriter.hxx:33
bool Write(const ModelData_Model &theModel, const Base_UTF16String &theFilePath)
Writes the specified model to the file at the specified path.
Definition: ModelData_ModelWriter.cxx:143
Defines a leaf node in the scene graph hiearchy.
Definition: ModelData_Part.hxx:35
ModelData_BRepRepresentation BRepRepresentation() const
Definition: ModelData_Part.cxx:360
Iterator over layers this element belongs to.
Definition: ModelData_SceneGraphElement.hxx:65
bool HasNext() const
Returns true if iterator points to valid element.
Definition: ModelData_SceneGraphElement.cxx:305
Base class for part, instance and assembly.
Definition: ModelData_SceneGraphElement.hxx:39
void AddToLayer(const ModelData_Layer &theLayer)
Adds element to layer.
Definition: ModelData_SceneGraphElement.cxx:276
ModelData_Appearance Appearance() const
Returns the scene graph element's own appearance.
Definition: ModelData_SceneGraphElement.cxx:120
void AddProperties(const ModelData_PropertyTable &theProperties)
Adds a property table to the element.
Definition: ModelData_SceneGraphElement.cxx:223
void SetAppearance(const ModelData_Appearance &theAppearance)
Sets appearance of the scene graph element.
Definition: ModelData_SceneGraphElement.cxx:195
ModelData_PMITable PMI() const
Returns a PMI table.
Definition: ModelData_SceneGraphElement.cxx:255
void AddPMI(const ModelData_PMITable &thePMI)
Adds a PMI table to the element.
Definition: ModelData_SceneGraphElement.cxx:248
ModelData_PropertyTable Properties() const
Returns a property table.
Definition: ModelData_SceneGraphElement.cxx:338
Defines classes, types, and global functions related to CAD Exchanger.
Definition: A3DSTestLib.hxx:22