Branch data Line data Source code
1 : : /** \class ChollaCurve.hpp
2 : : //- Class: ChollaCurve
3 : : //- Owner: Steven J. Owen
4 : : //- Description: Maintains a list of mesh. This is used to store
5 : : //- the exterior skin while creating a geometry from a mesh.
6 : : //- Created: 12/3/00
7 : : //- Checked By:
8 : : //- Version:
9 : : */
10 : : #ifndef ChollaCurve_HPP
11 : : #define ChollaCurve_HPP
12 : :
13 : : #define MYLENGTH_UNINITIALIZED -1.0
14 : :
15 : : #include "DLIList.hpp"
16 : : #include "ChollaEntity.hpp"
17 : :
18 : : class CubitVector;
19 : : class CubitFacetEdge;
20 : : class CubitPoint;
21 : : class ChollaPoint;
22 : : class ChollaSurface;
23 : : class ChollaVolume;
24 : : class FacetEntity;
25 : : class CurveFacetEvalTool;
26 : :
27 : : class ChollaCurve : public ChollaEntity
28 : : {
29 : : private:
30 : :
31 : : DLIList<ChollaSurface*> surfaceList;
32 : : DLIList<FacetEntity*> curveEdgeList;
33 : : void *myCurve;
34 : : CurveFacetEvalTool *myEvalTool;
35 : : CubitPoint *startPoint;
36 : : CubitPoint *endPoint;
37 : : DLIList<ChollaPoint*> pointList;
38 : : int flag;
39 : : int blockID;
40 : : int id;
41 : : double myLength;
42 : : ChollaCurve *myMergePartner;
43 : :
44 : : CubitStatus determine_ends();
45 : : //- determine the end nodes for the curve (once the curvEdgeList is full)
46 : :
47 : : CubitFacetEdge *next_edge( CubitPoint *node_ptr, CubitFacetEdge *edge_ptr );
48 : : //- return the next edge on the curve (NULL if at end)
49 : :
50 : :
51 : : public:
52 : :
53 : :
54 : : ChollaCurve( int block_id );
55 : : //- default constructor
56 : :
57 : : ~ChollaCurve();
58 : : // destructor
59 : :
60 : 0 : int get_block_id()
61 : 0 : { return blockID; }
62 : :
63 : : void remove_td_associativity( ChollaSurface *fsm_ptr );
64 : : // delete the asociativity of this curve with all edge's tool datas
65 : :
66 : 2970 : void add_facet(FacetEntity *exterior_edge)
67 : 2970 : {myLength = MYLENGTH_UNINITIALIZED;
68 : 2970 : curveEdgeList.append(exterior_edge);}
69 : : //- add an edge to the curve
70 : :
71 : 154 : int add_facet_unique(FacetEntity *exterior_edge)
72 : 154 : {myLength = MYLENGTH_UNINITIALIZED;
73 : 154 : return curveEdgeList.append_unique(exterior_edge);}
74 : : //- add an edge to this curve - check to see if it already there before adding
75 : :
76 : 0 : void remove_facet( FacetEntity *facet_edge )
77 : 0 : {myLength = MYLENGTH_UNINITIALIZED;
78 : 0 : curveEdgeList.remove( facet_edge ); }
79 : : //- remove a facet_edge from underlying backing
80 : :
81 : : CubitStatus replace_facet( FacetEntity *remove_edge, FacetEntity *replace_edge );
82 : : //- replace a facet_edge from underlying backing
83 : :
84 : :
85 : : CubitStatus insert_facet( FacetEntity *old_edge, FacetEntity *new_edge );
86 : : //- inserts new_edge after old_edge
87 : :
88 : : CubitStatus is_contain( FacetEntity *edge );
89 : : //- check to see if an edge is in the list
90 : :
91 : 4565 : DLIList<FacetEntity*> &get_facet_list()
92 : 4565 : {return curveEdgeList;}
93 : : //- get the list of edges that make up this curve
94 : : DLIList<FacetEntity*> *get_facet_list_ptr()
95 : : {return &curveEdgeList;}
96 : :
97 : : //- return the length of the curve
98 : : double length();
99 : :
100 : 0 : int num_edges() {return curveEdgeList.size();}
101 : : //- return the number of edges in the curve
102 : :
103 : 2640 : void add_surface( ChollaSurface *fsm_ptr )
104 : 2640 : {surfaceList.append_unique( fsm_ptr );}
105 : : //- associate a surface with this curve
106 : :
107 : 0 : inline void remove_surface( ChollaSurface *fsm_ptr)
108 : 0 : {surfaceList.remove(fsm_ptr);}
109 : : //- remove a suface from the curve
110 : :
111 : 594 : DLIList<ChollaSurface*> &get_surfaces()
112 : 594 : {return surfaceList;}
113 : : void get_surfaces( DLIList<ChollaSurface *> &surf_list )
114 : : { surf_list += surfaceList; }
115 : : //- get the list of surfaces attached to this curve
116 : :
117 : 671 : DLIList<ChollaSurface*> *get_surface_list_ptr()
118 : 671 : {return &surfaceList;}
119 : :
120 : 1188 : void add_point( ChollaPoint *fpm_ptr )
121 : 1188 : {pointList.append_unique( fpm_ptr );}
122 : : //- associate a point with this curve
123 : :
124 : 0 : inline void remove_point( ChollaPoint *fpm_ptr)
125 : 0 : {pointList.remove(fpm_ptr);}
126 : : //- remove a point from the curve
127 : :
128 : 594 : DLIList<ChollaPoint*> &get_points()
129 : 594 : {return pointList;}
130 : : //- get the list of points attached to this curve
131 : :
132 : : void get_facet_points( DLIList<CubitPoint *> &point_list, CubitBoolean inclusive);
133 : : //- return the facet points on this chollacurve
134 : :
135 : : CubitBoolean is_in_volume( ChollaVolume *chvol_ptr );
136 : : //- return whether this curve is contained within the specified volume
137 : :
138 : : CubitBoolean is_in_surface( ChollaSurface *chsurf_ptr );
139 : : //- return whether this surface is contained within the specified surface
140 : :
141 : 1188 : void assign_geometric_curve(void *curv)
142 : 1188 : {myCurve = curv;}
143 : : //- set the geometric curve associated with the ChollaCurve
144 : : //- myCurve is void * so we can deal with any type of geometry engine
145 : :
146 : 1716 : void* get_geometric_curve()
147 : 1716 : {return myCurve;}
148 : : //- return the geometric curve associated with the ChollaCurve
149 : :
150 : 594 : void assign_eval_tool(CurveFacetEvalTool *curv_eval_tool)
151 : 594 : {myEvalTool = curv_eval_tool;}
152 : : //- set the curve facet eval tool associated with the ChollaCurve
153 : :
154 : 2310 : CurveFacetEvalTool* get_eval_tool()
155 : 2310 : {return myEvalTool;}
156 : : //- return the curve facet eval tool associated with the ChollaCurve
157 : :
158 : : CubitStatus get_ends( CubitVector &start, CubitVector &end );
159 : : //- return the end node locations
160 : : CubitStatus get_ends( CubitPoint *&start_ptr, CubitPoint *&end_ptr );
161 : : //- return the end nodes
162 : :
163 : 594 : void set_start( CubitPoint *start_pt )
164 : 594 : { startPoint = start_pt; }
165 : : // set the start point on the curve
166 : :
167 : 594 : void set_end( CubitPoint *end_pt )
168 : 594 : { endPoint = end_pt; }
169 : : //- set the end point on the curve
170 : :
171 : : CubitStatus split_curve( DLIList<ChollaCurve*> &facet_curve_list );
172 : : //- split this curve into multiple ChollaCurve where there are
173 : : //- discontinuous strings of edges. Define start end end points
174 : : //- for each curve while we are at it.
175 : :
176 : : CubitStatus build_curve_from_edges(CubitPoint *start_point,
177 : : int periodic, int max_edges,
178 : : CubitFacetEdge *start_edge_ptr,
179 : : ChollaCurve *parent_curve);
180 : :
181 : : CubitStatus order_edges();
182 : : //- put the current edges in the curve's list in order from start to end
183 : :
184 : : CubitStatus feature_angle( double min_dot );
185 : : //- compute angles at nodes on the curve to see if we need to split
186 : : //- the curve. Mark the node tooldata hitflag if the node will
187 : : //- break the curve (this is refernced in next_edge)
188 : :
189 : : // disassociate from cholla points
190 : : CubitStatus disassociate_from_points( void );
191 : :
192 : : // disassociate from cholla surface
193 : : CubitStatus disassociate_from_surfaces( void);
194 : :
195 : : // build a new curve_facet_eval_tool and assign it to ChollaCurve
196 : : CubitStatus build_curve_facet_eval_tool( void );
197 : :
198 : : int get_flag( ) { return flag; }
199 : 1122 : void set_flag( int flg ) { flag = flg; }
200 : 8976 : int get_id() {return id;}
201 : : void debug_draw();
202 : : void print();
203 : :
204 : : // find adjacent edges at a point that lie on the curve
205 : : bool adj_facet_edges( CubitPoint *cubit_pnt, CubitFacetEdge *&adj_edge1, CubitFacetEdge *&adj_edge2 );
206 : :
207 : : // return whether the curve contains the point
208 : : CubitBoolean has_point( ChollaPoint *pt );
209 : :
210 : : // verify that all points on this curve have this curve as an adjacency
211 : : CubitStatus verify_points();
212 : :
213 : : // clear the edge list
214 : 132 : void clean_out_edges(){ curveEdgeList.clean_out(); }
215 : :
216 : : int num_volumes();
217 : :
218 : : ChollaCurve *merge_partner(){ return myMergePartner; }
219 : :
220 : 0 : void set_merge_partner( ChollaCurve *merge_partner )
221 : 0 : { myMergePartner = merge_partner;}
222 : :
223 : : };
224 : :
225 : : template <> struct DLIListSorter<ChollaCurve*>
226 : : {
227 : : bool operator()(ChollaCurve* a, ChollaCurve* b) { return a->get_id() < b->get_id(); }
228 : : };
229 : :
230 : : #endif
231 : :
|