Branch data Line data Source code
1 : : //- Class: ChollaSurface
2 : : //- Owner: Steven J. Owen
3 : : //- Description: Maintains a list of mesh. This is used to store
4 : : //- the exterior skin while creating a geometry from a mesh.
5 : : //- Created: 5/25/00
6 : : //- Checked By:
7 : : //- Version:
8 : :
9 : : #ifndef ChollaSurface_HPP
10 : : #define ChollaSurface_HPP
11 : :
12 : :
13 : : #include "DLIList.hpp"
14 : : #include "ChollaEntity.hpp"
15 : :
16 : : class ChollaVolume;
17 : : class ChollaCurve;
18 : : class ChollaPoint;
19 : : class FacetEntity;
20 : : class CubitFacet;
21 : : class CubitPoint;
22 : : class CubitFacetEdge;
23 : : class FacetEvalTool;
24 : :
25 : : class ChollaSurface : public ChollaEntity
26 : : {
27 : : private:
28 : : int id;
29 : : int blockId;
30 : : CubitBoolean myFlag;
31 : :
32 : : DLIList<FacetEntity*> surfaceElemList;
33 : : DLIList<ChollaCurve*> curveList;
34 : : DLIList<ChollaVolume*> volList;
35 : : void *mySurface;
36 : : FacetEvalTool *myEvalTool;
37 : : ChollaSurface *myMergePartner;
38 : : void check_faceting();
39 : :
40 : : public:
41 : :
42 : : ChollaSurface(int block_id);
43 : : ~ChollaSurface();
44 : :
45 : 1078 : void get_facets(DLIList<FacetEntity*> &surface_facets)
46 : 1078 : {surface_facets += surfaceElemList;}
47 : : void get_points( DLIList<CubitPoint *> &point_list );
48 : :
49 : 594 : void assign_geometric_surface(void *surf)
50 : 594 : {mySurface = surf;}
51 : 341 : void* get_geometric_surface()
52 : 341 : {return mySurface;}
53 : 341 : void assign_eval_tool(FacetEvalTool *eval_tool_ptr)
54 : 341 : {myEvalTool = eval_tool_ptr;}
55 : 341 : FacetEvalTool* get_eval_tool()
56 : 341 : {return myEvalTool;}
57 : :
58 : : ChollaSurface *merge_partner(){ return myMergePartner; }
59 : 0 : void set_merge_partner( ChollaSurface *merge_partner )
60 : 0 : { myMergePartner = merge_partner;}
61 : :
62 : : CubitBoolean get_flag(){ return myFlag; }
63 : : void set_flag( CubitBoolean stat ){ myFlag = stat; }
64 : :
65 : 1859 : void add_facet(FacetEntity *exterior_face)
66 : 1859 : {surfaceElemList.append(exterior_face);}
67 : :
68 : : int add_mesh_unique(FacetEntity *exterior_face)
69 : : {return surfaceElemList.append_unique(exterior_face);}
70 : :
71 : 0 : void remove_facet( FacetEntity *facet )
72 : 0 : {surfaceElemList.remove( facet );}
73 : :
74 : : bool is_contain( FacetEntity *facet );
75 : :
76 : 0 : DLIList<FacetEntity*> &get_facet_list()
77 : 0 : {return surfaceElemList;}
78 : : DLIList<FacetEntity*> *get_facet_list_ptr()
79 : : {return &surfaceElemList;}
80 : : void get_vertices( DLIList<ChollaPoint *> &chpt_list );
81 : 1364 : void get_curves( DLIList<ChollaCurve*> &bcm_list )
82 : 1364 : {bcm_list = curveList; }
83 : 2112 : void add_curve( ChollaCurve *bcm_ptr )
84 : 2112 : {curveList.append(bcm_ptr);}
85 : 154 : void add_curve_unique( ChollaCurve *bcm_ptr )
86 : 154 : {curveList.append_unique(bcm_ptr);}
87 : 1463 : void remove_curve( ChollaCurve *bcm_ptr)
88 : 1463 : {curveList.remove(bcm_ptr);}
89 : 0 : void get_volumes( DLIList<ChollaVolume*> &cholla_vol_list )
90 : 0 : {cholla_vol_list = volList; }
91 : 0 : void add_volume( ChollaVolume *cholla_vol_ptr )
92 : 0 : {volList.append(cholla_vol_ptr);}
93 : : void add_volume_unique( ChollaVolume *cholla_vol_ptr )
94 : : {volList.append_unique(cholla_vol_ptr);}
95 : 0 : void remove_volume( ChollaVolume *cholla_vol_ptr)
96 : 0 : {volList.remove(cholla_vol_ptr);}
97 : 0 : int num_volumes(){return volList.size();}
98 : : CubitBoolean is_in_volume( ChollaVolume *chvol_ptr );
99 : :
100 : 0 : int get_block_id()
101 : 0 : {return blockId;}
102 : : void set_block_id(int flag)
103 : : { blockId = flag; }
104 : :
105 : 6160 : int get_id(){return id;}
106 : :
107 : : CubitStatus get_adj_facets( FacetEntity *start_face_ptr,
108 : : DLIList<FacetEntity*> &face_list,
109 : : int mydebug = 0,
110 : : bool bound_check = false,
111 : : bool feature_edge_check = true);
112 : : // recursive function that creates a list of all faces connected
113 : : // the passed in face that are part of this surface (or shell)
114 : :
115 : :
116 : : CubitStatus split_surface( DLIList<ChollaSurface*> &block_surface_list );
117 : : // split this surface into multiple ChollaSurface where there are
118 : : // discontinuous faces.
119 : :
120 : : CubitStatus feature_angle( double min_dot,
121 : : DLIList<CubitFacetEdge *> &feature_edge_list);
122 : : // mark all edges that exceed the specified feature angle
123 : : // min_dot is the minimum dot product between adjacent face normals
124 : :
125 : : CubitStatus add_preexisting_feature_edges( DLIList<CubitFacetEdge *> &feature_edge_list);
126 : : // edges that were marked previously in function ChollaEngine::mark_features
127 : : // are added to the feature edge list
128 : :
129 : : CubitStatus non_manifold_edges( DLIList<CubitFacetEdge *> &feature_edge_list );
130 : : // mark all edges that are non-manifold (have more than 2 adj facets
131 : :
132 : : CubitStatus clean_features( );
133 : : // clean up edges that do not form complete loops as a result
134 : : // of feature angle
135 : :
136 : : void init_hit_flags();
137 : : // initialize the hit flags to the block surface id - used for
138 : : // traversing the faces
139 : :
140 : : CubitStatus update_boundary_tool_data();
141 : : //- update the surface IDs on the boundary facet tooldatas
142 : :
143 : : void reset_facet_flags();
144 : : //- reset the marked flags on the facets
145 : :
146 : : CubitBoolean is_adjacent( ChollaSurface *other_surf );
147 : : //- determine if other_surf is adjacent to this surface
148 : :
149 : : DLIList<DLIList<CubitFacetEdge *>*> *get_loop_edges( );
150 : : // return the ordered list of edges on the boundary of this surface
151 : :
152 : : void flip_facets();
153 : : // invert all the facets on this surface
154 : :
155 : : void debug_draw();
156 : : };
157 : :
158 : : template <> struct DLIListSorter<ChollaSurface*>
159 : : {
160 : : bool operator()(ChollaSurface* a, ChollaSurface* b) { return a->get_id() < b->get_id(); }
161 : : };
162 : :
163 : : #endif
164 : :
165 : :
166 : :
167 : :
168 : :
|