Hide menu
Loading...
Searching...
No Matches
meshing/mesh_generation/Program.cs

Refer to the Mesh Generation 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 System;
using cadex.Collections;
namespace mesh_generation
{
internal class Program
{
class FirstFaceGetter : ModelElementVoidVisitor
{
public override void Apply(Part thePart)
{
if (myFace == null)
{
ExploreBRep(thePart.Bodies());
}
}
public Face FirstFace()
{
return myFace;
}
private void ExploreBRep(BodyList theBodies)
{
foreach (var aBody in theBodies)
{
ShapeIterator aFaceIt = new ShapeIterator(aBody, ShapeType.Face);
if (aFaceIt.HasNext())
{
var aFirstShape = aFaceIt.Next();
var aFirstFace = Face.Cast(aFirstShape);
myFace = aFirstFace;
break;
}
}
}
Face myFace;
};
static void PrintFaceTriangulationInfo(Face theFace)
{
IndexedTriangleSet anITS = theFace.Triangulation();
Console.WriteLine("Face triangulation contains " + anITS.NumberOfTriangles() + " triangles.");
uint aNumberOfTrianglesToPrint = Math.Min(4, anITS.NumberOfTriangles());
for (uint i = 0; i < aNumberOfTrianglesToPrint; ++i)
{
Console.WriteLine("Triangle index " + i + " with vertices: ");
for (uint j = 0; j < 3; ++j)
{
var aVertexIndex = anITS.TriangleVertexIndex(i, j);
Console.Write(" Vertex index " + aVertexIndex + " with coords (");
var aPoint = anITS.TriangleVertex(i, j);
Console.Write("X: " + aPoint.X() + ", ");
Console.Write("Y: " + aPoint.Y() + ", ");
Console.WriteLine("Z: " + aPoint.Z() + ")");
}
}
}
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;
}
// Get the input
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");
return 1;
}
UTF16String aSource = new UTF16String(args[0]);
Model aModel = new Model();
ModelReader aReader = new ModelReader();
if (!aReader.Read(aSource, aModel))
{
Console.WriteLine("Failed to read the file " + aSource);
return 1;
}
// Set up mesher and parameters:
aParam.SetAngularDeflection(Math.PI * 10 / 180);
aParam.SetChordalDeflection(0.003);
MeshGenerator aMesher = new MeshGenerator(aParam);
aMesher.Generate(aModel);
FirstFaceGetter aVisitor = new FirstFaceGetter();
aModel.Accept(aVisitor);
Face aFace = aVisitor.FirstFace();
PrintFaceTriangulationInfo(aFace);
return 0;
}
}
}
Generates a polygonal mesh for a B-Rep body.
Definition MeshGenerator.hxx:39
Defines parameters used by the mesh generator.
Definition MeshGeneratorParameters.hxx:29
void SetChordalDeflection(double theValue)
Sets chordal deflection.
Definition MeshGeneratorParameters.cxx:195
void SetAngularDeflection(double theValue)
Sets angular deflection.
Definition MeshGeneratorParameters.cxx:293
Defines a topological face.
Definition Face.hxx:33
static const Face & Cast(const Shape &theShape)
Cast operator.
Definition Face.cxx:355
IndexedTriangleSet Triangulation() const
Returns triangulation of the face.
Definition Face.cxx:343
Defines a polygonal shape consisting of triangles.
Definition IndexedTriangleSet.hxx:33
size_t NumberOfTriangles() const
Returns a number of triangles.
Definition IndexedTriangleSet.cxx:326
const VertexType & TriangleVertex(size_t theTriangleIndex, size_t theVertexSlot) const
Returns a vertex of a triangle.
Definition IndexedTriangleSet.cxx:241
int TriangleVertexIndex(size_t theTriangleIndex, size_t theVertexSlot) const
Returns a vertex index in a triangle.
Definition IndexedTriangleSet.cxx:254
Element visitor with empty implementation.
Definition ModelElementVisitor.hxx:64
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
bool Read(const UTF16String &theFilePath, ModelData::Model &theModel)
Reads the file at the specified path into the specified model.
Definition ModelReader.cxx:276
Defines a leaf node in the scene graph hiearchy.
Definition Part.hxx:34
Iterates over subshapes in a shape.
Definition ShapeIterator.hxx:32
Defines a Unicode (UTF-16) string wrapping a standard string.
Definition UTF16String.hxx:30
Contains classes, and functions related to model processing.
Defines classes, types, enums, and functions related to topological entities and scene graph elements...
ShapeType
Defines shape type.
Definition ShapeType.hxx:27
Contains classes, namespaces, enums, types, and global functions related to Manufacturing Toolkit.
Definition LicenseManager_LicenseError.hxx:30