MeshCore::MeshGeomFacet Class Reference

The MeshGeomFacet class is geometric counterpart to MeshFacet that holds the geometric data points of a triangle. More...

#include <Elements.h>

Public Member Functions

void AdjustCirculationDirection (void)
 Adjusts the facet's orientation to its normal. More...
 
float Area () const
 Calculates the area of a facet. More...
 
void ArrangeNormal (const Base::Vector3f &rclN)
 Arrange the facet normal so the both vectors have the same orientation. More...
 
void CalcNormal (void)
 Calculates the facet normal for storing internally. More...
 
float CenterOfCircumCircle (Base::Vector3f &rclCenter) const
 Calculates the center and radius of the circum circle of the facet. More...
 
float CenterOfInscribedCircle (Base::Vector3f &rclCenter) const
 Calculates the center and radius of the inscribed circle of the facet. More...
 
bool ContainedByOrIntersectBoundingBox (const Base::BoundBox3f &rcBB) const
 Checks if the facet is inside the bounding box or intersects with it. More...
 
float DistancePlaneToPoint (const Base::Vector3f &rclPoint) const
 Calculates the distance of a point to the plane defined by the triangle. More...
 
float DistanceToLineSegment (const Base::Vector3f &rcP1, const Base::Vector3f &rcP2) const
 Calculates the shortest distance from the line segment defined by rcP1 and rcP2 to this facet. More...
 
float DistanceToPoint (const Base::Vector3f &rcPt) const
 Calculates the shortest distance from the point rcPt to the facet. More...
 
float DistanceToPoint (const Base::Vector3f &rclPt, Base::Vector3f &rclNt) const
 Calculates the shortest distance from the point rcPt to the facet. More...
 
void Enlarge (float fDist)
 Enlarges the triangle. More...
 
bool Foraminate (const Base::Vector3f &rclPt, const Base::Vector3f &rclDir, Base::Vector3f &rclRes, float fMaxAngle=F_PI) const
 Calculates the intersection point of the line defined by the base rclPt and the direction rclDir with the facet. More...
 
Base::BoundBox3f GetBoundBox (void) const
 Returns the wrapping bounding box. More...
 
Base::Vector3f GetGravityPoint (void) const
 Calculates the facet's gravity point. More...
 
Base::Vector3f GetNormal (void) const
 Returns the normal of the facet. More...
 
bool IntersectBoundingBox (const Base::BoundBox3f &rclBB) const
 Checks if the facet intersects with the given bounding box. More...
 
bool IntersectPlaneWithLine (const Base::Vector3f &rclBase, const Base::Vector3f &rclNormal, Base::Vector3f &rclRes) const
 Checks if the plane defined by the facet rclFacet intersects with the line defined by the base rclBase and the direction rclNormal and returns the intersection point rclRes if possible. More...
 
bool IntersectWithFacet (const MeshGeomFacet &rclFacet) const
 This method checks if both facets intersect. More...
 
int IntersectWithFacet (const MeshGeomFacet &facet, Base::Vector3f &rclPt0, Base::Vector3f &rclPt1) const
 Intersect the facet with the other facet The result is line given by two points (if intersected). More...
 
bool IntersectWithLine (const Base::Vector3f &rclPt, const Base::Vector3f &rclDir, Base::Vector3f &rclRes) const
 Calculates the intersection point of the line defined by the base rclPt and the direction rclDir with the facet. More...
 
bool IntersectWithPlane (const Base::Vector3f &rclBase, const Base::Vector3f &rclNormal, Base::Vector3f &rclP1, Base::Vector3f &rclP2) const
 Checks if the facet intersects with the plane defined by the base rclBase and the normal rclNormal and returns true if two points are found, false otherwise. More...
 
bool IntersectWithPlane (const Base::Vector3f &rclBase, const Base::Vector3f &rclNormal) const
 Checks if the facet intersects with the plane defined by the base rclBase and the normal rclNormal. More...
 
bool IsDeformed (float fCosOfMinAngle, float fCosOfMaxAngle) const
 Checks whether the triangle is deformed. More...
 
bool IsDegenerated (float epsilon) const
 Checks whether the triangle is degenerated. More...
 
bool IsFlag (MeshFacet::TFlagType tF) const
 Query the flag state of the facet. More...
 
bool IsPointOf (const Base::Vector3f &rclPoint, float fDistance) const
 Checks if the point is part of the facet. More...
 
