FreeCAD C++
|
#include <Mod/Mesh/App/Core/Elements.h>
The MeshGeomFacet class is geometric counterpart to MeshFacet that holds the geometric data points of a triangle.
Public Member Functions | |
bool | IsPointOf (const Base::Vector3f &rclPoint, float fDistance) const |
bool | IsPointOf (const Base::Vector3f &rclPoint) const |
bool | IsPointOfFace (const Base::Vector3f &rclP, float fDistance) const |
bool | Weights (const Base::Vector3f &rclP, float &w0, float &w1, float &w2) const |
float | DistancePlaneToPoint (const Base::Vector3f &rclPoint) const |
void | ProjectPointToPlane (const Base::Vector3f &rclPoint, Base::Vector3f &rclProj) const |
void | ProjectFacetToPlane (MeshGeomFacet &rclFacet) const |
bool | IsDegenerated (float epsilon) const |
bool | IsDeformed (float fCosOfMinAngle, float fCosOfMaxAngle) const |
void | Enlarge (float fDist) |
void | CalcNormal (void) |
void | ArrangeNormal (const Base::Vector3f &rclN) |
void | AdjustCirculationDirection (void) |
void | NormalInvalid (void) |
bool | IsFlag (MeshFacet::TFlagType tF) const |
void | SetFlag (MeshFacet::TFlagType tF) |
void | ResetFlag (MeshFacet::TFlagType tF) |
Base::Vector3f | GetGravityPoint (void) const |
Base::Vector3f | GetNormal (void) const |
void | SetNormal (const Base::Vector3f &rclNormal) |
Base::BoundBox3f | GetBoundBox (void) const |
float | Perimeter () const |
float | Area () const |
float | MaximumAngle () const |
float | MinimumAngle () const |
bool | ContainedByOrIntersectBoundingBox (const Base::BoundBox3f &rcBB) const |
bool | IntersectBoundingBox (const Base::BoundBox3f &rclBB) const |
bool | IntersectWithFacet (const MeshGeomFacet &rclFacet) const |
int | IntersectWithFacet (const MeshGeomFacet &facet, Base::Vector3f &rclPt0, Base::Vector3f &rclPt1) const |
float | DistanceToLineSegment (const Base::Vector3f &rcP1, const Base::Vector3f &rcP2) const |
float | DistanceToPoint (const Base::Vector3f &rcPt) const |
float | DistanceToPoint (const Base::Vector3f &rclPt, Base::Vector3f &rclNt) const |
bool | IntersectWithLine (const Base::Vector3f &rclPt, const Base::Vector3f &rclDir, Base::Vector3f &rclRes) const |
bool | Foraminate (const Base::Vector3f &rclPt, const Base::Vector3f &rclDir, Base::Vector3f &rclRes, float fMaxAngle=Mathf::PI) const |
bool | IntersectWithPlane (const Base::Vector3f &rclBase, const Base::Vector3f &rclNormal, Base::Vector3f &rclP1, Base::Vector3f &rclP2) const |
bool | IntersectWithPlane (const Base::Vector3f &rclBase, const Base::Vector3f &rclNormal) const |
bool | IntersectPlaneWithLine (const Base::Vector3f &rclBase, const Base::Vector3f &rclNormal, Base::Vector3f &rclRes) const |
float | VolumeOfPrism (const MeshGeomFacet &rclF) const |
void | SubSample (float fStep, std::vector< Base::Vector3f > &rclPoints) const |
float | CenterOfInscribedCircle (Base::Vector3f &rclCenter) const |
float | CenterOfCircumCircle (Base::Vector3f &rclCenter) const |
unsigned short | NearestEdgeToPoint (const Base::Vector3f &rclPt) const |
void | NearestEdgeToPoint (const Base::Vector3f &rclPt, float &fDistance, unsigned short &side) const |
bool | IsPointOfSphere (const Base::Vector3f &rP) const |
bool | IsPointOfSphere (const MeshGeomFacet &rFacet) const |
float | AspectRatio () const |
float | AspectRatio2 () const |
float | Roundness () const |
Construction | |
MeshGeomFacet (void) | |
default constructor | |
MeshGeomFacet (const Base::Vector3f &v1, const Base::Vector3f &v2, const Base::Vector3f &v3) | |
Constructor with the corner points. | |
~MeshGeomFacet (void) | |
Destruction. | |
Public Attributes | |
Base::Vector3f | _aclPoints [3] |
unsigned char | _ucFlag |
unsigned long | _ulProp |
Protected Attributes | |
Base::Vector3f | _clNormal |
bool | _bNormalCalculated |
void MeshCore::MeshGeomFacet::AdjustCirculationDirection | ( | void | ) |
Adjusts the facet's orientation to its normal.
float MeshCore::MeshGeomFacet::Area | ( | ) | const |
Calculates the area of a facet.
void MeshCore::MeshGeomFacet::ArrangeNormal | ( | const Base::Vector3f & | rclN | ) |
Arrange the facet normal so the both vectors have the same orientation.
float MeshCore::MeshGeomFacet::AspectRatio | ( | ) | const |
The aspect ratio is the longest edge length divided by its height.
float MeshCore::MeshGeomFacet::AspectRatio2 | ( | ) | const |
The alternative aspect ration is the ratio of the radius of the circum-circle and twice the radius of the in-circle.
void MeshCore::MeshGeomFacet::CalcNormal | ( | void | ) |
Calculates the facet normal for storing internally.
float MeshCore::MeshGeomFacet::CenterOfCircumCircle | ( | Base::Vector3f & | rclCenter | ) | const |
Calculates the center and radius of the circum circle of the facet.
float MeshCore::MeshGeomFacet::CenterOfInscribedCircle | ( | Base::Vector3f & | rclCenter | ) | const |
Calculates the center and radius of the inscribed circle of the facet.
bool MeshCore::MeshGeomFacet::ContainedByOrIntersectBoundingBox | ( | const Base::BoundBox3f & | rcBB | ) | const |
Checks if the facet is inside the bounding box or intersects with it.
float MeshCore::MeshGeomFacet::DistancePlaneToPoint | ( | const Base::Vector3f & | rclPoint | ) | const |
Calculates the distance of a point to the plane defined by the triangle.
float MeshCore::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.
float MeshCore::MeshGeomFacet::DistanceToPoint | ( | const Base::Vector3f & | rcPt | ) | const |
Calculates the shortest distance from the point rcPt to the facet.
float MeshCore::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 MeshCore::MeshGeomFacet::Enlarge | ( | float | fDist | ) |
Enlarges the triangle.
bool MeshCore::MeshGeomFacet::Foraminate | ( | const Base::Vector3f & | rclPt, |
const Base::Vector3f & | rclDir, | ||
Base::Vector3f & | rclRes, | ||
float | fMaxAngle = Mathf::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.
Base::BoundBox3f MeshCore::MeshGeomFacet::GetBoundBox | ( | void | ) | const |
Returns the wrapping bounding box.
Base::Vector3f MeshCore::MeshGeomFacet::GetGravityPoint | ( | void | ) | const |
Calculates the facet's gravity point.
Base::Vector3f MeshCore::MeshGeomFacet::GetNormal | ( | void | ) | const |
Returns the normal of the facet.
bool MeshCore::MeshGeomFacet::IntersectBoundingBox | ( | const Base::BoundBox3f & | rclBB | ) | const |
Checks if the facet intersects with the given bounding box.
bool MeshCore::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.
bool MeshCore::MeshGeomFacet::IntersectWithFacet | ( | const MeshGeomFacet & | rclFacet | ) | const |
This method checks if both facets intersect.
int MeshCore::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). Return is the number of intersections points: 0: no intersection, 1: one intersection point (rclPt0), 2: two intersections points (rclPt0, rclPt1)
bool MeshCore::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.
bool MeshCore::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.
bool MeshCore::MeshGeomFacet::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.
bool MeshCore::MeshGeomFacet::IsDeformed | ( | float | fCosOfMinAngle, |
float | fCosOfMaxAngle | ||
) | const |
Checks whether the triangle is deformed. A triangle is deformed if 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.
bool MeshCore::MeshGeomFacet::IsDegenerated | ( | float | epsilon | ) | const |
Checks whether the triangle is degenerated. A triangle is degenerated if its area is less than an epsilon.
bool MeshCore::MeshGeomFacet::IsFlag | ( | MeshFacet::TFlagType | tF | ) | const |
Query the flag state of the facet.
bool MeshCore::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.
bool MeshCore::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 MeshCore::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.
bool MeshCore::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.
bool MeshCore::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.
float MeshCore::MeshGeomFacet::MaximumAngle | ( | ) | const |
Calculates the maximum angle of a facet.
float MeshCore::MeshGeomFacet::MinimumAngle | ( | ) | const |
Calculates the minimum angle of a facet.
unsigned short MeshCore::MeshGeomFacet::NearestEdgeToPoint | ( | const Base::Vector3f & | rclPt | ) | const |
Returns the edge number of the facet that is nearest to the point rclPt.
void MeshCore::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.
void MeshCore::MeshGeomFacet::NormalInvalid | ( | void | ) |
Checks if the normal is not yet calculated.
float MeshCore::MeshGeomFacet::Perimeter | ( | ) | const |
Calculates the perimeter of the facet.
void MeshCore::MeshGeomFacet::ProjectFacetToPlane | ( | MeshGeomFacet & | rclFacet | ) | const |
Calculates the projection of a facet onto the plane defined by the triangle.
void MeshCore::MeshGeomFacet::ProjectPointToPlane | ( | const Base::Vector3f & | rclPoint, |
Base::Vector3f & | rclProj | ||
) | const |
Calculates the projection of a point onto the plane defined by the triangle.
void MeshCore::MeshGeomFacet::ResetFlag | ( | MeshFacet::TFlagType | tF | ) |
Reset flag state
float MeshCore::MeshGeomFacet::Roundness | ( | ) | const |
The roundness is in the range between 0.0 (colinear) and 1.0 (equilateral).
void MeshCore::MeshGeomFacet::SetFlag | ( | MeshFacet::TFlagType | tF | ) |
Set flag state
void MeshCore::MeshGeomFacet::SetNormal | ( | const Base::Vector3f & | rclNormal | ) |
Sets the facet's normal.
void MeshCore::MeshGeomFacet::SubSample | ( | float | fStep, |
std::vector< Base::Vector3f > & | rclPoints | ||
) | const |
Subsamples the facet into points with resolution fStep.
float MeshCore::MeshGeomFacet::VolumeOfPrism | ( | const MeshGeomFacet & | rclF | ) | const |
Calculates the volume of the prism defined by two facets.
bool MeshCore::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.
Base::Vector3f MeshCore::MeshGeomFacet::_aclPoints[3] |
Geometric corner points.
|
protected |
True if the normal is already calculated.
|
protected |
Normal of the facet.
unsigned char MeshCore::MeshGeomFacet::_ucFlag |
Flag property
unsigned long MeshCore::MeshGeomFacet::_ulProp |
Free usable property.