7fd59977 |
1 | // File: TDataXtd_Constraint.cxx |
2 | // Created: Mon Apr 6 17:41:29 2009 |
3 | // <sergey.zaritchny@opencascade.com> |
4 | //Copyright: Open CasCade SA 2009 |
5 | |
6 | |
7 | #include <TDataXtd_Constraint.ixx> |
8 | #include <TDataStd.hxx> |
9 | #include <TDataXtd.hxx> |
10 | #include <TDF_ChildIterator.hxx> |
11 | #include <TDataXtd_ConstraintEnum.hxx> |
12 | #include <TopoDS_Shape.hxx> |
13 | // |
14 | // |
15 | // for symmetry midpoint the third argument is the axis or the point |
16 | |
17 | |
18 | //======================================================================= |
19 | //function : GetID |
20 | //purpose : |
21 | //======================================================================= |
22 | |
23 | const Standard_GUID& TDataXtd_Constraint::GetID () |
24 | { |
25 | static Standard_GUID TDataXtd_ConstraintID("2a96b602-ec8b-11d0-bee7-080009dc3333"); |
26 | return TDataXtd_ConstraintID; |
27 | } |
28 | |
29 | |
30 | //======================================================================= |
31 | //function : Set |
32 | //purpose : |
33 | //======================================================================= |
34 | |
35 | Handle(TDataXtd_Constraint) TDataXtd_Constraint::Set (const TDF_Label& L) |
36 | { |
37 | Handle (TDataXtd_Constraint) A; |
38 | if (!L.FindAttribute (TDataXtd_Constraint::GetID (), A)) { |
39 | A = new TDataXtd_Constraint (); |
40 | L.AddAttribute(A); |
41 | } |
42 | return A; |
43 | } |
44 | |
45 | |
46 | //======================================================================= |
47 | //function : TDataXtd_Constraint |
48 | //purpose : |
49 | //======================================================================= |
50 | |
51 | TDataXtd_Constraint::TDataXtd_Constraint() |
52 | : myType (TDataXtd_RADIUS), |
53 | myIsReversed (Standard_False), |
54 | myIsInverted (Standard_False), |
55 | myIsVerified (Standard_True) |
56 | {} |
57 | |
58 | //======================================================================= |
59 | //function : Set |
60 | //purpose : |
61 | //======================================================================= |
62 | |
63 | void TDataXtd_Constraint::Set(const TDataXtd_ConstraintEnum type, |
64 | const Handle(TNaming_NamedShape)& G1) |
65 | { |
66 | // OCC2932 correction |
67 | if(myType == type) |
68 | { |
69 | Handle(TNaming_NamedShape) aShape = |
70 | Handle(TNaming_NamedShape)::DownCast(myGeometries[0]); |
71 | if (aShape.IsNull() == Standard_False && G1.IsNull() == Standard_False) |
72 | if (aShape -> Get() == G1 -> Get()) |
73 | return; |
74 | } |
75 | |
76 | Backup(); |
77 | myType = type; |
78 | myGeometries[0] = G1; |
79 | } |
80 | |
81 | // ======================================================================= |
82 | //function : Set |
83 | //purpose : |
84 | //======================================================================= |
85 | |
86 | void TDataXtd_Constraint::Set(const TDataXtd_ConstraintEnum type, |
87 | const Handle(TNaming_NamedShape)& G1, |
88 | const Handle(TNaming_NamedShape)& G2) |
89 | { |
90 | // OCC2932 correction |
91 | if(myType == type) |
92 | { |
93 | Handle(TNaming_NamedShape) aShape1 = |
94 | Handle(TNaming_NamedShape)::DownCast(myGeometries[0]); |
95 | Handle(TNaming_NamedShape) aShape2 = |
96 | Handle(TNaming_NamedShape)::DownCast(myGeometries[1]); |
97 | if (aShape1.IsNull() == Standard_False && G1.IsNull() == Standard_False && |
98 | aShape2.IsNull() == Standard_False && G2.IsNull() == Standard_False) |
99 | if (aShape1->Get() == G1->Get() && aShape2->Get() == G2->Get()) |
100 | return; |
101 | } |
102 | |
103 | Backup(); |
104 | myType = type; |
105 | myGeometries[0] = G1; |
106 | myGeometries[1] = G2; |
107 | } |
108 | |
109 | //======================================================================= |
110 | //function : Set |
111 | //purpose : |
112 | //======================================================================= |
113 | |
114 | void TDataXtd_Constraint::Set(const TDataXtd_ConstraintEnum type, |
115 | const Handle(TNaming_NamedShape)& G1, |
116 | const Handle(TNaming_NamedShape)& G2, |
117 | const Handle(TNaming_NamedShape)& G3) |
118 | { |
119 | // OCC2932 correction |
120 | if (myType == type) |
121 | { |
122 | Handle(TNaming_NamedShape) aShape1 = |
123 | Handle(TNaming_NamedShape)::DownCast(myGeometries[0]); |
124 | Handle(TNaming_NamedShape) aShape2 = |
125 | Handle(TNaming_NamedShape)::DownCast(myGeometries[1]); |
126 | Handle(TNaming_NamedShape) aShape3 = |
127 | Handle(TNaming_NamedShape)::DownCast(myGeometries[2]); |
128 | if (aShape1.IsNull() == Standard_False && G1.IsNull() == Standard_False && |
129 | aShape2.IsNull() == Standard_False && G2.IsNull() == Standard_False && |
130 | aShape3.IsNull() == Standard_False && G3.IsNull() == Standard_False) |
131 | if (aShape1->Get() == G1->Get() && |
132 | aShape2->Get() == G2->Get() && |
133 | aShape3->Get() == G3->Get()) |
134 | return; |
135 | } |
136 | |
137 | Backup(); |
138 | myType = type; |
139 | myGeometries[0] = G1; |
140 | myGeometries[1] = G2; |
141 | myGeometries[2] = G3; |
142 | } |
143 | |
144 | //======================================================================= |
145 | //function : Set |
146 | //purpose : |
147 | //======================================================================= |
148 | |
149 | void TDataXtd_Constraint::Set(const TDataXtd_ConstraintEnum type, |
150 | const Handle(TNaming_NamedShape)& G1, |
151 | const Handle(TNaming_NamedShape)& G2, |
152 | const Handle(TNaming_NamedShape)& G3, |
153 | const Handle(TNaming_NamedShape)& G4) |
154 | { |
155 | // OCC2932 correction |
156 | if (myType == type) |
157 | { |
158 | Handle(TNaming_NamedShape) aShape1 = |
159 | Handle(TNaming_NamedShape)::DownCast(myGeometries[0]); |
160 | Handle(TNaming_NamedShape) aShape2 = |
161 | Handle(TNaming_NamedShape)::DownCast(myGeometries[1]); |
162 | Handle(TNaming_NamedShape) aShape3 = |
163 | Handle(TNaming_NamedShape)::DownCast(myGeometries[2]); |
164 | Handle(TNaming_NamedShape) aShape4 = |
165 | Handle(TNaming_NamedShape)::DownCast(myGeometries[3]); |
166 | if (aShape1.IsNull() == Standard_False && G1.IsNull() == Standard_False && |
167 | aShape2.IsNull() == Standard_False && G2.IsNull() == Standard_False && |
168 | aShape3.IsNull() == Standard_False && G3.IsNull() == Standard_False && |
169 | aShape4.IsNull() == Standard_False && G4.IsNull() == Standard_False) |
170 | if (aShape1->Get() == G1->Get() && |
171 | aShape2->Get() == G2->Get() && |
172 | aShape3->Get() == G3->Get() && |
173 | aShape3->Get() == G4->Get()) |
174 | return; |
175 | } |
176 | |
177 | Backup(); |
178 | myType = type; |
179 | myGeometries[0] = G1; |
180 | myGeometries[1] = G2; |
181 | myGeometries[2] = G3; |
182 | myGeometries[3] = G4; |
183 | } |
184 | |
185 | //======================================================================= |
186 | //function : SetPlane |
187 | //purpose : |
188 | //======================================================================= |
189 | void TDataXtd_Constraint::SetPlane(const Handle(TNaming_NamedShape)& plane) |
190 | { |
191 | // OCC2932 correction |
192 | Handle(TNaming_NamedShape) aPlane = |
193 | Handle(TNaming_NamedShape)::DownCast(myPlane); |
194 | if (aPlane.IsNull() == Standard_False && plane.IsNull() == Standard_False) |
195 | if ( aPlane -> Get() == plane->Get()) |
196 | return; |
197 | |
198 | Backup(); |
199 | myPlane = plane; |
200 | } |
201 | |
202 | //======================================================================= |
203 | //function : Plane |
204 | //purpose : |
205 | //======================================================================= |
206 | const Handle(TNaming_NamedShape)& TDataXtd_Constraint::GetPlane() const |
207 | { |
208 | return (Handle(TNaming_NamedShape)&) myPlane; |
209 | } |
210 | |
211 | //======================================================================= |
212 | //function : SetType |
213 | //purpose : |
214 | //======================================================================= |
215 | |
216 | void TDataXtd_Constraint::SetType (const TDataXtd_ConstraintEnum CTR) |
217 | { |
218 | // OCC2932 correction |
9ba380fa |
219 | if(myType == CTR) return; |
7fd59977 |
220 | |
221 | Backup(); |
222 | myType = CTR; |
223 | } |
224 | |
225 | |
226 | //======================================================================= |
227 | //function : GetType |
228 | //purpose : |
229 | //======================================================================= |
230 | |
231 | TDataXtd_ConstraintEnum TDataXtd_Constraint::GetType () const |
232 | { |
233 | return myType; |
234 | } |
235 | |
236 | |
237 | //======================================================================= |
238 | //function : ClearGeometries |
239 | //purpose : |
240 | //======================================================================= |
241 | |
242 | void TDataXtd_Constraint::ClearGeometries () |
243 | { |
244 | // OCC2932 correction |
245 | if(myGeometries[0].IsNull() && myGeometries[1].IsNull() && |
246 | myGeometries[2].IsNull() && myGeometries[3].IsNull()) |
247 | return; |
248 | |
249 | |
250 | Backup(); |
251 | (myGeometries [0]).Nullify (); |
252 | (myGeometries [1]).Nullify (); |
253 | (myGeometries [2]).Nullify (); |
254 | (myGeometries [3]).Nullify (); |
255 | } |
256 | |
257 | |
258 | //======================================================================= |
259 | //function : SetGeometry |
260 | //purpose : |
261 | //======================================================================= |
262 | |
263 | void TDataXtd_Constraint::SetGeometry (const Standard_Integer Index, |
264 | const Handle(TNaming_NamedShape)& G) |
265 | { |
266 | // OCC2932 correction |
267 | Handle(TNaming_NamedShape) aGeom = |
268 | Handle(TNaming_NamedShape)::DownCast(myGeometries[Index - 1]); |
269 | if (aGeom.IsNull() == Standard_False && G.IsNull() == Standard_False) |
270 | if (aGeom -> Get() == G->Get()) |
271 | return; |
272 | |
273 | Backup(); |
274 | myGeometries [Index-1] = G; |
275 | } |
276 | |
277 | |
278 | //======================================================================= |
279 | //function : GetGeometry |
280 | //purpose : |
281 | //======================================================================= |
282 | |
283 | Handle(TNaming_NamedShape) TDataXtd_Constraint::GetGeometry |
284 | (const Standard_Integer Index) const |
285 | { |
286 | return Handle(TNaming_NamedShape)::DownCast (myGeometries [Index-1]); |
287 | } |
288 | |
289 | |
290 | //======================================================================= |
291 | //function : NbGeometries |
292 | //purpose : |
293 | //======================================================================= |
294 | |
295 | Standard_Integer TDataXtd_Constraint::NbGeometries () const |
296 | { |
297 | Standard_Integer num_geom = 0 ; |
298 | while (num_geom < 4 && ! myGeometries[num_geom].IsNull()) { |
299 | num_geom += 1 ; |
300 | } |
301 | return num_geom ; |
302 | } |
303 | |
304 | |
305 | //======================================================================= |
306 | //function : IsDimension |
307 | //purpose : |
308 | //======================================================================= |
309 | Standard_Boolean TDataXtd_Constraint::IsDimension () const |
310 | { |
311 | return !myValue.IsNull(); |
312 | } |
313 | |
314 | |
315 | //======================================================================= |
316 | //function : IsPlanar |
317 | //purpose : |
318 | //======================================================================= |
319 | Standard_Boolean TDataXtd_Constraint::IsPlanar () const |
320 | { |
321 | return !myPlane.IsNull(); |
322 | } |
323 | |
324 | //======================================================================= |
325 | //function : SetValue |
326 | //purpose : |
327 | //======================================================================= |
328 | |
329 | void TDataXtd_Constraint::SetValue (const Handle(TDataStd_Real)& V) |
330 | { |
331 | // OCC2932 correction |
332 | if (myValue.IsNull() == Standard_False && V.IsNull() == Standard_False) |
333 | if(myValue->Get() == V->Get()) return; |
334 | |
335 | Backup(); |
336 | myValue = V; |
337 | } |
338 | |
339 | //======================================================================= |
340 | //function : GetValue |
341 | //purpose : |
342 | //======================================================================= |
343 | |
344 | const Handle(TDataStd_Real)& TDataXtd_Constraint::GetValue () const |
345 | { |
346 | return myValue; |
347 | } |
348 | |
349 | |
350 | //======================================================================= |
351 | //function : ID |
352 | //purpose : |
353 | //======================================================================= |
354 | |
355 | const Standard_GUID& TDataXtd_Constraint::ID () const { return GetID(); } |
356 | |
357 | |
358 | //======================================================================= |
359 | //function : NewEmpty |
360 | //purpose : |
361 | //======================================================================= |
362 | |
363 | Handle(TDF_Attribute) TDataXtd_Constraint::NewEmpty () const |
364 | { |
365 | return new TDataXtd_Constraint (); |
366 | } |
367 | |
368 | |
369 | //======================================================================= |
370 | //function : Restore |
371 | //purpose : |
372 | //======================================================================= |
373 | |
374 | void TDataXtd_Constraint::Restore(const Handle(TDF_Attribute)& with) |
375 | { |
376 | Handle(TDataXtd_Constraint) CTR =Handle(TDataXtd_Constraint)::DownCast(with); |
377 | myGeometries [0] = CTR->GetGeometry (1); |
378 | myGeometries [1] = CTR->GetGeometry (2); |
379 | myGeometries [2] = CTR->GetGeometry (3); |
380 | myGeometries [3] = CTR->GetGeometry (4); |
381 | myType = CTR->GetType (); |
382 | myValue = CTR->GetValue (); |
383 | myIsVerified = CTR->Verified(); |
384 | myIsInverted = CTR->Inverted(); |
385 | myIsReversed = CTR->Reversed(); |
386 | myPlane = CTR->GetPlane(); |
387 | } |
388 | |
389 | |
390 | |
391 | //======================================================================= |
392 | //function : Paste |
393 | //purpose : |
394 | //======================================================================= |
395 | |
396 | void TDataXtd_Constraint::Paste (const Handle(TDF_Attribute)& into, |
397 | const Handle(TDF_RelocationTable)& RT) const |
398 | { |
399 | Handle(TDataXtd_Constraint) CTR =Handle(TDataXtd_Constraint)::DownCast (into); |
400 | Handle(TNaming_NamedShape) G1, G2, G3, G4, plane; |
401 | RT->HasRelocation (myGeometries[0], G1); |
402 | CTR->SetGeometry (1, G1); |
403 | RT->HasRelocation (myGeometries[1], G2); |
404 | CTR->SetGeometry (2, G2); |
405 | RT->HasRelocation (myGeometries[2], G3); |
406 | CTR->SetGeometry (3, G3); |
407 | RT->HasRelocation (myGeometries[3], G4); |
408 | CTR->SetGeometry (4, G4); |
409 | |
410 | RT->HasRelocation (myPlane, plane); |
411 | CTR->SetPlane(plane); |
412 | |
413 | Handle(TDataStd_Real) Value; |
414 | RT->HasRelocation (myValue,Value); |
415 | CTR->SetValue (Value); |
416 | |
417 | CTR->SetType (myType); |
418 | CTR->Verified(Verified()); |
419 | CTR->Inverted(Inverted()); |
420 | CTR->Reversed(Reversed()); |
421 | } |
422 | |
423 | |
424 | //======================================================================= |
425 | //function : References |
426 | //purpose : |
427 | //======================================================================= |
428 | |
429 | void TDataXtd_Constraint::References(const Handle(TDF_DataSet)& DS) const |
430 | |
431 | { |
432 | //bidouille en attendant traitement des contraintes d assemblage en dehors de la part |
433 | // l attribut placement devrait oriente vers les contraintes de placement en dehors |
434 | Standard_Integer Lim; |
435 | if (myType >= TDataXtd_MATE && myType<=TDataXtd_FACES_ANGLE) Lim =1; |
436 | else Lim =3; |
437 | |
438 | for (Standard_Integer i=0; i<=Lim; i++) { |
439 | if (!myGeometries [i].IsNull()) DS->AddAttribute (myGeometries[i]); |
440 | } |
441 | |
442 | if (!myValue.IsNull()) DS->AddAttribute (myValue); |
443 | if (!myPlane.IsNull()) DS->AddAttribute (myPlane); |
444 | } |
445 | |
446 | //======================================================================= |
447 | //function : Verified |
448 | //purpose : |
449 | //======================================================================= |
450 | void TDataXtd_Constraint::Verified(const Standard_Boolean status) |
451 | { |
452 | // OCC2932 correction |
453 | if(myIsVerified == status) return; |
454 | |
455 | Backup(); |
456 | myIsVerified = status; |
457 | } |
458 | |
459 | //======================================================================= |
460 | //function : Verified |
461 | //purpose : |
462 | //======================================================================= |
463 | Standard_Boolean TDataXtd_Constraint::Verified() const |
464 | { |
465 | return myIsVerified; |
466 | } |
467 | |
468 | //======================================================================= |
469 | //function : Reversed |
470 | //purpose : |
471 | //======================================================================= |
472 | void TDataXtd_Constraint::Reversed(const Standard_Boolean status) |
473 | { |
474 | // OCC2932 correction |
475 | if(myIsReversed == status ) return; |
476 | |
477 | Backup(); |
478 | myIsReversed = status; |
479 | } |
480 | |
481 | //======================================================================= |
482 | //function : Reversed |
483 | //purpose : |
484 | //======================================================================= |
485 | Standard_Boolean TDataXtd_Constraint::Reversed() const |
486 | { |
487 | return myIsReversed; |
488 | } |
489 | |
490 | //======================================================================= |
491 | //function : Inverted |
492 | //purpose : |
493 | //======================================================================= |
494 | void TDataXtd_Constraint::Inverted(const Standard_Boolean status) |
495 | { |
496 | // OCC2932 correction |
497 | if(myIsInverted == status) return; |
498 | |
499 | Backup(); |
500 | myIsInverted = status; |
501 | } |
502 | |
503 | //======================================================================= |
504 | //function : Inverted |
505 | //purpose : |
506 | //======================================================================= |
507 | Standard_Boolean TDataXtd_Constraint::Inverted() const |
508 | { |
509 | return myIsInverted; |
510 | } |
511 | |
512 | |
513 | //======================================================================= |
514 | //function : CollectChildConstraints |
515 | //purpose : |
516 | //======================================================================= |
517 | |
518 | void TDataXtd_Constraint::CollectChildConstraints(const TDF_Label& aLabel, |
519 | TDF_LabelList& LL) |
520 | { |
521 | TDF_ChildIterator it(aLabel,Standard_True); |
522 | Handle(TDataXtd_Constraint) aConstraint; |
523 | for (; it.More(); it.Next()) { |
524 | if (it.Value().FindAttribute(TDataXtd_Constraint::GetID(), aConstraint)) { |
525 | LL.Append(it.Value()); |
526 | } |
527 | } |
528 | |
529 | } |
530 | |
531 | |
532 | //======================================================================= |
533 | //function : Dump |
534 | //purpose : |
535 | //======================================================================= |
536 | |
537 | Standard_OStream& TDataXtd_Constraint::Dump (Standard_OStream& anOS) const |
538 | { |
539 | anOS << "Constraint "; |
540 | TDataXtd::Print(GetType(),anOS); |
541 | return anOS; |
542 | } |
543 | |