cgma
|
#include <CubitFacet.hpp>
Definition at line 46 of file CubitFacet.hpp.
Definition at line 32 of file CubitFacet.cpp.
: cachedPlane(NULL), facetWeight(0.0), patchCtrlPts(NULL), markedFlag(0), isFlat(999), isBackwards(0), toolID(0) { }
CubitFacet::~CubitFacet | ( | ) | [virtual] |
Definition at line 46 of file CubitFacet.cpp.
{ if (cachedPlane ) delete cachedPlane; cachedPlane = NULL; if (patchCtrlPts) delete [] patchCtrlPts; }
void CubitFacet::add_edge | ( | CubitFacetEdge * | edge | ) |
Definition at line 1191 of file CubitFacet.cpp.
{ CubitPoint *p0 = edge->point(0); CubitPoint *p1 = edge->point(1); // find the points on this facet int p0_index = point_index( p0 ); int p1_index = point_index( p1 ); assert(p0_index >=0 && p1_index >= 0); assert(p0_index != p1_index); // add the edge based on the relative index of the points // set the edge use based on their order int edge_index; if ((p0_index+1)%3 == p1_index) { edge_index = (p1_index + 1)%3; assert(this->edge(edge_index) == NULL); this->edge( edge, edge_index ); this->edge_use(1, edge_index); } else if((p0_index+2)%3 == p1_index) { edge_index = (p0_index + 1)%3; assert(this->edge(edge_index) == NULL); this->edge( edge, edge_index ); this->edge_use(-1, edge_index); } else { assert(0); // shouldn't happen } // add the facet to the edge edge->add_facet( this ); }
CubitFacet* CubitFacet::adjacent | ( | int & | index, |
int * | tool_data | ||
) | [inline] |
Definition at line 278 of file CubitFacet.hpp.
{ //convert MESHING TRI edge index to GEOMETRY FACET edge index index = (index+2)%3; CubitPoint *p1, *p2; get_edge_pts( index, p1, p2 ); return shared_facet_on_surf( p1, p2, *tool_data ); }
double CubitFacet::angle | ( | CubitPoint * | pt | ) |
Definition at line 760 of file CubitFacet.cpp.
{ int ii, index = -1; CubitBoolean found=CUBIT_FALSE; for (ii=0; ii<3 && !found; ii++) { if (pt==this->point(ii)) { index = ii; found = CUBIT_TRUE; } } if (!found) { return 0.0e0; } CubitVector e0 = this->point((index+1)%3)->coordinates() - pt->coordinates(); CubitVector e1 = this->point((index+2)%3)->coordinates() - pt->coordinates(); e0.normalize(); e1.normalize(); double myangle; double cosangle = e0%e1; if (cosangle >= 1.0) { myangle = 0.0e0; } else if( cosangle <= -1.0 ) { myangle = CUBIT_PI; } else { myangle = acos(cosangle); } return myangle; }
double CubitFacet::area | ( | ) |
Definition at line 1130 of file CubitFacet.cpp.
{ CubitVector e0(point(0)->coordinates(), point(1)->coordinates()); CubitVector e1(point(0)->coordinates(), point(2)->coordinates()); double area = (e0 * e1).length() * 0.5; return area; }
double CubitFacet::aspect_ratio | ( | ) |
Definition at line 1138 of file CubitFacet.cpp.
{ static const double normal_coeff = sqrt( 3. ) / 6.; // three vectors for each side CubitVector a = point(1)->coordinates() - point(0)->coordinates(); CubitVector b = point(2)->coordinates() - point(1)->coordinates(); CubitVector c = point(0)->coordinates() - point(2)->coordinates(); double a1 = a.length(); double b1 = b.length(); double c1 = c.length(); double hm = a1 > b1 ? a1 : b1; hm = hm > c1 ? hm : c1; CubitVector ab = a * b; double denominator = ab.length(); if( denominator < CUBIT_DBL_MIN ) return (double)CUBIT_DBL_MAX; else { double aspect_ratio; aspect_ratio = normal_coeff * hm * (a1 + b1 + c1) / denominator; if( aspect_ratio > 0 ) return (double) CUBIT_MIN( aspect_ratio, CUBIT_DBL_MAX ); return (double) CUBIT_MAX( aspect_ratio, -CUBIT_DBL_MAX ); } }
const CubitBox& CubitFacet::bounding_box | ( | void | ) | [inline] |
Definition at line 95 of file CubitFacet.hpp.
{return bBox;};
void CubitFacet::bounding_box | ( | CubitBox & | box | ) | [inline] |
Definition at line 96 of file CubitFacet.hpp.
{ bBox = box; }
Definition at line 577 of file CubitFacet.cpp.
{ CubitVector vec( point(0)->coordinates() ); vec += point(1)->coordinates(); vec += point(2)->coordinates(); vec /= 3.0; return vec; }
CubitStatus CubitFacet::closest_point | ( | const CubitVector & | point, |
CubitVector & | closest_point | ||
) | [virtual] |
Definition at line 270 of file CubitFacet.cpp.
{ CubitPlane fac_plane = plane(); closest_point = fac_plane.project( point ); return CUBIT_SUCCESS; }
CubitStatus CubitFacet::closest_point_trimmed | ( | const CubitVector & | point, |
CubitVector & | closest_point, | ||
CubitPoint *& | next_edge_p1, | ||
CubitPoint *& | next_edge_p2 | ||
) |
Definition at line 285 of file CubitFacet.cpp.
{ CubitVector p1 = point(0)->coordinates(); CubitVector p2 = point(1)->coordinates(); CubitVector p3 = point(2)->coordinates(); //First get the edge vectors. p1.x(); p2.x(); CubitVector y1 = p2 - p1; CubitVector y2 = p3 - p2; CubitVector y3 = p1 - p3; //Now get the vectors from the point to the vertices of the facet. CubitVector w1 = mypoint - p1; CubitVector w2 = mypoint - p2; CubitVector w3 = mypoint - p3; //Now cross the edge vectors with the vectors to the point. If the point //in questionis inside the facet then each of these vectors will be in in //the same direction as the normal of this facet. CubitVector x1 = y1*w1; CubitVector x2 = y2*w2; CubitVector x3 = y3*w3; //Now take the dot products to help us determine if it is in the triangle. CubitVector n = normal(); double d1 = x1%n; double d2 = x2%n; double d3 = x3%n; //If this is true, then we just take the closest point to this facet. if ( d1 >= -GEOMETRY_RESABS && d2 >= -GEOMETRY_RESABS && d3 >= -GEOMETRY_RESABS ) { CubitStatus rv = this->closest_point(mypoint, closest_point); if ( rv != CUBIT_SUCCESS ) { PRINT_ERROR("Closest Point Trimmed Error. Point in facet but can't" " calc. point.\n"); return CUBIT_FAILURE; } next_edge_p1 = NULL; next_edge_p2 = NULL; return CUBIT_SUCCESS; } CubitBoolean close_p1 = CUBIT_FALSE; CubitBoolean close_p2 = CUBIT_FALSE; CubitBoolean close_p3 = CUBIT_FALSE; double k1, k2, k3; //Now with the "d" values, determine which point or edge we //should project to. We have to go through each of these and //determine which is the closest. if ( d1 < 0.0 ) { double w1_dot_y1 = w1%y1; double y1_squared = y1.length_squared(); if ( y1_squared <= CUBIT_DBL_MIN && y1_squared >= -CUBIT_DBL_MIN ) { PRINT_ERROR("Length of facet edge too small.\n"); return CUBIT_FAILURE; } k1 = w1_dot_y1/y1_squared; if ( k1 < 0.0 ) close_p1 = CUBIT_TRUE; else if ( k1 > 1.0 ) close_p2 = CUBIT_TRUE; else if ( k1 >= 0.0 && k1 <= 1.0 + GEOMETRY_RESABS ) { //So we know that y1, is the closest edge. closest_point = p1 + k1*y1; next_edge_p1 = point(0); next_edge_p2 = point(1); return CUBIT_SUCCESS; } } if ( d2 < 0.0 ) { double w2_dot_y2 = w2%y2; double y2_squared = y2.length_squared(); if ( y2_squared <= CUBIT_DBL_MIN && y2_squared >= -CUBIT_DBL_MIN ) { PRINT_ERROR("Length of facet edge too small.\n"); return CUBIT_FAILURE; } k2 = w2_dot_y2/y2_squared; if ( k2 < 0.0 ) { close_p2 = CUBIT_TRUE; } else if ( k2 > 1.0 ) { close_p3 = CUBIT_TRUE; } else if ( k2 >= 0.0 && k2 <= 1.0 + GEOMETRY_RESABS ) { //So we know that y2, is the closest edge. closest_point = p2 + k2*y2; next_edge_p1 = point(1); next_edge_p2 = point(2); return CUBIT_SUCCESS; } } if ( d3 < 0.0 ) { double w3_dot_y3 = w3%y3; double y3_squared = y3.length_squared(); if ( y3_squared <= CUBIT_DBL_MIN && y3_squared >= -CUBIT_DBL_MIN ) { PRINT_ERROR("Length of facet edge too small.\n"); return CUBIT_FAILURE; } k3 = w3_dot_y3/y3_squared; if ( k3 < 0.0 ) { close_p3 = CUBIT_TRUE; } else if ( k3 > 1.0 ) { close_p1 = CUBIT_TRUE; } else if ( k3 >= 0.0 && k3 <= 1.0 + GEOMETRY_RESABS ) { //So we know that y3, is the closest edge. closest_point = p3 + k3*y3; next_edge_p1 = point(2); next_edge_p2 = point(0); return CUBIT_SUCCESS; } } //Now we have the distances, and which edges the point is closest to. if ( close_p1 && !close_p2 && !close_p3 ) { closest_point = p1 ; next_edge_p1 = point(0); next_edge_p2 = NULL; return CUBIT_SUCCESS; } else if ( close_p2 && !close_p1 && !close_p3 ) { closest_point = p2; next_edge_p1 = point(1); next_edge_p2 = NULL; return CUBIT_SUCCESS; } else if ( close_p3 && !close_p1 && !close_p2 ) { closest_point = p3; next_edge_p1 = point(2); next_edge_p2 = NULL; return CUBIT_SUCCESS; } else if( close_p1 && close_p2 && !close_p3 ) { if( w1.length_squared() < w2.length_squared() ) closest_point = p1; else closest_point = p2; return CUBIT_SUCCESS; } else if( close_p2 && close_p3 && !close_p1 ) { if( w2.length_squared() < w3.length_squared() ) closest_point = p2; else closest_point = p3; return CUBIT_SUCCESS; } else if( close_p1 && close_p3 && !close_p2 ) { if( w1.length_squared() < w3.length_squared() ) closest_point = p1; else closest_point = p3; return CUBIT_SUCCESS; } PRINT_ERROR("Problems finding the closest point to a facet.\n"); return CUBIT_FAILURE; }
Definition at line 472 of file CubitFacet.cpp.
{ for ( int i = 0; i < 3; i++ ) if ( point(i) == p1 ) return CUBIT_TRUE; return CUBIT_FALSE; }
CubitVector* CubitFacet::control_points | ( | ) | [inline] |
Definition at line 108 of file CubitFacet.hpp.
{return patchCtrlPts;};
void CubitFacet::debug_draw | ( | int | color = -1 , |
int | flush_it = 1 , |
||
int | draw_uv = 0 |
||
) | [virtual] |
Implements FacetEntity.
Definition at line 592 of file CubitFacet.cpp.
{ if ( color == -1 ) color = CUBIT_RED_INDEX; GfxDebug::draw_facet(this, color, draw_uv); if ( flush_it ) GfxDebug::flush(); }
virtual CubitFacetEdge* CubitFacet::edge | ( | int | index | ) | [pure virtual] |
Implemented in CubitFacetData, and FaceterFacetData.
virtual void CubitFacet::edge | ( | CubitFacetEdge * | the_edge, |
int | index | ||
) | [pure virtual] |
Implemented in CubitFacetData, and FaceterFacetData.
CubitFacetEdge * CubitFacet::edge_from_pts | ( | CubitPoint * | p1, |
CubitPoint * | p2, | ||
int & | index | ||
) |
Definition at line 801 of file CubitFacet.cpp.
{ if ((point(0) == p1 && point(1) == p2) || (point(0) == p2 && point(1) == p1)) { edge_index = 2; return edge(2); } if ((point(1) == p1 && point(2) == p2) || (point(1) == p2 && point(2) == p1)) { edge_index = 0; return edge(0); } if ((point(2) == p1 && point(0) == p2) || (point(2) == p2 && point(0) == p1)) { edge_index = 1; return edge(1); } edge_index = -1; return NULL; }
int CubitFacet::edge_index | ( | CubitPoint * | p1, |
CubitPoint * | p2, | ||
int & | sense | ||
) |
Definition at line 835 of file CubitFacet.cpp.
{ if (point(0) == p1 && point(1) == p2) { sense = 1; return 2; } if (point(0) == p2 && point(1) == p1) { sense = -1; return 2; } if (point(1) == p1 && point(2) == p2) { sense = 1; return 0; } if (point(1) == p2 && point(2) == p1) { sense = -1; return 0; } if (point(2) == p1 && point(0) == p2) { sense = 1; return 1; } if (point(2) == p2 && point(0) == p1) { sense = -1; return 1; } sense = 0; return -1; }
int CubitFacet::edge_index | ( | CubitFacetEdge * | edge | ) |
Definition at line 872 of file CubitFacet.cpp.
virtual void CubitFacet::edge_use | ( | int | direction, |
int | index | ||
) | [pure virtual] |
Implemented in CubitFacetData, and FaceterFacetData.
virtual int CubitFacet::edge_use | ( | int | index | ) | [pure virtual] |
Implemented in CubitFacetData, and FaceterFacetData.
void CubitFacet::edges | ( | DLIList< CubitFacetEdge * > & | edge_list | ) | [inline, virtual] |
Implements FacetEntity.
Definition at line 260 of file CubitFacet.hpp.
int CubitFacet::eval_order | ( | ) | [inline] |
Definition at line 111 of file CubitFacet.hpp.
{ return (patchCtrlPts == NULL) ? 0 : 4; }
CubitStatus CubitFacet::evaluate | ( | CubitVector & | areacoord, |
CubitVector * | eval_point, | ||
CubitVector * | eval_normal = NULL |
||
) |
Definition at line 251 of file CubitFacet.cpp.
{ if (isBackwards) { double temp = areacoord.y(); areacoord.y( areacoord.z() ); areacoord.z( temp ); } return FacetEvalTool::eval_facet( this, areacoord, eval_point, eval_normal ); }
CubitStatus CubitFacet::evaluate_position | ( | const CubitVector & | start_position, |
CubitVector * | eval_point, | ||
CubitVector * | eval_normal = NULL |
||
) |
Definition at line 200 of file CubitFacet.cpp.
{ CubitStatus stat = CUBIT_SUCCESS; if (is_flat()) { if (eval_point != NULL) closest_point(start_position, *eval_point); if (eval_normal != NULL) *eval_normal = normal(); } else // project to the smooth facet { // project the position to the planar facet CubitVector close_point; stat = closest_point(start_position, close_point); // get the area coordinates of this point as a starting guess CubitVector area_coordinates; FacetEvalTool::facet_area_coordinate(this, close_point, area_coordinates); // now evaluate the smooth facet (this may alter the area coords) CubitVector proj_point; CubitBoolean outside; double tol = sqrt(area()) * 1.0e-3; stat = FacetEvalTool::project_to_facet( this, close_point, area_coordinates, proj_point, outside, tol ); if (eval_point != NULL) { *eval_point = proj_point; } // compute the smooth normal if required if (eval_normal != NULL) { FacetEvalTool::eval_facet_normal(this, area_coordinates, *eval_normal); } } return stat; }
void CubitFacet::facets | ( | DLIList< CubitFacet * > & | facet_list | ) | [inline, virtual] |
Implements FacetEntity.
Definition at line 258 of file CubitFacet.hpp.
{ facet_list.append( this ); }
void CubitFacet::flip | ( | ) | [pure virtual] |
Implemented in CubitFacetData, and FaceterFacetData.
Definition at line 1041 of file CubitFacet.cpp.
{
// must be implemented in child class
assert(0);
}
void CubitFacet::get_control_points | ( | CubitVector | points[6] | ) |
Definition at line 102 of file CubitFacet.cpp.
{ assert(patchCtrlPts != 0); memcpy( points, patchCtrlPts, 6 *sizeof(CubitVector) ); }
void CubitFacet::get_edge_1 | ( | CubitPoint *& | p1, |
CubitPoint *& | p2 | ||
) | [inline] |
Definition at line 216 of file CubitFacet.hpp.
void CubitFacet::get_edge_2 | ( | CubitPoint *& | p1, |
CubitPoint *& | p2 | ||
) | [inline] |
Definition at line 218 of file CubitFacet.hpp.
void CubitFacet::get_edge_3 | ( | CubitPoint *& | p1, |
CubitPoint *& | p2 | ||
) | [inline] |
Definition at line 220 of file CubitFacet.hpp.
Definition at line 1105 of file CubitFacet.cpp.
{ CubitStatus stat; CubitFacetEdge *edge_ptr; CubitVector ctrl_pts[5]; int ii, jj; for (ii=0; ii<3; ii++) { edge_ptr = edge(ii); stat = edge_ptr->control_points(this, ctrl_pts); if (stat!= CUBIT_SUCCESS) return stat; for (jj=0; jj<5; jj++) { P[ii][jj] = ctrl_pts[jj]; } } return stat; }
void CubitFacet::get_edge_pts | ( | int | index, |
CubitPoint *& | p1, | ||
CubitPoint *& | p2 | ||
) |
Definition at line 907 of file CubitFacet.cpp.
void CubitFacet::get_parents | ( | DLIList< FacetEntity * > & | ) | [inline, virtual] |
virtual int CubitFacet::id | ( | ) | [pure virtual] |
Implemented in CubitFacetData, and FaceterFacetData.
Definition at line 1179 of file CubitFacet.cpp.
{ return FacetEvalTool::init_bezier_facet( this ); }
CubitPoint * CubitFacet::insert_point | ( | const CubitVector & | position, |
CubitFacet *& | new_tri1, | ||
CubitFacet *& | new_tri2 | ||
) | [virtual] |
Reimplemented in CubitFacetData, and FaceterFacetData.
Definition at line 715 of file CubitFacet.cpp.
{ // this function should be implemented in child class since it creates // new facet and point entities assert(1); CubitPoint* new_point = NULL; return new_point; }
int CubitFacet::is_backwards | ( | ) | [inline] |
Definition at line 134 of file CubitFacet.hpp.
{return isBackwards;};
void CubitFacet::is_backwards | ( | int | flipped | ) | [inline] |
Definition at line 135 of file CubitFacet.hpp.
{ isBackwards = flipped; }
int CubitFacet::is_flat | ( | ) |
Definition at line 144 of file CubitFacet.cpp.
{ if (isFlat != 999) { return isFlat; } // check the edges first. If on a boundary then assume not flat for now // This is to account for any in-plane curvature in the boundary edges int ii; CubitBoolean on_boundary = CUBIT_FALSE; for (ii=0; ii<3 && !on_boundary; ii++) { CubitPoint *point_ptr = point(ii); CubitFacetEdge *edge_ptr = edge(ii); TDFacetBoundaryPoint *td = TDFacetBoundaryPoint::get_facet_boundary_point(point_ptr); if (td != NULL || (edge_ptr && edge_ptr->num_adj_facets() <= 1)) { on_boundary = CUBIT_TRUE; } } if (on_boundary) { isFlat = 0; } else { CubitPoint *p0, *p1, *p2; points(p0, p1, p2); CubitVector n0 = p0->normal( this ); CubitVector n1 = p1->normal( this ); CubitVector n2 = p2->normal( this ); double dot0 = n0 % n1; double dot1 = n1 % n2; double dot2 = n2 % n0; double tol = 1.0 - GEOMETRY_RESABS; if (fabs(dot0) > tol && fabs(dot1) > tol && fabs(dot2) > tol) isFlat = 1; else isFlat = 0; } return isFlat; }
void CubitFacet::is_flat | ( | int | flat | ) | [inline] |
Definition at line 126 of file CubitFacet.hpp.
{isFlat = flat;};
void CubitFacet::marked | ( | int | mark | ) | [inline] |
Definition at line 121 of file CubitFacet.hpp.
{markedFlag = mark;};
int CubitFacet::marked | ( | ) | [inline] |
Definition at line 122 of file CubitFacet.hpp.
{return markedFlag;};
double CubitFacet::min_diagonal | ( | ) |
Definition at line 633 of file CubitFacet.cpp.
{ //from the three points find the minimum diagonal. CubitVector p1 = point(0)->coordinates(); CubitVector p2 = point(1)->coordinates(); CubitVector p3 = point(2)->coordinates(); CubitVector temp1 = p2-p1; CubitVector mid_side_1 = p1 + temp1/2.0; CubitVector temp2 = p3-p2; CubitVector mid_side_2 = p2 + temp2/2.0; CubitVector temp3 = p1-p3; CubitVector mid_side_3 = p3 + temp3/2.0; CubitVector diagv_1 = p3 - mid_side_1; CubitVector diagv_2 = p2 - mid_side_3; CubitVector diagv_3 = p1 - mid_side_2; double diag_1 = diagv_1.length(); double diag_2 = diagv_2.length(); double diag_3 = diagv_3.length(); if ( diag_1 >= diag_2 && diag_1 >= diag_3 ) return diag_1; else if ( diag_2 > diag_1 && diag_2 > diag_3 ) return diag_2; return diag_3; }
CubitFacetEdge * CubitFacet::next_edge | ( | CubitFacetEdge * | edge | ) |
Definition at line 1001 of file CubitFacet.cpp.
CubitFacetEdge * CubitFacet::next_edge_at_point | ( | CubitFacetEdge * | edge_ptr, |
CubitPoint * | point_ptr | ||
) |
Definition at line 1057 of file CubitFacet.cpp.
{ int eidx = edge_index( edge_ptr ); int pidx = point_index( point_ptr ); switch(eidx) { case 0: switch(pidx) { case 1: eidx = 2; break; case 2: eidx = 1; break; default: eidx = -1; break; } break; case 1: switch(pidx) { case 0: eidx = 2; break; case 2: eidx = 0; break; default: eidx = -1; break; } break; case 2: switch(pidx) { case 0: eidx = 1; break; case 1: eidx = 0; break; default: eidx = -1; break; } break; default: eidx = -1; break; } if (eidx == -1) return (CubitFacetEdge *)NULL; return edge( eidx ); }
CubitPoint* CubitFacet::next_node | ( | CubitPoint * | current_point | ) | [inline] |
Definition at line 290 of file CubitFacet.hpp.
{ int index = point_index(current_point); return point((index+1)%3); }
Definition at line 62 of file CubitFacet.cpp.
{ CubitPlane fac_plane = plane(); CubitVector the_normal = fac_plane.normal(); if (isBackwards) the_normal = -the_normal; return the_normal; }
void CubitFacet::opposite_edge | ( | CubitPoint * | point, |
CubitPoint *& | p1, | ||
CubitPoint *& | p2 | ||
) |
Definition at line 669 of file CubitFacet.cpp.
CubitPoint * CubitFacet::opposite_point | ( | CubitFacetEdge * | edge | ) |
int CubitFacet::other_index | ( | CubitPoint * | pt1, |
CubitPoint * | pt2 | ||
) |
Definition at line 737 of file CubitFacet.cpp.
const CubitPlane & CubitFacet::plane | ( | ) |
Definition at line 108 of file CubitFacet.cpp.
{ if( ! cachedPlane ) { CubitPoint *p0, *p1, *p2; points(p0, p1, p2); CubitVector v1 = p1->coordinates() - p0->coordinates(); CubitVector v2 = p2->coordinates() - p0->coordinates(); cachedPlane = new CubitPlane( v1 * v2, p0->coordinates() ); } return *cachedPlane; }
void CubitFacet::plane | ( | CubitPlane & | this_plane | ) | [inline] |
Definition at line 350 of file CubitFacet.hpp.
{ this_plane = plane(); }
virtual CubitPoint* CubitFacet::point | ( | int | index | ) | [pure virtual] |
Implemented in CubitFacetData, and FaceterFacetData.
int CubitFacet::point_index | ( | CubitPoint * | pt | ) |
Definition at line 888 of file CubitFacet.cpp.
void CubitFacet::points | ( | CubitPoint *& | p0, |
CubitPoint *& | p1, | ||
CubitPoint *& | p2 | ||
) | [inline] |
Definition at line 248 of file CubitFacet.hpp.
void CubitFacet::points | ( | CubitPoint * | pts[3] | ) | [inline] |
Definition at line 250 of file CubitFacet.hpp.
void CubitFacet::points | ( | DLIList< CubitPoint * > & | point_list | ) | [inline, virtual] |
Implements FacetEntity.
Definition at line 254 of file CubitFacet.hpp.
CubitFacetEdge * CubitFacet::prev_edge | ( | CubitFacetEdge * | edge | ) |
Definition at line 1021 of file CubitFacet.cpp.
void CubitFacet::reset_bounding_box | ( | ) |
Definition at line 966 of file CubitFacet.cpp.
{ CubitPoint *p1 = point (0); CubitPoint *p2 = point (1); CubitPoint *p3 = point (2); // define the bounding box if (!patchCtrlPts || is_flat()) { CubitVector bbox_min, bbox_max; bbox_min.x(min3(p1->x(),p2->x(),p3->x())); bbox_min.y(min3(p1->y(),p2->y(),p3->y())); bbox_min.z(min3(p1->z(),p2->z(),p3->z())); bbox_max.x(max3(p1->x(),p2->x(),p3->x())); bbox_max.y(max3(p1->y(),p2->y(),p3->y())); bbox_max.z(max3(p1->z(),p2->z(),p3->z())); bBox.reset(bbox_min,bbox_max); } else { update_bezier_bounding_box( ); } }
virtual int CubitFacet::sense | ( | int | ) | [inline, virtual] |
Reimplemented in CubitFacetData.
Definition at line 161 of file CubitFacet.hpp.
{ assert(0); return -1;}
void CubitFacet::set_control_points | ( | CubitVector | points[6] | ) |
Definition at line 80 of file CubitFacet.cpp.
{ if (!patchCtrlPts) { patchCtrlPts = new CubitVector [6]; } memcpy( patchCtrlPts, points, 6 *sizeof(CubitVector) ); }
void CubitFacet::set_control_points | ( | const double * | pt_array | ) |
Definition at line 88 of file CubitFacet.cpp.
{ if (!patchCtrlPts) { patchCtrlPts = new CubitVector [6]; } int ii; for (ii=0; ii<6; ii++) { patchCtrlPts[ii].x(pt_array[3*ii]); patchCtrlPts[ii].y(pt_array[3*ii+1]); patchCtrlPts[ii].z(pt_array[3*ii+2]); } }
virtual void CubitFacet::set_id | ( | int | ii | ) | [pure virtual] |
Implemented in CubitFacetData, and FaceterFacetData.
void CubitFacet::set_tool_id | ( | int | tool_id | ) | [inline] |
Definition at line 141 of file CubitFacet.hpp.
CubitFacetEdge * CubitFacet::shared_edge | ( | CubitFacet * | cubit_facet | ) |
Definition at line 1260 of file CubitFacet.cpp.
CubitFacet * CubitFacet::shared_facet | ( | CubitPoint * | p1, |
CubitPoint * | p2 | ||
) |
Definition at line 487 of file CubitFacet.cpp.
{ //Find the other facet that shares these two points. int ii; DLIList<CubitFacet*> facet_list; p1->facets(facet_list); for ( ii = facet_list.size(); ii > 0; ii-- ) { CubitFacet *t_facet = facet_list.get_and_step(); if ( t_facet == this ) continue; if ( t_facet->contains(p2) ) { assert( t_facet->contains(p1) ); return t_facet; } } return (CubitFacet*)NULL; }
CubitFacet * CubitFacet::shared_facet_on_surf | ( | CubitPoint * | p1, |
CubitPoint * | p2, | ||
int | tool_id | ||
) |
Definition at line 545 of file CubitFacet.cpp.
{ //Find the other facet that shares these two points and that // is marked with flag. int ii; DLIList<CubitFacet*> facet_list; p1->facets(facet_list); for ( ii = facet_list.size(); ii > 0; ii-- ) { CubitFacet *t_facet = facet_list.get_and_step(); if ( t_facet == this ) continue; if ( t_facet->contains(p2) ) { if (tool_id == t_facet->tool_id()) { assert( t_facet->contains(p1) ); return t_facet; } } } return (CubitFacet*)NULL; }
void CubitFacet::shared_facets | ( | CubitPoint * | p1, |
CubitPoint * | p2, | ||
DLIList< CubitFacet * > & | adj_facet_list | ||
) |
Definition at line 515 of file CubitFacet.cpp.
{ //Find the other facets that share these two points. int ii; DLIList<CubitFacet*> facet_list; p1->facets(facet_list); for ( ii = facet_list.size(); ii > 0; ii-- ) { CubitFacet *t_facet = facet_list.get_and_step(); if ( t_facet == this ) continue; if ( t_facet->contains(p2) ) { assert( t_facet->contains(p1) ); adj_facet_list.append( t_facet ); } } }
CubitPoint * CubitFacet::split_edge | ( | CubitPoint * | edge_pt1, |
CubitPoint * | edge_pt2, | ||
const CubitVector & | position | ||
) | [virtual] |
Reimplemented in CubitFacetData, and FaceterFacetData.
Definition at line 695 of file CubitFacet.cpp.
{ // this function should be implemented in child class since it creates // new facet and point entities assert(1); CubitPoint* new_point = NULL; return new_point; }
int CubitFacet::tool_id | ( | ) | [inline] |
Definition at line 140 of file CubitFacet.hpp.
{return toolID;}
void CubitFacet::tri_nodes | ( | CubitPoint *& | p0, |
CubitPoint *& | p1, | ||
CubitPoint *& | p2 | ||
) | [inline] |
Definition at line 252 of file CubitFacet.hpp.
{ points( p0, p1, p2); }
void CubitFacet::unlink_from_children | ( | void | ) |
Definition at line 1248 of file CubitFacet.cpp.
{ this->point(0)->remove_facet(this); this->point(1)->remove_facet(this); this->point(2)->remove_facet(this); this->edge(0)->remove_facet(this); this->edge(1)->remove_facet(this); this->edge(2)->remove_facet(this); }
Definition at line 923 of file CubitFacet.cpp.
{ int i,j; CubitVector ctrl_pts[5], min, max; CubitFacetEdge *myedge; CubitBox bbox = bounding_box(); min = bbox.minimum(); max = bbox.maximum(); for (i=0; i<3; i++) { myedge = edge(i); assert(myedge != 0); myedge->control_points( this, ctrl_pts ); for (j=1; j<4; j++) { if (ctrl_pts[j].x() < min.x()) min.x( ctrl_pts[j].x() ); if (ctrl_pts[j].y() < min.y()) min.y( ctrl_pts[j].y() ); if (ctrl_pts[j].z() < min.z()) min.z( ctrl_pts[j].z() ); if (ctrl_pts[j].x() > max.x()) max.x( ctrl_pts[j].x() ); if (ctrl_pts[j].y() > max.y()) max.y( ctrl_pts[j].y() ); if (ctrl_pts[j].z() > max.z()) max.z( ctrl_pts[j].z() ); } } CubitVector patch_ctrl_pts[6]; get_control_points( patch_ctrl_pts ); assert(patch_ctrl_pts != 0); for (j=0; j<6; j++) { if (patch_ctrl_pts[j].x() < min.x()) min.x( patch_ctrl_pts[j].x() ); if (patch_ctrl_pts[j].y() < min.y()) min.y( patch_ctrl_pts[j].y() ); if (patch_ctrl_pts[j].z() < min.z()) min.z( patch_ctrl_pts[j].z() ); if (patch_ctrl_pts[j].x() > max.x()) max.x( patch_ctrl_pts[j].x() ); if (patch_ctrl_pts[j].y() > max.y()) max.y( patch_ctrl_pts[j].y() ); if (patch_ctrl_pts[j].z() > max.z()) max.z( patch_ctrl_pts[j].z() ); } bBox.reset(min,max); }
CubitVector CubitFacet::update_normal | ( | void | ) |
Definition at line 1242 of file CubitFacet.cpp.
{ this->update_plane(); return normal(); }
void CubitFacet::update_plane | ( | ) |
Definition at line 121 of file CubitFacet.cpp.
{ if ( ! cachedPlane ) return; CubitPoint *p0, *p1, *p2; points(p0, p1, p2); CubitVector v1 = p1->coordinates() - p0->coordinates(); CubitVector v2 = p2->coordinates() - p0->coordinates(); CubitVector normal = v1 * v2; if (is_backwards()) normal = -normal; cachedPlane->set(normal, p0->coordinates() ); }
void CubitFacet::weight | ( | double | facweight | ) | [inline] |
Definition at line 101 of file CubitFacet.hpp.
{ facetWeight = facweight; }
double CubitFacet::weight | ( | ) | [inline] |
Definition at line 102 of file CubitFacet.hpp.
{ return facetWeight; }
CubitBox CubitFacet::bBox [protected] |
Definition at line 58 of file CubitFacet.hpp.
CubitPlane* CubitFacet::cachedPlane [protected] |
Definition at line 55 of file CubitFacet.hpp.
double CubitFacet::facetWeight [protected] |
Definition at line 61 of file CubitFacet.hpp.
int CubitFacet::isBackwards [protected] |
Definition at line 73 of file CubitFacet.hpp.
int CubitFacet::isFlat [protected] |
Definition at line 70 of file CubitFacet.hpp.
int CubitFacet::markedFlag [protected] |
Definition at line 67 of file CubitFacet.hpp.
const double CubitFacet::my_points [static] |
{ {1.00, 0.00, 0.00},{0.75, 0.25, 0.00},{0.50, 0.50, 0.00}, {0.25, 0.75, 0.00},{0.00, 1.00, 0.00},{0.75, 0.00, 0.25}, {0.50, 0.25, 0.25},{0.25, 0.50, 0.25},{0.00, 0.75, 0.25}, {0.50, 0.00, 0.50},{0.25, 0.25, 0.50},{0.00, 0.50, 0.50}, {0.25, 0.00, 0.75},{0.00, 0.25, 0.75},{0.00, 0.00, 1.00} }
Definition at line 51 of file CubitFacet.hpp.
CubitVector* CubitFacet::patchCtrlPts [protected] |
Definition at line 64 of file CubitFacet.hpp.
const int CubitFacet::point_edge_conn [static] |
{ {4, 8}, {8, 11}, {11, 13}, {13, 14}, {3, 7}, {7, 10}, {10, 12}, {2, 6}, {6, 9}, {1, 5}, {14, 12}, {12, 9}, {9, 5}, {5, 0}, {13, 10}, {10, 6}, {6, 1}, {11, 7}, {7, 2}, {8, 3}, {0, 1}, {1, 2}, {2, 3}, {3, 4}, {5, 6}, {6, 7}, {7, 8}, {9, 10}, {10, 11}, {12, 13} }
Definition at line 49 of file CubitFacet.hpp.
const int CubitFacet::point_facet_conn [static] |
{ {0, 1, 5}, {1, 6, 5}, {1, 2, 6}, {2, 7, 6}, {2, 3, 7}, {3, 8, 7}, {3, 4, 8}, {5, 6, 9}, {6, 10, 9}, {6, 7, 10}, {7, 11, 10}, {7, 8, 11}, {9, 10, 12}, {10, 13, 12}, {10, 11, 13}, {12, 13, 14} }
Definition at line 50 of file CubitFacet.hpp.
int CubitFacet::toolID [protected] |
Definition at line 76 of file CubitFacet.hpp.