Hide menu
Loading...
Searching...
No Matches
exploring/pmi/Program.cs

Refer to the PMI Exploration Example.

// ****************************************************************************
// $Id$
//
// Copyright (C) 2008-2014, Roman Lygin. All rights reserved.
// Copyright (C) 2014-2025, CADEX. All rights reserved.
//
// This file is part of the Manufacturing Toolkit software.
//
// You may use this file under the terms of the BSD license as follows:
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
// * Redistributions of source code must retain the above copyright notice,
// this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.
//
// ****************************************************************************
using cadex;
using cadex.PMI;
using System;
namespace pmi
{
class Program
{
static int Main(string[] args)
{
string aKey = MTKLicenseKey.Value();
// Activate the license (aKey must be defined in mtk_license.cs)
if (!LicenseManager.Activate(aKey))
{
Console.WriteLine("Failed to activate Manufacturing Toolkit 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 file to be read");
Console.WriteLine($"");
return 1;
}
string aSource = args[0];
var aModel = new Model();
var aReader = new ModelReader();
var aParams = new ModelReaderParameters();
aParams.SetReadPMI(true);
aReader.SetParameters(aParams);
// Reading the file
if (!aReader.Read(new UTF16String(aSource), aModel))
{
Console.WriteLine($"Failed to read the file {aSource}");
return 1;
}
Console.WriteLine($"Model: {aModel.Name()}\n");
// Create a PMI visitor
SceneGraphVisitor aVisitor = new SceneGraphVisitor();
aModel.Accept(aVisitor);
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;
}
// Emulate tabulation like tree.
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;
}
class SceneGraphVisitor : ModelElementVisitor
{
public override void Apply(Part thePart)
{
PrintName("Part", thePart.Name());
ExplorePMI(thePart);
}
public override bool VisitEnter(Instance theInstance)
{
TabulatedOutput.IncreaseIndent();
PrintName("Instance", theInstance.Name());
ExplorePMI(theInstance);
return true;
}
public override bool VisitEnter(Assembly theAssembly)
{
TabulatedOutput.IncreaseIndent();
PrintName("Assembly", theAssembly.Name());
ExplorePMI(theAssembly);
return true;
}
public override void VisitLeave(Instance theInstance)
{
TabulatedOutput.DecreaseIndent();
}
public override void VisitLeave(Assembly theAssembly)
{
TabulatedOutput.DecreaseIndent();
}
private void ExplorePMI(ModelElement theSGE)
{
var aPMIData = theSGE.PMI();
if (aPMIData != null)
{
TabulatedOutput.WriteLine("PMI Data:");
TabulatedOutput.IncreaseIndent();
foreach (var anElement in aPMIData.Elements())
{
TabulatedOutput.WriteLine("PMI Data: " + anElement.Name());
TabulatedOutput.IncreaseIndent();
SemanticRepresentation aSemanticRepresentation = anElement.SemanticRepresentation();
if (aSemanticRepresentation != null)
{
TabulatedOutput.WriteLine("Semantic Representation:");
TabulatedOutput.IncreaseIndent();
PMISemanticVisitor aVisitor = new PMISemanticVisitor();
aSemanticRepresentation.Accept(aVisitor);
TabulatedOutput.DecreaseIndent();
}
GraphicalRepresentation aGraphicalRepresentation = anElement.GraphicalRepresentation();
if (aGraphicalRepresentation != null)
{
TabulatedOutput.WriteLine("Graphical Representation:");
TabulatedOutput.IncreaseIndent();
PMIGraphicalVisitor aVisitor = new PMIGraphicalVisitor();
aGraphicalRepresentation.Accept(aVisitor);
TabulatedOutput.DecreaseIndent();
}
TabulatedOutput.DecreaseIndent();
}
TabulatedOutput.DecreaseIndent();
}
}
private void PrintName(string theSGElement, UTF16String theName)
{
if (!theName.IsEmpty())
{
TabulatedOutput.WriteLine(theSGElement + ": " + theName);
}
else
{
TabulatedOutput.WriteLine(theSGElement + ": <noname>");
}
}
}
class PMISemanticVisitor : SemanticComponentVisitor
{
public override void Apply(DatumComponent theComponent)
{
TabulatedOutput.WriteLine("Datum");
TabulatedOutput.IncreaseIndent();
TabulatedOutput.WriteLine("Label: " + theComponent.Label());
printAttributes(theComponent);
TabulatedOutput.DecreaseIndent();
}
public override void Apply(DimensionComponent theComponent)
{
TabulatedOutput.WriteLine("Dimension");
TabulatedOutput.IncreaseIndent();
TabulatedOutput.WriteLine("Nominal Value: " + theComponent.NominalValue());
TabulatedOutput.WriteLine("Type of dimension: " + (int)theComponent.TypeOfDimension());
printAttributes(theComponent);
TabulatedOutput.DecreaseIndent();
}
public override void Apply(GeometricToleranceComponent theComponent)
{
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();
}
public override void Apply(SurfaceFinishComponent theComponent)
{
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());
TabulatedOutput.WriteLine("Manufacturing method: " + theComponent.ManufacturingMethod());
printAttributes(theComponent);
TabulatedOutput.DecreaseIndent();
}
void printAttributes(SemanticComponent theComponent)
{
if (theComponent.HasAttributes())
{
PMISemanticAttributeVisitor aVisitor = new PMISemanticAttributeVisitor();
theComponent.Accept(aVisitor);
}
}
}
class PMISemanticAttributeVisitor : SemanticAttributeVisitor
{
public override void Apply(ModifierAttribute theAttribute)
{
TabulatedOutput.WriteLine("Modifier: " + theAttribute.Modifier());
}
public override void Apply(ModifierWithValueAttribute theAttribute)
{
TabulatedOutput.WriteLine("ModifierWithValue: modifier=" + theAttribute.Modifier() + ", value=" + theAttribute.Value());
}
public override void Apply(QualifierAttribute theAttribute)
{
TabulatedOutput.WriteLine("Qualifier: " + theAttribute.Qualifier());
}
public override void Apply(PlusMinusBoundsAttribute theAttribute)
{
TabulatedOutput.WriteLine("PlusMinusBounds: (" + theAttribute.LowerBound() + ", " + theAttribute.UpperBound() + ")");
}
public override void Apply(RangeAttribute theAttribute)
{
TabulatedOutput.WriteLine("Range: [" + theAttribute.LowerLimit() + ", " + theAttribute.UpperLimit() + "]");
}
public override void Apply(LimitsAndFitsAttribute theAttribute)
{
TabulatedOutput.WriteLine("LimitsAndFits: value=" + theAttribute.Value() + ", type=" + theAttribute.Type());
}
public override void Apply(DatumTargetAttribute theAttribute)
{
TabulatedOutput.WriteLine("DatumTarget: index=" + theAttribute.Index() + ", description=" + theAttribute.Description());
}
public override void Apply(DatumRefAttribute theAttribute)
{
TabulatedOutput.WriteLine("DatumRef: precedence=" + theAttribute.Precedence() + ", targetLabel=" + theAttribute.TargetLabel());
}
public override void Apply(DatumRefCompartmentAttribute theAttribute)
{
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();
}
public override void Apply(MaximumValueAttribute theAttribute)
{
TabulatedOutput.WriteLine("MaximumValue: " + theAttribute.MaxValue());
}
public override void Apply(DisplacementAttribute theAttribute)
{
TabulatedOutput.WriteLine("Displacement: " + theAttribute.Displacement());
}
public override void Apply(LengthUnitAttribute theAttribute)
{
TabulatedOutput.WriteLine("LengthUnit: " + theAttribute.Unit());
}
public override void Apply(AngleUnitAttribute theAttribute)
{
TabulatedOutput.WriteLine("AngleUnit: " + theAttribute.Unit());
}
public override void Apply(MachiningAllowanceAttribute theAttribute)
{
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();
}
public override void Apply(SurfaceTextureRequirementAttribute theAttribute)
{
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();
}
}
class PMIGraphicalVisitor : GraphicalComponentVisitor
{
public override void Apply(OutlinedComponent theComponent)
{
TabulatedOutput.WriteLine("Outline");
TabulatedOutput.IncreaseIndent();
PMIOutlineVisitor aVisitor = new PMIOutlineVisitor();
theComponent.Outline().Accept(aVisitor);
TabulatedOutput.DecreaseIndent();
}
public override void Apply(TextComponent theComponent)
{
TabulatedOutput.WriteLine("Text [" + theComponent.Text() + "]");
}
public override void Apply(TriangulatedComponent theComponent)
{
TabulatedOutput.WriteLine("Triangulation [" + theComponent.TriangleSet().NumberOfTriangles() + " triangles]");
}
}
class PMIOutlineVisitor : OutlineVisitor
{
public override void Apply(PolyOutline theOutline)
{
TabulatedOutput.WriteLine("PolyLine set [" + theOutline.LineSet().NumberOfPolylines() + " polylines]");
}
public override void Apply(Poly2dOutline theOutline)
{
TabulatedOutput.WriteLine("PolyLine2d set [" + theOutline.LineSet().NumberOfPolylines() + " polylines]");
}
public override void Apply(CurveOutline theOutline)
{
TabulatedOutput.WriteLine("Curve set [" + theOutline.NumberOfCurves() + " curves]");
}
public override void Apply(Curve2dOutline theOutline)
{
TabulatedOutput.WriteLine("Curve2d set [" + theOutline.NumberOfCurves() + " curves]");
}
public override bool VisitEnter(CompositeOutline theOutline)
{
TabulatedOutput.WriteLine("Outline set:");
TabulatedOutput.IncreaseIndent();
return true;
}
public override void VisitLeave(CompositeOutline theOutline)
{
TabulatedOutput.DecreaseIndent();
}
}
}
Activates the license key.
Definition LicenseManager.cs:48
Defines a group of model elements.
Definition Assembly.cs:19
Defines an occurrence of an assembly or a part in a scene graph.
Definition Instance.cs:20
Base class for part, instance and assembly.
Definition ModelElement.cs:17
cadex.PMI.Data PMI()
Returns the object PMI.
Definition ModelElement.cs:118
cadex.UTF16String Name()
Returns a name.
Definition ModelElement.cs:67
Provides MTK data model.
Definition Model.cs:30
Reads supported formats, see Import section.
Definition ModelReader.cs:17
Defines parameters of the ModelReader.
Definition ModelReaderParameters.cs:19
Defines a leaf node in the scene graph hierarchy.
Definition Part.cs:23
Defines an angle unit.
Definition AngleUnitAttribute.cs:18
cadex.ModelData.AngleUnit Unit()
Returns the unit.
Definition AngleUnitAttribute.cs:69
Defines a collection of outlines.
Definition CompositeOutline.cs:19
Defines an outline consisting of 2D curves.
Definition Curve2dOutline.cs:19
uint NumberOfCurves()
Returns the number of added curves.
Definition Curve2dOutline.cs:80
Defines an outline consisting of curves.
Definition CurveOutline.cs:19
uint NumberOfCurves()
Returns the number of added curves.
Definition CurveOutline.cs:80
Defines a component represented by a datum, datum feature symbol or datum target.
Definition DatumComponent.cs:21
cadex.UTF16String Label()
Returns the label of the datum.
Definition DatumComponent.cs:74
Defines a datum reference.
Definition DatumRefAttribute.cs:21
cadex.UTF16String TargetLabel()
Returns the target label.
Definition DatumRefAttribute.cs:86
uint Precedence()
Returns the precedence value.
Definition DatumRefAttribute.cs:74
Defines a compartment of datum references or compartments.
Definition DatumRefCompartmentAttribute.cs:22
cadex.PMI.SemanticAttribute Reference(uint theIndex)
Returns the specific datum compartment reference.
Definition DatumRefCompartmentAttribute.cs:84
uint NumberOfModifierAttributes()
Returns the number of the modifier attributes.
Definition DatumRefCompartmentAttribute.cs:99
cadex.PMI.ModifierAttribute ModifierAttribute(uint theIndex)
Returns the specific modifier attribute.
Definition DatumRefCompartmentAttribute.cs:105
uint NumberOfReferences()
Returns the number of the datum compartment references.
Definition DatumRefCompartmentAttribute.cs:78
Defines a datum target data.
Definition DatumTargetAttribute.cs:22
uint Index()
Returns the index.
Definition DatumTargetAttribute.cs:75
cadex.UTF16String Description()
Returns the description.
Definition DatumTargetAttribute.cs:86
Defines a component represented by a dimensional tolerance.
Definition DimensionComponent.cs:24
cadex.PMI.DimensionComponent.DimensionType TypeOfDimension()
Returns the type of the dimension.
Definition DimensionComponent.cs:90
double NominalValue()
Returns the nominal value of the dimension.
Definition DimensionComponent.cs:79
Defines a displacement value for an unequally disposed geometric tolerance.
Definition DisplacementAttribute.cs:19
double Displacement()
Returns the displacement value.
Definition DisplacementAttribute.cs:71
Defines a component represented by a geometric tolerance.
Definition GeometricToleranceComponent.cs:24
cadex.PMI.GeometricToleranceComponent.ToleranceType TypeOfTolerance()
Returns the type of the tolerance.
Definition GeometricToleranceComponent.cs:101
cadex.PMI.GeometricToleranceComponent.ToleranceZoneFormType ToleranceZoneForm()
Returns the tolerance zone form.
Definition GeometricToleranceComponent.cs:91
double Magnitude()
Returns the magnitude value of the tolerance.
Definition GeometricToleranceComponent.cs:80
Defines a visitor for components.
Definition GraphicalComponentVisitor.cs:17
Defines a length unit.
Definition LengthUnitAttribute.cs:19
cadex.ModelData.LengthUnit Unit()
Returns the unit.
Definition LengthUnitAttribute.cs:70
Defines a kind of a tolerance class dimension.
Definition LimitsAndFitsAttribute.cs:21
cadex.UTF16String Value()
Returns the value.
Definition LimitsAndFitsAttribute.cs:87
cadex.UTF16String Type()
Returns the type.
Definition LimitsAndFitsAttribute.cs:74
Defines a machining allowance and its bound (deviations).
Definition MachiningAllowanceAttribute.cs:19
double UpperBound()
Returns the upper bound.
Definition MachiningAllowanceAttribute.cs:87
double Value()
Returns the machining allowance value.
Definition MachiningAllowanceAttribute.cs:75
double LowerBound()
Returns the lower bound.
Definition MachiningAllowanceAttribute.cs:99
Defines a maximum value.
Definition MaximumValueAttribute.cs:19
double MaxValue()
Returns the maximum value.
Definition MaximumValueAttribute.cs:71
Defines a type of the modification.
Definition ModifierAttribute.cs:22
Defines the type of the modification with additional value.
Definition ModifierWithValueAttribute.cs:21
double Value()
Returns the value.
Definition ModifierWithValueAttribute.cs:73
Defines the visitor of the outline elements.
Definition OutlineVisitor.cs:17
Defines a component represented by an outline.
Definition OutlinedComponent.cs:23
cadex.PMI.Outline Outline()
Returns the outline.
Definition OutlinedComponent.cs:74
Defines plus and minus bounds (deviations) of a tolerance.
Definition PlusMinusBoundsAttribute.cs:18
double UpperBound()
Returns the upper bound.
Definition PlusMinusBoundsAttribute.cs:70
double LowerBound()
Returns the lower bound.
Definition PlusMinusBoundsAttribute.cs:82
Defines an outline consisting of 2D polylines.
Definition Poly2dOutline.cs:19
cadex.ModelData.Polyline2dSet LineSet()
Returns the line set.
Definition Poly2dOutline.cs:70
Defines an outline consisting of polylines.
Definition PolyOutline.cs:19
cadex.ModelData.PolylineSet LineSet()
Returns the line set.
Definition PolyOutline.cs:70
Defines the type of a qualifier.
Definition QualifierAttribute.cs:21
cadex.UTF16String Qualifier()
Retruns the qualifier.
Definition QualifierAttribute.cs:74
Defines the range of a value.
Definition RangeAttribute.cs:18
double LowerLimit()
Returns the lower limit.
Definition RangeAttribute.cs:82
double UpperLimit()
Returns the upper limit.
Definition RangeAttribute.cs:70
Defines a visitor for attributes.
Definition SemanticAttributeVisitor.cs:17
The base class for various component types.
Definition SemanticComponent.cs:19
void Accept(cadex.PMI.SemanticAttributeVisitor theVisitor)
Accepts the visitor.
Definition SemanticComponent.cs:90
bool HasAttributes()
Returns true if semantic attributes were added and false otherwise.
Definition SemanticComponent.cs:73
Defines a visitor for components.
Definition SemanticComponentVisitor.cs:17
Defines a PMI semantic representation.
Definition SemanticRepresentation.cs:28
void Accept(cadex.PMI.SemanticComponentVisitor theVisitor)
Accepts the visitor.
Definition SemanticRepresentation.cs:103
Defines a component represented by a suface texture.
Definition SurfaceFinishComponent.cs:27
cadex.PMI.SurfaceFinishComponent.LayDirectionType LayDirection()
Returns the type of the lay direction.
Definition SurfaceFinishComponent.cs:94
cadex.PMI.SurfaceFinishComponent.MaterialRemovalType MaterialRemoval()
Returns the type of the material removal.
Definition SurfaceFinishComponent.cs:83
bool IsAllAround()
Returns true if the same surface texture is required on all surfaces around a workpiece outline and f...
Definition SurfaceFinishComponent.cs:105
cadex.UTF16String ManufacturingMethod()
Returns the manufacturing method.
Definition SurfaceFinishComponent.cs:117
Defines a surface texture requirement.
Definition SurfaceTextureRequirementAttribute.cs:42
double LimitValue()
Returns the limit value.
Definition SurfaceTextureRequirementAttribute.cs:189
double LongWaveFilter()
Returns the long wave filter value.
Definition SurfaceTextureRequirementAttribute.cs:143
cadex.PMI.SurfaceTextureRequirementAttribute.SurfaceParameterType SurfaceParameter()
Returns the surface parameter.
Definition SurfaceTextureRequirementAttribute.cs:154
double ShortWaveFilter()
Returns short wave filter value.
Definition SurfaceTextureRequirementAttribute.cs:131
double EvaluationLength()
Returns the evaluation length value.
Definition SurfaceTextureRequirementAttribute.cs:166
cadex.UTF16String FilterName()
Returns filter name.
Definition SurfaceTextureRequirementAttribute.cs:118
cadex.PMI.SurfaceTextureRequirementAttribute.ComparisonRuleType ComparisonRule()
Returns the comparison rule.
Definition SurfaceTextureRequirementAttribute.cs:178
uint Precedence()
Returns the precedence value.
Definition SurfaceTextureRequirementAttribute.cs:94
cadex.PMI.SurfaceTextureRequirementAttribute.SpecificationLimitType SpecificationLimit()
Returns the specification limit.
Definition SurfaceTextureRequirementAttribute.cs:105
Defines a component represented by text.
Definition TextComponent.cs:25
cadex.UTF16String Text()
Returns the text component.
Definition TextComponent.cs:78
Defines a component represented by a triangulation.
Definition TriangulatedComponent.cs:24
cadex.ModelData.IndexedTriangleSet TriangleSet()
Returns the triangle set.
Definition TriangulatedComponent.cs:75
Defines a Unicode (UTF-16) string wrapping a standard string.
Definition UTF16String.cs:17
bool IsEmpty()
Returns true if the string is empty.
Definition UTF16String.cs:96
Defines classes, types, enums, and functions related to topological entities and scene graph elements...
Definition AngleUnit.cs:12
Contains classes, types, enums, and functions related to PMI entities.
Definition AngleUnitAttribute.cs:12
Contains classes, namespaces, enums, types, and global functions related to Manufacturing Toolkit.
Definition BaseObject.cs:12