-// Copyright (C) 2007-2013 CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2014 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 <Geom_Plane.hxx>
#include <SelectMgr_Selection.hxx>
#include <gce_MakePln.hxx>
-#include <Prs3d_AngleAspect.hxx>
#include <Prs3d_LineAspect.hxx>
-#include <Prs3d_LengthAspect.hxx>
+#include <Prs3d_DimensionAspect.hxx>
#if OCC_VERSION_LARGE > 0x06050300
#include <Prs3d_TextAspect.hxx>
#include <Prs3d_Presentation.hxx>
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")));
//=================================================================================
void EntityGUI_3DSketcherDlg::ClickOnUndo()
{
+ myIsUndoRedo = true;
if (myPointsList.count() > 0) {
myRedoList.append(myPointsList.last());
((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();
updateViewer();
}
+ myIsUndoRedo = false;
}
//=================================================================================
//=================================================================================
void EntityGUI_3DSketcherDlg::ClickOnRedo()
{
+ myIsUndoRedo = true;
if (myRedoList.count() > 0) {
myPointsList.append(myRedoList.last());
((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();
updateViewer();
}
+ myIsUndoRedo = false;
}
//=================================================================================
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);
}
}
// 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;
}
gp_Pnt P2,
gp_Dir theNormal)
{
- // Convert length to string
- std::string aLength_str = doubleToString(theLength);
-
// Plane construction
gce_MakePln gce_MP(P1, theNormal);
Handle(Geom_Plane) aPlane = new Geom_Plane(gce_MP.Value());
TopoDS_Vertex aVert1 = BRepBuilderAPI_MakeVertex(P1);
TopoDS_Vertex aVert2 = BRepBuilderAPI_MakeVertex(P2);
- Handle(AIS_LengthDimension) anIO =
- new AIS_LengthDimension(aVert1,
- aVert2,
- aPlane,
- theLength,
- TCollection_ExtendedString(aLength_str.c_str()));
- anIO->SetArrowSize(theLength/20);
+ Handle(AIS_LengthDimension) anIO = new AIS_LengthDimension( aVert1, aVert2, aPlane->Pln() );
+
+ anIO->SetCustomValue( theLength );
SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
- int w = resMgr->integerValue("Geometry", "measures_line_width", 1);
- Handle(Prs3d_LengthAspect) asp = new Prs3d_LengthAspect();
- asp->LineAspect()->SetWidth(w);
- anIO->Attributes()->SetLengthAspect(asp);
-
+ int w = resMgr->integerValue( "Geometry", "measures_line_width", 1 );
+
+ Handle(Prs3d_DimensionAspect) aDimensionStyle = new Prs3d_DimensionAspect;
+
+ aDimensionStyle->ArrowAspect()->SetLength( theLength / 20.0 );
+ aDimensionStyle->LineAspect()->SetWidth( w );
+ aDimensionStyle->MakeText3d( Standard_False );
+ aDimensionStyle->SetTextHorizontalPosition( Prs3d_DTHP_Center );
+ aDimensionStyle->SetTextVerticalPosition( Prs3d_DTVP_Center );
+ aDimensionStyle->MakeArrows3d( Standard_True );
+ anIO->SetFlyout( 0.0 );
+ anIO->SetDimensionAspect( aDimensionStyle );
+
return anIO;
}
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));
-
+ 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);
- Handle(Prs3d_AngleAspect) asp = new Prs3d_AngleAspect();
- asp->LineAspect()->SetWidth(w);
- anIO->Attributes()->SetAngleAspect(asp);
-
+ int w = resMgr->integerValue( "Geometry", "measures_line_width", 1 );
+
+ Handle(Prs3d_DimensionAspect) aDimensionStyle = new Prs3d_DimensionAspect;
+
+ aDimensionStyle->ArrowAspect()->SetLength( (theAngle * M_PI / 180.0) * (aLength / 20.0) );
+ aDimensionStyle->LineAspect()->SetWidth( w );
+ aDimensionStyle->SetTextHorizontalPosition( Prs3d_DTHP_Center );
+ aDimensionStyle->SetTextVerticalPosition( Prs3d_DTVP_Center );
+ aDimensionStyle->MakeText3d( Standard_False );
+ aDimensionStyle->MakeArrows3d( Standard_True );
+
+ anIO->SetDimensionAspect( aDimensionStyle );
+
return anIO;
}