1 // Created on: 2015-04-20
2 // Created by: Alexander Zaikin
3 // Copyright (c) 1998-1999 Matra Datavision
4 // Copyright (c) 1999-2015 OPEN CASCADE SAS
6 // This file is part of Open CASCADE Technology software library.
8 // This library is free software; you can redistribute it and/or modify it under
9 // the terms of the GNU Lesser General Public License version 2.1 as published
10 // by the Free Software Foundation, with special exception defined in the file
11 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
12 // distribution for complete text of the license and disclaimer of any warranty.
14 // Alternatively, this file may be used under the terms of Open CASCADE
15 // commercial license or contractual agreement.
17 #include <TDataXtd_Presentation.hxx>
19 #include <TDF_DefaultDeltaOnRemoval.hxx>
20 #include <TDF_Tool.hxx>
21 #include <TCollection_ExtendedString.hxx>
23 IMPLEMENT_STANDARD_RTTIEXT(TDataXtd_Presentation,TDF_Attribute)
25 //=======================================================================
26 //function : getColorNameFromOldEnum
28 //=======================================================================
29 Quantity_NameOfColor TDataXtd_Presentation::getColorNameFromOldEnum (Standard_Integer theOld)
31 Standard_Integer aNew = theOld;
32 if (theOld >= 43) { --aNew; } // Quantity_NOC_CHARTREUSE1 merged to Quantity_NOC_CHARTREUSE1
33 if (theOld >= 124) { --aNew; } // Quantity_NOC_GOLD1 merged to Quantity_NOC_GOLD
34 if (theOld >= 136 && theOld < 223)
36 if (theOld == 146) { return Quantity_NOC_GRAY2; }
37 if (theOld == 157) { return Quantity_NOC_GRAY3; }
38 if (theOld == 168) { return Quantity_NOC_GRAY4; }
39 if (theOld == 179) { return Quantity_NOC_GRAY5; }
40 if (theOld == 190) { return Quantity_NOC_GRAY6; }
41 if (theOld == 201) { return Quantity_NOC_GRAY7; }
42 if (theOld == 212) { return Quantity_NOC_GRAY8; }
43 if (theOld == 222) { return Quantity_NOC_GRAY9; }
45 if (theOld > 212) { aNew += 1; } // old Quantity_NOC_GRAY8
46 else if (theOld > 201) { aNew += 2; } // old Quantity_NOC_GRAY7
47 else if (theOld > 190) { aNew += 3; } // old Quantity_NOC_GRAY6
48 else if (theOld > 179) { aNew += 4; } // old Quantity_NOC_GRAY5
49 else if (theOld > 168) { aNew += 5; } // old Quantity_NOC_GRAY4
50 else if (theOld > 157) { aNew += 6; } // old Quantity_NOC_GRAY3
51 else if (theOld > 146) { aNew += 7; } // old Quantity_NOC_GRAY2
55 if (theOld > 228) { aNew+=3; } // moved Quantity_NOC_GRAY96, 97, 98
56 if (theOld >= 230) { --aNew; } // Quantity_NOC_GREEN1 merged to Quantity_NOC_GREEN
57 if (theOld == 235) { return Quantity_NOC_GRAY97; }
58 if (theOld == 236) { return Quantity_NOC_GRAY98; }
59 if (theOld == 237) { return Quantity_NOC_GRAY99; }
60 if (theOld >= 238) { aNew-=3; } // moved Quantity_NOC_GRAY96, 97, 98
61 if (theOld >= 360) { --aNew; } // Quantity_NOC_ORANGE1 merged to Quantity_NOC_ORANGE
62 if (theOld >= 365) { --aNew; } // Quantity_NOC_ORANGERED1 merged to Quantity_NOC_ORANGERED
63 if (theOld >= 413) { --aNew; } // Quantity_NOC_RED1 merged to Quantity_NOC_RED
64 if (theOld >= 489) { --aNew; } // Quantity_NOC_TOMATO1 merged to Quantity_NOC_TOMATO
65 if (theOld >= 511) { --aNew; } // Quantity_NOC_YELLOW1 merged to Quantity_NOC_YELLOW
66 if (aNew > Quantity_NOC_WHITE) { return Quantity_NOC_WHITE; }
67 return (Quantity_NameOfColor )aNew;
70 //=======================================================================
71 //function : getOldColorNameFromNewEnum
73 //=======================================================================
74 Standard_Integer TDataXtd_Presentation::getOldColorNameFromNewEnum (Quantity_NameOfColor theNew)
76 Standard_Integer anOld = theNew;
77 if (theNew >= Quantity_NOC_CHARTREUSE2) { ++anOld; } // Quantity_NOC_CHARTREUSE1 merged to Quantity_NOC_CHARTREUSE1
78 if (theNew >= Quantity_NOC_GOLD2) { ++anOld; } // Quantity_NOC_GOLD1 merged to Quantity_NOC_GOLD
79 if (theNew >= Quantity_NOC_GRAY2 && theNew <= Quantity_NOC_GRAY89)
81 if (theNew == Quantity_NOC_GRAY2) { return 146; }
82 if (theNew == Quantity_NOC_GRAY3) { return 157; }
83 if (theNew == Quantity_NOC_GRAY4) { return 168; }
84 if (theNew == Quantity_NOC_GRAY5) { return 179; }
85 if (theNew == Quantity_NOC_GRAY6) { return 190; }
86 if (theNew == Quantity_NOC_GRAY7) { return 201; }
87 if (theNew == Quantity_NOC_GRAY8) { return 212; }
88 if (theNew == Quantity_NOC_GRAY9) { return 222; }
90 if (theNew >= Quantity_NOC_GRAY80) { anOld -= 1; }
91 else if (theNew >= Quantity_NOC_GRAY70) { anOld -= 2; }
92 else if (theNew >= Quantity_NOC_GRAY60) { anOld -= 3; }
93 else if (theNew >= Quantity_NOC_GRAY50) { anOld -= 4; }
94 else if (theNew >= Quantity_NOC_GRAY40) { anOld -= 5; }
95 else if (theNew >= Quantity_NOC_GRAY30) { anOld -= 6; }
96 else if (theNew >= Quantity_NOC_GRAY20) { anOld -= 7; }
99 if (theNew == Quantity_NOC_GRAY97) { return 235; }
100 if (theNew == Quantity_NOC_GRAY98) { return 236; }
101 if (theNew == Quantity_NOC_GRAY99) { return 237; }
103 if (theNew >= Quantity_NOC_GREEN) { anOld -= 3; } // moved Quantity_NOC_GRAY96, 97, 98
104 if (theNew >= Quantity_NOC_GREEN2) { ++anOld; } // Quantity_NOC_GREEN1 merged to Quantity_NOC_GREEN
105 if (theNew >= Quantity_NOC_HONEYDEW) { anOld += 3; } // moved Quantity_NOC_GRAY96, 97, 98
106 if (theNew >= Quantity_NOC_ORANGE2) { ++anOld; } // Quantity_NOC_ORANGE1 merged to Quantity_NOC_ORANGE
107 if (theNew >= Quantity_NOC_ORANGERED2) { ++anOld; } // Quantity_NOC_ORANGERED1 merged to Quantity_NOC_ORANGERED
108 if (theNew >= Quantity_NOC_RED2) { ++anOld; } // Quantity_NOC_RED1 merged to Quantity_NOC_RED
109 if (theNew >= Quantity_NOC_TOMATO2) { ++anOld; } // Quantity_NOC_TOMATO1 merged to Quantity_NOC_TOMATO
110 if (theNew >= Quantity_NOC_YELLOW2) { ++anOld; } // Quantity_NOC_YELLOW1 merged to Quantity_NOC_YELLOW
114 //=======================================================================
115 //function : TDataXtd_Presentation
116 //purpose : Default constructor.
117 //=======================================================================
118 TDataXtd_Presentation::TDataXtd_Presentation()
119 : myDriverGUID ("00000000-0000-0000-0000-000000000000"),
120 myColor (Quantity_NOC_WHITE),
123 myTransparency (0.0),
125 myIsDisplayed (Standard_False),
126 myHasOwnColor (Standard_False),
127 myHasOwnMaterial (Standard_False),
128 myHasOwnTransparency (Standard_False),
129 myHasOwnWidth (Standard_False),
130 myHasOwnMode (Standard_False),
131 myHasOwnSelectionMode (Standard_False)
135 //=======================================================================
138 //=======================================================================
139 Handle(TDataXtd_Presentation) TDataXtd_Presentation::Set (const TDF_Label& theLabel,
140 const Standard_GUID& theDriverId)
142 Handle(TDataXtd_Presentation) aPresentation;
144 if ( !theLabel.FindAttribute(TDataXtd_Presentation::GetID(), aPresentation) )
146 aPresentation = new TDataXtd_Presentation();
147 theLabel.AddAttribute(aPresentation);
150 aPresentation->SetDriverGUID(theDriverId);
151 return aPresentation;
154 //=======================================================================
157 //=======================================================================
158 void TDataXtd_Presentation::Unset(const TDF_Label& theLabel)
160 Handle(TDataXtd_Presentation) aPresentation;
161 if (theLabel.FindAttribute(TDataXtd_Presentation::GetID(), aPresentation))
162 theLabel.ForgetAttribute(aPresentation);
166 //=======================================================================
169 //=======================================================================
170 const Standard_GUID& TDataXtd_Presentation::GetID()
172 static Standard_GUID TDataXtd_PresentationID("04fb4d00-5690-11d1-8940-080009dc3333");
173 return TDataXtd_PresentationID;
177 //=======================================================================
180 //=======================================================================
181 const Standard_GUID& TDataXtd_Presentation::ID() const
187 //=======================================================================
188 //function :GetDriverGUID
190 //=======================================================================
191 Standard_GUID TDataXtd_Presentation::GetDriverGUID() const
197 //=======================================================================
198 //function :SetDriverGUID
200 //=======================================================================
201 void TDataXtd_Presentation::SetDriverGUID(const Standard_GUID& theGUID)
203 if ( myDriverGUID != theGUID )
206 myDriverGUID = theGUID;
211 //=======================================================================
212 //function : IsDisplayed
214 //=======================================================================
215 Standard_Boolean TDataXtd_Presentation::IsDisplayed() const
217 return myIsDisplayed;
221 //=======================================================================
222 //function : HasOwnMaterial
224 //=======================================================================
225 Standard_Boolean TDataXtd_Presentation::HasOwnMaterial() const
227 return myHasOwnMaterial;
231 //=======================================================================
232 //function : HasOwnTransparency
234 //=======================================================================
235 Standard_Boolean TDataXtd_Presentation::HasOwnTransparency() const
237 return myHasOwnTransparency;
241 //=======================================================================
242 //function : HasOwnColor
244 //=======================================================================
245 Standard_Boolean TDataXtd_Presentation::HasOwnColor() const
247 return myHasOwnColor;
251 //=======================================================================
252 //function : HasOwnWidth
254 //=======================================================================
255 Standard_Boolean TDataXtd_Presentation::HasOwnWidth() const
257 return myHasOwnWidth;
261 //=======================================================================
262 //function : HasOwnMode
264 //=======================================================================
265 Standard_Boolean TDataXtd_Presentation::HasOwnMode() const
271 //=======================================================================
272 //function : HasOwnSelectionMode
274 //=======================================================================
275 Standard_Boolean TDataXtd_Presentation::HasOwnSelectionMode() const
277 return myHasOwnSelectionMode;
281 //=======================================================================
282 //function : SetDisplayed
284 //=======================================================================
285 void TDataXtd_Presentation::SetDisplayed(const Standard_Boolean theIsDisplayed)
287 if (myIsDisplayed != theIsDisplayed)
290 myIsDisplayed = theIsDisplayed;
295 //=======================================================================
296 //function : SetMaterialIndex
298 //=======================================================================
299 void TDataXtd_Presentation::SetMaterialIndex(const Standard_Integer theMaterialIndex)
301 if (! myHasOwnMaterial || myMaterialIndex != theMaterialIndex)
304 myMaterialIndex = theMaterialIndex;
305 myHasOwnMaterial = Standard_True;
310 //=======================================================================
311 //function : SetTransparency
313 //=======================================================================
314 void TDataXtd_Presentation::SetTransparency(const Standard_Real theValue)
316 if (! myHasOwnTransparency || myTransparency != theValue)
319 myTransparency = theValue;
320 myHasOwnTransparency = Standard_True;
325 //=======================================================================
326 //function : SetColor
328 //=======================================================================
329 void TDataXtd_Presentation::SetColor(const Quantity_NameOfColor theColor)
331 if (! myHasOwnColor || myColor != theColor)
335 myHasOwnColor = Standard_True;
340 //=======================================================================
341 //function : SetWidth
343 //=======================================================================
344 void TDataXtd_Presentation::SetWidth(const Standard_Real theWidth)
346 if (! myHasOwnWidth || myWidth != theWidth)
350 myHasOwnWidth = Standard_True;
355 //=======================================================================
358 //=======================================================================
359 void TDataXtd_Presentation::SetMode(const Standard_Integer theMode)
361 if (! myHasOwnMode || myMode != theMode)
365 myHasOwnMode = Standard_True;
369 //=======================================================================
370 //function : GetNbSelectionModes
371 //purpose : Returns the number of selection modes of the attribute.
372 // : It starts with 1 .. GetNbSelectionModes().
373 //=======================================================================
374 Standard_EXPORT Standard_Integer TDataXtd_Presentation::GetNbSelectionModes() const
376 return mySelectionModes.Extent();
379 //=======================================================================
380 //function : SetSelectionMode
382 //=======================================================================
383 void TDataXtd_Presentation::SetSelectionMode(const Standard_Integer theSelectionMode, const Standard_Boolean theTransaction)
385 if (!myHasOwnSelectionMode || GetNbSelectionModes() > 1 ||
386 (GetNbSelectionModes() > 0 && mySelectionModes.First() != theSelectionMode))
390 mySelectionModes.Clear();
391 mySelectionModes.Append(theSelectionMode);
392 myHasOwnSelectionMode = Standard_True;
396 //=======================================================================
397 //function : AddSelectionMode
399 //=======================================================================
400 void TDataXtd_Presentation::AddSelectionMode(const Standard_Integer theSelectionMode, const Standard_Boolean theTransaction)
402 if (!myHasOwnSelectionMode || !HasSelectionMode(theSelectionMode))
406 mySelectionModes.Append(theSelectionMode);
407 myHasOwnSelectionMode = Standard_True;
411 //=======================================================================
412 //function : MaterialIndex
414 //=======================================================================
415 Standard_Integer TDataXtd_Presentation::MaterialIndex() const
417 return myMaterialIndex;
421 //=======================================================================
422 //function : Transparency
424 //=======================================================================
425 Standard_Real TDataXtd_Presentation::Transparency() const
427 return myTransparency;
431 //=======================================================================
434 //=======================================================================
435 Quantity_NameOfColor TDataXtd_Presentation::Color() const
441 //=======================================================================
444 //=======================================================================
445 Standard_Real TDataXtd_Presentation::Width() const
451 //=======================================================================
454 //=======================================================================
455 Standard_Integer TDataXtd_Presentation::Mode() const
461 //=======================================================================
462 //function : SelectionMode
464 //=======================================================================
465 Standard_Integer TDataXtd_Presentation::SelectionMode(const Standard_Integer index) const
467 Standard_Integer aSelectionMode(0);
468 TColStd_ListOfInteger::Iterator itr(mySelectionModes);
469 for (Standard_Integer i = 1; itr.More() && i <= index; itr.Next(), i++)
472 aSelectionMode = itr.Value();
474 return aSelectionMode;
478 //=======================================================================
479 //function : UnsetMaterial
481 //=======================================================================
482 void TDataXtd_Presentation::UnsetMaterial()
484 if (myHasOwnMaterial)
487 myHasOwnMaterial = Standard_False;
492 //=======================================================================
493 //function : UnsetTransparency
495 //=======================================================================
496 void TDataXtd_Presentation::UnsetTransparency()
498 if (myHasOwnTransparency)
501 myHasOwnTransparency = Standard_False;
506 //=======================================================================
507 //function : UnsetColor
509 //=======================================================================
510 void TDataXtd_Presentation::UnsetColor()
515 myHasOwnColor = Standard_False;
520 //=======================================================================
521 //function : UnsetWidth
523 //=======================================================================
524 void TDataXtd_Presentation::UnsetWidth()
529 myHasOwnWidth = Standard_False;
534 //=======================================================================
535 //function : UnsetMode
537 //=======================================================================
538 void TDataXtd_Presentation::UnsetMode()
543 myHasOwnMode = Standard_False;
548 //=======================================================================
549 //function : UnsetSelectionMode
551 //=======================================================================
552 void TDataXtd_Presentation::UnsetSelectionMode()
554 if (myHasOwnSelectionMode)
557 myHasOwnSelectionMode = Standard_False;
558 mySelectionModes.Clear();
563 //=======================================================================
564 //function : BackupCopy
566 //=======================================================================
567 Handle(TDF_Attribute) TDataXtd_Presentation::BackupCopy() const
569 Handle(TDataXtd_Presentation) aCopy = new TDataXtd_Presentation;
571 aCopy->myIsDisplayed = myIsDisplayed;
572 aCopy->myDriverGUID = myDriverGUID;
573 aCopy->mySelectionModes= mySelectionModes;
574 aCopy->myTransparency = myTransparency;
575 aCopy->myColor = myColor;
576 aCopy->myMode = myMode;
577 aCopy->myWidth = myWidth;
578 aCopy->myMaterialIndex = myMaterialIndex;
580 aCopy->myHasOwnColor = myHasOwnColor;
581 aCopy->myHasOwnMaterial = myHasOwnMaterial;
582 aCopy->myHasOwnWidth = myHasOwnWidth;
583 aCopy->myHasOwnMode = myHasOwnMode;
584 aCopy->myHasOwnTransparency = myHasOwnTransparency;
585 aCopy->myHasOwnSelectionMode = myHasOwnSelectionMode;
591 //=======================================================================
592 //function : NewEmpty
594 //=======================================================================
595 Handle(TDF_Attribute) TDataXtd_Presentation::NewEmpty() const
597 return new TDataXtd_Presentation();
601 //=======================================================================
604 //=======================================================================
605 void TDataXtd_Presentation::Restore(const Handle(TDF_Attribute)& theAttribute)
607 Handle(TDataXtd_Presentation) aPresentation =
608 Handle(TDataXtd_Presentation)::DownCast(theAttribute);
610 myHasOwnMaterial = aPresentation->HasOwnMaterial();
611 myMaterialIndex = aPresentation->MaterialIndex();
613 myHasOwnColor = aPresentation->HasOwnColor();
614 myColor = aPresentation->Color();
616 myHasOwnWidth = aPresentation->HasOwnWidth();
617 myWidth = aPresentation->Width();
619 myHasOwnMode = aPresentation->HasOwnMode();
620 myMode = aPresentation->Mode();
622 myHasOwnSelectionMode = aPresentation->HasOwnSelectionMode();
623 mySelectionModes = aPresentation->mySelectionModes;
625 myHasOwnTransparency = aPresentation->HasOwnTransparency();
626 myTransparency = aPresentation->Transparency();
628 myIsDisplayed = aPresentation->IsDisplayed();
629 myDriverGUID = aPresentation->GetDriverGUID();
633 //=======================================================================
636 //=======================================================================
637 void TDataXtd_Presentation::Paste(const Handle(TDF_Attribute)& theInto,
638 const Handle(TDF_RelocationTable)&) const
640 Handle(TDataXtd_Presentation) anInto =
641 Handle(TDataXtd_Presentation)::DownCast(theInto);
645 if (myHasOwnMaterial)
647 anInto->myMaterialIndex = myMaterialIndex;
648 anInto->myHasOwnMaterial = Standard_True;
652 anInto->myHasOwnMaterial = Standard_False;
657 anInto->myColor = myColor;
658 anInto->myHasOwnColor = Standard_True;
662 anInto->myHasOwnColor = Standard_False;
667 anInto->myWidth = myWidth;
668 anInto->myHasOwnWidth = Standard_True;
672 anInto->myHasOwnWidth = Standard_False;
677 anInto->myMode = myMode;
678 anInto->myHasOwnMode = Standard_True;
682 anInto->myHasOwnMode = Standard_False;
685 if (myHasOwnSelectionMode)
687 anInto->mySelectionModes = mySelectionModes;
688 anInto->myHasOwnSelectionMode = Standard_True;
692 anInto->myHasOwnSelectionMode = Standard_False;
695 if (myHasOwnTransparency)
697 anInto->myTransparency = myTransparency;
698 anInto->myHasOwnTransparency = Standard_True;
702 anInto->myHasOwnTransparency = Standard_False;
705 anInto->myIsDisplayed = myIsDisplayed;
706 anInto->myDriverGUID = myDriverGUID;
709 //=======================================================================
710 //function : HasSelectionMode
711 //purpose : Checks a list of selection modes.
712 //=======================================================================
713 Standard_Boolean TDataXtd_Presentation::HasSelectionMode(const Standard_Integer theSelectionMode) const
715 Standard_Boolean ret(Standard_False);
716 TColStd_ListOfInteger::Iterator itr(mySelectionModes);
717 for (; itr.More(); itr.Next())
719 if (theSelectionMode == itr.Value())