cgma
|
#include <ChollaSkinTool.hpp>
Public Member Functions | |
ChollaSkinTool () | |
~ChollaSkinTool () | |
CubitStatus | skin_2d (DLIList< FacetEntity * > &facet_list, ChollaSurface *&facet_surface_mesh_ptr) |
CubitStatus | skin_1d (DLIList< FacetEntity * > &facet_list, ChollaCurve *&facet_curve_mesh_ptr) |
Definition at line 24 of file ChollaSkinTool.hpp.
Definition at line 22 of file ChollaSkinTool.cpp.
{ }
Definition at line 28 of file ChollaSkinTool.cpp.
{ }
CubitStatus ChollaSkinTool::skin_1d | ( | DLIList< FacetEntity * > & | facet_list, |
ChollaCurve *& | facet_curve_mesh_ptr | ||
) |
Definition at line 36 of file ChollaSkinTool.cpp.
{ CubitStatus rv = CUBIT_SUCCESS; // create a ChollaCurve if we have to (only if this is a 1D facet) if (!facet_curve_mesh_ptr) { FacetEntity *edge_ptr = facet_list.get(); TDGeomFacet *td_gm = TDGeomFacet::get_geom_facet( edge_ptr ); facet_curve_mesh_ptr = new ChollaCurve( td_gm->get_block_id() ); // associate all of the tooldata on the faces of this surf with the // new ChollaCurve int ii; for (ii=0; ii<facet_list.size(); ii++) { edge_ptr = facet_list.get_and_step(); facet_curve_mesh_ptr->add_facet( edge_ptr ); td_gm = TDGeomFacet::get_geom_facet( edge_ptr ); td_gm->add_cholla_curve( facet_curve_mesh_ptr ); } } // Note: the start and end points of this curve will be defined in // ChollaCurve::split_curve. The BlockPointMesh objects at these points // will be defined in MeshGeometryCreator::classify_node return rv; }
CubitStatus ChollaSkinTool::skin_2d | ( | DLIList< FacetEntity * > & | facet_list, |
ChollaSurface *& | facet_surface_mesh_ptr | ||
) |
Definition at line 73 of file ChollaSkinTool.cpp.
{ if(facet_list.size() == 0){ return CUBIT_SUCCESS; } int debugflag=0; if (debugflag) { dcolor(CUBIT_YELLOW_INDEX); dldraw( facet_list ); dview(); dcolor(CUBIT_RED_INDEX); } CubitStatus rv = CUBIT_SUCCESS; int block_id; // create a ChollaSurface if we have to (only if this is a 2D model) FacetEntity *face_ptr = facet_list.get(); TDGeomFacet *td_gm = TDGeomFacet::get_geom_facet( face_ptr ); block_id = td_gm->get_block_id(); if (!facet_surface_mesh_ptr) { facet_surface_mesh_ptr = new ChollaSurface(block_id); // associate all of the tooldata on the faces of this surf with the new ChollaSurface int ii; for (ii=0; ii<facet_list.size(); ii++) { face_ptr = facet_list.get_and_step(); facet_surface_mesh_ptr->add_facet( face_ptr ); td_gm = TDGeomFacet::get_geom_facet( face_ptr ); td_gm->add_cholla_surf( facet_surface_mesh_ptr ); td_gm->set_hit_flag( facet_surface_mesh_ptr->get_id() ); } } // create a single ChollaCurve for this surface (assumes one loop of edges) ChollaCurve *fcm_ptr = new ChollaCurve( block_id ); facet_surface_mesh_ptr->add_curve( fcm_ptr ); fcm_ptr->add_surface( facet_surface_mesh_ptr ); // loop through all faces on this surface searching for the boundary edges int jj, kk, ll; for ( kk = 0; kk < facet_list.size(); kk++) { face_ptr = facet_list.get_and_step(); DLIList<CubitFacetEdge*> edge_list; face_ptr->edges( edge_list ); // loop through each edge on this face searching for boundary edges for (jj=edge_list.size(); jj > 0; jj--) { CubitFacetEdge *edge_ptr = edge_list.get_and_step(); // check if this edge has already been processed from an adjacent surface. // If it has, then tool data would have already been defined at this edge // and by definition would be at the boundary (only tooldatas on edges // at the boundary ofa surface are created) TDGeomFacet *td_gm_edge = TDGeomFacet::get_geom_facet(edge_ptr); int on_boundary = 0; if (td_gm_edge != NULL) { on_boundary = 1; // check for internal C-zero edge if (edge_ptr->num_adj_facets() == 2) { TDFacetBoundaryEdge *td_fbe = TDFacetBoundaryEdge::get_facet_boundary_edge( edge_ptr ); if (td_fbe != NULL) { if (td_fbe->is_internal_edge()) { on_boundary = 0; } } } } // check for general case where no tool data yet defined else { DLIList<FacetEntity*> adj_face_list; // check the adjacent faces to this edge. If only one adjacent face, then // it is on the boundary. If more than one face, then the other face(s) // must be associated with a surface other than facet_surface_mesh_ptr // in order to be on the boundary edge_ptr->get_parents( adj_face_list ); if (adj_face_list.size() <= 1) { on_boundary = 1; } else { for (ll=adj_face_list.size(); ll> 0 && !on_boundary; ll--) { FacetEntity *adj_face_ptr = adj_face_list.get_and_step(); if (adj_face_ptr != face_ptr) { TDGeomFacet *td_gm_adjface = TDGeomFacet::get_geom_facet(adj_face_ptr); DLIList<ChollaSurface*> surf_list; td_gm_adjface->get_cholla_surfs( surf_list ); // if it doesn't have an associated surface yet, then it is // a neighboring surface that has not been defined yet (this // should only occur for the 2D case) if (surf_list.size() == 0) { on_boundary = 1; } else { // there should only be one surface associated with // each face - otherwise we've screwed up somewhere assert ( surf_list.size() == 1 ); // if the surface is not the same as the current surface // then we are at the boundary ChollaSurface *check_bsm_ptr = surf_list.get(); if (facet_surface_mesh_ptr != check_bsm_ptr) { on_boundary = 1; } } } } } } if (on_boundary) { // create a tool data if needed if (td_gm_edge == NULL) { TDGeomFacet::add_geom_facet(edge_ptr, -1); td_gm_edge = TDGeomFacet::get_geom_facet( edge_ptr ); edge_ptr->set_as_feature(); } // add the pointer to this surface onto the edge tool data td_gm_edge->add_cholla_surf( facet_surface_mesh_ptr ); // add this edge to the curve fcm_ptr->add_facet( edge_ptr ); if (mydebug) dedraw(edge_ptr); } } } return rv; }