Branch data Line data Source code
1 : : #ifndef SUB_ENTITY_SET_HPP
2 : : #define SUB_ENTITY_SET_HPP
3 : :
4 : : #include "TBOwnerSet.hpp"
5 : :
6 : : class PartitionEntity;
7 : : class TopologyBridge;
8 : : class CubitSimpleAttrib;
9 : : class CubitVector;
10 : : class PartitionBody;
11 : :
12 : : class SubEntitySet : public TBOwnerSet
13 : : {
14 : :
15 : : public:
16 : :
17 : : SubEntitySet( TopologyBridge* real_entity,
18 : : PartitionEntity* first_partition );
19 : : virtual ~SubEntitySet();
20 : :
21 : 0 : TopologyBridge* get_entity() const
22 : 0 : { return myEntity; }
23 : :
24 : : void add_partition( PartitionEntity* partition,
25 : : PartitionEntity* insert_after = 0 );
26 : :
27 : : void add_lower_order( PartitionEntity* partition );
28 : : void add_lower_order( PartitionEntity* entity,
29 : : const CubitSimpleAttrib& attrib,
30 : : int dimension,
31 : : DLIList<CubitVector*>& points_from_attrib,
32 : : DLIList<int>& facets_from_attrib,
33 : : DLIList<int>& children_from_attrib,
34 : : DLIList<int>& facet_point_owners_from_attrib );
35 : :
36 : : void remove( PartitionEntity* partition );
37 : :
38 : :
39 : 0 : bool has_lower_order() const
40 : 0 : { return lowerOrderHead != 0; }
41 : :
42 : : bool has_multiple_sub_entities() const;
43 : :
44 : 0 : PartitionBody* body() const
45 : 0 : { return bodyPtr; }
46 : :
47 : : void get_owners( DLIList<TopologyBridge*>& owner_list ) const;
48 : :
49 : : CubitStatus remove_bridge( TopologyBridge* bridge );
50 : : CubitStatus swap_bridge( TopologyBridge* remove,
51 : : TopologyBridge* add,
52 : : bool reversed );
53 : : void notify_reversed( TopologyBridge* bridge );
54 : : CubitStatus bridge_destroyed( TopologyBridge* bridge );
55 : :
56 : : void print_debug_info( const char* prefix = 0 ) const;
57 : :
58 : : void add_attribute( PartitionEntity* entity, const CubitSimpleAttrib& csa );
59 : : void rem_attribute( PartitionEntity* entity, const CubitSimpleAttrib& csa );
60 : : void get_attributes( PartitionEntity* entity,
61 : : DLIList<CubitSimpleAttrib>& list );
62 : : void get_attributes( PartitionEntity* entity, const char* name,
63 : : DLIList<CubitSimpleAttrib>& list );
64 : : void rem_all_attrib( PartitionEntity* entity );
65 : : void unwrap_attributes();
66 : :
67 : : void get_sub_entities( DLIList<PartitionEntity*>& result_set ) const;
68 : : void get_lower_order( DLIList<PartitionEntity*>& result_set ) const;
69 : :
70 : : int get_id( PartitionEntity* entity ) const;
71 : : PartitionEntity* entity_from_id( int id ) const;
72 : :
73 : : // The following two methods are used by PartitionEngine
74 : : // when restoring geometry. Calling them at the wrong
75 : : // time will result in the loss of attribute data.
76 : : void set_id( PartitionEntity* entity, int id );
77 : : void renumerate( int lowest_value, bool only_higher_ids );
78 : : // renumerate sets new SubEntitySet ids on owned entities.
79 : : // The lowest id of any updated entity will be the passed value.
80 : : // If only_higher_ids is true, only entities with IDs equal to
81 : : // or higher than the passed value are updated.
82 : :
83 : 0 : int get_owner_layer() const { return layerNumber; }
84 : :
85 : :
86 : : CubitStatus save_geometry();
87 : :
88 : : int get_unique_id();
89 : 0 : void reset_unique_id() { uniqueId = 0; }
90 : :
91 : : CubitStatus save_geometry( int id, int dimension,
92 : : DLIList<CubitVector*>* point_list,
93 : : DLIList<int>* point_connectivity,
94 : : DLIList<int>* topo_connectivity,
95 : : DLIList<int>* point_owners,
96 : : CubitSimpleAttrib& attrib );
97 : :
98 : : static CubitStatus read_geometry( int& id, int& dimension,
99 : : DLIList<CubitVector*>& point_list,
100 : : DLIList<int>& point_connectivity,
101 : : DLIList<int>& topo_connectivity,
102 : : DLIList<int>& point_owners,
103 : : const CubitSimpleAttrib& attrib );
104 : :
105 : : static int get_geom_dimension( const CubitSimpleAttrib& attrib );
106 : : // return the dimension of the geometry stored in the attrib
107 : :
108 : : static int get_geom_id( const CubitSimpleAttrib& attrib );
109 : :
110 : : static int get_segment_count( const CubitSimpleAttrib& attrib );
111 : :
112 : : static void remove_non_geom_attribs( DLIList<CubitSimpleAttrib>& list );
113 : : // given a list of all the geometry attributes on an entity,
114 : : // remove and destroy any that are not partition geometry.
115 : :
116 : : static void strip_attributes( TopologyBridge* bridge );
117 : : // remove any attributes related to partition geometry
118 : : // from the passed bridge.
119 : :
120 : : void strip_attributes();
121 : : // remove all attributes on paritioned entities,
122 : : // sub entities and lower-order entities
123 : :
124 : 0 : inline SubEntitySet* next_in_body() const
125 : 0 : { return bodyNext; }
126 : :
127 : : private:
128 : :
129 : : friend class PartitionBody;
130 : : SubEntitySet* bodyNext;
131 : : PartitionBody* bodyPtr;
132 : :
133 : : // don't allow assignment (make assignment private)
134 : : SubEntitySet& operator=( const SubEntitySet& ) { return *this;}
135 : : bool operator==( const SubEntitySet& c ) const { return &c == this; }
136 : :
137 : : CubitStatus wrap_attribute( CubitSimpleAttrib& csa, int id ) const;
138 : : int unwrap_attribute( CubitSimpleAttrib& csa ) const;
139 : : bool is_attribute( const CubitSimpleAttrib& csa, int id = 0 ) const;
140 : :
141 : : TopologyBridge* myEntity;
142 : :
143 : : PartitionEntity* subEntityHead;
144 : : PartitionEntity* lowerOrderHead;
145 : :
146 : : int lastId;
147 : :
148 : : int layerNumber;
149 : :
150 : : int uniqueId;
151 : : };
152 : :
153 : : #endif
|