Branch data Line data Source code
1 : : #ifndef GMEM_HPP
2 : : #define GMEM_HPP
3 : :
4 : : // Include for CubitBoolean
5 : : #include "CubitDefines.h"
6 : : #include "CGMUtilConfigure.h"
7 : :
8 : : class CubitTransformMatrix;
9 : :
10 : : //- A point in 3D space.
11 : : struct GPoint
12 : : {
13 : : float x;
14 : : float y;
15 : : float z;
16 : : };
17 : :
18 : : typedef struct
19 : : {
20 : : GPoint at;
21 : : GPoint from;
22 : : GPoint up;
23 : : float width;
24 : : float height;
25 : : CubitBoolean isCentered;
26 : : } CubitViewParam;
27 : :
28 : : class CUBIT_UTIL_EXPORT GMem
29 : : {
30 : : private:
31 : : // These are made private to make them essentially read-only,
32 : : // although you still have direct access to the array elements.
33 : : GPoint *pointList; // x, y, z vector
34 : : int ptsSize; // size of points vector
35 : : int fListSize; // size of facetList vector
36 : : int *facetList; // number of points in face, indices of points in face
37 : : CubitBoolean pointsConsolidated;
38 : :
39 : : void consolidate_few_points( double tolerance );
40 : : void consolidate_many_points( double tolerance );
41 : :
42 : : public:
43 : : int pointListCount; // number valid points stored in points vector
44 : : int fListCount; // number valid integers stored in facetList.
45 : : // If you always use triangles, this will be 4 times the number of polygons.
46 : :
47 : : // Constructor/Destructor take care of dynamic memory.
48 : : GMem();
49 : : ~GMem();
50 : :
51 : : // These are high-level functions that don't require you
52 : : // to know exactly what the internals are
53 : : void allocate_tri(int num_tri);
54 : : void allocate_polylines(int num_lines);
55 : : void allocate_more_polylines(int num_lines);
56 : : void clean_out();
57 : :
58 : : // The rest give you a little more direct control over the internals
59 : :
60 : : // Whether points at the same coords have been merged
61 : 0 : void points_consolidated(CubitBoolean yes_no)
62 : 0 : { pointsConsolidated = yes_no; }
63 : : CubitBoolean points_consolidated()
64 : : { return pointsConsolidated; }
65 : : void consolidate_points( double tolerance );
66 : :
67 : : // Access to the arrays without letting the client
68 : : // change the pointer directly.
69 : 348 : GPoint* point_list()
70 : 348 : { return pointList; }
71 : 72 : int* facet_list()
72 : 72 : { return facetList; }
73 : :
74 : : // Swap one array for another. Requiring a function call
75 : : // instead of direct access makes it more likely that
76 : : // dynamic memory and count values will be handled correctly.
77 : : // Important!!!!!!!!!!!
78 : : // The array passed in must have been allocated by 'new',
79 : : // and must not be deleted outside of GMem!!!!!
80 : : void replace_point_list(GPoint new_point_list[], int num_valid_points,
81 : : int array_size);
82 : : void replace_facet_list(int new_facet_list[], int num_valid_entries,
83 : : int array_size);
84 : :
85 : : // Read only access to the array sizes
86 : 19 : int point_list_size()
87 : 19 : { return ptsSize; }
88 : 19 : int facet_list_size()
89 : 19 : { return fListSize; }
90 : :
91 : : // Copy constructor and operator=
92 : : GMem(const GMem& from);
93 : : GMem& operator=(const GMem& from);
94 : :
95 : : // transformation functions - transform the display data
96 : : void transform(CubitTransformMatrix &transform);
97 : : };
98 : :
99 : : #endif
100 : :
|