cgma
|
00001 //------------------------------------------------------------------------- 00002 // Filename : FacetGeometryCreator.hpp 00003 // 00004 // Purpose : For a list of facets, builds a topology of 00005 // surfaces, curves and vertices 00006 // 00007 // Special Notes : 00008 // 00009 // Creator : Steven J. Owen 00010 // 00011 // Date : 4/29/2001 00012 // 00013 // Owner : Steven J. Owen 00014 //------------------------------------------------------------------------- 00015 00016 #ifndef MESHGEOMETRYCREATOR_HPP 00017 #define MESHGEOMETRYCREATOR_HPP 00018 00019 #include "DLIList.hpp" 00020 00021 class FacetEntity; 00022 class FacetCurveMesh; 00023 class FacetSurfaceMesh; 00024 class FacetVolumeMesh; 00025 class LoopSM; 00026 class Body; 00027 class Surface; 00028 class FacetPointMesh; 00029 class CubitPoint; 00030 class CubitFacetEdge; 00031 class CubitFacet; 00032 00033 class FacetGeometryCreator 00034 { 00035 public: 00036 FacetGeometryCreator( ); 00037 FacetGeometryCreator(DLIList<FacetEntity*> &face_list, 00038 DLIList<FacetEntity*> &edge_list, 00039 DLIList<FacetEntity*> &point_list ); 00040 //- Constructor 00041 00042 ~FacetGeometryCreator(); 00043 //- Destructor 00044 00045 void print_me(); 00046 00047 private: 00048 00049 DLIList<FacetEntity*> faceList; 00050 DLIList<FacetEntity*> edgeList; 00051 DLIList<FacetEntity*> pointList; 00052 DLIList<FacetSurfaceMesh*> facetSurfaceList; 00053 DLIList<FacetCurveMesh*> facetCurveList; 00054 DLIList<FacetPointMesh*> facetPointList; 00055 00056 DLIList<FacetCurveMesh*> *hashCurveArray; 00057 int hashCurveSize; 00058 DLIList<FacetPointMesh*> *hashPointArray; 00059 int hashPointSize; 00060 00061 void set_up_tool_datas( ); 00062 void delete_tool_datas( ); 00063 00064 CubitStatus create_volume_boundaries( DLIList<FacetSurfaceMesh*> &facet_surface_sheets, 00065 CubitBoolean use_feature_angle, 00066 double min_dot, 00067 CubitBoolean split_surfaces ); 00068 //- creates the correct facetsurfaces for all the element blocks. 00069 00070 CubitStatus create_surface_boundaries( DLIList<FacetSurfaceMesh*> &facet_surface_list, 00071 DLIList<FacetCurveMesh*> &facet_curve_list, 00072 CubitBoolean use_feature_angle, 00073 double min_dot ); 00074 //- creates the correct blockcurves for all the surfaces 00075 00076 CubitStatus create_curve_boundaries( DLIList<FacetCurveMesh*> &facet_curve_list, 00077 DLIList<FacetPointMesh*> &facet_point_list ); 00078 //- creates the correct blockpoints for all the curves 00079 00080 CubitStatus classify_edge( FacetEntity *edge_ptr, 00081 DLIList<FacetCurveMesh*> &facet_curve_list, 00082 FacetSurfaceMesh *fsm_ptr ); 00083 //- sorts a edge into its correct curve based on its associated 00084 //- blocks and sidesets. Creates a new facet curve if necessary. 00085 00086 CubitStatus classify_point(CubitPoint *point_ptr, 00087 DLIList<FacetPointMesh*> &facet_point_list, 00088 FacetCurveMesh *fcm_ptr ); 00089 //- sorts a node into correct point based on its associated 00090 //- curve. Creates a new facet point if necessary 00091 00092 CubitStatus build_geometry( DLIList<FacetSurfaceMesh*> &facet_surface_list, 00093 DLIList<FacetCurveMesh*> &facet_curve_list, 00094 DLIList<FacetPointMesh*> &facet_point_list, 00095 int interp_order, 00096 CubitBoolean use_feature_angle, 00097 double min_dot, 00098 CubitBoolean smooth_non_manifold , 00099 CubitBoolean split_surfaces ); 00100 //- build the CUBIT geometry based on the Facet entity class lists 00101 00102 CubitStatus build_point_geometry( DLIList<FacetPointMesh*> &facet_point_list ); 00103 //- From the facet point list, create geometric points for each 00104 00105 CubitStatus build_curve_geometry( DLIList<FacetCurveMesh*> &facet_curve_list ); 00106 //- From the facet curve list, create geometric curves for each 00107 00108 CubitStatus build_loop_geometry( DLIList<FacetCurveMesh*> &facet_curve_list, 00109 FacetSurfaceMesh *fsm_ptr, 00110 DLIList<LoopSM*> &loop_list, 00111 int &ncurves ); 00112 //- From the facet curve list of a surface, create geometric loops 00113 00114 CubitStatus build_surface_geometry( DLIList<FacetSurfaceMesh*> &facet_surface_list, 00115 int interp_order, double min_dot ); 00116 //- From the facet surface list, create geometric surface, 00117 //- loops and coedges for each surface in the list 00118 00119 CubitStatus init_hash_curves( ); 00120 void delete_hash_curves( ); 00121 int get_curve_hash_key( DLIList<FacetSurfaceMesh*> *bsm_list_ptr ); 00122 // functions for hashing curves - to speed up edge classification 00123 00124 CubitStatus init_hash_points( ); 00125 void delete_hash_points( ); 00126 int get_point_hash_key( DLIList<FacetCurveMesh*> *bsm_list_ptr ); 00127 // functions for hashing points - to speed up node classification 00128 00129 CubitStatus clean_geometry( CubitBoolean smooth_non_manifold, 00130 CubitBoolean split_surfaces, 00131 CubitBoolean use_feature_angle, 00132 double min_dot, 00133 DLIList <FacetCurveMesh *> &facet_curve_list ); 00134 00135 //- fix the edge control points and the normals so they are conforming 00136 //- (or non-conforming) accross curves 00137 00138 00139 }; 00140 00141 #endif