bool IsPointOf (const Base::Vector3f &rclPoint) const
 Checks if the point is inside or at the border of the facet. More...
 
bool IsPointOfFace (const Base::Vector3f &rclP, float fDistance) const
 Checks whether the given point is inside the facet with tolerance fDistance. More...
 
bool IsPointOfSphere (const Base::Vector3f &rP) const
 The center and radius of the circum circle define a sphere in 3D. More...
 
bool IsPointOfSphere (const MeshGeomFacet &rFacet) const
 This is an overloaded member function, provided for convenience. More...
 
float MaximumAngle () const
 Calculates the maximum angle of a facet. More...
 
unsigned short NearestEdgeToPoint (const Base::Vector3f &rclPt) const
 Returns the edge number of the facet that is nearest to the point rclPt. More...
 
void NearestEdgeToPoint (const Base::Vector3f &rclPt, float &fDistance, unsigned short &side) const
 Returns the edge number side of the facet and the distance to the edge that is nearest to the point rclPt. More...
 
void NormalInvalid (void)
 Checks if the normal is not yet calculated. More...
 
float Perimeter () const
 Calculates the perimeter of the facet. More...
 
void ProjectFacetToPlane (MeshGeomFacet &rclFacet) const
 Calculates the projection of a facet onto the plane defined by the triangle. More...
 
void ProjectPointToPlane (const Base::Vector3f &rclPoint, Base::Vector3f &rclProj) const
 Calculates the projection of a point onto the plane defined by the triangle. More...
 
void ResetFlag (MeshFacet::TFlagType tF)
 Reset flag state. More...
 
void SetFlag (MeshFacet::TFlagType tF)
 Set flag state. More...
 
void SetNormal (const Base::Vector3f &rclNormal)
 Sets the facet's normal. More...
 
void SubSample (float fStep, std::vector< Base::Vector3f > &rclPoints) const
 Subsamples the facet into points with resolution fStep. More...
 
float VolumeOfPrism (const MeshGeomFacet &rclF) const
 Calculates the volume of the prism defined by two facets. More...
 
bool Weights (const Base::Vector3f &rclP, float &w0, float &w1, float &w2) const
 Calculates the weights w1, ..., w3 of the corners to get the point rclP, i.e. More...
 
Construction
 MeshGeomFacet (void)
 default constructor More...
 
 MeshGeomFacet (const Base::Vector3f &v1, const Base::Vector3f &v2, const Base::Vector3f &v3)
 Constructor with the corner points. More...
 
 ~MeshGeomFacet (void)
 Destruction. More...
 

Detailed Description

The MeshGeomFacet class is geometric counterpart to MeshFacet that holds the geometric data points of a triangle.

Constructor & Destructor Documentation

MeshGeomFacet::MeshGeomFacet ( void  )

default constructor

Referenced by Weights().

MeshGeomFacet::MeshGeomFacet ( const Base::Vector3f v1,
const Base::Vector3f v2,
const Base::Vector3f v3 
)

Constructor with the corner points.

References DraftGeomUtils::v1().

MeshCore::MeshGeomFacet::~MeshGeomFacet ( void  )
inline

Destruction.

References Draft::epsilon().

Member Function Documentation

void MeshCore::MeshGeomFacet::AdjustCirculationDirection ( void  )
inline

Adjusts the facet's orientation to its normal.

void MeshCore::MeshGeomFacet::ArrangeNormal ( const Base::Vector3f rclN)
inline

Arrange the facet normal so the both vectors have the same orientation.

void MeshCore::MeshGeomFacet::CalcNormal ( void  )
inline
float MeshGeomFacet::CenterOfCircumCircle ( Base::Vector3f rclCenter) const

Calculates the center and radius of the circum circle of the facet.

References Area().

Referenced by MeshCore::MeshTopoAlgorithm::DelaunayFlip(), and IsPointOfSphere().

float MeshGeomFacet::CenterOfInscribedCircle ( Base::Vector3f rclCenter) const

Calculates the center and radius of the inscribed circle of the facet.

References Area(), and Base::Distance().

bool MeshCore::MeshGeomFacet::ContainedByOrIntersectBoundingBox ( const Base::BoundBox3f rcBB) const
inline

Checks if the facet is inside the bounding box or intersects with it.

References Base::BoundBox3< _Precision >::IsInBox().

