Refer to the B-Rep Geometry Exploration Example.
base_explorer.hxx
#ifndef _BaseExplorer_HeaderFile
#define _BaseExplorer_HeaderFile
#include <cadex/Geom/Curve.hxx>
#include <cadex/Geom/Curve2d.hxx>
#include <cadex/Geom/Direction2d.hxx>
#include <cadex/Geom/Point.hxx>
#include <cadex/Geom/Point2d.hxx>
#include <cadex/Geom/Surface.hxx>
#include <cadex/ModelData/ShapeOrientation.hxx>
#include <functional>
#include <iostream>
using namespace std;
class BaseExplorer
{
public:
template <typename T>
static void PrintElementary (const T& theGeometry)
{
PrintDomain (theGeometry);
auto const& aPosition = theGeometry.Position();
PrintParameter ("Location", aLoc);
PrintParameter ("Axis", anAxis);
PrintParameter ("X Direction", aXDir);
PrintParameter ("Y Direction", aYDir);
}
template <typename T>
static void PrintElementary2d (const T& theGeometry)
{
PrintDomain (theGeometry);
auto const& aPosition = theGeometry.Position();
PrintParameter ("Location", aLoc);
PrintParameter (
"X Direction", aXDir.
XDir());
PrintParameter (
"Y Direction", aYDir.
YDir());
}
static void PrintRange (const char* aName, double aFirstParameter, double aLastParameter)
{
cout << aName << " = [" << aFirstParameter << ", " << aLastParameter << "]; ";
}
{
PrintRange (
"Domain", theCurve.
UMin(), theCurve.
UMax());
}
{
PrintRange (
"Domain", theCurve.
UMin(), theCurve.
UMax());
}
{
PrintRange (
"Domain U", theSurface.
UMin(), theSurface.
UMax());
PrintRange (
"V", theSurface.
VMin(), theSurface.
VMax());
}
{
cout <<
"(" << theDirection.
X() <<
", " << theDirection.
Y() <<
", " << theDirection.
Z() <<
"); ";
}
{
cout <<
"(" << theDirection.
X() <<
", " << theDirection.
Y() <<
"); ";
}
{
cout <<
"(" << thePoint.
X() <<
", " << thePoint.
Y() <<
", " << thePoint.
Z() <<
"); ";
}
{
cout <<
"(" << thePoint.
X() <<
", " << thePoint.
Y() <<
"); ";
}
static void PrintParameter (double theValue)
{
cout << theValue << "; ";
}
template <typename T>
static void PrintParameter (const char* theName, T theValue)
{
cout << theName << " = ";
PrintParameter (theValue);
}
static void PrintName (const char* theName)
{
cout << theName << ": ";
}
static void PrintCollection (const char* theName, int theFinalIndex, std::function<void (int)> thePrintElement)
{
if (theName) {
cout << theName << " = ";
}
cout << "[";
for (int i = 1; i <= theFinalIndex; ++i) {
if (i > 3) {
cout << "...";
break;
}
thePrintElement (i);
}
cout << "]; ";
}
static void PrintCollection (const char* theName,
int theFinalIndex1,
int theFinalIndex2,
std::function<void (int, int)> thePrintElement)
{
PrintCollection (theName, theFinalIndex1, [&] (int i) {
PrintCollection (nullptr, theFinalIndex2, [&] (int j) { thePrintElement (i, j); });
});
}
{
cout << "Orientation = ";
switch (theOrientation) {
case ModelData::ShapeOrientation::Forward:
cout << "Forward";
break;
case ModelData::ShapeOrientation::Reversed:
cout << "Reversed";
break;
default:
cout << "Undefined";
break;
}
cout << "; ";
}
void PrintTabulation()
{
for (size_t i = 0; i < myNestingLevel; ++i) {
cout << "--- ";
}
}
size_t myNestingLevel = 0;
};
#endif
Base class for 2D curves.
Definition Curve2d.hxx:40
double UMin() const
Returns a minimum parameter of a definition domain.
Definition Curve2d.cxx:269
double UMax() const
Returns a maximum parameter of a definition domain.
Definition Curve2d.cxx:277
Base class for 3D curves.
Definition Curve.hxx:39
double UMax() const
Returns a maximum parameter of a definition domain.
Definition Curve.cxx:456
double UMin() const
Returns a minimum parameter of a definition domain.
Definition Curve.cxx:448
Defines a 2D Direction.
Definition Direction2d.hxx:32
Defines a 3D Direction.
Definition Direction.hxx:34
Defines a 3D point.
Definition Point2d.hxx:34
Defines a 3D point.
Definition Point.hxx:35
Base class for geometrical surfaces.
Definition Surface.hxx:40
double VMax() const
Returns a maximum parameter of a definition domain in V direction.
Definition Surface.cxx:537
double UMax() const
Returns a maximum parameter of a definition domain in U direction.
Definition Surface.cxx:523
double UMin() const
Returns a minimum parameter of a definition domain in U direction.
Definition Surface.cxx:516
double VMin() const
Returns a minimum parameter of a definition domain in V direction.
Definition Surface.cxx:530
ShapeOrientation
Defines shape orientation.
Definition ShapeOrientation.hxx:27
Contains classes, namespaces, enums, types, and global functions related to Manufacturing Toolkit.
Definition LicenseManager_LicenseError.hxx:30
curve_explorer.hxx
#ifndef _CurveExplorer_HeaderFile
#define _CurveExplorer_HeaderFile
#include <cadex/Geom/BSplineCurve.hxx>
#include <cadex/Geom/BezierCurve.hxx>
#include <cadex/Geom/Circle.hxx>
#include <cadex/Geom/Ellipse.hxx>
#include <cadex/Geom/Hyperbola.hxx>
#include <cadex/Geom/Line.hxx>
#include <cadex/Geom/OffsetCurve.hxx>
#include <cadex/Geom/Parabola.hxx>
#include <base_explorer.hxx>
using namespace std;
class CurveExplorer : public BaseExplorer
{
public:
static void PrintCurveInfo (
const Geom::Curve& theCurve)
{
switch (theCurve.
Type()) {
case Geom::CurveType::Line:
PrintLine (
static_cast<const Geom::Line&
> (theCurve));
break;
case Geom::CurveType::Circle:
break;
case Geom::CurveType::Ellipse:
break;
case Geom::CurveType::Hyperbola:
break;
case Geom::CurveType::Parabola:
break;
case Geom::CurveType::Bezier:
break;
case Geom::CurveType::BSpline:
break;
case Geom::CurveType::Offset:
break;
default:
break;
}
}
{
PrintName ("Line");
PrintDomain (theLine);
PrintParameter ("Location", aLoc);
PrintParameter ("Direction", aDir);
}
{
PrintName ("Circle");
double aRadius = theCircle.
Radius();
PrintElementary (theCircle);
PrintParameter ("Radius", aRadius);
}
{
PrintName ("Ellipse");
PrintElementary (theEllipse);
PrintParameter ("Major Radius", aMajorRadius);
PrintParameter ("Minor Radius", aMinorRadius);
}
{
PrintName ("Hyperbola");
PrintElementary (theHyperbola);
PrintParameter ("Major Radius", aMajorRadius);
PrintParameter ("Minor Radius", aMinorRadius);
}
{
PrintName ("Parabola");
double aFocal = theParabola.
Focal();
PrintElementary (theParabola);
PrintParameter ("Focal", aFocal);
}
{
PrintName ("Bezier Curve");
int aDegree = theBezier.
Degree();
PrintDomain (theBezier);
PrintParameter ("Degree", aDegree);
PrintParameter ("Number Of Poles", aNumberOfPoles);
PrintCollection ("Poles", aNumberOfPoles, [&] (int i) {
auto aPole = theBezier.
Pole (i);
PrintParameter (aPole);
});
PrintCollection ("Weights", aNumberOfPoles, [&] (int i) {
double aWeight = theBezier.
Weight (i);
PrintParameter (aWeight);
});
}
{
PrintName ("BSpline Curve");
int aDegree = theBSpline.
Degree();
PrintDomain (theBSpline);
PrintParameter ("Degree", aDegree);
PrintParameter ("Number Of Knots", aNumberOfKnots);
PrintParameter ("Number Of Poles", aNumberOfPoles);
PrintCollection ("Knots", aNumberOfKnots, [&] (int i) {
double aKnot = theBSpline.
Knot (i);
PrintParameter (aKnot);
});
PrintCollection ("Multiplicities", aNumberOfKnots, [&] (int i) {
PrintParameter (aMultiplicity);
});
PrintCollection ("Poles", aNumberOfPoles, [&] (int i) {
auto aPole = theBSpline.
Pole (i);
PrintParameter (aPole);
});
PrintCollection ("Weights", aNumberOfPoles, [&] (int i) {
double aWeight = theBSpline.
Weight (i);
PrintParameter (aWeight);
});
}
{
PrintName ("Offset Curve");
double anOffset = theOffset.
Offset();
PrintDomain (theOffset);
PrintParameter ("Direction", aDir);
PrintParameter ("Offset", anOffset);
cout << "Basis Curve = ";
}
};
#endif
Defines 3D B-Spline curve.
Definition BSplineCurve.hxx:31
int NumberOfKnots() const
Returns number of unique knots.
Definition BSplineCurve.cxx:230
double Knot(int theIndex) const
Returns a knot value.
Definition BSplineCurve.cxx:248
Point Pole(int theIndex) const
Returns a pole value.
Definition BSplineCurve.cxx:292
int NumberOfPoles() const
Returns number of poles.
Definition BSplineCurve.cxx:238
int Multiplicity(int theIndex) const
Returns a knot multiplicity.
Definition BSplineCurve.cxx:270
int Degree() const
Returns degree.
Definition BSplineCurve.cxx:222
double Weight(int theIndex) const
Returns a weight value.
Definition BSplineCurve.cxx:316
Defines 3D Bezier curve.
Definition BezierCurve.hxx:31
Point Pole(int theIndex) const
Returns a pole value.
Definition BezierCurve.cxx:156
int NumberOfPoles() const
Returns number of poles.
Definition BezierCurve.cxx:146
int Degree() const
Returns degree.
Definition BezierCurve.cxx:138
double Weight(int theIndex) const
Returns a weight value.
Definition BezierCurve.cxx:182
Defines 3D circle.
Definition Circle.hxx:29
double Radius() const
Returns radius.
Definition Circle.cxx:87
CurveType Type() const
Definition Curve.cxx:434
Defines 3D ellipse.
Definition Ellipse.hxx:29
double MinorRadius() const
Returns a minor radius.
Definition Ellipse.cxx:107
double MajorRadius() const
Returns a major radius.
Definition Ellipse.cxx:99
Defines 3D hyperbola.
Definition Hyperbola.hxx:31
double MinorRadius() const
Returns a minor radius.
Definition Hyperbola.cxx:104
double MajorRadius() const
Returns a major radius.
Definition Hyperbola.cxx:96
Defines 3D line.
Definition Line.hxx:31
Geom::Point Location() const
Returns an origin point.
Definition Line.cxx:109
Geom::Direction Direction() const
Returns a direction.
Definition Line.cxx:117
Defines 3D offset curve.
Definition OffsetCurve.hxx:29
double Offset() const
Returns offset value.
Definition OffsetCurve.cxx:114
Curve BasisCurve() const
Returns basis curve.
Definition OffsetCurve.cxx:106
Geom::Direction Direction() const
Returns reference direction.
Definition OffsetCurve.cxx:122
Defines 3D parabola.
Definition Parabola.hxx:29
double Focal() const
Returns a focal.
Definition Parabola.cxx:90
pcurve_explorer.hxx
#ifndef _PCurveExplorer_HeaderFile
#define _PCurveExplorer_HeaderFile
#include <cadex/Geom/BSplineCurve2d.hxx>
#include <cadex/Geom/BezierCurve2d.hxx>
#include <cadex/Geom/Circle2d.hxx>
#include <cadex/Geom/Ellipse2d.hxx>
#include <cadex/Geom/Hyperbola2d.hxx>
#include <cadex/Geom/Line2d.hxx>
#include <cadex/Geom/OffsetCurve2d.hxx>
#include <cadex/Geom/Parabola2d.hxx>
#include <base_explorer.hxx>
using namespace std;
class PCurveExplorer : public BaseExplorer
{
public:
{
switch (theCurve.
Type()) {
case Geom::CurveType::Line:
break;
case Geom::CurveType::Circle:
break;
case Geom::CurveType::Ellipse:
break;
case Geom::CurveType::Hyperbola:
break;
case Geom::CurveType::Parabola:
break;
case Geom::CurveType::Bezier:
break;
case Geom::CurveType::BSpline:
break;
case Geom::CurveType::Offset:
break;
default:
break;
}
}
{
PrintName ("Line 2d");
PrintDomain (theLine);
PrintParameter ("Location", aLoc);
PrintParameter ("Direction", aDir);
}
{
PrintName ("Circle 2d");
double aRadius = theCircle.
Radius();
PrintElementary2d (theCircle);
PrintParameter ("Radius", aRadius);
}
{
PrintName ("Ellipse 2d");
PrintElementary2d (theEllipse);
PrintParameter ("Major Radius", aMajorRadius);
PrintParameter ("Minor Radius", aMinorRadius);
}
{
PrintName ("Hyperbola 2d");
PrintElementary2d (theHyperbola);
PrintParameter ("Major Radius", aMajorRadius);
PrintParameter ("Minor Radius", aMinorRadius);
}
{
PrintName ("Parabola 2d");
double aFocal = theParabola.
Focal();
PrintElementary2d (theParabola);
PrintParameter ("Focal", aFocal);
}
{
PrintName ("Bezier Curve 2d");
int aDegree = theBezier.
Degree();
PrintDomain (theBezier);
PrintParameter ("Degree", aDegree);
PrintParameter ("Number Of Poles", aNumberOfPoles);
PrintCollection ("Poles", aNumberOfPoles, [&] (int i) {
auto aPole = theBezier.
Pole (i);
PrintParameter (aPole);
});
PrintCollection ("Weights", aNumberOfPoles, [&] (int i) {
double aWeight = theBezier.
Weight (i);
PrintParameter (aWeight);
});
}
{
PrintName ("BSpline Curve 2d");
int aDegree = theBSpline.
Degree();
PrintDomain (theBSpline);
PrintParameter ("Degree", aDegree);
PrintParameter ("Number Of Knots", aNumberOfKnots);
PrintParameter ("Number Of Poles", aNumberOfPoles);
PrintCollection ("Knots", aNumberOfKnots, [&] (int i) {
double aKnot = theBSpline.
Knot (i);
PrintParameter (aKnot);
});
PrintCollection ("Multiplicities", aNumberOfKnots, [&] (int i) {
PrintParameter (aMultiplicity);
});
PrintCollection ("Poles", aNumberOfPoles, [&] (int i) {
auto aPole = theBSpline.
Pole (i);
PrintParameter (aPole);
});
PrintCollection ("Weights", aNumberOfPoles, [&] (int i) {
double aWeight = theBSpline.
Weight (i);
PrintParameter (aWeight);
});
}
{
PrintName ("Offset Curve 2d");
double anOffset = theOffset.
Offset();
PrintDomain (theOffset);
PrintParameter ("Offset", anOffset);
cout << "Basis Curve = ";
}
};
#endif
Defines 2D B-Spline curve.
Definition BSplineCurve2d.hxx:31
double Weight(int theIndex) const
Returns a weight value.
Definition BSplineCurve2d.cxx:299
int NumberOfKnots() const
Returns number of unique knots.
Definition BSplineCurve2d.cxx:213
int Multiplicity(int theIndex) const
Returns a knot multiplicity.
Definition BSplineCurve2d.cxx:253
int NumberOfPoles() const
Returns number of poles.
Definition BSplineCurve2d.cxx:221
double Knot(int theIndex) const
Returns a knot value.
Definition BSplineCurve2d.cxx:231
int Degree() const
Returns degree.
Definition BSplineCurve2d.cxx:205
Point2d Pole(int theIndex) const
Returns a pole value.
Definition BSplineCurve2d.cxx:275
Defines 2D Bezier curve.
Definition BezierCurve2d.hxx:31
int NumberOfPoles() const
Returns number of poles.
Definition BezierCurve2d.cxx:131
double Weight(int theIndex) const
Returns a weight value.
Definition BezierCurve2d.cxx:165
Point2d Pole(int theIndex) const
Returns a pole value.
Definition BezierCurve2d.cxx:141
int Degree() const
Returns degree.
Definition BezierCurve2d.cxx:124
Defines 2D circle.
Definition Circle2d.hxx:31
double Radius() const
Returns radius.
Definition Circle2d.cxx:80
CurveType Type() const
Returns a curve type.
Definition Curve2d.cxx:261
Defines 2D ellipse.
Definition Ellipse2d.hxx:31
double MinorRadius() const
Returns a minor radius.
Definition Ellipse2d.cxx:95
double MajorRadius() const
Returns a major radius.
Definition Ellipse2d.cxx:87
Defines 2D hyperbola.
Definition Hyperbola2d.hxx:31
double MinorRadius() const
Returns a minor radius.
Definition Hyperbola2d.cxx:94
double MajorRadius() const
Returns a major radius.
Definition Hyperbola2d.cxx:86
Defines 2D line.
Definition Line2d.hxx:32
Point2d Location() const
Returns an origin point.
Definition Line2d.cxx:91
Direction2d Direction() const
Returns a direction.
Definition Line2d.cxx:99
Defines 2D offset curve.
Definition OffsetCurve2d.hxx:31
double Offset() const
Returns offset value.
Definition OffsetCurve2d.cxx:81
Curve2d BasisCurve() const
Returns basis curve.
Definition OffsetCurve2d.cxx:73
Defines 2D parabola.
Definition Parabola2d.hxx:31
double Focal() const
Returns a focal.
Definition Parabola2d.cxx:82
shape_explorer.hxx
#ifndef _ShapeExplorer_HeaderFile
#define _ShapeExplorer_HeaderFile
#include <cadex/ModelData/Body.hxx>
#include <cadex/ModelData/Edge.hxx>
#include <cadex/ModelData/Face.hxx>
#include <cadex/ModelData/Model.hxx>
#include <cadex/ModelData/ModelElementVisitor.hxx>
#include <cadex/ModelData/ModelReader.hxx>
#include <cadex/ModelData/Part.hxx>
#include <cadex/ModelData/Shape.hxx>
#include <cadex/ModelData/SheetBody.hxx>
#include <cadex/ModelData/Shell.hxx>
#include <cadex/ModelData/SolidBody.hxx>
#include <cadex/ModelData/Vertex.hxx>
#include <cadex/ModelData/Wire.hxx>
#include <cadex/ModelData/WireframeBody.hxx>
#include <base_explorer.hxx>
#include <curve_explorer.hxx>
#include <pcurve_explorer.hxx>
#include <surface_explorer.hxx>
#include <array>
#include <functional>
#include <iostream>
#include <unordered_map>
using namespace std;
{
protected:
{
cout <<
"Part = \"" << thePart.
Name() <<
"\"" << endl;
const auto& aBodies = thePart.
Bodies();
if (!aBodies.empty()) {
ExploreBRep (aBodies);
}
}
private:
void ExploreBRep (const std::vector<ModelData::Body>& theBodies)
{
for (size_t i = 0; i < theBodies.size(); ++i) {
const auto& aBody = theBodies[i];
cout << "Body " << i << " " << BodyType (aBody) << endl;
ExploreShape (aShape);
}
}
}
{
if (theShape.
Type() == ModelData::ShapeType::Face) {
myCurrentFace = ModelData::Face::Cast (theShape);
}
++myNestingLevel;
while (aShapeIt.HasNext()) {
PrintShape (aShape);
ExploreShape (aShape);
}
if (theShape.
Type() == ModelData::ShapeType::Face) {
}
--myNestingLevel;
}
{
return "Sheet";
return "Solid";
return "Wireframe";
}
return "Undefined";
}
{
PrintTabulation();
switch (theShape.
Type()) {
case ModelData::ShapeType::Solid:
cout << "Solid";
break;
case ModelData::ShapeType::Shell:
PrintShell (ModelData::Shell::Cast (theShape));
break;
case ModelData::ShapeType::Wire:
PrintWire (ModelData::Wire::Cast (theShape));
break;
case ModelData::ShapeType::Face:
PrintFace (ModelData::Face::Cast (theShape));
break;
case ModelData::ShapeType::Edge:
PrintEdge (ModelData::Edge::Cast (theShape));
break;
case ModelData::ShapeType::Vertex:
PrintVertex (ModelData::Vertex::Cast (theShape));
break;
default:
cout << "Undefined";
break;
}
cout << endl;
}
{
PrintName ("Shell");
++myNestingLevel;
--myNestingLevel;
}
{
PrintName ("Wire");
++myNestingLevel;
--myNestingLevel;
}
{
PrintName ("Face");
++myNestingLevel;
cout << endl;
PrintTabulation();
cout << "Surface: ";
SurfaceExplorer::PrintSurface (aSurface);
--myNestingLevel;
}
{
PrintName ("Edge");
++myNestingLevel;
cout << "Degenerated: ";
}
PrintParameter (
"Tolerance", theEdge.
Tolerance());
pair<double, double> aParameters;
cout << endl;
PrintTabulation();
PrintName ("Curve");
PrintRange ("Edge Range", aParameters.first, aParameters.second);
CurveExplorer::PrintCurveInfo (aCurve);
}
if (myCurrentFace) {
pair<double, double> aParameters2d;
theEdge.
PCurve (myCurrentFace, aParameters2d.first, aParameters2d.second);
cout << endl;
PrintTabulation();
PrintName ("PCurve");
PrintRange ("Edge Range", aParameters2d.first, aParameters2d.second);
PCurveExplorer::PrintPCurveInfo (aPCurve);
}
--myNestingLevel;
}
{
PrintName ("Vertex");
PrintParameter ("Tolerance", aTolerance);
PrintParameter ("Location", aLoc);
}
private:
};
#endif
Provides a base body class.
Definition Body.hxx:30
Defines an edge.
Definition Edge.hxx:33
Geom::Curve Curve(double &theFirstParameter, double &theLastParameter) const
Returns edge 3D curve and its limits.
Definition Edge.cxx:408
double Tolerance() const
Returns edge tolerance.
Definition Edge.cxx:682
Geom::Curve2d PCurve(const Face &theFace, double &theFirstParameter, double &theLastParameter) const
Returns edge p-curve on a face and its limits.
Definition Edge.cxx:642
bool IsDegenerated() const
Returns true if the edge is degenerated.
Definition Edge.cxx:689
Defines a topological face.
Definition Face.hxx:33
Geom::Surface Surface() const
Returns underlying surface.
Definition Face.cxx:324
UTF16String Name() const
Returns a name.
Definition ModelElement.cxx:55
Element visitor with empty implementation.
Definition ModelElementVisitor.hxx:64
Defines a leaf node in the scene graph hiearchy.
Definition Part.hxx:34
Base class of topological shapes.
Definition Shape.hxx:38
ShapeOrientation Orientation() const
Returns orientation flag.
Definition Shape.cxx:271
ShapeType Type() const
Returns a shape type. For a null object returns Undefined.
Definition Shape.cxx:259
Iterates over subshapes in a shape.
Definition ShapeIterator.hxx:32
Provides a sheet body composed of faces and shells.
Definition SheetBody.hxx:34
Defines a connected set of faces.
Definition Shell.hxx:32
Provides a solid body composed of solids.
Definition SolidBody.hxx:30
Defines topological vertex.
Definition Vertex.hxx:30
Geom::Point Point() const
Returns a 3D point this vertex resides at.
Definition Vertex.cxx:97
double Tolerance() const
Returns vertex tolerance.
Definition Vertex.cxx:117
Defines a connected set of edges.
Definition Wire.hxx:32
Provides a wireframe body composed of edges and wires.
Definition WireframeBody.hxx:34
surface_explorer.hxx
#ifndef _SurfaceExplorer_HeaderFile
#define _SurfaceExplorer_HeaderFile
#include <cadex/Geom/BSplineSurface.hxx>
#include <cadex/Geom/BezierSurface.hxx>
#include <cadex/Geom/ConicalSurface.hxx>
#include <cadex/Geom/CylindricalSurface.hxx>
#include <cadex/Geom/OffsetSurface.hxx>
#include <cadex/Geom/Plane.hxx>
#include <cadex/Geom/SphericalSurface.hxx>
#include <cadex/Geom/SurfaceOfLinearExtrusion.hxx>
#include <cadex/Geom/SurfaceOfRevolution.hxx>
#include <cadex/Geom/ToroidalSurface.hxx>
#include <base_explorer.hxx>
using namespace std;
class SurfaceExplorer : public BaseExplorer
{
public:
{
switch (theSurface.
Type()) {
case Geom::SurfaceType::Plane:
PrintPlane (
static_cast<const Geom::Plane&
> (theSurface));
break;
case Geom::SurfaceType::Cylinder:
break;
case Geom::SurfaceType::Cone:
break;
case Geom::SurfaceType::Sphere:
break;
case Geom::SurfaceType::Torus:
break;
case Geom::SurfaceType::LinearExtrusion:
break;
case Geom::SurfaceType::Revolution:
break;
case Geom::SurfaceType::Bezier:
break;
case Geom::SurfaceType::BSpline:
break;
case Geom::SurfaceType::Offset:
break;
default:
break;
}
}
{
PrintName ("Plane");
PrintElementary (thePlane);
}
{
PrintName ("Cylinder");
double aRadius = theCylinder.
Radius();
PrintElementary (theCylinder);
PrintParameter ("Radius", aRadius);
}
{
PrintName ("Cone");
double aRadius = theCone.
Radius();
PrintElementary (theCone);
PrintParameter ("Radius", aRadius);
PrintParameter ("Semi-Angle", aSemiAngle);
}
{
PrintName ("Sphere");
double aRadius = theSphere.
Radius();
PrintElementary (theSphere);
PrintParameter ("Radius", aRadius);
}
{
PrintName ("Torus");
PrintElementary (theTorus);
PrintParameter ("Major Radius", aMajorRadius);
PrintParameter ("Minor Radius", aMinorRadius);
}
{
PrintName ("Linear Extrusion Surface");
PrintDomain (theLinearExtrusion);
PrintParameter ("Direction", aDir);
cout << "Basis Curve = ";
CurveExplorer::PrintCurveInfo (theLinearExtrusion.
BasisCurve());
}
{
PrintName ("Revolution Surface");
PrintDomain (theRevolution);
PrintParameter ("Location", aLoc);
PrintParameter ("Direction", aDir);
cout << "Basis Curve = ";
CurveExplorer::PrintCurveInfo (theRevolution.BasisCurve());
}
{
PrintName ("Bezier Surface");
int aUDegree = theBezier.
UDegree();
int aVDegree = theBezier.
VDegree();
PrintDomain (theBezier);
PrintParameter ("U Degree", aUDegree);
PrintParameter ("V Degree", aVDegree);
PrintParameter ("Number Of U Poles", aNumberOfUPoles);
PrintParameter ("Number Of V Poles", aNumberOfVPoles);
PrintCollection ("Poles", aNumberOfUPoles, aNumberOfVPoles, [&] (int i, int j) {
auto aPole = theBezier.
Pole (i, j);
PrintParameter (aPole);
});
PrintCollection ("Weights", aNumberOfUPoles, aNumberOfVPoles, [&] (int i, int j) {
double aWeight = theBezier.
Weight (i, j);
PrintParameter (aWeight);
});
}
{
PrintName ("BSpline Surface");
int aUDegree = theBSpline.
UDegree();
int aVDegree = theBSpline.
VDegree();
PrintDomain (theBSpline);
PrintParameter ("U Degree", aUDegree);
PrintParameter ("V Degree", aVDegree);
PrintParameter ("Number Of U Knots", aNumberOfUKnots);
PrintParameter ("Number Of V Knots", aNumberOfVKnots);
PrintParameter ("Number Of U Poles", aNumberOfUPoles);
PrintParameter ("Number Of V Poles", aNumberOfVPoles);
PrintCollection ("U Knots", aNumberOfUKnots, [&] (int i) {
double aKnot = theBSpline.
UKnot (i);
PrintParameter (aKnot);
});
PrintCollection ("V Knots", aNumberOfVKnots, [&] (int i) {
double aKnot = theBSpline.
VKnot (i);
PrintParameter (aKnot);
});
PrintCollection ("U Multiplicities", aNumberOfUKnots, [&] (int i) {
PrintParameter (aUMultiplicity);
});
PrintCollection ("V Multiplicities", aNumberOfVKnots, [&] (int i) {
PrintParameter (aVMultiplicity);
});
PrintCollection ("Poles", aNumberOfUPoles, aNumberOfVPoles, [&] (int i, int j) {
auto aPole = theBSpline.
Pole (i, j);
PrintParameter (aPole);
});
PrintCollection ("Weights", aNumberOfUPoles, aNumberOfVPoles, [&] (int i, int j) {
double aWeight = theBSpline.
Weight (i, j);
PrintParameter (aWeight);
});
}
{
PrintName ("Offset Surface");
double anOffset = theOffset.
Offset();
PrintDomain (theOffset);
PrintParameter ("Offset", anOffset);
cout << "Basis Surface = ";
}
};
#endif
Defines a B-Spline surface.
Definition BSplineSurface.hxx:33
int NumberOfUKnots() const
Returns number of unique U-knots.
Definition BSplineSurface.cxx:434
int UMultiplicity(int theUIndex) const
Returns a U knot multiplicity.
Definition BSplineSurface.cxx:546
int UDegree() const
Returns U-degree.
Definition BSplineSurface.cxx:402
int VDegree() const
Returns V-degree.
Definition BSplineSurface.cxx:410
int NumberOfVPoles() const
Returns number of V-poles.
Definition BSplineSurface.cxx:426
double VKnot(int theVIndex) const
Returns a V-knot value.
Definition BSplineSurface.cxx:512
int VMultiplicity(int theVIndex) const
Returns a V knot multiplicity.
Definition BSplineSurface.cxx:556
double UKnot(int theUIndex) const
Returns a U-knot value.
Definition BSplineSurface.cxx:502
double Weight(int theUIndex, int theVIndex) const
Returns a weight value.
Definition BSplineSurface.cxx:477
int NumberOfUPoles() const
Returns number of U-poles.
Definition BSplineSurface.cxx:418
Point Pole(int theUIndex, int theVIndex) const
Returns a pole value.
Definition BSplineSurface.cxx:452
int NumberOfVKnots() const
Returns number of unique V-knots.
Definition BSplineSurface.cxx:442
Defines a Bezier surface.
Definition BezierSurface.hxx:32
int NumberOfUPoles() const
Returns number of U-poles.
Definition BezierSurface.cxx:214
double Weight(int theUIndex, int theVIndex) const
Returns a weight value.
Definition BezierSurface.cxx:256
Point Pole(int theUIndex, int theVIndex) const
Returns a pole value.
Definition BezierSurface.cxx:231
int UDegree() const
Returns degree.
Definition BezierSurface.cxx:200
int VDegree() const
Returns degree.
Definition BezierSurface.cxx:207
int NumberOfVPoles() const
Returns number of V-poles.
Definition BezierSurface.cxx:221
Defines a conical surface.
Definition ConicalSurface.hxx:29
double Radius() const
Returns reference radius.
Definition ConicalSurface.cxx:142
double SemiAngle() const
Returns semi-angle.
Definition ConicalSurface.cxx:134
Defines a cylindrical surface.
Definition CylindricalSurface.hxx:31
double Radius() const
Returns radius.
Definition CylindricalSurface.cxx:113
Defines an offset surface.
Definition OffsetSurface.hxx:29
Surface BasisSurface() const
Returns basis surface.
Definition OffsetSurface.cxx:88
double Offset() const
Returns offset value.
Definition OffsetSurface.cxx:96
Defines a plane.
Definition Plane.hxx:33
Defines a spherical surface.
Definition SphericalSurface.hxx:31
double Radius() const
Returns radius.
Definition SphericalSurface.cxx:117
SurfaceType Type() const
Returns a surface type.
Definition Surface.cxx:495
Defines a surface of linear extrusion.
Definition SurfaceOfLinearExtrusion.hxx:29
Defines a surface of revolution.
Definition SurfaceOfRevolution.hxx:31
Geom::Point Location() const
Returns an origin point of a rotation axis.
Definition SurfaceOfRevolution.cxx:119
Defines a toroidal surface.
Definition ToroidalSurface.hxx:31
double MajorRadius() const
Returns major radius.
Definition ToroidalSurface.cxx:124
double MinorRadius() const
Returns minor radius.
Definition ToroidalSurface.cxx:131
main.cxx
#include <cadex/LicenseManager_Activate.h>
#include <cadex/ModelData/ModelReader.hxx>
#include <shape_explorer.hxx>
#include "../../mtk_license.cxx"
using namespace std;
int main (int argc, char* argv[])
{
auto aKey = MTKLicenseKey::Value();
if (!CADExLicense_Activate (aKey)) {
cerr << "Failed to activate Manufacturing Toolkit license." << endl;
return 1;
}
if (argc != 2) {
cerr << "Usage: " << argv[0] << " <input_file>, where:" << endl;
cerr << " <input_file> is a name of the file to be read" << endl;
return 1;
}
const char* aSource = argv[1];
cerr << "Failed to read the file " << aSource << endl;
return 1;
}
ShapeExplorer aVisitor;
return 0;
}
Provides MTK data model.
Definition Model.hxx:40
void Accept(ModelElementVisitor &theVisitor) const
Accepts a visitor.
Definition Model.cxx:274
Reads STEP and native format.
Definition ModelReader.hxx:33