Salome HOME
Remove unused header AIS_Drawer.hxx
[modules/geom.git] / src / EntityGUI / EntityGUI_3DSketcherDlg.cxx
index 64e1e5e12c2594b49ac9bbc075674acc0bb91339..41a10d23229ae437d1612a181b5f6c3311d5a45e 100755 (executable)
@@ -1,9 +1,9 @@
-// Copyright (C) 2007-2013  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2015  CEA/DEN, EDF R&D, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
 #include <AIS_Trihedron.hxx>
 #include <AIS_AngleDimension.hxx>
 #include <AIS_LengthDimension.hxx>
-#include <AIS_Drawer.hxx>
 #include <Geom_Axis2Placement.hxx>
 #include <Geom_Plane.hxx>
 #include <SelectMgr_Selection.hxx>
 #include <gce_MakePln.hxx>
 #include <Prs3d_LineAspect.hxx>
 #include <Prs3d_DimensionAspect.hxx>
-#if OCC_VERSION_LARGE > 0x06050300
 #include <Prs3d_TextAspect.hxx>
 #include <Prs3d_Presentation.hxx>
 #include <Prs3d_Text.hxx>
@@ -75,7 +73,6 @@
 #include <Graphic3d_HorizontalTextAlignment.hxx>
 #include <Graphic3d_AspectText3d.hxx>
 #include <Font_FontAspect.hxx>
-#endif // OCC_VERSION_LARGE > 0x06050300
 
 // This include must be *AFTER* SOCC_ViewModel.h because
 // of the constant ROTATE which is a #define in
@@ -103,7 +100,6 @@ private:
   bool& myLock;
 };
 
-#if OCC_VERSION_LARGE > 0x06050300
 DEFINE_STANDARD_HANDLE(AIS_Text, AIS_InteractiveObject)
 
 class AIS_Text:public AIS_InteractiveObject
@@ -197,7 +193,6 @@ void AIS_Text::Compute(const Handle(PrsMgr_PresentationManager3d)& aPresentation
   asp->Aspect()->SetTextFontAspect(aFontAspect);
   Prs3d_Text::Draw(aPresentation, asp, aText, aPosition);
 };
-#endif // OCC_VERSION_LARGE > 0x06050300
 
 bool isSame (double d1, double d2)
 { 
@@ -219,7 +214,8 @@ EntityGUI_3DSketcherDlg::EntityGUI_3DSketcherDlg (GeometryGUI* theGeometryGUI, Q
     myOK(false),
     myLineWidth(lineWidth),
     myGeometryGUI(theGeometryGUI),
-    myLengthIORedoList()
+    myLengthIORedoList(),
+    myIsUndoRedo(false)
 {
   QPixmap image0(SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_SELECT")));
   QPixmap image1(SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_DLG_UNDO")));
@@ -329,9 +325,7 @@ void EntityGUI_3DSketcherDlg::Init()
   SUIT_ViewWindow* vw = SUIT_Session::session()->activeApplication()->desktop()->activeWindow();
   myAnglePrs = dynamic_cast<SOCC_Prs*>(((SOCC_Viewer*)(vw->getViewManager()->getViewModel()))->CreatePrs(0));
   myLengthPrs = dynamic_cast<SOCC_Prs*>(((SOCC_Viewer*)(vw->getViewManager()->getViewModel()))->CreatePrs(0));
-#if OCC_VERSION_LARGE > 0x06050300
   myTextPrs = dynamic_cast<SOCC_Prs*>(((SOCC_Viewer*)(vw->getViewManager()->getViewModel()))->CreatePrs(0));
-#endif // OCC_VERSION_LARGE > 0x06050300
 
   localSelection(GEOM::GEOM_Object::_nil(), TopAbs_VERTEX);
 
@@ -615,6 +609,7 @@ void EntityGUI_3DSketcherDlg::UpdatePointCoordinates()
 //=================================================================================
 void EntityGUI_3DSketcherDlg::ClickOnUndo()
 {
+  myIsUndoRedo = true;
   if (myPointsList.count() > 0) {
     
     myRedoList.append(myPointsList.last());
@@ -635,6 +630,7 @@ void EntityGUI_3DSketcherDlg::ClickOnUndo()
     ((SOCC_Viewer*)(vw->getViewManager()->getViewModel()))->Display(myTextPrs);
     
     // Remove last point from list
+    myWorkPoint = myPointsList.last();
     myPointsList.removeLast();
     GEOMBase_Helper::displayPreview(true, false, true, true, myLineWidth);
     UpdateButtonsState();
@@ -644,6 +640,7 @@ void EntityGUI_3DSketcherDlg::ClickOnUndo()
 
     updateViewer();
   }
+  myIsUndoRedo = false;
 }
 
 //=================================================================================
@@ -652,6 +649,7 @@ void EntityGUI_3DSketcherDlg::ClickOnUndo()
 //=================================================================================
 void EntityGUI_3DSketcherDlg::ClickOnRedo()
 {
+  myIsUndoRedo = true;
   if (myRedoList.count() > 0) {
     
     myPointsList.append(myRedoList.last());
@@ -672,6 +670,7 @@ void EntityGUI_3DSketcherDlg::ClickOnRedo()
     ((SOCC_Viewer*)(vw->getViewManager()->getViewModel()))->Display(myTextPrs);
     
     // Remove last point from redo list
+    myWorkPoint = myRedoList.last();
     myRedoList.removeLast();
     GEOMBase_Helper::displayPreview(true, false, true, true, myLineWidth);
     UpdateButtonsState();
@@ -681,6 +680,7 @@ void EntityGUI_3DSketcherDlg::ClickOnRedo()
 
     updateViewer();
   }
+  myIsUndoRedo = false;
 }
 
 //=================================================================================
@@ -1242,7 +1242,13 @@ gp_Dir EntityGUI_3DSketcherDlg::getPresentationPlane() const
   bool twoAngles = GroupAngles->checkBox->isChecked();
   
   XYZ Last    = getLastPoint();
-  XYZ Current = getCurrentPoint();
+  XYZ Current;
+  if( myIsUndoRedo ) {
+      Current = myWorkPoint;
+  } else {
+    Current = getCurrentPoint();
+  }
+  
   XYZ Penultimate = getPenultimatePoint();
   
   gp_Pnt P1 = gp_Pnt(Last.x,Last.y,Last.z);
@@ -1303,7 +1309,9 @@ gp_Dir EntityGUI_3DSketcherDlg::getPresentationPlane() const
       }
     }
     // If no angles, the plane is the one formed by the last edge and the current one
-    aNormal = gp_Dir(Vec1.Crossed(Vec2)); 
+    if(Abs(Vec1.CrossMagnitude(Vec2)) > Precision::Confusion()) {
+      aNormal = gp_Dir(Vec1.Crossed(Vec2)); 
+    }
   }
   return aNormal;
 }
@@ -1611,7 +1619,6 @@ void EntityGUI_3DSketcherDlg::displayText ( std::string theText,
                                             gp_Pnt P,
                                             bool store )
 {
-#if OCC_VERSION_LARGE > 0x06050300
   SUIT_ViewWindow* vw = SUIT_Session::session()->activeApplication()->desktop()->activeWindow();
     
   Handle(AIS_Text) anIO = new AIS_Text(TCollection_ExtendedString(theText.c_str()), P);
@@ -1638,7 +1645,7 @@ void EntityGUI_3DSketcherDlg::displayText ( std::string theText,
       GEOMBase_Helper::displayPreview(aSPrs, true, true);
     }
   }
-#endif // OCC_VERSION_LARGE > 0x06050300
+
 }
 
 //================================================================