float MeshCore::MeshGeomFacet::DistancePlaneToPoint ( const Base::Vector3f rclPoint) const
inline

Calculates the distance of a point to the plane defined by the triangle.

Referenced by IsPointOf().

float MeshGeomFacet::DistanceToLineSegment ( const Base::Vector3f rcP1,
const Base::Vector3f rcP2 
) const

Calculates the shortest distance from the line segment defined by rcP1 and rcP2 to this facet.

Referenced by MeshCore::MeshTrimming::CheckFacets().

float MeshCore::MeshGeomFacet::DistanceToPoint ( const Base::Vector3f rcPt) const
inline

Calculates the shortest distance from the point rcPt to the facet.

Referenced by MeshCore::MeshAlgorithm::NearestPointFromPoint().

float MeshGeomFacet::DistanceToPoint ( const Base::Vector3f rclPt,
Base::Vector3f rclNt 
) const

Calculates the shortest distance from the point rcPt to the facet.

rclNt is the point of the facet with shortest distance.

void MeshGeomFacet::Enlarge ( float  fDist)

Enlarges the triangle.

bool MeshGeomFacet::Foraminate ( const Base::Vector3f rclPt,
const Base::Vector3f rclDir,
Base::Vector3f rclRes,
float  fMaxAngle = F_PI 
) const

Calculates the intersection point of the line defined by the base rclPt and the direction rclDir with the facet.

The intersection must be inside the facet. If there is no intersection false is returned. This does actually the same as IntersectWithLine() with one additionally constraint that the angle between the direction of the line and the normal of the plane must not exceed fMaxAngle.

References GetNormal().

Referenced by MeshPart::CurveProjectorShape::findStartPoint(), MeshPart::CurveProjectorSimple::findStartPoint(), Mesh::MeshPy::foraminate(), MeshCore::MeshAlgorithm::GetFacetsFromToolMesh(), MeshCore::MeshAlgorithm::NearestFacetOnRay(), and MeshCore::MeshAlgorithm::Surround().

Base::BoundBox3f MeshCore::MeshGeomFacet::GetBoundBox ( void  ) const
inline
Base::Vector3f MeshCore::MeshGeomFacet::GetNormal ( void  ) const
inline

Returns the normal of the facet.

Referenced by MeshCore::MeshBuilder::AddFacet(), MeshCore::MeshKernel::AddFacet(), MeshCore::MeshTopoAlgorithm::AdjustEdgesToCurvatureDirection(), MeshGui::ViewProviderMeshTransformDemolding::calcNormalVector(), MeshCore::MeshTrimming::CheckFacets(), MeshCore::FacetCurvature::Compute(), MeshGui::ViewProviderMesh::createToolMesh(), MeshCore::SetOperations::Do(), MeshCore::MeshEvalDentsOnSurface::Evaluate(), MeshCore::MeshEvalFoldsOnBoundary::Evaluate(), MeshCore::MeshAlgorithm::FillupHole(), MeshPart::CurveProjectorShape::findStartPoint(), MeshPart::CurveProjectorSimple::findStartPoint(), Foraminate(), MeshCore::MeshRefPointToFacets::GetNormal(), MeshCore::MeshDistancePlanarSegment::Initialize(), IntersectPlaneWithLine(), IntersectWithFacet(), IsPointOf(), MeshPart::CurveProjectorWithToolMesh::makeToolMesh(), MeshCore::MeshPlaneVisitor::MeshPlaneVisitor(), MeshPart::MeshAlgos::offsetSpecial2(), Mesh::MeshObject::offsetSpecial2(), MeshPart::CurveProjectorShape::projectCurve(), MeshPart::CurveProjectorSimple::projectCurve(), ProjectFacetToPlane(), ProjectPointToPlane(), MeshCore::MeshOutput::SaveAsciiSTL(), MeshCore::MeshOutput::SaveBinarySTL(), MeshCore::MeshOutput::SaveInventor(), MeshGui::MeshSelection::setRemoveComponentOnClick(), MeshCore::MeshTopoAlgorithm::ShouldSwapEdge(), MeshGui::ViewProviderMeshOrientation::showDefects(), MeshGui::ViewProviderMeshDuplicatedFaces::showDefects(), MeshGui::ViewProviderMeshIndices::showDefects(), and MeshGui::ViewProviderMeshFolds::showDefects().

