cgma
|
#include <SurfaceOverlapFacet.hpp>
Public Member Functions | |
SurfaceOverlapFacet (GPoint pnt[3]) | |
~SurfaceOverlapFacet () | |
double | distance (SurfaceOverlapFacet &other_facet) |
CubitBoolean | facing (SurfaceOverlapFacet &other_facet) |
double | angle (SurfaceOverlapFacet &other_facet) |
double | projected_overlap (SurfaceOverlapFacet &other_facet, CubitBoolean draw_overlap=CUBIT_FALSE) |
double | distance_from_position (CubitVector &position) |
bool | facet_points_within_tol (SurfaceOverlapFacet *other_face, double tolerance) |
double | perimeter () |
bool | bbox_overlap (double tol, SurfaceOverlapFacet &other_facet) |
CubitBox | bounding_box () |
void | draw (int color) |
CubitVector | centroid () |
CubitVector | smallest_edge_midpoint () |
Private Attributes | |
Triangle3 | t |
CubitBox | boundingBox |
Static Private Attributes | |
static AnalyticGeometryTool * | agt = AnalyticGeometryTool::instance() |
Definition at line 29 of file SurfaceOverlapFacet.hpp.
Definition at line 13 of file SurfaceOverlapFacet.cpp.
{ t.b.x = p[0].x; t.b.y = p[0].y; t.b.z = p[0].z; t.e0.x = p[1].x - p[0].x; t.e0.y = p[1].y - p[0].y; t.e0.z = p[1].z - p[0].z; t.e1.x = p[2].x - p[0].x; t.e1.y = p[2].y - p[0].y; t.e1.z = p[2].z - p[0].z; CubitVector min; min.set( CUBIT_MIN_3( p[0].x, p[1].x, p[2].x ), CUBIT_MIN_3( p[0].y, p[1].y, p[2].y ), CUBIT_MIN_3( p[0].z, p[1].z, p[2].z ) ); CubitVector max; max.set( CUBIT_MAX_3( p[0].x, p[1].x, p[2].x ), CUBIT_MAX_3( p[0].y, p[1].y, p[2].y ), CUBIT_MAX_3( p[0].z, p[1].z, p[2].z ) ); boundingBox.reset( min, max ); }
Definition at line 43 of file SurfaceOverlapFacet.cpp.
{ }
double SurfaceOverlapFacet::angle | ( | SurfaceOverlapFacet & | other_facet | ) |
bool SurfaceOverlapFacet::bbox_overlap | ( | double | tol, |
SurfaceOverlapFacet & | other_facet | ||
) | [inline] |
Definition at line 49 of file SurfaceOverlapFacet.hpp.
{ return boundingBox.overlap( tol, other_facet.boundingBox ); }
CubitBox SurfaceOverlapFacet::bounding_box | ( | void | ) | [inline] |
Definition at line 52 of file SurfaceOverlapFacet.hpp.
{ return boundingBox; }
Definition at line 175 of file SurfaceOverlapFacet.cpp.
double SurfaceOverlapFacet::distance | ( | SurfaceOverlapFacet & | other_facet | ) |
Definition at line 47 of file SurfaceOverlapFacet.cpp.
{ double s, t2, u, v; return agt->MinTriangleTriangle( t, other_facet.t, s, t2, u, v ); }
double SurfaceOverlapFacet::distance_from_position | ( | CubitVector & | position | ) |
void SurfaceOverlapFacet::draw | ( | int | color | ) |
Definition at line 158 of file SurfaceOverlapFacet.cpp.
{ CubitVector point1 = CubitVector( t.b.x, t.b.y, t.b.z ); CubitVector point2 = CubitVector( t.e0.x + t.b.x, t.e0.y + t.b.y, t.e0.z + t.b.z ); CubitVector point3 = CubitVector( t.e1.x + t.b.x, t.e1.y + t.b.y, t.e1.z + t.b.z ); GfxPreview::draw_line( point1, point2, color ); GfxPreview::draw_line( point2, point3, color ); GfxPreview::draw_line( point1, point3, color ); return; }
bool SurfaceOverlapFacet::facet_points_within_tol | ( | SurfaceOverlapFacet * | other_face, |
double | tolerance | ||
) |
Definition at line 70 of file SurfaceOverlapFacet.cpp.
{ CubitVector tmp_pt( t.b.x, t.b.y, t.b.z ); if( this->distance_from_position( tmp_pt ) > tolerance ) return false; tmp_pt.set( t.b.x + t.e0.x, t.b.y + t.e0.y, t.b.z + t.e0.z ); if( this->distance_from_position( tmp_pt ) > tolerance ) return false; tmp_pt.set( t.b.x + t.e1.x, t.b.y + t.e1.y, t.b.z + t.e1.z ); if( this->distance_from_position( tmp_pt ) > tolerance ) return false; return true; }
CubitBoolean SurfaceOverlapFacet::facing | ( | SurfaceOverlapFacet & | other_facet | ) |
Definition at line 104 of file SurfaceOverlapFacet.cpp.
{ double norm1[3]; agt->Normal( t, norm1 ); double norm2[3]; agt->Normal( other_facet.t, norm2 ); // move to the origin double o1[3]; o1[0] = other_facet.t.b.x-t.b.x; o1[1] = other_facet.t.b.y-t.b.y; o1[2] = other_facet.t.b.z-t.b.z; double dot_p = agt->dot_vec(norm1,o1); return (CubitBoolean)(dot_p >= 0.0); }
double SurfaceOverlapFacet::perimeter | ( | ) |
Definition at line 53 of file SurfaceOverlapFacet.cpp.
{ CubitVector pt0( t.b.x, t.b.y, t.b.z ); CubitVector pt1( t.b.x + t.e0.x, t.b.y + t.e0.y, t.b.z + t.e0.z ); CubitVector pt2( t.b.x + t.e1.x, t.b.y + t.e1.y, t.b.z + t.e1.z ); double total_dist = pt0.distance_between(pt1); total_dist += pt1.distance_between( pt2 ); total_dist += pt2.distance_between( pt0 ); return total_dist; }
double SurfaceOverlapFacet::projected_overlap | ( | SurfaceOverlapFacet & | other_facet, |
CubitBoolean | draw_overlap = CUBIT_FALSE |
||
) |
Definition at line 128 of file SurfaceOverlapFacet.cpp.
{ double tmp_double = agt->ProjectedOverlap( t, other_facet.t, draw_overlap ); if( tmp_double > 0.00 ) { CubitVector edge0(t.e0.x, t.e0.y, t.e0.z); CubitVector edge1(t.e1.x, t.e1.y, t.e1.z); CubitVector normal = edge0 * edge1; double area_facet1 = normal.length() / 2; edge0.set(other_facet.t.e0.x, other_facet.t.e0.y, other_facet.t.e0.z); edge1.set(other_facet.t.e1.x, other_facet.t.e1.y, other_facet.t.e1.z); normal = edge0 * edge1; double area_facet2 = normal.length() / 2; //don't report overlapping area between facets unless it is greater //than one hundredth of the area of the smaller facet if( area_facet1 < area_facet2 ) { if( tmp_double < (area_facet1*0.01)) tmp_double = 0.0; } else if( tmp_double < (area_facet2*0.01 )) tmp_double = 0.0; } return tmp_double; }
Definition at line 193 of file SurfaceOverlapFacet.cpp.
{ CubitVector point1 = CubitVector( t.b.x, t.b.y, t.b.z ); CubitVector point2 = CubitVector( t.e0.x + t.b.x, t.e0.y + t.b.y, t.e0.z + t.b.z ); CubitVector point3 = CubitVector( t.e1.x + t.b.x, t.e1.y + t.b.y, t.e1.z + t.b.z ); double len_12 = point1.distance_between( point2 ); double len_23 = point2.distance_between( point3 ); double len_13 = point1.distance_between( point3 ); if( (len_12 < len_23) && (len_12 < len_13) ) { point1 += point2; point1 /= 2; return point1; } else if( len_23 < len_13 ) { point2 += point3; point2 /= 2; return point2; } else { point1 += point3; point1 /= 2; return point1; } }
AnalyticGeometryTool * SurfaceOverlapFacet::agt = AnalyticGeometryTool::instance() [static, private] |
Definition at line 65 of file SurfaceOverlapFacet.hpp.
CubitBox SurfaceOverlapFacet::boundingBox [private] |
Definition at line 64 of file SurfaceOverlapFacet.hpp.
Triangle3 SurfaceOverlapFacet::t [private] |
Definition at line 63 of file SurfaceOverlapFacet.hpp.