using System;
using System.Runtime.InteropServices;
namespace pmi
{
class Program
{
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
static extern bool SetDllDirectory(string lpPathName);
static int Main(string[] args)
{
SetDllDirectory("../../../../../../win64/vc14.1/bin");
string aKey = LicenseKey.Value();
if (!LicenseManager.Activate(aKey))
{
Console.WriteLine("Failed to activate CAD Exchanger license.");
return 1;
}
if (args.Length != 1)
{
Console.WriteLine("Usage: " + System.Reflection.Assembly.GetExecutingAssembly().Location
+ " <input_file>, where:");
Console.WriteLine(" <input_file> is a name of the STEP file to be read");
return 1;
}
string aSource = args[0];
aParams.SetReadPMI(true);
{
Console.WriteLine("Failed to open and convert the file ", aSource);
return 1;
}
SceneGraphVisitor aVisitor = new SceneGraphVisitor();
return 0;
}
}
class TabulatedOutput
{
public static void WriteLine(Object theObject)
{
PrintTabulation();
Console.WriteLine(theObject);
}
public static void IncreaseIndent() { ++myNestingLevel; }
public static void DecreaseIndent() { --myNestingLevel; }
private static void PrintTabulation()
{
if (myNestingLevel <= 0)
{
return;
}
for (int i = 0; i < myNestingLevel - 1; i++)
{
if (i < 2 || i == 3)
{
Console.Write("| ");
}
else
{
Console.Write(" ");
}
}
Console.Write("|__");
if (myNestingLevel > 3)
{
Console.Write(" ");
}
}
private static int myNestingLevel = 0;
}
{
{
PrintName(
"Part", thePart.
Name());
ExplorePMI(thePart);
}
{
TabulatedOutput.IncreaseIndent();
PrintName(
"Instance", theInstance.
Name());
ExplorePMI(theInstance);
return true;
}
{
TabulatedOutput.IncreaseIndent();
PrintName(
"Assembly", theAssembly.
Name());
ExplorePMI(theAssembly);
return true;
}
{
TabulatedOutput.DecreaseIndent();
}
{
TabulatedOutput.DecreaseIndent();
}
{
if (aPMITable != null)
{
TabulatedOutput.WriteLine("PMI Table:");
TabulatedOutput.IncreaseIndent();
while (aDataIt.
HasNext())
{
TabulatedOutput.WriteLine(
"PMI Data: " + aData.
Name());
TabulatedOutput.IncreaseIndent();
if (aSemanticElement != null)
{
TabulatedOutput.WriteLine("Semantic element:");
TabulatedOutput.IncreaseIndent();
PMISemanticVisitor aVisitor = new PMISemanticVisitor();
aSemanticElement.
Accept(aVisitor);
TabulatedOutput.DecreaseIndent();
}
if (aGraphicalElement != null)
{
TabulatedOutput.WriteLine("Graphical element:");
TabulatedOutput.IncreaseIndent();
PMIGraphicalVisitor aVisitor = new PMIGraphicalVisitor();
aGraphicalElement.
Accept(aVisitor);
TabulatedOutput.DecreaseIndent();
}
TabulatedOutput.DecreaseIndent();
}
TabulatedOutput.DecreaseIndent();
}
}
{
{
TabulatedOutput.WriteLine(theSGElement + ": " + theName);
}
else
{
TabulatedOutput.WriteLine(theSGElement + ": <noname>");
}
}
}
{
{
TabulatedOutput.WriteLine("Datum");
TabulatedOutput.IncreaseIndent();
TabulatedOutput.WriteLine(
"Label: " + theComponent.
Label());
printAttributes(theComponent);
TabulatedOutput.DecreaseIndent();
}
{
TabulatedOutput.WriteLine("Dimension");
TabulatedOutput.IncreaseIndent();
TabulatedOutput.WriteLine(
"Nominal Value: " + theComponent.
NominalValue());
TabulatedOutput.WriteLine(
"Type of dimension: " + (
int)theComponent.
TypeOfDimension());
printAttributes(theComponent);
TabulatedOutput.DecreaseIndent();
}
{
TabulatedOutput.WriteLine("Geometric tolerance");
TabulatedOutput.IncreaseIndent();
TabulatedOutput.WriteLine(
"Magnitude: " + theComponent.
Magnitude());
TabulatedOutput.WriteLine(
"Type of tolerance: " + (
int)theComponent.
TypeOfTolerance());
TabulatedOutput.WriteLine(
"Tolerance zone form: " + (
int)theComponent.
ToleranceZoneForm());
printAttributes(theComponent);
TabulatedOutput.DecreaseIndent();
}
{
TabulatedOutput.WriteLine("Surface Finish");
TabulatedOutput.IncreaseIndent();
TabulatedOutput.WriteLine(
"Material removal: " + (
int)theComponent.
MaterialRemoval());
TabulatedOutput.WriteLine(
"Lay direction: " + (
int)theComponent.
LayDirection());
TabulatedOutput.WriteLine(
"All around flag: " + theComponent.
IsAllAround());
printAttributes(theComponent);
TabulatedOutput.DecreaseIndent();
}
{
{
PMISemanticAttributeVisitor aVisitor = new PMISemanticAttributeVisitor();
theComponent.
Accept(aVisitor);
}
}
}
{
{
TabulatedOutput.WriteLine(
"PolyLine set [" + theOutline.
LineSet().
NumberOfPolyLines() +
" polylines]");
}
{
TabulatedOutput.WriteLine(
"PolyLine2d set [" + theOutline.
LineSet().
NumberOfPolyLines() +
" polylines]");
}
{
TabulatedOutput.WriteLine(
"Curve set [" + theOutline.
NumberOfCurves() +
" curves]");
}
{
TabulatedOutput.WriteLine(
"Curve2d set [" + theOutline.
NumberOfCurves() +
" curves]");
}
{
TabulatedOutput.WriteLine("Outline set:");
TabulatedOutput.IncreaseIndent();
return true;
}
{
TabulatedOutput.DecreaseIndent();
}
};
{
{
TabulatedOutput.WriteLine("Outline");
TabulatedOutput.IncreaseIndent();
PMIOutlineVisitor aVisitor = new PMIOutlineVisitor();
theComponent.
Outline().
Accept(aVisitor);
TabulatedOutput.DecreaseIndent();
}
{
TabulatedOutput.WriteLine(
"Text [" + theComponent.
Text() +
"]");
}
{
TabulatedOutput.WriteLine(
"Triangulation [" + theComponent.
TriangleSet().
NumberOfFaces() +
" triangles]");
}
};
{
{
TabulatedOutput.WriteLine(
"Modifier: " + theAttribute.
Modifier());
}
{
TabulatedOutput.WriteLine(
"ModifierWithValue: modifier=" + theAttribute.Modifier() +
", value=" + theAttribute.
Value());
}
{
TabulatedOutput.WriteLine(
"Qualifier: " + theAttribute.
Qualifier());
}
{
TabulatedOutput.WriteLine(
"PlusMinusBounds: (" + theAttribute.
LowerBound() +
", " + theAttribute.
UpperBound() +
")");
}
{
TabulatedOutput.WriteLine(
"Range: [" + theAttribute.
LowerLimit() +
", " + theAttribute.
UpperLimit() +
"]");
}
{
TabulatedOutput.WriteLine(
"LimitsAndFits: value=" + theAttribute.
Value() +
", type=" + theAttribute.
Type());
}
{
TabulatedOutput.WriteLine(
"DatumTarget: index=" + theAttribute.
Index() +
", description=" + theAttribute.
Description());
}
{
TabulatedOutput.WriteLine(
"DatumRef: precedence=" + theAttribute.
Precedence() +
", targetLabel=" + theAttribute.
TargetLabel());
}
{
TabulatedOutput.WriteLine("DatumRefCompartment:");
TabulatedOutput.IncreaseIndent();
uint aNumberOfReferences = theAttribute.
NumberOfReferences();
if (aNumberOfReferences > 0)
{
TabulatedOutput.WriteLine("References:");
TabulatedOutput.IncreaseIndent();
for (uint i = 0; i < aNumberOfReferences; i++)
{
theAttribute.
Reference(i).
Accept(
this);
}
TabulatedOutput.DecreaseIndent();
}
uint aNumberOfModifierAttributes = theAttribute.
NumberOfModifierAttributes();
if (aNumberOfModifierAttributes > 0)
{
TabulatedOutput.WriteLine("Modifiers:");
TabulatedOutput.IncreaseIndent();
for (uint i = 0; i < aNumberOfModifierAttributes; i++)
{
theAttribute.
ModifierAttribute(i).Accept(
this);
}
TabulatedOutput.DecreaseIndent();
}
TabulatedOutput.DecreaseIndent();
}
{
TabulatedOutput.WriteLine(
"MaximumValue: " + theAttribute.
MaxValue());
}
{
TabulatedOutput.WriteLine(
"Displacement: " + theAttribute.
Displacement());
}
{
TabulatedOutput.WriteLine(
"LengthUnit: " + theAttribute.
Unit());
}
{
TabulatedOutput.WriteLine(
"AngleUnit: " + theAttribute.
Unit());
}
{
TabulatedOutput.WriteLine("Machining allowance");
TabulatedOutput.IncreaseIndent();
TabulatedOutput.WriteLine(
"Value: " + theAttribute.
Value());
TabulatedOutput.WriteLine(
"Upper bound: " + theAttribute.
UpperBound());
TabulatedOutput.WriteLine(
"Lower bound: " + theAttribute.
LowerBound());
TabulatedOutput.DecreaseIndent();
}
{
TabulatedOutput.WriteLine(
"Surface texture requirement #" + (
int)theAttribute.
Precedence());
TabulatedOutput.IncreaseIndent();
TabulatedOutput.WriteLine(
"Specification limit: " + (
int)theAttribute.
SpecificationLimit());
TabulatedOutput.WriteLine(
"Filter name: " + theAttribute.
FilterName());
TabulatedOutput.WriteLine(
"Short wave filter: " + theAttribute.
ShortWaveFilter());
TabulatedOutput.WriteLine(
"Long wave filter: " + theAttribute.
LongWaveFilter());
TabulatedOutput.WriteLine(
"Surface parameter: " + (
int)theAttribute.
SurfaceParameter());
TabulatedOutput.WriteLine(
"Evaluation length: " + theAttribute.
EvaluationLength());
TabulatedOutput.WriteLine(
"Comparison rule: " + (
int)theAttribute.
ComparisonRule());
TabulatedOutput.WriteLine(
"Limit value: " + theAttribute.
LimitValue());
TabulatedOutput.DecreaseIndent();
}
};
}
Defines a Unicode (UTF-16) string wrapping a standard string.
Definition: Base_UTF16String.hxx:34
bool IsEmpty() const
Returns true if the string is empty.
Definition: Base_UTF16String.cxx:233
Defines a group of scene graph element.
Definition: ModelData_Assembly.hxx:33
Base_UTF16String Name() const
Definition: ModelData_BaseObject.cxx:218
IndexType NumberOfFaces() const
Returns a number of faces (triangles).
Definition: ModelData_IndexedTriangleSet.cxx:179
Defines an occurrence of assembly or part in a scene graph.
Definition: ModelData_Instance.hxx:34
Provides CAD Exchanger data model.
Definition: ModelData_Model.hxx:43
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
void SetReaderParameters(const Base_ReaderParameters &theParameters)
Sets reader parameters.
Definition: ModelData_ModelReader.cxx:216
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
Defines an angle unit.
Definition: ModelData_PMISemanticAttribute.hxx:286
Defines a collection of outlines.
Definition: ModelData_PMIOutline.hxx:130
Defines an outline consist of 2d curves.
Definition: ModelData_PMIOutline.hxx:114
size_t NumberOfCurves() const
Returns number of added curves.
Definition: ModelData_PMIOutline.cxx:315
Defines an outline consist of curves.
Definition: ModelData_PMIOutline.hxx:98
size_t NumberOfCurves() const
Returns number of added curves.
Definition: ModelData_PMIOutline.cxx:248
Defines a complete PMI element.
Definition: ModelData_PMIData.hxx:40
ModelData_PMISemanticElement SemanticElement() const
Returns a semantic element.
Definition: ModelData_PMIData.cxx:117
ModelData_PMIGraphicalElement GraphicalElement() const
Returns a graphical element.
Definition: ModelData_PMIData.cxx:97
Defines a component represented by a datum, datum feature symbol or datum target.
Definition: ModelData_PMISemanticElementComponent.hxx:172
const Base_UTF16String & Label() const
Returns a label of a datum.
Definition: ModelData_PMISemanticElementComponent.cxx:317
Defines a datum reference.
Definition: ModelData_PMISemanticAttribute.hxx:199
size_t Precedence() const
Returns precedence value.
Definition: ModelData_PMISemanticAttribute.cxx:378
Defines a compartment of datum references or compartments.
Definition: ModelData_PMISemanticAttribute.hxx:218
Defines a datum target data.
Definition: ModelData_PMISemanticAttribute.hxx:180
size_t Index() const
Returns index.
Definition: ModelData_PMISemanticAttribute.cxx:335
Defines a component represented by a dimensional tolerance.
Definition: ModelData_PMISemanticElementComponent.hxx:75
double NominalValue() const
Returns nominal value of a dimension.
Definition: ModelData_PMISemanticElementComponent.cxx:197
DimensionType TypeOfDimension() const
Returns type of dimension.
Definition: ModelData_PMISemanticElementComponent.cxx:210
Defines a displacement value for an unequally disposed geometric tolerance.
Definition: ModelData_PMISemanticAttribute.hxx:254
double Displacement() const
Returns displacement value.
Definition: ModelData_PMISemanticAttribute.cxx:503
Defines a component represented by a geometric tolerance.
Definition: ModelData_PMISemanticElementComponent.hxx:116
ToleranceType TypeOfTolerance() const
Returns type of tolerance.
Definition: ModelData_PMISemanticElementComponent.cxx:279
ToleranceZoneFormType ToleranceZoneForm() const
Returns tolerance zone form.
Definition: ModelData_PMISemanticElementComponent.cxx:265
double Magnitude() const
Returns a magnitude value of a tolerance.
Definition: ModelData_PMISemanticElementComponent.cxx:251
Defines a visitor of the components.
Definition: ModelData_PMIGraphicalElementComponentVisitor.hxx:32
Defines a PMI graphical element.
Definition: ModelData_PMIGraphicalElement.hxx:40
void Accept(ModelData_PMIGraphicalElementComponentVisitor &theVisitor) const
Accepts the visitor.
Definition: ModelData_PMIGraphicalElement.cxx:160
Defines a length unit.
Definition: ModelData_PMISemanticAttribute.hxx:270
Defines a kind of a tolerance class dimension.
Definition: ModelData_PMISemanticAttribute.hxx:160
Defines a machining allowance and its bound (deviations).
Definition: ModelData_PMISemanticAttribute.hxx:302
double UpperBound() const
Returns upper bound.
Definition: ModelData_PMISemanticAttribute.cxx:598
double Value() const
Returns machining allowance value.
Definition: ModelData_PMISemanticAttribute.cxx:586
double LowerBound() const
Returns lower bound.
Definition: ModelData_PMISemanticAttribute.cxx:610
Defines a maximum value.
Definition: ModelData_PMISemanticAttribute.hxx:238
double MaxValue() const
Returns maximum value.
Definition: ModelData_PMISemanticAttribute.cxx:474
Defines a type of modification.
Definition: ModelData_PMISemanticAttribute.hxx:74
Defines a type of modification with additional value.
Definition: ModelData_PMISemanticAttribute.hxx:90
Defines a visitor of the outlines.
Definition: ModelData_PMIOutlineVisitor.hxx:34
Defines a component represented by outline.
Definition: ModelData_PMIGraphicalElementComponent.hxx:66
Defines a plus and minus bounds (deviations) of a tolerance.
Definition: ModelData_PMISemanticAttribute.hxx:122
double UpperBound() const
Returns upper bound.
Definition: ModelData_PMISemanticAttribute.cxx:207
double LowerBound() const
Returns lower bound.
Definition: ModelData_PMISemanticAttribute.cxx:219
Defines an outline consist of 2d polylines.
Definition: ModelData_PMIOutline.hxx:82
Defines an outline consist of polylines.
Definition: ModelData_PMIOutline.hxx:66
Defines a type of qualifier.
Definition: ModelData_PMISemanticAttribute.hxx:106
Defines range of value.
Definition: ModelData_PMISemanticAttribute.hxx:141
double LowerLimit() const
Returns lower limit.
Definition: ModelData_PMISemanticAttribute.cxx:260
double UpperLimit() const
Returns upper limit.
Definition: ModelData_PMISemanticAttribute.cxx:248
Defines a visitor of the attributes.
Definition: ModelData_PMISemanticAttributeVisitor.hxx:44
Base class for various component types.
Definition: ModelData_PMISemanticElementComponent.hxx:43
void Accept(ModelData_PMISemanticAttributeVisitor &theVisitor) const
Accepts an attribute visitor.
Definition: ModelData_PMISemanticElementComponent.cxx:117
bool HasAttributes() const
Returns true if semantic attributes were added and false otherwise.
Definition: ModelData_PMISemanticElementComponent.cxx:94
Defines a visitor of the components.
Definition: ModelData_PMISemanticElementComponentVisitor.hxx:33
Defines a PMI semantic element.
Definition: ModelData_PMISemanticElement.hxx:38
void Accept(ModelData_PMISemanticElementComponentVisitor &theVisitor) const
Accepts the visitor.
Definition: ModelData_PMISemanticElement.cxx:123
Defines a component represented by a suface texture.
Definition: ModelData_PMISemanticElementComponent.hxx:188
LayDirectionType LayDirection() const
Returns type of lay direction.
Definition: ModelData_PMISemanticElementComponent.cxx:374
const Base_UTF16String & ManufacturingMethod() const
Returns a manufacturing method.
Definition: ModelData_PMISemanticElementComponent.cxx:397
bool IsAllAround() const
Returns true if the same surface texture is required on all surfaces around a workpiece outline and f...
Definition: ModelData_PMISemanticElementComponent.cxx:385
MaterialRemovalType MaterialRemoval() const
Returns type of material removal.
Definition: ModelData_PMISemanticElementComponent.cxx:361
Defines a surface texture requirement.
Definition: ModelData_PMISemanticAttribute.hxx:324
double LimitValue() const
Returns limit value.
Definition: ModelData_PMISemanticAttribute.cxx:762
const Base_UTF16String & FilterName() const
Returns filter name.
Definition: ModelData_PMISemanticAttribute.cxx:687
double ShortWaveFilter() const
Returns short wave filter value.
Definition: ModelData_PMISemanticAttribute.cxx:699
double LongWaveFilter() const
Returns long wave filter value.
Definition: ModelData_PMISemanticAttribute.cxx:711
size_t Precedence() const
Returns precedence value.
Definition: ModelData_PMISemanticAttribute.cxx:664
ComparisonRuleType ComparisonRule() const
Returns comparison rule.
Definition: ModelData_PMISemanticAttribute.cxx:747
double EvaluationLength() const
Returns evaluation length value.
Definition: ModelData_PMISemanticAttribute.cxx:734
Iterator over added PMIData items, which contains graphical and semantical elements.
Definition: ModelData_PMITable.hxx:81
Defines a container storing PMI data.
Definition: ModelData_PMITable.hxx:40
Defines a component represented by text.
Definition: ModelData_PMIGraphicalElementComponent.hxx:82
Defines a component represented by triangulation.
Definition: ModelData_PMIGraphicalElementComponent.hxx:109
Defines a leaf node in the scene graph hiearchy.
Definition: ModelData_Part.hxx:35
IndexType NumberOfPolyLines() const
Returns a number of polylines.
Definition: ModelData_PolyLine2dSet.cxx:98
IndexType NumberOfPolyLines() const
Returns a number of polylines.
Definition: ModelData_PolyLineSet.cxx:89
Base class for part, instance and assembly.
Definition: ModelData_SceneGraphElement.hxx:39
ModelData_PMITable PMI() const
Returns a PMI table.
Definition: ModelData_SceneGraphElement.cxx:255
Defines parameters of the STEP_Reader.
Definition: STEP_ReaderParameters.hxx:27
Defines classes, types, and global functions related to CAD Exchanger.
Definition: A3DSTestLib.hxx:22