Branch data Line data Source code
1 : : //- Class: TDFacetBoundaryEdge
2 : : //- Description: Tool data for storing additional information at
3 : : //- the boundary of a facet set
4 : : //- Owner: Steve Owen
5 : : //- Checked by:
6 : : //- Version:
7 : :
8 : : #ifndef TD_FACET_BOUNDARY_EDGE_HPP
9 : :
10 : :
11 : : #define TD_FACET_BOUNDARY_EDGE_HPP
12 : :
13 : : #include "CubitDefines.h"
14 : : #include "ToolData.hpp"
15 : : #include "DLIList.hpp"
16 : : #include "CubitVector.hpp"
17 : : #include "MemoryManager.hpp"
18 : : #include "CastTo.hpp"
19 : : class CubitFacetEdge;
20 : : class CubitFacet;
21 : : class CubitPoint;
22 : :
23 [ + + ]: 5280 : typedef struct BoundaryEdgeData
24 : : {
25 : : CubitVector bezierCtrlPts[3];
26 : : CubitFacet *adjFacet;
27 : : int surfID;
28 : : int computed;
29 : : } BoundaryEdgeData;
30 : :
31 : : class TDFacetBoundaryEdge : public ToolData
32 : : {
33 : : private:
34 : :
35 : : static MemoryManager memoryManager;
36 : : //- memory management object
37 : :
38 : : CubitFacetEdge *edgePtr;
39 : : //Because non-manifold geometry complicates things a little, if
40 : : // we are using a represenation that is of a higher order than
41 : : // linear. We figure out which edges edgePtr should be C1 with
42 : : // along a curve... The two edges (if exist) are store in nextEdgePtr
43 : : // (if it is the edge across node(1)) or prevEdgePtr (if it is the
44 : : // edge across node(0)).
45 : : CubitFacetEdge *nextEdgePtr;
46 : : CubitFacetEdge *prevEdgePtr;
47 : : DLIList <BoundaryEdgeData *> edgeDataList;
48 : :
49 : : public:
50 : :
51 : : TDFacetBoundaryEdge();
52 : : //- constructor
53 : :
54 : : ~TDFacetBoundaryEdge();
55 : :
56 : 6688 : static int is_facet_boundary_edge(const ToolData* td)
57 [ + - ][ + + ]: 6688 : {return (CAST_TO(const_cast<ToolData*>(td), TDFacetBoundaryEdge) != NULL);}
58 : :
59 : : void add_surf(int new_id);
60 : :
61 : : CubitFacetEdge *get_edge()
62 : : { return edgePtr; }
63 : :
64 : 528 : void set_edge( CubitFacetEdge *edge_ptr )
65 : 528 : { edgePtr = edge_ptr; }
66 : :
67 : 528 : CubitFacetEdge *get_next_edge()
68 : 528 : { return nextEdgePtr; }
69 : :
70 : 0 : void set_next_edge( CubitFacetEdge *edge_ptr )
71 : 0 : { nextEdgePtr = edge_ptr; }
72 : :
73 : 528 : CubitFacetEdge *get_prev_edge()
74 : 528 : { return prevEdgePtr; }
75 : :
76 : 0 : void set_prev_edge( CubitFacetEdge *edge_ptr )
77 : 0 : { prevEdgePtr = edge_ptr; }
78 : :
79 : :
80 : 1056 : SetDynamicMemoryAllocation(memoryManager)
81 : : //- class specific new and delete operators
82 : :
83 : : static void set_memory_allocation_increment(int increment = 0)
84 : : {memoryManager.set_memory_allocation_increment(increment);}
85 : : //- set block memory size increment
86 : :
87 : : static void destroy_memory()
88 : : {memoryManager.destroy_memory();}
89 : : //- destroy all memory allocted to this object
90 : :
91 : : static CubitStatus add_facet_boundary_edge(CubitFacetEdge *edge_ptr);
92 : : static TDFacetBoundaryEdge* get_facet_boundary_edge(CubitFacetEdge *edge_ptr);
93 : :
94 : : int control_points( CubitVector *ctrl_pts, int surf_id );
95 : : //- get the control points (return the order)
96 : : void control_points( CubitVector *ctrl_pts, int order, int surf_id );
97 : : //- set the bezier control points on the edge.
98 : : //- end points are assumed to be the first and last
99 : : //- ctrl pt so they are not passed in. Pass in order-1
100 : : //- control points (max order = 4)
101 : : CubitStatus control_points( CubitFacet *facet, CubitVector *ctrl_pts );
102 : : // return the control pons on the edge of a facet based
103 : : // on its edge use direction
104 : : void get_control_points( CubitPoint *point_ptr, CubitVector ctrl_pts[3],
105 : : int surf_id );
106 : : void set_control_points( CubitPoint *point_ptr, CubitVector ctrl_pts[3],
107 : : int surf_id );
108 : : // get and set control points oriented with respect to the
109 : : // point_ptr (ie. point_ptr is the first control point on the edge)
110 : : // Note: only gets and sets the middle three control points. The
111 : : // other 2 are the edge vertices.
112 : :
113 : : void add_surf_facet( DLIList<CubitFacet *> &facet_list );
114 : : // add facet representing a new surface adjacent this edge
115 : :
116 : : void set_surf_id( CubitFacet *facet_ptr, int surf_id );
117 : : // set id of surface defined by facet_ptr
118 : :
119 : : CubitBoolean is_internal_edge();
120 : : // return whether this edge is internal to a surface
121 : :
122 : : CubitStatus init_control_points( double min_dot );
123 : : // initialize control points on boundary edge
124 : :
125 : : CubitStatus merge_control_points();
126 : : // find aerage of control points and set on edge
127 : :
128 : : CubitStatus compute_curve_tangent( int surf_id,
129 : : CubitFacetEdge *edge,
130 : : double min_dot,
131 : : CubitVector &T0,
132 : : CubitVector &T3 );
133 : : // compute the tangents to the endpoints of a feature edge.
134 : :
135 : : CubitFacetEdge *next_feature_edge( int surf_id,
136 : : CubitFacetEdge *this_edge,
137 : : CubitPoint *p0 );
138 : : // given a facet boundary edge and one of its nodes, find the
139 : : // next edge on the same surface
140 : :
141 : : CubitBoolean is_at_surf( int surf_id );
142 : : // return whether the given edge has one of its adjacent
143 : : // faces on the given surface
144 : : };
145 : :
146 : :
147 : : #endif // TD_FACET_BOUNDARY_EDGE_HPP
148 : :
149 : :
|