@@ -1696,38 +1703,10 @@ Handle(AIS_AngleDimension) EntityGUI_3DSketcherDlg::createAISAngleDimension(doub
   if (Abs(theAngle) < Precision::Angular() ||
       aLength < Precision::Confusion())
     return NULL;
-  
-  // Convert angles to string
-  std::string Angle_str = doubleToString(theAngle);
-  
-  // Construction of the plane
-  gce_MakePln gce_MP2(P0, P1, P2);
-  Handle(Geom_Plane) aPlane = new Geom_Plane(gce_MP2.Value());
-  
-  TopoDS_Vertex V0 = BRepBuilderAPI_MakeVertex(P0);
-  TopoDS_Vertex V1 = BRepBuilderAPI_MakeVertex(P1);
-  TopoDS_Vertex V2 = BRepBuilderAPI_MakeVertex(P2);
-  
-  TopoDS_Edge anEdge1 = BRepBuilderAPI_MakeEdge(V0, V1);
-  TopoDS_Edge anEdge2 = BRepBuilderAPI_MakeEdge(V0, V2);
-
-  //Handle(AIS_AngleDimension) anIO =
-  //  new AIS_AngleDimension(anEdge1, anEdge2, aPlane, theAngle * M_PI / 180.,
-  //                         TCollection_ExtendedString(Angle_str.c_str()));
-  //  
-  //anIO->SetArrowSize((theAngle * M_PI / 180) * (aLength/20));
-  //
-  //SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
-  //int w = resMgr->integerValue("Geometry", "measures_line_width", 1);
-  //Handle(Prs3d_AngleAspect) asp = new Prs3d_AngleAspect();
-  //asp->LineAspect()->SetWidth(w);
-  //anIO->Attributes()->SetAngleAspect(asp);
-
-  // todo : port
-
-  Handle(AIS_AngleDimension) anIO = new AIS_AngleDimension( anEdge1, anEdge2, aPlane->Pln() );
-
-  anIO->SetCustomValue( theAngle );
+
+  Handle(AIS_AngleDimension) anIO = new AIS_AngleDimension( P1, P0, P2 );
+
+  //anIO->SetCustomValue( theAngle );
 
   SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
   int w = resMgr->integerValue( "Geometry", "measures_line_width", 1 );