Branch data Line data Source code
1 : : //-------------------------------------------------------------------------
2 : : // Filename : CompositeGeom.hpp
3 : : //
4 : : // Purpose : Object used by CompositeSurface and CompositeCurve
5 : : // to manage underlying entities.
6 : : //
7 : : // Special Notes :
8 : : //
9 : : // Creator : Jason Kraftcheck
10 : : //
11 : : // Creation Date : 12/19/01
12 : : //-------------------------------------------------------------------------
13 : :
14 : : #ifndef COMPOSITE_GEOM_HPP
15 : : #define COMPOSITE_GEOM_HPP
16 : :
17 : : #include "DLIList.hpp"
18 : : #include "VGArray.hpp"
19 : : #include "CubitBox.hpp"
20 : :
21 : : class GeometryEntity;
22 : : class CubitSimpleAttrib;
23 : : class CompositeAttrib;
24 : : class TopologyBridge;
25 : :
26 : 0 : struct CompositeEntry
27 : : {
28 : : public:
29 : :
30 : : GeometryEntity* entity; // underlying entity
31 : : CubitSense sense; // sense relative to composite
32 : : double measure; // cached value of entity->measure()
33 : : CubitBox bbox; // cached value of entity->bounding_box()
34 : : double dist_sqr; // temporary data used in closest_point() calc.
35 : :
36 : 0 : inline CompositeEntry()
37 : 0 : : entity(0), sense(CUBIT_UNKNOWN), measure(0.0), dist_sqr(0.0) {}
38 : : };
39 : :
40 : :
41 : : class CompositeGeom
42 : : {
43 : :
44 : : public:
45 : :
46 : : CompositeGeom( int size = 0 );
47 : :
48 : : ~CompositeGeom();
49 : :
50 : 0 : int num_entities() const
51 : 0 : { return entityList.size(); }
52 : :
53 : : int index_of( TopologyBridge* geom_ptr ) const;
54 : : inline GeometryEntity* entity( int index ) const;
55 : :
56 : : inline CubitSense sense( int index ) const;
57 : : inline double measure( int index );
58 : : void reverse_sense( int index );
59 : :
60 : : CubitStatus insert( int index, GeometryEntity* geom_ptr, CubitSense sense );
61 : :
62 : 0 : CubitStatus append( GeometryEntity* geom_ptr, CubitSense sense )
63 : 0 : { return insert( entityList.size(), geom_ptr, sense ); }
64 : :
65 : : CubitStatus remove( int index, bool dead );
66 : : CompositeGeom* split( int index );
67 : : CompositeGeom* split( VGArray<int>& index_array );
68 : : CubitStatus swap( int index, GeometryEntity* new_geom );
69 : : CubitStatus reverse();
70 : : CubitStatus reverse_order();
71 : : CubitStatus reverse_rel_senses();
72 : :
73 : : CubitStatus merge( CompositeGeom& dead, bool prepend = false );
74 : :
75 : : CubitBox bounding_box();
76 : : double measure();
77 : :
78 : : int next_box_within_dist( double dist_squared );
79 : : int closest_box( const CubitVector& position );
80 : :
81 : 0 : void update_cached_data()
82 : 0 : { needToUpdateBbox = true; needToUpdateMeasure = true; }
83 : :
84 : : void add_attribute( const CubitSimpleAttrib& csa );
85 : : void rem_attribute( const CubitSimpleAttrib& csa );
86 : : void rem_all_attributes();
87 : : void get_attributes( DLIList<CubitSimpleAttrib>& list );
88 : : void get_attributes( const char* name,
89 : : DLIList<CubitSimpleAttrib>& list );
90 : :
91 : : void print_debug_info( const char* line_prefix = 0 );
92 : :
93 : : void read_attributes( GeometryEntity* entity = 0 );
94 : : void write_attributes( GeometryEntity* entity = 0 );
95 : :
96 : : private:
97 : :
98 : : static void clean_up_attribs( GeometryEntity* ent );
99 : :
100 : : // these have no implementation, just private delcarations
101 : : // to prevent the compiler from generating default implementations
102 : : CompositeGeom& operator=(const CompositeGeom&);
103 : : CompositeGeom(const CompositeGeom&);
104 : :
105 : : void update_data_bbox();
106 : : void update_data_measure();
107 : :
108 : : VGArray<CompositeEntry> entityList;
109 : : int currentIndex;
110 : : int firstIndex;
111 : :
112 : : bool needToUpdateBbox;
113 : : bool needToUpdateMeasure;
114 : :
115 : : CompositeAttrib* listHead;
116 : : };
117 : :
118 : :
119 : 0 : inline GeometryEntity* CompositeGeom::entity( int index ) const
120 : : {
121 : 0 : return entityList[index].entity;
122 : : }
123 : :
124 : 0 : inline CubitSense CompositeGeom::sense( int index ) const
125 : : {
126 : 0 : return entityList[index].sense;
127 : : }
128 : :
129 : 0 : inline double CompositeGeom::measure( int index )
130 : : {
131 [ # # ]: 0 : if( needToUpdateMeasure )
132 : 0 : update_data_measure();
133 : 0 : return entityList[index].measure;
134 : : }
135 : :
136 : : #endif
137 : :
138 : :
139 : :
140 : :
141 : :
|