Salome HOME
Issue #662 Warning on remove or rename of (may be) used object in PartSet
[modules/shaper.git] / src / GeomAPI / GeomAPI_AISObject.cpp
index f4ae420490bada6d8d4b177459ba93c67198fb94..fc34c50ae49953337cbd8279ae2a070a8b2eb488 100644 (file)
@@ -41,6 +41,17 @@ GeomAPI_AISObject::GeomAPI_AISObject()
 {
 }
 
+GeomAPI_AISObject::~GeomAPI_AISObject()
+{
+  if (!empty()) {
+    // This is necessary for correct deletion of Handle entity. 
+    // Without this Handle does not decremented counter to 0
+    Handle(AIS_InteractiveObject) *anAIS = implPtr<Handle(AIS_InteractiveObject)>();
+    anAIS->Nullify();
+  }
+}
+
+
 void GeomAPI_AISObject::createShape(std::shared_ptr<GeomAPI_Shape> theShape)
 {
   const TopoDS_Shape& aTDS =
@@ -261,7 +272,6 @@ void GeomAPI_AISObject::setColor(const int& theColor)
   if (anAIS.IsNull())
     return;
   Quantity_Color aColor((Quantity_NameOfColor) theColor);
-  anAIS->SetColor(aColor);
   Handle(AIS_Dimension) aDimAIS = Handle(AIS_Dimension)::DownCast(anAIS);
   if (!aDimAIS.IsNull()) {
     aDimAIS->DimensionAspect()->SetCommonColor(aColor);
@@ -294,7 +304,6 @@ bool GeomAPI_AISObject::setColor(int theR, int theG, int theB)
   if (aColor.IsEqual(aCurrentColor))
     return false;
 
-  anAIS->SetColor(aColor);
   Handle(AIS_Dimension) aDimAIS = Handle(AIS_Dimension)::DownCast(anAIS);
   if (!aDimAIS.IsNull()) {
     aDimAIS->DimensionAspect()->SetCommonColor(aColor);
@@ -311,9 +320,9 @@ void GeomAPI_AISObject::getColor(int& theR, int& theG, int& theB)
     return;
 
   Quantity_Color aColor = anAIS->Color();
-  theR = aColor.Red()*255.;
-  theG = aColor.Green()*255.;
-  theB = aColor.Blue()*255.;
+  theR = (int)(aColor.Red()*255.);
+  theG = (int)(aColor.Green()*255.);
+  theB = (int)(aColor.Blue()*255.);
 }
 
 bool GeomAPI_AISObject::empty() const
@@ -342,8 +351,8 @@ void GeomAPI_AISObject::setPointMarker(int theType, double theScale)
 {
   Handle(AIS_InteractiveObject) anAIS = impl<Handle(AIS_InteractiveObject)>();
   if (!anAIS.IsNull()) {
-    Handle(AIS_Drawer) aDrawer = anAIS->Attributes();
-    if (aDrawer->HasPointAspect()) {
+    Handle(Prs3d_Drawer) aDrawer = anAIS->Attributes();
+    if (aDrawer->HasOwnPointAspect()) {
       Handle(Prs3d_PointAspect) aPA = aDrawer->PointAspect();
       aPA->SetTypeOfMarker((Aspect_TypeOfMarker)theType);
       aPA->SetScale(theScale);
@@ -359,14 +368,14 @@ bool GeomAPI_AISObject::setLineStyle(int theStyle)
   bool isChanged = false;
   Handle(AIS_InteractiveObject) anAIS = impl<Handle(AIS_InteractiveObject)>();
   if (!anAIS.IsNull()) {
-    Handle(AIS_Drawer) aDrawer = anAIS->Attributes();
+    Handle(Prs3d_Drawer) aDrawer = anAIS->Attributes();
     Handle(Prs3d_LineAspect) aLineAspect;
 
     Aspect_TypeOfLine aType = (Aspect_TypeOfLine)theStyle;
-    if (aDrawer->HasLineAspect()) {
+    if (aDrawer->HasOwnLineAspect()) {
       aLineAspect = aDrawer->LineAspect();
     }
-    if (aDrawer->HasWireAspect()) {
+    if (aDrawer->HasOwnWireAspect()) {
       aLineAspect = aDrawer->WireAspect();
     }
     Quantity_Color aCurrentColor;
@@ -381,7 +390,6 @@ bool GeomAPI_AISObject::setLineStyle(int theStyle)
   return isChanged;
 }
 
-
 bool GeomAPI_AISObject::setTransparensy(double theVal)
 {
   bool isChanged = false;