Salome HOME
Fix for the issue #1321 : remove dependency on additional environment variables
[modules/shaper.git] / src / SketcherPrs / SketcherPrs_SymbolPrs.cpp
index 2d42f57a568f39160cb31d29760ed9d5137c4458..ad415c53a5d75abd2f790ef593180e8200620750 100644 (file)
@@ -252,6 +252,8 @@ SketcherPrs_SymbolPrs::SketcherPrs_SymbolPrs(ModelAPI_Feature* theConstraint,
  : AIS_InteractiveObject(), myConstraint(theConstraint), myPlane(thePlane), myIsConflicting(false)
 {
   SetAutoHilight(Standard_False);
+  myPntArray = new Graphic3d_ArrayOfPoints(1);
+  myPntArray->AddVertex(0., 0., 0.);
 }
 
 SketcherPrs_SymbolPrs::~SketcherPrs_SymbolPrs()
@@ -271,16 +273,24 @@ Handle(Image_AlienPixMap) SketcherPrs_SymbolPrs::icon()
     return myIconsMap[iconName()];
   }
   // Load icon for the presentation
-  char* aEnv = getenv("SHAPERResources");
-  if (aEnv != NULL) {
-    TCollection_AsciiString aFile(aEnv);
-    aFile += FSEP;
-    aFile += iconName();
-    Handle(Image_AlienPixMap) aPixMap = new Image_AlienPixMap();
-    if (aPixMap->Load(aFile)) {
-      myIconsMap[iconName()] = aPixMap;
-      return aPixMap;
-    }
+  std::string aFile;
+  char* anEnv = getenv("SHAPER_ROOT_DIR");
+  if (anEnv) {
+    aFile = std::string(anEnv);
+  } else {
+    anEnv = getenv("OPENPARTS_ROOT_DIR");
+    if (anEnv)
+      aFile = std::string(anEnv);
+  }
+  aFile += FSEP;
+  aFile += "resources";
+
+  aFile += FSEP;
+  aFile += iconName();
+  Handle(Image_AlienPixMap) aPixMap = new Image_AlienPixMap();
+  if (aPixMap->Load(aFile.c_str())) {
+    myIconsMap[iconName()] = aPixMap;
+    return aPixMap;
   }
   // The icon for constraint is not found
   static const char aMsg[] = "Error! constraint images are not found";
@@ -362,10 +372,10 @@ void SketcherPrs_SymbolPrs::Compute(const Handle(PrsMgr_PresentationManager3d)&
   }
 
   // Update points with default shift value
-  if (!updatePoints(20)) {
-    Events_Error::throwException("An empty AIS presentation: SketcherPrs_SymbolPrs");
-    return;
-  }
+  // it updates array of points if the presentation is ready to display, or the array of points
+  // contains the previous values
+  
+  bool aReadyToDisplay = updateIfReadyToDisplay(20);
 
   int aNbVertex = myPntArray->VertexNumber();
   if (myOwner.IsNull()) {
@@ -397,6 +407,10 @@ void SketcherPrs_SymbolPrs::Compute(const Handle(PrsMgr_PresentationManager3d)&
   // Disable frustum culling for this object by marking it as mutable
   aGroup->Structure()->SetMutable(true);
   //aGroup->AddPrimitiveArray(myPntArray);
+
+  if (!aReadyToDisplay)
+    SketcherPrs_Tools::sendEmptyPresentationError(myConstraint,
+                          "An empty AIS presentation: SketcherPrs_LengthDimension");
 }
 
 
@@ -448,8 +462,8 @@ void SketcherPrs_SymbolPrs::Render(const Handle(OpenGl_Workspace)& theWorkspace)
   // ShaperModification:start
   double aScale = aView->Camera()->Scale();
   // Update points coordinate taking the viewer scale into account
-  if (!updatePoints(MyDist * aScale))
-    return;
+  updateIfReadyToDisplay(MyDist * aScale);
+
   // ShaperModification:end
 
   Handle(Graphic3d_Buffer) aAttribs = myPntArray->Attributes();