bool MeshGeomFacet::IntersectPlaneWithLine ( const Base::Vector3f rclBase,
const Base::Vector3f rclNormal,
Base::Vector3f rclRes 
) const

Checks if the plane defined by the facet rclFacet intersects with the line defined by the base rclBase and the direction rclNormal and returns the intersection point rclRes if possible.

References GetGravityPoint(), and GetNormal().

Referenced by IntersectWithLine(), and ProjectFacetToPlane().

int MeshGeomFacet::IntersectWithFacet ( const MeshGeomFacet facet,
Base::Vector3f rclPt0,
Base::Vector3f rclPt1 
) const

Intersect the facet with the other facet The result is line given by two points (if intersected).

Fast Triangle-Triangle Intersection Test by Tomas Moeller http://www.acm.org/jgt/papers/Moller97/tritri.html http://www.cs.lth.se/home/Tomas_Akenine_Moller/code/.

Return is the number of intersections points: 0: no intersection, 1: one intersection point (rclPt0), 2: two intersections points (rclPt0, rclPt1)

References GetBoundBox(), GetNormal(), Base::BoundBox3< _Precision >::IsInBox(), and IsPointOf().

bool MeshGeomFacet::IntersectWithLine ( const Base::Vector3f rclPt,
const Base::Vector3f rclDir,
Base::Vector3f rclRes 
) const

Calculates the intersection point of the line defined by the base rclPt and the direction rclDir with the facet.

The intersection must be inside the facet. If there is no intersection false is returned.

References IntersectPlaneWithLine(), and IsPointOfFace().

Referenced by MeshCore::MeshEvalDentsOnSurface::Evaluate(), MeshPart::CurveProjectorWithToolMesh::makeToolMesh(), and MeshPart::CurveProjectorSimple::projectCurve().

bool MeshGeomFacet::IntersectWithPlane ( const Base::Vector3f rclBase,
const Base::Vector3f rclNormal,
Base::Vector3f rclP1,
Base::Vector3f rclP2 
) const

Checks if the facet intersects with the plane defined by the base rclBase and the normal rclNormal and returns true if two points are found, false otherwise.

References DraftGeomUtils::v1().

Referenced by MeshCore::MeshAlgorithm::GetFacetsFromPlane(), and MeshCore::MeshProjection::projectLineOnMesh().

bool MeshCore::MeshGeomFacet::IntersectWithPlane ( const Base::Vector3f rclBase,
const Base::Vector3f rclNormal 
) const
inline

Checks if the facet intersects with the plane defined by the base rclBase and the normal rclNormal.

bool MeshGeomFacet::IsDeformed ( float  fCosOfMinAngle,
float  fCosOfMaxAngle 
) const

Checks whether the triangle is deformed.

A triangle is deformed if the an angle exceeds a given maximum angle or falls below a given minimum angle. For performance reasons the cosine of minimum and maximum angle is expected.

Referenced by MeshCore::MeshEvalDeformedFacets::Evaluate(), MeshCore::MeshEvalDeformedFacets::GetIndices(), and Mesh::MeshObject::refine().

bool MeshGeomFacet::IsDegenerated ( float  epsilon) const
bool MeshCore::MeshGeomFacet::IsFlag ( MeshFacet::TFlagType  tF) const
inline

Query the flag state of the facet.

Referenced by MeshPart::MeshAlgos::offsetSpecial2(), and Mesh::MeshObject::offsetSpecial2().

bool MeshGeomFacet::IsPointOf ( const Base::Vector3f rclPoint,
float  fDistance 
) const

Checks if the point is part of the facet.

A point is regarded as part of a facet if the distance is lower fDistance and the projected point in the facet normal direction is inside the triangle.

References DistancePlaneToPoint(), and GetNormal().

Referenced by IntersectWithFacet().

bool MeshGeomFacet::IsPointOf ( const Base::Vector3f rclPoint) const

Checks if the point is inside or at the border of the facet.

The point must already exactly lie on the plane defined by the facet, which is not checked. This method is very efficient.

bool MeshGeomFacet::IsPointOfFace ( const Base::Vector3f rclP,
float  fDistance 
) const

Checks whether the given point is inside the facet with tolerance fDistance.

This method does actually the same as IsPointOf() but this implementation is done more effective through comparison of normals.

