cgma
|
#include <FacetGeometryCreator.hpp>
Public Member Functions | |
FacetGeometryCreator () | |
FacetGeometryCreator (DLIList< FacetEntity * > &face_list, DLIList< FacetEntity * > &edge_list, DLIList< FacetEntity * > &point_list) | |
~FacetGeometryCreator () | |
void | print_me () |
FacetGeometryCreator () | |
FacetGeometryCreator (DLIList< FacetEntity * > &face_list, DLIList< FacetEntity * > &edge_list, DLIList< FacetEntity * > &point_list) | |
~FacetGeometryCreator () | |
void | print_me () |
Private Member Functions | |
void | set_up_tool_datas () |
void | delete_tool_datas () |
CubitStatus | create_volume_boundaries (DLIList< FacetSurfaceMesh * > &facet_surface_sheets, CubitBoolean use_feature_angle, double min_dot, CubitBoolean split_surfaces) |
CubitStatus | create_surface_boundaries (DLIList< FacetSurfaceMesh * > &facet_surface_list, DLIList< FacetCurveMesh * > &facet_curve_list, CubitBoolean use_feature_angle, double min_dot) |
CubitStatus | create_curve_boundaries (DLIList< FacetCurveMesh * > &facet_curve_list, DLIList< FacetPointMesh * > &facet_point_list) |
CubitStatus | classify_edge (FacetEntity *edge_ptr, DLIList< FacetCurveMesh * > &facet_curve_list, FacetSurfaceMesh *fsm_ptr) |
CubitStatus | classify_point (CubitPoint *point_ptr, DLIList< FacetPointMesh * > &facet_point_list, FacetCurveMesh *fcm_ptr) |
CubitStatus | build_geometry (DLIList< FacetSurfaceMesh * > &facet_surface_list, DLIList< FacetCurveMesh * > &facet_curve_list, DLIList< FacetPointMesh * > &facet_point_list, int interp_order, CubitBoolean use_feature_angle, double min_dot, CubitBoolean smooth_non_manifold, CubitBoolean split_surfaces) |
CubitStatus | build_point_geometry (DLIList< FacetPointMesh * > &facet_point_list) |
CubitStatus | build_curve_geometry (DLIList< FacetCurveMesh * > &facet_curve_list) |
CubitStatus | build_loop_geometry (DLIList< FacetCurveMesh * > &facet_curve_list, FacetSurfaceMesh *fsm_ptr, DLIList< LoopSM * > &loop_list, int &ncurves) |
CubitStatus | build_surface_geometry (DLIList< FacetSurfaceMesh * > &facet_surface_list, int interp_order, double min_dot) |
CubitStatus | init_hash_curves () |
void | delete_hash_curves () |
int | get_curve_hash_key (DLIList< FacetSurfaceMesh * > *bsm_list_ptr) |
CubitStatus | init_hash_points () |
void | delete_hash_points () |
int | get_point_hash_key (DLIList< FacetCurveMesh * > *bsm_list_ptr) |
CubitStatus | clean_geometry (CubitBoolean smooth_non_manifold, CubitBoolean split_surfaces, CubitBoolean use_feature_angle, double min_dot, DLIList< FacetCurveMesh * > &facet_curve_list) |
void | set_up_tool_datas () |
void | delete_tool_datas () |
CubitStatus | create_volume_boundaries (DLIList< FacetSurfaceMesh * > &facet_surface_sheets, CubitBoolean use_feature_angle, double min_dot, CubitBoolean split_surfaces) |
CubitStatus | create_surface_boundaries (DLIList< FacetSurfaceMesh * > &facet_surface_list, DLIList< FacetCurveMesh * > &facet_curve_list, CubitBoolean use_feature_angle, double min_dot) |
CubitStatus | create_curve_boundaries (DLIList< FacetCurveMesh * > &facet_curve_list, DLIList< FacetPointMesh * > &facet_point_list) |
CubitStatus | classify_edge (FacetEntity *edge_ptr, DLIList< FacetCurveMesh * > &facet_curve_list, FacetSurfaceMesh *fsm_ptr) |
CubitStatus | classify_point (CubitPoint *point_ptr, DLIList< FacetPointMesh * > &facet_point_list, FacetCurveMesh *fcm_ptr) |
CubitStatus | build_geometry (DLIList< FacetSurfaceMesh * > &facet_surface_list, DLIList< FacetCurveMesh * > &facet_curve_list, DLIList< FacetPointMesh * > &facet_point_list, int interp_order, CubitBoolean use_feature_angle, double min_dot, CubitBoolean smooth_non_manifold, CubitBoolean split_surfaces) |
CubitStatus | build_point_geometry (DLIList< FacetPointMesh * > &facet_point_list) |
CubitStatus | build_curve_geometry (DLIList< FacetCurveMesh * > &facet_curve_list) |
CubitStatus | build_loop_geometry (DLIList< FacetCurveMesh * > &facet_curve_list, FacetSurfaceMesh *fsm_ptr, DLIList< LoopSM * > &loop_list, int &ncurves) |
CubitStatus | build_surface_geometry (DLIList< FacetSurfaceMesh * > &facet_surface_list, int interp_order, double min_dot) |
CubitStatus | init_hash_curves () |
void | delete_hash_curves () |
int | get_curve_hash_key (DLIList< FacetSurfaceMesh * > *bsm_list_ptr) |
CubitStatus | init_hash_points () |
void | delete_hash_points () |
int | get_point_hash_key (DLIList< FacetCurveMesh * > *bsm_list_ptr) |
CubitStatus | clean_geometry (CubitBoolean smooth_non_manifold, CubitBoolean split_surfaces, CubitBoolean use_feature_angle, double min_dot, DLIList< FacetCurveMesh * > &facet_curve_list) |
Private Attributes | |
DLIList< FacetEntity * > | faceList |
DLIList< FacetEntity * > | edgeList |
DLIList< FacetEntity * > | pointList |
DLIList< FacetSurfaceMesh * > | facetSurfaceList |
DLIList< FacetCurveMesh * > | facetCurveList |
DLIList< FacetPointMesh * > | facetPointList |
DLIList< FacetCurveMesh * > * | hashCurveArray |
int | hashCurveSize |
DLIList< FacetPointMesh * > * | hashPointArray |
int | hashPointSize |
Definition at line 33 of file FacetGeometryCreator.hpp.
Definition at line 40 of file FacetGeometryCreator.cpp.
{ hashCurveArray = NULL; hashCurveSize = 0; hashPointArray = NULL; hashPointSize = 0; }
FacetGeometryCreator::FacetGeometryCreator | ( | DLIList< FacetEntity * > & | face_list, |
DLIList< FacetEntity * > & | edge_list, | ||
DLIList< FacetEntity * > & | point_list | ||
) |
Definition at line 51 of file FacetGeometryCreator.cpp.
{ faceList = face_list; edgeList = edge_list; pointList = point_list; set_up_tool_datas(); hashCurveArray = NULL; hashCurveSize = 0; hashPointArray = NULL; hashPointSize = 0; }
Definition at line 111 of file FacetGeometryCreator.cpp.
{ delete_tool_datas(); int ii; //clean up any data remaining. for (ii = facetPointList.size(); ii > 0; ii-- ) delete facetPointList.remove(); for (ii = facetCurveList.size(); ii > 0; ii-- ) delete facetCurveList.remove(); for (ii = facetSurfaceList.size(); ii > 0; ii-- ) delete facetSurfaceList.remove(); }
FacetGeometryCreator::FacetGeometryCreator | ( | DLIList< FacetEntity * > & | face_list, |
DLIList< FacetEntity * > & | edge_list, | ||
DLIList< FacetEntity * > & | point_list | ||
) |
CubitStatus FacetGeometryCreator::build_curve_geometry | ( | DLIList< FacetCurveMesh * > & | facet_curve_list | ) | [private] |
Definition at line 803 of file FacetGeometryCreator.cpp.
{ CubitStatus stat = CUBIT_SUCCESS; int kk; for ( kk = facet_curve_list.size(); kk > 0; kk-- ) { FacetCurveMesh *fcm_ptr = facet_curve_list.get_and_step(); Curve *curv_ptr = fcm_ptr->get_geometric_curve(); if (curv_ptr == NULL) { DLIList<FacetPointMesh*> fpoint_list = fcm_ptr->get_points( ); FacetPointMesh *fpm0_ptr = fpoint_list.get_and_step(); FacetPointMesh *fpm1_ptr = fpoint_list.get_and_step(); CubitPoint *start_point, *end_point; fcm_ptr->get_ends( start_point, end_point ); if (fpm0_ptr->get_facets() != start_point) { FacetPointMesh *temp_ptr; temp_ptr = fpm0_ptr; fpm0_ptr = fpm1_ptr; fpm1_ptr = temp_ptr; } PointSM *start_ptr = (PointSM *) fpm0_ptr->get_geometric_point(); PointSM *end_ptr = (PointSM *) fpm1_ptr->get_geometric_point(); // if this is a curve without a parent surface then handle it // differently. (Curves with parents use the surface to evaluate to // With only a curve, it must evaluate to the curve) DLIList<FacetSurfaceMesh*> fsm_list = fcm_ptr->get_surfaces(); if (fsm_list.size() == 0) { DLIList<FacetEntity*> facet_list; DLIList<CubitPoint*> point_list; // needs to be filled in facet_list = fcm_ptr->get_facets(); DLIList<CubitFacetEdge*> edge_list; CAST_LIST( facet_list, edge_list, CubitFacetEdge ); if (stat != CUBIT_SUCCESS) return stat; stat = FacetQueryEngine::instance()->make_facet_curve( start_ptr, end_ptr, edge_list, point_list, curv_ptr ); if (stat == CUBIT_SUCCESS) { CurveSM *curvsm_ptr = CAST_TO( curv_ptr, CurveSM ); GeometryQueryTool::instance()->make_free_RefEdge( curvsm_ptr ); } } else { stat = FacetQueryEngine::instance()->make_facet_curve( start_ptr, end_ptr, curv_ptr ); if ( curv_ptr == NULL || stat != CUBIT_SUCCESS ) { PRINT_ERROR("Problems building mesh based curves.\n"); return stat; } } fcm_ptr->assign_geometric_curve(curv_ptr); } } return stat; }
CubitStatus FacetGeometryCreator::build_curve_geometry | ( | DLIList< FacetCurveMesh * > & | facet_curve_list | ) | [private] |
CubitStatus FacetGeometryCreator::build_geometry | ( | DLIList< FacetSurfaceMesh * > & | facet_surface_list, |
DLIList< FacetCurveMesh * > & | facet_curve_list, | ||
DLIList< FacetPointMesh * > & | facet_point_list, | ||
int | interp_order, | ||
CubitBoolean | use_feature_angle, | ||
double | min_dot, | ||
CubitBoolean | smooth_non_manifold, | ||
CubitBoolean | split_surfaces | ||
) | [private] |
Definition at line 741 of file FacetGeometryCreator.cpp.
{ CubitStatus stat = CUBIT_SUCCESS; stat = build_point_geometry( facet_point_list ); if (stat == CUBIT_SUCCESS) stat = build_curve_geometry( facet_curve_list ); if (stat == CUBIT_SUCCESS) stat = build_surface_geometry( facet_surface_list, interp_order, min_dot ); if (stat == CUBIT_SUCCESS) if (interp_order == 4) stat = clean_geometry( smooth_non_manifold, split_surfaces, use_feature_angle, min_dot, facet_curve_list ); return stat; }
CubitStatus FacetGeometryCreator::build_geometry | ( | DLIList< FacetSurfaceMesh * > & | facet_surface_list, |
DLIList< FacetCurveMesh * > & | facet_curve_list, | ||
DLIList< FacetPointMesh * > & | facet_point_list, | ||
int | interp_order, | ||
CubitBoolean | use_feature_angle, | ||
double | min_dot, | ||
CubitBoolean | smooth_non_manifold, | ||
CubitBoolean | split_surfaces | ||
) | [private] |
CubitStatus FacetGeometryCreator::build_loop_geometry | ( | DLIList< FacetCurveMesh * > & | facet_curve_list, |
FacetSurfaceMesh * | fsm_ptr, | ||
DLIList< LoopSM * > & | loop_list, | ||
int & | ncurves | ||
) | [private] |
Definition at line 872 of file FacetGeometryCreator.cpp.
{ // find the first unused curve on the list. Use that as the starting curve // in the loop ncurves = 0; CubitStatus stat = CUBIT_SUCCESS; int ii, jj; int found = 0; FacetCurveMesh *fcm_ptr = NULL; for(ii=0; ii<facet_curve_list.size() && !found; ii++) { fcm_ptr = facet_curve_list.get_and_step(); if (fcm_ptr->get_flag() == 0) found = 1; } if (!found) return CUBIT_FAILURE; // all the curves have already been used in this surface // get the first mesh edge on the first curve. use it to determine the // orientation of the curve with respect to the surface DLIList<FacetEntity*> facet_list = fcm_ptr->get_facets(); FacetEntity *facet_ptr = facet_list.get(); CubitFacetEdge *edge_ptr = CAST_TO( facet_ptr, CubitFacetEdge ); if (!edge_ptr) return CUBIT_FAILURE; // facet edges are not on the list ???? // get the adjacent face on this surface DLIList<FacetEntity*> adj_face_list; FacetEntity *face_ptr = NULL; edge_ptr->get_parents( adj_face_list ); found = 0; for ( jj = 0; jj < adj_face_list.size() && !found; jj++ ) { face_ptr = adj_face_list.get_and_step(); TDGeomFacet *td_gm_face = TDGeomFacet::get_geom_facet(face_ptr); DLIList<FacetSurfaceMesh*> fsurf_list; td_gm_face->get_facet_surfs( fsurf_list ); FacetSurfaceMesh *face_fsm_ptr = fsurf_list.get(); if(face_fsm_ptr == fsm_ptr) { found = 1; } } if (!found) return CUBIT_FAILURE; // didn't find an adj face on the surface ??? // determine orientation of nodes on this mesh face CubitPoint *start_ptr, *end_ptr; fcm_ptr->get_ends( start_ptr, end_ptr ); end_ptr = edge_ptr->other_point( start_ptr ); if (end_ptr == NULL) return CUBIT_FAILURE; // the edge list may not be ordered correctly?? CubitPoint *points[3]; CubitFacet *tri_ptr = CAST_TO( face_ptr, CubitFacet ); tri_ptr->points( points[0], points[1], points[2] ); found = 0; CubitSense orientation; for ( jj = 0; jj < 3 && !found; jj++ ) { if (points[jj] == start_ptr) { int next_jj = (jj + 1)%3; int prev_jj = (jj + 2)%3; if(points[next_jj] == end_ptr) { found = 1; orientation = CUBIT_FORWARD; } else if(points[prev_jj] == end_ptr) { found = 1; orientation = CUBIT_REVERSED; } } } if (!found) return CUBIT_FAILURE; // couldn't determine the orientation fcm_ptr->get_ends( start_ptr, end_ptr ); // create a new coedge CoEdgeSM *coedge_ptr = NULL; Curve *curv_ptr = fcm_ptr->get_geometric_curve(); stat = GeometryModifyTool::instance()->make_facet_coedge( (CurveSM*)curv_ptr, orientation, coedge_ptr ); if ( coedge_ptr == NULL || stat != CUBIT_SUCCESS ) { PRINT_ERROR("Problems building mesh based coedges.\n"); return stat; } // start a list of coedges for this loop DLIList<CoEdgeSM*> coedge_list; coedge_list.append( coedge_ptr ); fcm_ptr->set_flag(1); FacetCurveMesh *last_fcm_ptr = fcm_ptr; // loop through and determine the rest of the coedges based on the // orientation of the first curve in the loop fcm_ptr->get_ends( start_ptr, end_ptr ); FacetEntity *n0_ptr, *n1_ptr; if (orientation == CUBIT_FORWARD) { n0_ptr = start_ptr; n1_ptr = end_ptr; } else { n1_ptr = start_ptr; n0_ptr = end_ptr; } while (n0_ptr != n1_ptr) { // find the next curve in the loop int ntimes = 0; found = 0; while(!found) { for ( jj = 0; jj < facet_curve_list.size() && !found; jj++) { fcm_ptr = facet_curve_list.get_and_step(); if (last_fcm_ptr != fcm_ptr && (fcm_ptr->get_flag() == 0 || ntimes > 0)) { fcm_ptr->get_ends( start_ptr, end_ptr ); if (start_ptr == n1_ptr) { found = 1; orientation = CUBIT_FORWARD; n1_ptr = end_ptr; } else if (end_ptr == n1_ptr) { found = 1; orientation = CUBIT_REVERSED; n1_ptr = start_ptr; } } } if (!found) { // in this special case - we have gone through the whole list without // finding the next curve on the loop. In the first pass we have assumed // that each curve is only used once. This may not be the case. Go // back and see of we can find a curve that has already been used that // will work. If we fail the second time through, then we fail! ntimes++; if (ntimes > 1) // return CUBIT_FAILURE; // didn't find the next curve in the loop // DEBUG ONLY -- THIS NEEDS TO BE FIXED goto create_loop; } } // create a new coedge coedge_ptr = NULL; curv_ptr = fcm_ptr->get_geometric_curve(); stat = GeometryModifyTool::instance()->make_facet_coedge( (CurveSM*)curv_ptr, orientation, coedge_ptr ); if ( coedge_ptr == NULL || stat != CUBIT_SUCCESS ) { PRINT_ERROR("Problems building mesh based coedges.\n"); return stat; } coedge_list.append( coedge_ptr ); if (coedge_list.size() > 2*facet_curve_list.size()) return CUBIT_FAILURE; // more curves in the loop than their are curves ???? fcm_ptr->set_flag(1); last_fcm_ptr = fcm_ptr; } // create the loop create_loop: LoopSM *loop_ptr = NULL; stat = GeometryModifyTool::instance()->make_facet_loop( coedge_list, loop_ptr ); if ( coedge_ptr == NULL || stat != CUBIT_SUCCESS ) { PRINT_ERROR("Problems building mesh based loops.\n"); return stat; } loop_list.append( loop_ptr ); ncurves = coedge_list.size(); return stat; }
CubitStatus FacetGeometryCreator::build_loop_geometry | ( | DLIList< FacetCurveMesh * > & | facet_curve_list, |
FacetSurfaceMesh * | fsm_ptr, | ||
DLIList< LoopSM * > & | loop_list, | ||
int & | ncurves | ||
) | [private] |
CubitStatus FacetGeometryCreator::build_point_geometry | ( | DLIList< FacetPointMesh * > & | facet_point_list | ) | [private] |
Definition at line 772 of file FacetGeometryCreator.cpp.
{ CubitStatus stat = CUBIT_SUCCESS; int kk; for ( kk = facet_point_list.size(); kk > 0; kk-- ) { FacetPointMesh *fpm_ptr = facet_point_list.get_and_step(); Point *point_ptr = fpm_ptr->get_geometric_point(); if (point_ptr == NULL) { FacetEntity *facet_ptr = fpm_ptr->get_facets(); CubitPoint *cp_ptr = CAST_TO( facet_ptr, CubitPoint ); PointSM *point = NULL; stat = GeometryModifyTool::instance()->make_facet_point( cp_ptr, point ); if ( point == NULL || stat != CUBIT_SUCCESS ) { PRINT_ERROR("Problems building mesh based points.\n"); return stat; } point_ptr = (Point *)point; fpm_ptr->assign_geometric_point(point_ptr); } } return stat; }
CubitStatus FacetGeometryCreator::build_point_geometry | ( | DLIList< FacetPointMesh * > & | facet_point_list | ) | [private] |
CubitStatus FacetGeometryCreator::build_surface_geometry | ( | DLIList< FacetSurfaceMesh * > & | facet_surface_list, |
int | interp_order, | ||
double | min_dot | ||
) | [private] |
Definition at line 1081 of file FacetGeometryCreator.cpp.
{ CubitStatus stat = CUBIT_SUCCESS; int ii, kk; // make sure the facet flags have been reset FacetCurveMesh *fcm_ptr; for ( kk = facet_surface_list.size(); kk > 0; kk-- ) { FacetSurfaceMesh *fsm_ptr = facet_surface_list.get_and_step(); fsm_ptr->reset_facet_flags(); } // now loop through surfaces and create them int mydebug = 0; for ( kk = facet_surface_list.size(); kk > 0; kk-- ) { int num_curves = 0; FacetSurfaceMesh *fsm_ptr = facet_surface_list.get_and_step(); DLIList<FacetCurveMesh*> fcurve_list; fsm_ptr->get_curves( fcurve_list ); // init flags for curves on this surface for (ii=0; ii< fcurve_list.size(); ii++) { fcm_ptr = fcurve_list.get_and_step(); fcm_ptr->set_flag(0); if (mydebug) { fcm_ptr->draw(); } } // generate loops - keep going until we have used all the curves in the list DLIList<LoopSM*> loop_list; while (num_curves < fcurve_list.size()) { int ncurves = 0; stat = build_loop_geometry( fcurve_list, fsm_ptr, loop_list, ncurves ); if (stat != CUBIT_SUCCESS) { PRINT_ERROR("Can't build geometric loop from facets\n"); return stat; } num_curves += ncurves; } // create the surface Surface *surf_ptr = fsm_ptr->get_geometric_surface(); if (surf_ptr == NULL) { DLIList<FacetEntity*> facet_entity_list; DLIList<CubitPoint*> point_list; fsm_ptr->get_points(point_list); fsm_ptr->get_facets(facet_entity_list); DLIList<CubitFacet*> facet_list; CAST_LIST( facet_entity_list, facet_list, CubitFacet ); stat = GeometryModifyTool::instance()->make_facet_surface(facet_list, point_list, loop_list, interp_order, min_dot, surf_ptr); if ( surf_ptr == NULL || stat != CUBIT_SUCCESS ) { PRINT_ERROR("Problems building mesh based surfaces.\n"); return stat; } fsm_ptr->assign_geometric_surface(surf_ptr); } } return stat; }
CubitStatus FacetGeometryCreator::build_surface_geometry | ( | DLIList< FacetSurfaceMesh * > & | facet_surface_list, |
int | interp_order, | ||
double | min_dot | ||
) | [private] |
CubitStatus FacetGeometryCreator::classify_edge | ( | FacetEntity * | edge_ptr, |
DLIList< FacetCurveMesh * > & | facet_curve_list, | ||
FacetSurfaceMesh * | fsm_ptr | ||
) | [private] |
Definition at line 434 of file FacetGeometryCreator.cpp.
{ CubitStatus rv = CUBIT_SUCCESS; // see if we have already classified this edge (from another surface) TDGeomFacet *td_gm_edge = TDGeomFacet::get_geom_facet(edge_ptr); if (td_gm_edge->get_hit_flag() != 0) return rv; td_gm_edge->set_hit_flag(1); // get the surfaces adjacent to this edge DLIList<FacetSurfaceMesh*> this_fsurf_list; td_gm_edge->get_facet_surfs( this_fsurf_list ); int this_num_adj = this_fsurf_list.size(); // see if the surfaces defined on this face match any // of the existing block curves DLIList<FacetSurfaceMesh*> *fsurf_list_ptr; FacetCurveMesh *fcm_ptr = NULL; int found = 0; int key = get_curve_hash_key( &this_fsurf_list ); int ii; for (ii=0; ii<hashCurveArray[key].size() && !found; ii++) { fcm_ptr = hashCurveArray[key].get(); // the first one checked should be the same as the last one checked (don't // use get_and_step here) This should speed things up // check if surfaces are the same fsurf_list_ptr = fcm_ptr->get_surface_list_ptr( ); int num_adj = fsurf_list_ptr->size(); if (num_adj == this_num_adj) { found = 1; int jj, kk; for (jj=fsurf_list_ptr->size(); jj>0 && found; jj--) { int same_surf = 0; FacetSurfaceMesh *fsm_ptr = fsurf_list_ptr->get_and_step(); for(kk=this_fsurf_list.size(); kk>0 && !same_surf; kk--) { FacetSurfaceMesh *this_fsm_ptr = this_fsurf_list.get_and_step(); if (this_fsm_ptr == fsm_ptr) { same_surf = 1; } } if (!same_surf) found = 0; } } if (!found) hashCurveArray[key].step(); } // if the unique set of surfaces that this edge is associated // with was found to already exist for a facet curve -- add the // edge to the block curve if (found) { // add the edge to the block curve mesh (make sure it is only added once) int was_added = fcm_ptr->add_facet_unique( edge_ptr ); // add the curve to the surface (if needed) facet_surf_mesh_ptr->add_curve_unique( fcm_ptr ); // add the curve to the edge td_gm_edge->add_facet_curve( fcm_ptr ); } // if the unique set of surfaces that this edge is associated // with is not found, then create a new facet curve and add the edge to it else { // create it and update surface and nodeset info int block_id = td_gm_edge->get_block_id(); FacetCurveMesh *new_fcm_ptr = new FacetCurveMesh( block_id ); for (int mm=0; mm<this_num_adj; mm++) { new_fcm_ptr->add_surface( this_fsurf_list.get_and_step() ); } // add the edge new_fcm_ptr->add_facet( edge_ptr ); // update the surface with this new curve facet_surf_mesh_ptr->add_curve( new_fcm_ptr ); // add the new curve to the global list facet_curve_list.append( new_fcm_ptr ); // add the curve to the edge td_gm_edge->add_facet_curve( new_fcm_ptr ); // add the new curve to the hash table hashCurveArray[key].append( new_fcm_ptr ); } return rv; }
CubitStatus FacetGeometryCreator::classify_edge | ( | FacetEntity * | edge_ptr, |
DLIList< FacetCurveMesh * > & | facet_curve_list, | ||
FacetSurfaceMesh * | fsm_ptr | ||
) | [private] |
CubitStatus FacetGeometryCreator::classify_point | ( | CubitPoint * | point_ptr, |
DLIList< FacetPointMesh * > & | facet_point_list, | ||
FacetCurveMesh * | fcm_ptr | ||
) | [private] |
Definition at line 607 of file FacetGeometryCreator.cpp.
{ int ii; int found = 0; TDGeomFacet *td_node = TDGeomFacet::get_geom_facet( point_ptr ); FacetPointMesh *fpm_ptr; DLIList<FacetCurveMesh*> fcm_list; td_node->get_facet_curves(fcm_list); int key = get_point_hash_key( &fcm_list ); for (ii = 0; ii < hashPointArray[key].size() && !found; ii++) { fpm_ptr = hashPointArray[key].get(); FacetEntity *this_point_ptr = fpm_ptr->get_facets(); if (this_point_ptr == point_ptr) { found = 1; } else { hashPointArray[key].step(); } } if (found) { fpm_ptr->add_curve( fcm_ptr ); fcm_ptr->add_point( fpm_ptr ); } else { FacetPointMesh *new_fpm_ptr = new FacetPointMesh(); new_fpm_ptr->add_facet( point_ptr ); new_fpm_ptr->add_curve( fcm_ptr ); fcm_ptr->add_point( new_fpm_ptr ); facet_point_list.append( new_fpm_ptr ); hashPointArray[key].append( new_fpm_ptr ); } return CUBIT_SUCCESS; }
CubitStatus FacetGeometryCreator::classify_point | ( | CubitPoint * | point_ptr, |
DLIList< FacetPointMesh * > & | facet_point_list, | ||
FacetCurveMesh * | fcm_ptr | ||
) | [private] |
CubitStatus FacetGeometryCreator::clean_geometry | ( | CubitBoolean | smooth_non_manifold, |
CubitBoolean | split_surfaces, | ||
CubitBoolean | use_feature_angle, | ||
double | min_dot, | ||
DLIList< FacetCurveMesh * > & | facet_curve_list | ||
) | [private] |
Definition at line 1169 of file FacetGeometryCreator.cpp.
{ int iedge; FacetCurveMesh *fcm_ptr; FacetEntity *fedge_ptr; CubitFacetEdge *edge_ptr; DLIList <FacetEntity *> facet_list; DLIList<CubitFacetEdge *> feature_edge_list; int icurve; for (icurve=0; icurve<facet_curve_list.size(); icurve++) { fcm_ptr = facet_curve_list.get_and_step(); facet_list.clean_out(); facet_list = fcm_ptr->get_facets( ); for (iedge=0; iedge<facet_list.size(); iedge++) { fedge_ptr = facet_list.get_and_step(); edge_ptr = CAST_TO( fedge_ptr, CubitFacetEdge ); feature_edge_list.append( edge_ptr ); } } return FacetQueryEngine::instance()->fix_geometry( smooth_non_manifold, split_surfaces, use_feature_angle, mindot, feature_edge_list ); }
CubitStatus FacetGeometryCreator::clean_geometry | ( | CubitBoolean | smooth_non_manifold, |
CubitBoolean | split_surfaces, | ||
CubitBoolean | use_feature_angle, | ||
double | min_dot, | ||
DLIList< FacetCurveMesh * > & | facet_curve_list | ||
) | [private] |
CubitStatus FacetGeometryCreator::create_curve_boundaries | ( | DLIList< FacetCurveMesh * > & | facet_curve_list, |
DLIList< FacetPointMesh * > & | facet_point_list | ||
) | [private] |
Definition at line 560 of file FacetGeometryCreator.cpp.
{ CubitStatus stat = CUBIT_SUCCESS; // hash the points for speed stat = init_hash_points(); if (stat != CUBIT_SUCCESS) { delete_hash_points(); return stat; } // loop through each of the end nodes on the curves // Determine which point it is a part of. // Create a new FacetPointMesh for each point int ii, kk; for ( ii = facet_curve_list.size(); ii > 0; ii-- ) { FacetCurveMesh *fcm_ptr = facet_curve_list.get_and_step(); CubitPoint *point_ptr[2]; fcm_ptr->get_ends( point_ptr[0], point_ptr[1] ); for ( kk = 0; kk < 2; kk++) { stat = classify_point( point_ptr[kk], facet_point_list, fcm_ptr ); if (stat != CUBIT_SUCCESS) { delete_hash_points(); return stat; } } } delete_hash_points(); return stat; }
CubitStatus FacetGeometryCreator::create_curve_boundaries | ( | DLIList< FacetCurveMesh * > & | facet_curve_list, |
DLIList< FacetPointMesh * > & | facet_point_list | ||
) | [private] |
CubitStatus FacetGeometryCreator::create_surface_boundaries | ( | DLIList< FacetSurfaceMesh * > & | facet_surface_list, |
DLIList< FacetCurveMesh * > & | facet_curve_list, | ||
CubitBoolean | use_feature_angle, | ||
double | min_dot | ||
) | [private] |
Definition at line 217 of file FacetGeometryCreator.cpp.
{ CubitStatus stat = CUBIT_SUCCESS; // determine the boundaries for each surface. One curve per surface int ii; for ( ii = facet_surface_list.size(); ii > 0; ii-- ) { FacetSurfaceMesh *fsm_ptr = facet_surface_list.get_and_step(); DLIList<FacetCurveMesh*> fcurve_list; fsm_ptr->get_curves( fcurve_list ); if (fcurve_list.size() == 0) { DLIList<FacetEntity*> facet_list; fsm_ptr->get_facets(facet_list); FacetSkinTool f_skin_tool; stat = f_skin_tool.skin_2d(facet_list, fsm_ptr); if ( stat != CUBIT_SUCCESS ) return stat; } } // create a hash list of curves - to speed up classification stat = init_hash_curves(); if (stat != CUBIT_SUCCESS) { delete_hash_curves(); return stat; } // loop through each of the edges on the surfaces // Determine which curve it is a part of. // Create a new FacetCurveMesh for each curve // Curves are created wherever there is a unique set of associated // surfaces int jj, kk; for ( ii = facet_surface_list.size(); ii > 0; ii-- ) { FacetSurfaceMesh *fsm_ptr = facet_surface_list.get_and_step(); DLIList<FacetCurveMesh*> fcurve_list; fsm_ptr->get_curves( fcurve_list ); // curently there should only be one curve list per surface for (jj=fcurve_list.size(); jj>0; jj--) { FacetCurveMesh *fcm_ptr = fcurve_list.get_and_step(); DLIList<FacetEntity*> facet_list = fcm_ptr->get_facets(); FacetEntity *edge_ptr; for ( kk = 0; kk < facet_list.size(); kk++) { edge_ptr = facet_list.get_and_step(); stat = classify_edge( edge_ptr, facet_curve_list, fsm_ptr ); if (stat != CUBIT_SUCCESS) return stat; } // delete this FacetCurveMesh - it should have been replaced by one // or more curves bounding this surface fsm_ptr->remove_curve( fcm_ptr ); } } delete_hash_curves(); // Split these curves so that there is only one string of continuous // edges per curve (it will also order the edges and set the start // and end nodes for each curve) int num_curves = facet_curve_list.size(); facet_curve_list.reset(); for ( ii = num_curves; ii > 0 && stat == CUBIT_SUCCESS; ii-- ) { FacetCurveMesh *fcm_ptr = facet_curve_list.get(); // if necessary mark nodes that will serve as feature breaks (vertices // will be generatedat them) if (use_feature_angle) { stat = fcm_ptr->feature_angle( min_dot ); if (stat != CUBIT_SUCCESS) return stat; } // split the curve based on various criteria stat = fcm_ptr->split_curve( facet_curve_list ); // delete this curve (new curves were created in split_curve) delete fcm_ptr; facet_curve_list.change_to(NULL); facet_curve_list.step(); } facet_curve_list.remove_all_with_value(NULL); // update the point->curve associativity for (ii=0; ii<facet_curve_list.size(); ii++) { FacetCurveMesh *fcm_ptr = facet_curve_list.get_and_step(); CubitPoint *start_ptr, *end_ptr; fcm_ptr->get_ends( start_ptr, end_ptr ); TDGeomFacet *td = TDGeomFacet::get_geom_facet( start_ptr ); td->add_facet_curve( fcm_ptr ); td = TDGeomFacet::get_geom_facet( end_ptr ); td->add_facet_curve( fcm_ptr ); } return stat; }
CubitStatus FacetGeometryCreator::create_surface_boundaries | ( | DLIList< FacetSurfaceMesh * > & | facet_surface_list, |
DLIList< FacetCurveMesh * > & | facet_curve_list, | ||
CubitBoolean | use_feature_angle, | ||
double | min_dot | ||
) | [private] |
CubitStatus FacetGeometryCreator::create_volume_boundaries | ( | DLIList< FacetSurfaceMesh * > & | facet_surface_sheets, |
CubitBoolean | use_feature_angle, | ||
double | min_dot, | ||
CubitBoolean | split_surfaces | ||
) | [private] |
Definition at line 132 of file FacetGeometryCreator.cpp.
{ CubitStatus rv = CUBIT_SUCCESS; // Split these surfaces so that there is only one set of continuous // faces per surface int ii; int num_surfaces = facet_surface_sheets.size(); facet_surface_sheets.reset(); for ( ii = num_surfaces; ii > 0; ii-- ) { FacetSurfaceMesh *fsm_ptr = facet_surface_sheets.get_and_step(); // make a list of feature edges DLIList<CubitFacetEdge *> feature_edge_list; if (use_feature_angle) { rv = fsm_ptr->feature_angle( min_dot, feature_edge_list ); } else { rv = fsm_ptr->non_manifold_edges( feature_edge_list ); } if (rv != CUBIT_SUCCESS) return rv; // crack the surface at the feature edges. create new edges and // points so the facet representation is discontinuous. rv = FacetQueryEngine::make_features( feature_edge_list, split_surfaces ); if (rv != CUBIT_SUCCESS) return rv; // split up the surface rv = fsm_ptr->split_surface( facet_surface_sheets ); if (rv != CUBIT_SUCCESS) return rv; } // Clean up any edges that do not form complete loops as a result of // feature angle. For this implementation we will allow features to exist // within the surface without defining a complete loop. -- so the next // piece of code is never executed. CubitBoolean use_complete_loops_only = CUBIT_FALSE; if (use_feature_angle && use_complete_loops_only) { for ( ii = facet_surface_sheets.size(); ii > 0; ii-- ) { FacetSurfaceMesh *fsm_ptr = facet_surface_sheets.get_and_step(); fsm_ptr->clean_features(); } } // Now that we've broken everything into surfaces, update the surface IDs // on the boundary facet tool data if (!split_surfaces) { for ( ii = facet_surface_sheets.size(); ii > 0; ii-- ) { FacetSurfaceMesh *fsm_ptr = facet_surface_sheets.get_and_step(); fsm_ptr->update_boundary_tool_data(); } } return rv; }
CubitStatus FacetGeometryCreator::create_volume_boundaries | ( | DLIList< FacetSurfaceMesh * > & | facet_surface_sheets, |
CubitBoolean | use_feature_angle, | ||
double | min_dot, | ||
CubitBoolean | split_surfaces | ||
) | [private] |
void FacetGeometryCreator::delete_hash_curves | ( | ) | [private] |
Definition at line 388 of file FacetGeometryCreator.cpp.
{ if (hashCurveArray) delete [] hashCurveArray; hashCurveArray = NULL; hashCurveSize = 0; }
void FacetGeometryCreator::delete_hash_curves | ( | ) | [private] |
void FacetGeometryCreator::delete_hash_points | ( | ) | [private] |
Definition at line 699 of file FacetGeometryCreator.cpp.
{ if (hashPointArray) delete [] hashPointArray; hashPointArray = NULL; hashPointSize = 0; }
void FacetGeometryCreator::delete_hash_points | ( | ) | [private] |
void FacetGeometryCreator::delete_tool_datas | ( | ) | [private] |
Definition at line 87 of file FacetGeometryCreator.cpp.
{ int ii; FacetEntity *fe_ptr; for (ii=0; ii<faceList.size(); ii++) { fe_ptr = faceList.get_and_step(); fe_ptr->delete_TD( &TDGeomFacet::is_geom_facet ); } for (ii=0; ii<edgeList.size(); ii++) { fe_ptr = edgeList.get_and_step(); fe_ptr->delete_TD( &TDGeomFacet::is_geom_facet ); } for (ii=0; ii<pointList.size(); ii++) { fe_ptr = pointList.get_and_step(); fe_ptr->delete_TD( &TDGeomFacet::is_geom_facet ); } }
void FacetGeometryCreator::delete_tool_datas | ( | ) | [private] |
int FacetGeometryCreator::get_curve_hash_key | ( | DLIList< FacetSurfaceMesh * > * | bsm_list_ptr | ) | [private] |
Definition at line 402 of file FacetGeometryCreator.cpp.
{ int key, j; FacetSurfaceMesh *fsm_ptr; if (fsm_list_ptr->size() == 0) { key = 0; } else { key = INT_MAX; for (j=0; j<fsm_list_ptr->size(); j++) { fsm_ptr = fsm_list_ptr->get_and_step(); if (fsm_ptr->get_id() < key) key = fsm_ptr->get_id(); } } key = key % hashCurveSize; return key; }
int FacetGeometryCreator::get_curve_hash_key | ( | DLIList< FacetSurfaceMesh * > * | bsm_list_ptr | ) | [private] |
int FacetGeometryCreator::get_point_hash_key | ( | DLIList< FacetCurveMesh * > * | bsm_list_ptr | ) | [private] |
Definition at line 713 of file FacetGeometryCreator.cpp.
{ int key, j; FacetCurveMesh *fcm_ptr; if (fcm_list_ptr->size() == 0) { key = 0; } else { key = INT_MAX; for (j=0; j<fcm_list_ptr->size(); j++) { fcm_ptr = fcm_list_ptr->get_and_step(); if (fcm_ptr->get_id() < key) key = fcm_ptr->get_id(); } } key = key % hashPointSize; return key; }
int FacetGeometryCreator::get_point_hash_key | ( | DLIList< FacetCurveMesh * > * | bsm_list_ptr | ) | [private] |
CubitStatus FacetGeometryCreator::init_hash_curves | ( | ) | [private] |
Definition at line 346 of file FacetGeometryCreator.cpp.
{ /* === find the next highest prime number */ int num_surfs = facetSurfaceList.size(); int i; hashCurveSize = num_surfs; if (num_surfs < 30) hashCurveSize = 31; else { i=2; while (i<hashCurveSize*0.5 + 1) { if (hashCurveSize % i == 0) { i=2; hashCurveSize++; } else { i++; } } } hashCurveArray = new DLIList<FacetCurveMesh*>[hashCurveSize]; int key = 0; FacetCurveMesh *fcm_ptr; DLIList<FacetSurfaceMesh*> *fsm_list_ptr; for (i=0; i<facetCurveList.size(); i++) { fcm_ptr = facetCurveList.get_and_step(); fsm_list_ptr = fcm_ptr->get_surface_list_ptr(); key = get_curve_hash_key( fsm_list_ptr ); hashCurveArray[key].append( fcm_ptr ); } return CUBIT_SUCCESS; }
CubitStatus FacetGeometryCreator::init_hash_curves | ( | ) | [private] |
CubitStatus FacetGeometryCreator::init_hash_points | ( | ) | [private] |
Definition at line 657 of file FacetGeometryCreator.cpp.
{ /* === find the next highest prime number */ int num_curves = facetCurveList.size(); int i; hashPointSize = num_curves; if (num_curves < 30) hashPointSize = 31; else { i=2; while (i<hashPointSize*0.5 + 1) { if (hashPointSize % i == 0) { i=2; hashPointSize++; } else { i++; } } } hashPointArray = new DLIList<FacetPointMesh*>[hashPointSize]; int key = 0; FacetPointMesh *fpm_ptr; DLIList<FacetCurveMesh*> *fcm_list_ptr; for (i=0; i<facetPointList.size(); i++) { fpm_ptr = facetPointList.get_and_step(); fcm_list_ptr = fpm_ptr->get_curve_list_ptr(); key = get_point_hash_key( fcm_list_ptr ); hashPointArray[key].append( fpm_ptr ); } return CUBIT_SUCCESS; }
CubitStatus FacetGeometryCreator::init_hash_points | ( | ) | [private] |
void FacetGeometryCreator::print_me | ( | ) |
Definition at line 1206 of file FacetGeometryCreator.cpp.
{ FILE *fp = fopen( "fbg.out", "w" ); int ii, jj, kk; for (ii=0; ii<facetSurfaceList.size(); ii++) { FacetSurfaceMesh *fsm_ptr = facetSurfaceList.get_and_step(); fprintf( fp, "*********** Surface %d ***************\n", fsm_ptr->get_id()); DLIList<FacetCurveMesh *> fcm_list; fsm_ptr->get_curves( fcm_list ); for (jj=0; jj<fcm_list.size(); jj++) { FacetCurveMesh *fcm_ptr = fcm_list.get_and_step(); fprintf(fp, " Curve %d\n", fcm_ptr->get_id() ); DLIList<FacetPointMesh *> fpm_list = fcm_ptr->get_points(); for (kk=0; kk<fpm_list.size(); kk++) { FacetPointMesh *fpm_ptr = fpm_list.get_and_step(); FacetEntity *facet_point = fpm_ptr->get_facets(); if (facet_point) { CubitPoint *point_ptr = CAST_TO(facet_point, CubitPoint); CubitVector pt = point_ptr->coordinates(); fprintf(fp, " (%d) x = %8.4lf y = %8.4lf z = %8.4lf\n", fpm_ptr->get_id(), pt.x(), pt.y(), pt.z()); } } } } fclose(fp); }
void FacetGeometryCreator::print_me | ( | ) |
void FacetGeometryCreator::set_up_tool_datas | ( | ) | [private] |
Definition at line 68 of file FacetGeometryCreator.cpp.
{ int ii; FacetEntity *fe_ptr; for (ii=0; ii<faceList.size(); ii++) { fe_ptr = faceList.get_and_step(); TDGeomFacet::add_geom_facet( fe_ptr, -1 ); } for (ii=0; ii<pointList.size(); ii++) { fe_ptr = pointList.get_and_step(); TDGeomFacet::add_geom_facet( fe_ptr, -1 ); } }
void FacetGeometryCreator::set_up_tool_datas | ( | ) | [private] |
DLIList< FacetEntity * > FacetGeometryCreator::edgeList [private] |
Definition at line 50 of file FacetGeometryCreator.hpp.
DLIList< FacetEntity * > FacetGeometryCreator::faceList [private] |
Definition at line 49 of file FacetGeometryCreator.hpp.
DLIList< FacetCurveMesh * > FacetGeometryCreator::facetCurveList [private] |
Definition at line 53 of file FacetGeometryCreator.hpp.
DLIList< FacetPointMesh * > FacetGeometryCreator::facetPointList [private] |
Definition at line 54 of file FacetGeometryCreator.hpp.
DLIList< FacetSurfaceMesh * > FacetGeometryCreator::facetSurfaceList [private] |
Definition at line 52 of file FacetGeometryCreator.hpp.
DLIList< FacetCurveMesh * > * FacetGeometryCreator::hashCurveArray [private] |
Definition at line 56 of file FacetGeometryCreator.hpp.
int FacetGeometryCreator::hashCurveSize [private] |
Definition at line 57 of file FacetGeometryCreator.hpp.
DLIList< FacetPointMesh * > * FacetGeometryCreator::hashPointArray [private] |
Definition at line 58 of file FacetGeometryCreator.hpp.
int FacetGeometryCreator::hashPointSize [private] |
Definition at line 59 of file FacetGeometryCreator.hpp.
DLIList< FacetEntity * > FacetGeometryCreator::pointList [private] |
Definition at line 51 of file FacetGeometryCreator.hpp.