1 // Created on: 2009-04-06
2 // Copyright (c) 2009-2014 OPEN CASCADE SAS
4 // This file is part of Open CASCADE Technology software library.
6 // This library is free software; you can redistribute it and/or modify it under
7 // the terms of the GNU Lesser General Public License version 2.1 as published
8 // by the Free Software Foundation, with special exception defined in the file
9 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
10 // distribution for complete text of the license and disclaimer of any warranty.
12 // Alternatively, this file may be used under the terms of Open CASCADE
13 // commercial license or contractual agreement.
15 #include <TDataXtd_Constraint.ixx>
16 #include <TDataStd.hxx>
17 #include <TDataXtd.hxx>
18 #include <TDF_ChildIterator.hxx>
19 #include <TDataXtd_ConstraintEnum.hxx>
20 #include <TopoDS_Shape.hxx>
21 #include <TNaming_NamedShape.hxx>
22 // for symmetry midpoint the third argument is the axis or the point
25 //=======================================================================
28 //=======================================================================
30 const Standard_GUID& TDataXtd_Constraint::GetID ()
32 static Standard_GUID TDataXtd_ConstraintID("2a96b602-ec8b-11d0-bee7-080009dc3333");
33 return TDataXtd_ConstraintID;
37 //=======================================================================
40 //=======================================================================
42 Handle(TDataXtd_Constraint) TDataXtd_Constraint::Set (const TDF_Label& L)
44 Handle (TDataXtd_Constraint) A;
45 if (!L.FindAttribute (TDataXtd_Constraint::GetID (), A)) {
46 A = new TDataXtd_Constraint ();
53 //=======================================================================
54 //function : TDataXtd_Constraint
56 //=======================================================================
58 TDataXtd_Constraint::TDataXtd_Constraint()
59 : myType (TDataXtd_RADIUS),
60 myIsReversed (Standard_False),
61 myIsInverted (Standard_False),
62 myIsVerified (Standard_True)
65 //=======================================================================
68 //=======================================================================
70 void TDataXtd_Constraint::Set(const TDataXtd_ConstraintEnum type,
71 const Handle(TNaming_NamedShape)& G1)
76 Handle(TNaming_NamedShape) aShape =
77 Handle(TNaming_NamedShape)::DownCast(myGeometries[0]);
78 if (aShape.IsNull() == Standard_False && G1.IsNull() == Standard_False)
79 if (aShape -> Get() == G1 -> Get())
88 // =======================================================================
91 //=======================================================================
93 void TDataXtd_Constraint::Set(const TDataXtd_ConstraintEnum type,
94 const Handle(TNaming_NamedShape)& G1,
95 const Handle(TNaming_NamedShape)& G2)
100 Handle(TNaming_NamedShape) aShape1 =
101 Handle(TNaming_NamedShape)::DownCast(myGeometries[0]);
102 Handle(TNaming_NamedShape) aShape2 =
103 Handle(TNaming_NamedShape)::DownCast(myGeometries[1]);
104 if (aShape1.IsNull() == Standard_False && G1.IsNull() == Standard_False &&
105 aShape2.IsNull() == Standard_False && G2.IsNull() == Standard_False)
106 if (aShape1->Get() == G1->Get() && aShape2->Get() == G2->Get())
112 myGeometries[0] = G1;
113 myGeometries[1] = G2;
116 //=======================================================================
119 //=======================================================================
121 void TDataXtd_Constraint::Set(const TDataXtd_ConstraintEnum type,
122 const Handle(TNaming_NamedShape)& G1,
123 const Handle(TNaming_NamedShape)& G2,
124 const Handle(TNaming_NamedShape)& G3)
126 // OCC2932 correction
129 Handle(TNaming_NamedShape) aShape1 =
130 Handle(TNaming_NamedShape)::DownCast(myGeometries[0]);
131 Handle(TNaming_NamedShape) aShape2 =
132 Handle(TNaming_NamedShape)::DownCast(myGeometries[1]);
133 Handle(TNaming_NamedShape) aShape3 =
134 Handle(TNaming_NamedShape)::DownCast(myGeometries[2]);
135 if (aShape1.IsNull() == Standard_False && G1.IsNull() == Standard_False &&
136 aShape2.IsNull() == Standard_False && G2.IsNull() == Standard_False &&
137 aShape3.IsNull() == Standard_False && G3.IsNull() == Standard_False)
138 if (aShape1->Get() == G1->Get() &&
139 aShape2->Get() == G2->Get() &&
140 aShape3->Get() == G3->Get())
146 myGeometries[0] = G1;
147 myGeometries[1] = G2;
148 myGeometries[2] = G3;
151 //=======================================================================
154 //=======================================================================
156 void TDataXtd_Constraint::Set(const TDataXtd_ConstraintEnum type,
157 const Handle(TNaming_NamedShape)& G1,
158 const Handle(TNaming_NamedShape)& G2,
159 const Handle(TNaming_NamedShape)& G3,
160 const Handle(TNaming_NamedShape)& G4)
162 // OCC2932 correction
165 Handle(TNaming_NamedShape) aShape1 =
166 Handle(TNaming_NamedShape)::DownCast(myGeometries[0]);
167 Handle(TNaming_NamedShape) aShape2 =
168 Handle(TNaming_NamedShape)::DownCast(myGeometries[1]);
169 Handle(TNaming_NamedShape) aShape3 =
170 Handle(TNaming_NamedShape)::DownCast(myGeometries[2]);
171 Handle(TNaming_NamedShape) aShape4 =
172 Handle(TNaming_NamedShape)::DownCast(myGeometries[3]);
173 if (aShape1.IsNull() == Standard_False && G1.IsNull() == Standard_False &&
174 aShape2.IsNull() == Standard_False && G2.IsNull() == Standard_False &&
175 aShape3.IsNull() == Standard_False && G3.IsNull() == Standard_False &&
176 aShape4.IsNull() == Standard_False && G4.IsNull() == Standard_False)
177 if (aShape1->Get() == G1->Get() &&
178 aShape2->Get() == G2->Get() &&
179 aShape3->Get() == G3->Get() &&
180 aShape3->Get() == G4->Get())
186 myGeometries[0] = G1;
187 myGeometries[1] = G2;
188 myGeometries[2] = G3;
189 myGeometries[3] = G4;
192 //=======================================================================
193 //function : SetPlane
195 //=======================================================================
196 void TDataXtd_Constraint::SetPlane(const Handle(TNaming_NamedShape)& plane)
198 // OCC2932 correction
199 Handle(TNaming_NamedShape) aPlane =
200 Handle(TNaming_NamedShape)::DownCast(myPlane);
201 if (aPlane.IsNull() == Standard_False && plane.IsNull() == Standard_False)
202 if ( aPlane -> Get() == plane->Get())
209 //=======================================================================
212 //=======================================================================
213 const Handle(TNaming_NamedShape)& TDataXtd_Constraint::GetPlane() const
215 return (Handle(TNaming_NamedShape)&) myPlane;
218 //=======================================================================
221 //=======================================================================
223 void TDataXtd_Constraint::SetType (const TDataXtd_ConstraintEnum CTR)
225 // OCC2932 correction
226 if(myType == CTR) return;
233 //=======================================================================
236 //=======================================================================
238 TDataXtd_ConstraintEnum TDataXtd_Constraint::GetType () const
244 //=======================================================================
245 //function : ClearGeometries
247 //=======================================================================
249 void TDataXtd_Constraint::ClearGeometries ()
251 // OCC2932 correction
252 if(myGeometries[0].IsNull() && myGeometries[1].IsNull() &&
253 myGeometries[2].IsNull() && myGeometries[3].IsNull())
258 (myGeometries [0]).Nullify ();
259 (myGeometries [1]).Nullify ();
260 (myGeometries [2]).Nullify ();
261 (myGeometries [3]).Nullify ();
265 //=======================================================================
266 //function : SetGeometry
268 //=======================================================================
270 void TDataXtd_Constraint::SetGeometry (const Standard_Integer Index,
271 const Handle(TNaming_NamedShape)& G)
273 // OCC2932 correction
274 Handle(TNaming_NamedShape) aGeom =
275 Handle(TNaming_NamedShape)::DownCast(myGeometries[Index - 1]);
276 if (aGeom.IsNull() == Standard_False && G.IsNull() == Standard_False)
277 if (aGeom -> Get() == G->Get())
281 myGeometries [Index-1] = G;
285 //=======================================================================
286 //function : GetGeometry
288 //=======================================================================
290 Handle(TNaming_NamedShape) TDataXtd_Constraint::GetGeometry
291 (const Standard_Integer Index) const
293 return Handle(TNaming_NamedShape)::DownCast (myGeometries [Index-1]);
297 //=======================================================================
298 //function : NbGeometries
300 //=======================================================================
302 Standard_Integer TDataXtd_Constraint::NbGeometries () const
304 Standard_Integer num_geom = 0 ;
305 while (num_geom < 4 && ! myGeometries[num_geom].IsNull()) {
312 //=======================================================================
313 //function : IsDimension
315 //=======================================================================
316 Standard_Boolean TDataXtd_Constraint::IsDimension () const
318 return !myValue.IsNull();
322 //=======================================================================
323 //function : IsPlanar
325 //=======================================================================
326 Standard_Boolean TDataXtd_Constraint::IsPlanar () const
328 return !myPlane.IsNull();
331 //=======================================================================
332 //function : SetValue
334 //=======================================================================
336 void TDataXtd_Constraint::SetValue (const Handle(TDataStd_Real)& V)
338 // OCC2932 correction
339 if (myValue.IsNull() == Standard_False && V.IsNull() == Standard_False)
340 if(myValue->Get() == V->Get()) return;
346 //=======================================================================
347 //function : GetValue
349 //=======================================================================
351 const Handle(TDataStd_Real)& TDataXtd_Constraint::GetValue () const
357 //=======================================================================
360 //=======================================================================
362 const Standard_GUID& TDataXtd_Constraint::ID () const { return GetID(); }
365 //=======================================================================
366 //function : NewEmpty
368 //=======================================================================
370 Handle(TDF_Attribute) TDataXtd_Constraint::NewEmpty () const
372 return new TDataXtd_Constraint ();
376 //=======================================================================
379 //=======================================================================
381 void TDataXtd_Constraint::Restore(const Handle(TDF_Attribute)& with)
383 Handle(TDataXtd_Constraint) CTR =Handle(TDataXtd_Constraint)::DownCast(with);
384 myGeometries [0] = CTR->GetGeometry (1);
385 myGeometries [1] = CTR->GetGeometry (2);
386 myGeometries [2] = CTR->GetGeometry (3);
387 myGeometries [3] = CTR->GetGeometry (4);
388 myType = CTR->GetType ();
389 myValue = CTR->GetValue ();
390 myIsVerified = CTR->Verified();
391 myIsInverted = CTR->Inverted();
392 myIsReversed = CTR->Reversed();
393 myPlane = CTR->GetPlane();
398 //=======================================================================
401 //=======================================================================
403 void TDataXtd_Constraint::Paste (const Handle(TDF_Attribute)& into,
404 const Handle(TDF_RelocationTable)& RT) const
406 Handle(TDataXtd_Constraint) CTR =Handle(TDataXtd_Constraint)::DownCast (into);
407 Handle(TNaming_NamedShape) G1, G2, G3, G4, plane;
408 RT->HasRelocation (myGeometries[0], G1);
409 CTR->SetGeometry (1, G1);
410 RT->HasRelocation (myGeometries[1], G2);
411 CTR->SetGeometry (2, G2);
412 RT->HasRelocation (myGeometries[2], G3);
413 CTR->SetGeometry (3, G3);
414 RT->HasRelocation (myGeometries[3], G4);
415 CTR->SetGeometry (4, G4);
417 RT->HasRelocation (myPlane, plane);
418 CTR->SetPlane(plane);
420 Handle(TDataStd_Real) Value;
421 RT->HasRelocation (myValue,Value);
422 CTR->SetValue (Value);
424 CTR->SetType (myType);
425 CTR->Verified(Verified());
426 CTR->Inverted(Inverted());
427 CTR->Reversed(Reversed());
431 //=======================================================================
432 //function : References
434 //=======================================================================
436 void TDataXtd_Constraint::References(const Handle(TDF_DataSet)& DS) const
439 //bidouille en attendant traitement des contraintes d assemblage en dehors de la part
440 // l attribut placement devrait oriente vers les contraintes de placement en dehors
441 Standard_Integer Lim;
442 if (myType >= TDataXtd_MATE && myType<=TDataXtd_FACES_ANGLE) Lim =1;
445 for (Standard_Integer i=0; i<=Lim; i++) {
446 if (!myGeometries [i].IsNull()) DS->AddAttribute (myGeometries[i]);
449 if (!myValue.IsNull()) DS->AddAttribute (myValue);
450 if (!myPlane.IsNull()) DS->AddAttribute (myPlane);
453 //=======================================================================
454 //function : Verified
456 //=======================================================================
457 void TDataXtd_Constraint::Verified(const Standard_Boolean status)
459 // OCC2932 correction
460 if(myIsVerified == status) return;
463 myIsVerified = status;
466 //=======================================================================
467 //function : Verified
469 //=======================================================================
470 Standard_Boolean TDataXtd_Constraint::Verified() const
475 //=======================================================================
476 //function : Reversed
478 //=======================================================================
479 void TDataXtd_Constraint::Reversed(const Standard_Boolean status)
481 // OCC2932 correction
482 if(myIsReversed == status ) return;
485 myIsReversed = status;
488 //=======================================================================
489 //function : Reversed
491 //=======================================================================
492 Standard_Boolean TDataXtd_Constraint::Reversed() const
497 //=======================================================================
498 //function : Inverted
500 //=======================================================================
501 void TDataXtd_Constraint::Inverted(const Standard_Boolean status)
503 // OCC2932 correction
504 if(myIsInverted == status) return;
507 myIsInverted = status;
510 //=======================================================================
511 //function : Inverted
513 //=======================================================================
514 Standard_Boolean TDataXtd_Constraint::Inverted() const
520 //=======================================================================
521 //function : CollectChildConstraints
523 //=======================================================================
525 void TDataXtd_Constraint::CollectChildConstraints(const TDF_Label& aLabel,
528 TDF_ChildIterator it(aLabel,Standard_True);
529 Handle(TDataXtd_Constraint) aConstraint;
530 for (; it.More(); it.Next()) {
531 if (it.Value().FindAttribute(TDataXtd_Constraint::GetID(), aConstraint)) {
532 LL.Append(it.Value());
539 //=======================================================================
542 //=======================================================================
544 Standard_OStream& TDataXtd_Constraint::Dump (Standard_OStream& anOS) const
546 anOS << "Constraint ";
547 TDataXtd::Print(GetType(),anOS);