Referenced by MeshCore::MeshAlgorithm::FirstFacetToVertex(), MeshCore::MeshAlgorithm::GetFacetsFromToolMesh(), IntersectWithLine(), and MeshCore::MeshAlgorithm::Surround().

bool MeshGeomFacet::IsPointOfSphere ( const Base::Vector3f rP) const

The center and radius of the circum circle define a sphere in 3D.

If the point rP is part of this sphere true is returned, otherwise false.

References CenterOfCircumCircle(), DraftVecUtils::dist(), and Base::DistanceP2().

bool MeshGeomFacet::IsPointOfSphere ( const MeshGeomFacet rFacet) const

This is an overloaded member function, provided for convenience.

It behaves essentially like the above function. If one of the facet's points is inside the sphere true is returned, otherwise false.

References CenterOfCircumCircle(), DraftVecUtils::dist(), and Base::DistanceP2().

float MeshGeomFacet::MaximumAngle ( ) const

Calculates the maximum angle of a facet.

Referenced by MeshCore::MeshTopoAlgorithm::ShouldSwapEdge(), and MeshCore::QuasiDelaunayTriangulator::Triangulate().

unsigned short MeshGeomFacet::NearestEdgeToPoint ( const Base::Vector3f rclPt) const

Returns the edge number of the facet that is nearest to the point rclPt.

References Base::Distance().

Referenced by MeshCore::MeshAlgorithm::FirstFacetToVertex().

void MeshGeomFacet::NearestEdgeToPoint ( const Base::Vector3f rclPt,
float &  fDistance,
unsigned short &  side 
) const

Returns the edge number side of the facet and the distance to the edge that is nearest to the point rclPt.

References Base::Distance().

void MeshCore::MeshGeomFacet::NormalInvalid ( void  )
inline

Checks if the normal is not yet calculated.

float MeshCore::MeshGeomFacet::Perimeter ( ) const
inline

Calculates the perimeter of the facet.

References Base::Distance().

void MeshGeomFacet::ProjectFacetToPlane ( MeshGeomFacet rclFacet) const

Calculates the projection of a facet onto the plane defined by the triangle.

References GetNormal(), and IntersectPlaneWithLine().

void MeshGeomFacet::ProjectPointToPlane ( const Base::Vector3f rclPoint,
Base::Vector3f rclProj 
) const

Calculates the projection of a point onto the plane defined by the triangle.

References GetNormal().

Referenced by MeshCore::MeshAlgorithm::FirstFacetToVertex().

void MeshCore::MeshGeomFacet::ResetFlag ( MeshFacet::TFlagType  tF)
inline

Reset flag state.

void MeshCore::MeshGeomFacet::SetFlag ( MeshFacet::TFlagType  tF)
inline

Set flag state.

Referenced by MeshCore::SetOperations::Do().

void MeshCore::MeshGeomFacet::SetNormal ( const Base::Vector3f rclNormal)
inline

Sets the facet's normal.

Referenced by MeshCore::MeshInput::LoadAsciiSTL(), and MeshCore::MeshInput::LoadInventor().

void MeshGeomFacet::SubSample ( float  fStep,
std::vector< Base::Vector3f > &  rclPoints 
) const

Subsamples the facet into points with resolution fStep.

Referenced by MeshCore::MeshSearchNeighbours::SampleAllFacets(), and MeshCore::MeshAlgorithm::SubSampleByDist().

float MeshGeomFacet::VolumeOfPrism ( const MeshGeomFacet rclF) const

Calculates the volume of the prism defined by two facets.

Note
The two facets must not intersect.
bool MeshGeomFacet::Weights ( const Base::Vector3f rclP,
float &  w0,
float &  w1,
float &  w2 
) const

Calculates the weights w1, ..., w3 of the corners to get the point rclP, i.e.

rclP = w0*v0 + w1*v1 + w2*v2 (v0-v2 are the corners corners). If w0+w1+w2==1.0 then the point rclP lies on the plane that is spanned by the facet, otherwise the point doesn't lie on the plane. If the sum of wi is 1 and if each wi is between [0,1] than the point lies inside the facet or on the border, respectively.

If the point doesn't lie on the plane false is returned, true otherwise.

References Area(), and MeshGeomFacet().


The documentation for this class was generated from the following files:
  • src/src/Mod/Mesh/App/Core/Elements.h
  • src/src/Mod/Mesh/App/Core/Elements.cpp