Branch data Line data Source code
1 : : //- File: CAEntityTol.cpp
2 : : //- Owner: W. Roshan Quadros
3 : : //- Description: Cubit Attribute for entity ids.
4 : : //- Checked By:
5 : : //- Version:
6 : :
7 : :
8 : : #include "CAEntityTol.hpp"
9 : : #include "CAMergePartner.hpp"
10 : : #include "TDUniqueId.hpp"
11 : : #include "TopologyBridge.hpp"
12 : : #include "RefEntity.hpp"
13 : : #include "RefVertex.hpp"
14 : : #include "RefEdge.hpp"
15 : : #include "RefFace.hpp"
16 : : #include "CastTo.hpp"
17 : : #include "MergeTool.hpp"
18 : : #include "RefEntityFactory.hpp"
19 : : #include "GeometryQueryTool.hpp"
20 : : #include "GSaveOpen.hpp"
21 : : #include "CADeferredAttrib.hpp"
22 : : #include "BasicTopologyEntity.hpp"
23 : : #include "GeometryEntity.hpp"
24 : :
25 : 10348 : CubitAttrib* CAEntityTol_creator(RefEntity* entity, const CubitSimpleAttrib &p_csa)
26 : : {
27 [ + - ]: 10348 : return new CAEntityTol(entity, p_csa);
28 : : }
29 : :
30 : 10348 : CAEntityTol::CAEntityTol(RefEntity* new_attrib_owner,
31 : : const CubitSimpleAttrib &csa_ptr)
32 : 10348 : : CubitAttrib(new_attrib_owner)
33 : : {
34 : 10348 : entityTol = 0.0;
35 [ + - ][ - + ]: 10348 : if(!csa_ptr.isEmpty())
36 : : {
37 [ # # ][ # # ]: 0 : PRINT_DEBUG_95( "Creating ENTITY_TOL attribute from CSA for %s %d\n",
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
38 : : (attribOwnerEntity ? attribOwnerEntity->class_name() : "(none)"),
39 [ # # ]: 0 : (attribOwnerEntity ? attribOwnerEntity->id() : 0));
40 : :
41 [ # # ]: 0 : const std::vector<double>& d_list = csa_ptr.double_data_list();
42 : :
43 [ # # ][ # # ]: 0 : assert(d_list.size() == 1);
44 [ # # ]: 0 : entityTol = d_list[0];
45 : : }
46 : 10348 : }
47 : :
48 : 0 : CAEntityTol::CAEntityTol(RefEntity* new_attrib_owner)
49 : 0 : : CubitAttrib(new_attrib_owner)
50 : : {
51 : 0 : entityTol = 0.0;
52 : :
53 [ # # ][ # # ]: 0 : PRINT_DEBUG_95( "Creating ENTITY_TOL attribute for %s %d\n",
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
54 : : (attribOwnerEntity ? attribOwnerEntity->class_name() : "(none)"),
55 [ # # ]: 0 : (attribOwnerEntity ? attribOwnerEntity->id() : 0));
56 : 0 : }
57 : :
58 : 31044 : CAEntityTol::~CAEntityTol()
59 : : {
60 [ - + ]: 20696 : }
61 : :
62 : 0 : CubitStatus CAEntityTol::reset()
63 : : {
64 : :
65 : 0 : return CUBIT_SUCCESS;
66 : : }
67 : :
68 : 0 : CubitStatus CAEntityTol::actuate()
69 : : {
70 [ # # ]: 0 : if ( hasActuated)
71 : 0 : return CUBIT_SUCCESS;
72 : :
73 [ # # ]: 0 : if ( !attribOwnerEntity )
74 : 0 : return CUBIT_FAILURE;
75 : :
76 : 0 : deleteAttrib = CUBIT_FALSE;
77 : :
78 : : //- If actuating after import, change the tol. Else (auto actuated) tol is already changed...
79 [ # # ]: 0 : if( attribOwnerEntity->local_tolerance() == 0.0 )
80 : : {
81 : 0 : attribOwnerEntity->local_tolerance(entityTol);
82 : : }
83 : :
84 : 0 : hasActuated = CUBIT_TRUE;
85 : 0 : return CUBIT_SUCCESS;
86 : : }
87 : :
88 : 10348 : CubitStatus CAEntityTol::update()
89 : : {
90 : : //delete_attrib(CUBIT_TRUE);
91 : : //return CUBIT_SUCCESS;
92 : :
93 [ - + ]: 10348 : if (hasUpdated) return CUBIT_SUCCESS;
94 : :
95 [ - + ][ # # ]: 10348 : PRINT_DEBUG_95( "Updating ENTITY_TOL attribute for %s %d\n",
96 [ # # ]: 0 : attribOwnerEntity->class_name(), attribOwnerEntity->id());
97 : :
98 : : // set the updated flag
99 : 10348 : hasUpdated = CUBIT_TRUE;
100 : :
101 : : // first, remove this attrib in its old form from the geometry entity
102 [ - + ]: 10348 : if (hasWritten == CUBIT_TRUE)
103 : : {
104 : 0 : attribOwnerEntity->remove_attrib_geometry_entity(this);
105 : 0 : hasWritten = CUBIT_FALSE;
106 : : }
107 : :
108 : 10348 : double local_tol = attribOwnerEntity->local_tolerance();
109 [ + - ]: 10348 : if( local_tol == 0.0)
110 : : {
111 : 10348 : delete_attrib(CUBIT_TRUE);
112 : 10348 : return CUBIT_SUCCESS;
113 : : }
114 : : else
115 : : {
116 : :
117 : : // reset the delete flag if it was set before
118 : 0 : delete_attrib(CUBIT_FALSE);
119 : :
120 : : // now, write to geometry entity
121 : 0 : entityTol = local_tol;
122 : 0 : attribOwnerEntity->write_specific_cubit_attrib(this);
123 : : }
124 : 10348 : return CUBIT_SUCCESS;
125 : : }
126 : :
127 : 0 : void CAEntityTol::merge_owner(CubitAttrib *deletable_attrib)
128 : : {
129 : : // take the id with the lowest value
130 [ # # ]: 0 : CAEntityTol *other_ca_tol = CAST_TO(deletable_attrib, CAEntityTol);
131 : :
132 [ # # ][ # # ]: 0 : if (other_ca_tol && ( entityTol == 0.0 || entityTol < other_ca_tol->tolerance() ))
[ # # ][ # # ]
133 : 0 : entityTol = other_ca_tol->tolerance();
134 : 0 : }
135 : :
136 : 10348 : CubitSimpleAttrib CAEntityTol::cubit_simple_attrib()
137 : : {
138 [ + - ]: 10348 : std::vector<CubitString> cs_list;
139 [ + - ][ + - ]: 20696 : std::vector<double> d_list;
140 [ + - ][ + - ]: 20696 : std::vector<int, std::allocator<int> > i_list;
141 : :
142 [ + - ]: 10348 : d_list.push_back ( entityTol );
143 : :
144 [ + - ][ + - ]: 10348 : cs_list.push_back(att_internal_name());
[ + - ][ + - ]
145 : :
146 [ + - ]: 10348 : CubitSimpleAttrib csattrib_ptr(&cs_list, &d_list, &i_list);
147 : :
148 [ + - ]: 20696 : return csattrib_ptr;
149 : : }
150 : :
151 : 0 : void CAEntityTol::print()
152 : : {
153 : : // print info on this attribute
154 : :
155 [ # # ]: 0 : PRINT_INFO("CAEntityTol: owner = %s %d: tolerance =%f\n",
156 : : attribOwnerEntity->class_name(), attribOwnerEntity->id(),
157 [ # # ]: 0 : entityTol);
158 : 0 : }
159 : :
160 : :
161 : 0 : CubitSimpleAttrib CAEntityTol::split_owner()
162 : : {
163 : : // if this entity is to be split, pass back a simple attribute with
164 : : // duplicate tol data to be put on new entity
165 [ # # ][ # # ]: 0 : PRINT_DEBUG_95("CAEntityName::split_owner()\n");
[ # # ]
166 : 0 : update();
167 : 0 : return cubit_simple_attrib();
168 [ + - ][ + - ]: 6540 : }
169 : :
|