OCC22315 Correction of pure misprint in TDatsXtd & ViewerTest
[occt.git] / src / TDataXtd / TDataXtd_Constraint.cxx
CommitLineData
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
23const 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
35Handle(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
51TDataXtd_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//=======================================================================
189void 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//=======================================================================
206const Handle(TNaming_NamedShape)& TDataXtd_Constraint::GetPlane() const
207{
208 return (Handle(TNaming_NamedShape)&) myPlane;
209}
210
211//=======================================================================
212//function : SetType
213//purpose :
214//=======================================================================
215
216void 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
231TDataXtd_ConstraintEnum TDataXtd_Constraint::GetType () const
232{
233 return myType;
234}
235
236
237//=======================================================================
238//function : ClearGeometries
239//purpose :
240//=======================================================================
241
242void 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
263void 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
283Handle(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
295Standard_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//=======================================================================
309Standard_Boolean TDataXtd_Constraint::IsDimension () const
310{
311 return !myValue.IsNull();
312}
313
314
315//=======================================================================
316//function : IsPlanar
317//purpose :
318//=======================================================================
319Standard_Boolean TDataXtd_Constraint::IsPlanar () const
320{
321 return !myPlane.IsNull();
322}
323
324//=======================================================================
325//function : SetValue
326//purpose :
327//=======================================================================
328
329void 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
344const Handle(TDataStd_Real)& TDataXtd_Constraint::GetValue () const
345{
346 return myValue;
347}
348
349
350//=======================================================================
351//function : ID
352//purpose :
353//=======================================================================
354
355const Standard_GUID& TDataXtd_Constraint::ID () const { return GetID(); }
356
357
358//=======================================================================
359//function : NewEmpty
360//purpose :
361//=======================================================================
362
363Handle(TDF_Attribute) TDataXtd_Constraint::NewEmpty () const
364{
365 return new TDataXtd_Constraint ();
366}
367
368
369//=======================================================================
370//function : Restore
371//purpose :
372//=======================================================================
373
374void 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
396void 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
429void 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//=======================================================================
450void 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//=======================================================================
463Standard_Boolean TDataXtd_Constraint::Verified() const
464{
465 return myIsVerified;
466}
467
468//=======================================================================
469//function : Reversed
470//purpose :
471//=======================================================================
472void 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//=======================================================================
485Standard_Boolean TDataXtd_Constraint::Reversed() const
486{
487 return myIsReversed;
488}
489
490//=======================================================================
491//function : Inverted
492//purpose :
493//=======================================================================
494void 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//=======================================================================
507Standard_Boolean TDataXtd_Constraint::Inverted() const
508{
509 return myIsInverted;
510}
511
512
513//=======================================================================
514//function : CollectChildConstraints
515//purpose :
516//=======================================================================
517
518void 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
537Standard_OStream& TDataXtd_Constraint::Dump (Standard_OStream& anOS) const
538{
539 anOS << "Constraint ";
540 TDataXtd::Print(GetType(),anOS);
541 return anOS;
542}
543