Branch data Line data Source code
1 : : //- Class: CAEntityName
2 : : //- Owner: Greg Nielson
3 : : //- Description: Cubit Attribute for entity names.
4 : : //- Checked By:
5 : : //- Version:
6 : :
7 : : #include "CAEntityName.hpp"
8 : : #include "BasicTopologyEntity.hpp"
9 : : #include "Body.hpp"
10 : : #include "RefEntityName.hpp"
11 : : #include "CastTo.hpp"
12 : : #include "CubitMessage.hpp"
13 : :
14 : 52575 : CubitAttrib* CAEntityName_creator(RefEntity* entity, const CubitSimpleAttrib &p_csa)
15 : : {
16 [ + - ]: 52575 : return new CAEntityName(entity, p_csa);
17 : : }
18 : :
19 : 52575 : CAEntityName::CAEntityName(RefEntity* new_attrib_owner,
20 : : const CubitSimpleAttrib &csa_ptr)
21 [ + - ]: 52575 : : CubitAttrib(new_attrib_owner)
22 : : {
23 [ + - ][ + + ]: 52575 : if(!csa_ptr.isEmpty())
24 : : {
25 [ + - ][ + - ]: 1329 : PRINT_DEBUG_94( "Creating ENTITY_NAME attribute from CSA for %s %d\n",
[ - + ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
26 : : (attribOwnerEntity ? attribOwnerEntity->class_name() : "(none)"),
27 [ # # ]: 0 : (attribOwnerEntity ? attribOwnerEntity->id() : 0));
28 : :
29 [ + - ]: 1329 : const std::vector<CubitString>& cs_list = csa_ptr.string_data_list();
30 : :
31 : : // step over the attribute type
32 : :
33 : : // now read name / option pairs
34 [ + - ][ + + ]: 2968 : for (size_t i = 1; i<cs_list.size(); i++)
35 : : {
36 [ + - ][ + - ]: 1639 : CubitString cs = cs_list[i];
37 [ + - ][ - + ]: 1639 : if (cs.length() == 0)
38 [ # # ][ # # ]: 0 : PRINT_WARNING("Empty name attribute for %s %d.\n",
[ # # ][ # # ]
[ # # ]
39 : : attribOwnerEntity->class_name(),
40 [ # # ]: 0 : attribOwnerEntity->id());
41 : : else
42 [ + - ]: 1639 : entityNames.append(cs);
43 [ + - ]: 1639 : }
44 : :
45 [ + - ][ - + ]: 1329 : if (entityNames.size() == 0)
46 : 1329 : deleteAttrib = CUBIT_TRUE;
47 : : }
48 : 52575 : }
49 : :
50 [ + - ]: 143028 : CAEntityName::~CAEntityName()
51 : : {
52 [ + - ][ + - ]: 47676 : PRINT_DEBUG_94("Deleting ENTITY_NAME attribute\n");
[ - + ][ # # ]
[ # # ][ # # ]
[ # # ]
53 [ - + ]: 95352 : }
54 : :
55 : 1329 : CubitStatus CAEntityName::actuate()
56 : : {
57 [ - + ]: 1329 : if (hasActuated == CUBIT_TRUE) return CUBIT_SUCCESS;
58 : :
59 [ - + ][ # # ]: 1329 : PRINT_DEBUG_94( "Actuating ENTITY_NAME attribute for %s %d\n",
60 [ # # ]: 0 : attribOwnerEntity->class_name(), attribOwnerEntity->id());
61 : :
62 : 1329 : entityNames.reset();
63 : :
64 : : CubitBoolean update_attribs = (CubitBoolean)
65 : 1329 : (RefEntityName::instance()->get_generate_default_names()!=1);
66 : :
67 : : RefEntityName::instance()->add_refentity_name(attribOwnerEntity,entityNames,
68 : 1329 : update_attribs);
69 : :
70 : 1329 : hasActuated = CUBIT_TRUE;
71 : 1329 : return CUBIT_SUCCESS;
72 : : }
73 : :
74 : 65447 : CubitStatus CAEntityName::update()
75 : : {
76 [ + + ]: 65447 : if (hasUpdated) return CUBIT_SUCCESS;
77 : :
78 [ + - ][ + - ]: 64553 : PRINT_DEBUG_94( "Updating ENTITY_NAME attribute for %s %d\n",
[ - + ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
79 [ # # ]: 0 : attribOwnerEntity->class_name(), attribOwnerEntity->id());
80 : :
81 : : // set the updated flag
82 : 64553 : hasUpdated = CUBIT_TRUE;
83 : :
84 : : // first, remove this attrib in its old form from the geometry entity
85 [ + + ]: 64553 : if (hasWritten == CUBIT_TRUE) {
86 [ + - ]: 1882 : attribOwnerEntity->remove_attrib_geometry_entity(this);
87 : 1882 : hasWritten = CUBIT_FALSE;
88 : : }
89 : :
90 [ + - ]: 64553 : DLIList<CubitString> names;
91 : : int num_names = RefEntityName::instance()->
92 [ + - ][ + - ]: 64553 : get_refentity_name(attribOwnerEntity,names);
93 [ + + ]: 64553 : if( num_names == 0)
94 : : {
95 [ + - ]: 59408 : delete_attrib(CUBIT_TRUE);
96 : 59408 : return CUBIT_SUCCESS;
97 : : }
98 : : else
99 : : {
100 : : // get the names; since RefEntityName passes back pointers to
101 : : // its own strings, create new ones here
102 : : int i;
103 : :
104 : : // first, delete all the old names on the list
105 [ + - ]: 5145 : entityNames.clean_out();
106 : :
107 [ + - ][ + + ]: 11202 : for (i = names.size(); i > 0; i--) {
108 [ + - ][ + - ]: 6057 : entityNames.append(names.get_and_step());
109 : : }
110 : :
111 : : // reset the delete flag if it was set before
112 [ + - ]: 5145 : delete_attrib(CUBIT_FALSE);
113 : :
114 : : // now, write to geometry entity
115 [ + - ]: 5145 : attribOwnerEntity->write_specific_cubit_attrib(this);
116 : : }
117 [ + - ]: 65447 : return CUBIT_SUCCESS;
118 : : }
119 : :
120 : 3104 : CubitStatus CAEntityName::reset()
121 : : {
122 [ - + ][ # # ]: 3104 : PRINT_DEBUG_94("CAEntityName::reset()\n");
[ # # ]
123 : :
124 : : //- reset function, cleans out name list
125 : 3104 : entityNames.clean_out();
126 : :
127 : : // need to reset hasUpdated flag too, so next update will do something
128 : 3104 : hasUpdated = CUBIT_FALSE;
129 : 3104 : return CUBIT_SUCCESS;
130 : : }
131 : :
132 : 0 : CubitSimpleAttrib CAEntityName::split_owner()
133 : : {
134 : : // if this entity is to be split, pass back a simple attribute with
135 : : // duplicate name data to be put on new entity
136 [ # # ][ # # ]: 0 : PRINT_DEBUG_94("CAEntityName::split_owner()\n");
[ # # ]
137 : 0 : update();
138 [ # # ]: 0 : if( deleteAttrib )
139 : 0 : return CubitSimpleAttrib();
140 : : else
141 : 0 : return cubit_simple_attrib();
142 : : }
143 : :
144 : 0 : void CAEntityName::merge_owner(CubitAttrib *deletable_attrib)
145 : : {
146 : : // if this entity is to be merged, copy names over from deletable entity
147 [ # # ]: 0 : CAEntityName *caen_ptr = CAST_TO(deletable_attrib, CAEntityName);
148 [ # # ]: 0 : if (caen_ptr)
149 : : {
150 : 0 : DLIList<CubitString> &other_names = caen_ptr->entityNames;
151 : 0 : other_names.reset();
152 [ # # ]: 0 : for (int i = other_names.size(); i--; )
153 : : {
154 : 0 : entityNames.append(other_names.get_and_step());
155 : : }
156 : : }
157 : 0 : }
158 : :
159 : 42475 : CubitSimpleAttrib CAEntityName::cubit_simple_attrib()
160 : : {
161 [ + - ][ + - ]: 42475 : PRINT_DEBUG_94("CAEntityName::cubit_simple_attrib()\n");
[ - + ][ # # ]
[ # # ][ # # ]
[ # # ]
162 : :
163 [ + - ]: 42475 : std::vector<CubitString> cs_list;
164 : :
165 : : // pack the string list:
166 : : // character type of this CA
167 [ + - ][ + - ]: 42475 : cs_list.push_back(att_internal_name());
[ + - ][ + - ]
168 : :
169 : : // name, option pairs
170 : : int i;
171 [ + - ][ + + ]: 55699 : for ( i = entityNames.size(); i > 0; i--) {
172 [ + - ][ + - ]: 13224 : cs_list.push_back(entityNames.get_and_step());
173 : : }
174 : :
175 [ + - ][ + - ]: 42475 : return CubitSimpleAttrib(&cs_list, NULL, NULL);
176 : : }
177 : :
178 : :
179 : 0 : void CAEntityName::print()
180 : : {
181 : : // print info on this attribute
182 : 0 : entityNames.reset();
183 : :
184 [ # # ]: 0 : PRINT_INFO("CAEntityName: owner = %s %d; names: ",
185 [ # # ]: 0 : attribOwnerEntity->class_name(), attribOwnerEntity->id());
186 [ # # ]: 0 : for (int i = entityNames.size(); i > 0; i--)
187 [ # # ][ # # ]: 0 : PRINT_INFO("%s ", entityNames.get_and_step().c_str());
188 : :
189 [ # # ][ # # ]: 0 : PRINT_INFO("\n");
190 [ + - ][ + - ]: 6540 : }
|