From fca35298c71f53b28bb4d0e83c64b1256adc7490 Mon Sep 17 00:00:00 2001 From: apl Date: Tue, 21 Jan 2014 12:51:45 +0000 Subject: [PATCH] 21854: Add persistent dimensions - Final commit: help documents, preferences. --- doc/salome/gui/GEOM/images/add_dimension.png | Bin 0 -> 24482 bytes doc/salome/gui/GEOM/images/dialog.png | Bin 9870 -> 10146 bytes .../gui/GEOM/images/dimensions_preview.png | Bin 0 -> 58707 bytes doc/salome/gui/GEOM/images/pref15.png | Bin 71039 -> 76726 bytes doc/salome/gui/GEOM/input/add_dimension.doc | 44 + .../gui/GEOM/input/geometry_preferences.doc | 14 + .../gui/GEOM/input/managing_dimensions.doc | 64 ++ .../GEOM/input/using_measurement_tools.doc | 9 +- .../gui/GEOM/input/viewing_geom_obj.doc | 2 + resources/SalomeApp.xml.in | 15 +- src/GEOMGUI/GEOMGUI_DimensionProperty.cxx | 91 +- src/GEOMGUI/GEOMGUI_DimensionProperty.h | 40 +- src/GEOMGUI/GEOMGUI_Selection.cxx | 61 ++ src/GEOMGUI/GEOMGUI_Selection.h | 5 + src/GEOMGUI/GEOM_Displayer.cxx | 23 + src/GEOMGUI/GEOM_msg_en.ts | 38 + src/GEOMGUI/GEOM_msg_fr.ts | 38 + src/GEOMGUI/GEOM_msg_ja.ts | 38 + src/GEOMGUI/GeometryGUI.cxx | 35 +- src/GEOMGUI/GeometryGUI_Operations.h | 2 + src/MeasureGUI/MeasureGUI.cxx | 62 ++ src/MeasureGUI/MeasureGUI.h | 3 + .../MeasureGUI_CreateDimensionDlg.cxx | 60 +- .../MeasureGUI_DimensionCreateTool.cxx | 893 +++++++++++++++--- .../MeasureGUI_DimensionCreateTool.h | 88 +- .../MeasureGUI_DimensionInteractor.cxx | 18 +- .../MeasureGUI_ManageDimensionsDlg.cxx | 116 ++- .../MeasureGUI_ManageDimensionsDlg.h | 8 + 28 files changed, 1550 insertions(+), 217 deletions(-) create mode 100644 doc/salome/gui/GEOM/images/add_dimension.png create mode 100644 doc/salome/gui/GEOM/images/dimensions_preview.png create mode 100644 doc/salome/gui/GEOM/input/add_dimension.doc create mode 100644 doc/salome/gui/GEOM/input/managing_dimensions.doc diff --git a/doc/salome/gui/GEOM/images/add_dimension.png b/doc/salome/gui/GEOM/images/add_dimension.png new file mode 100644 index 0000000000000000000000000000000000000000..a632eba82c0cc9294c305b356e81c5dd6b911366 GIT binary patch literal 24482 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 E1GGvCCjbBd literal 9870 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 diff --git a/doc/salome/gui/GEOM/images/dimensions_preview.png b/doc/salome/gui/GEOM/images/dimensions_preview.png new file mode 100644 index 0000000000000000000000000000000000000000..004a050149c299b4b07e0aa5d1201aa910cdae98 GIT binary patch literal 58707 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/GEOM/images/pref15.png b/doc/salome/gui/GEOM/images/pref15.png index 82189e99d19faeb08d54c81ecb5bd66f285af24f..c4b2cac4d3f13ce5d1f6d50a098b8efda028763f 100755 GIT binary patch literal 76726 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

rUQd|5B68 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 literal 71039 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

p#EPpYWK@cYg>cymIBo&JJ5%2f*v7yesC}1N5A% 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 z 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 z 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 z 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 GJopFO%u&by diff --git a/doc/salome/gui/GEOM/input/add_dimension.doc b/doc/salome/gui/GEOM/input/add_dimension.doc new file mode 100644 index 000000000..691132280 --- /dev/null +++ b/doc/salome/gui/GEOM/input/add_dimension.doc @@ -0,0 +1,44 @@ +/*! + +\page add_dimension_page Add Dimension + +\image html add_dimension.png + +The dialog is opened from \ref managing_dimensions_page "Manage Dimensions" dialog when "Add" button is clicked. +This dialog allows creating measurement dimension for the selected geometrical object. +The following types of dimensions can be constructed: +

+ +Being constructed, the dimension is positioned by application such that the user is able to see it from the most appropriate angle of view. +The application selects one of the best matching planes allowed for the dimension. If extending the dimension by increasing length of flyouts +make sense, then the application extends the flyouts for a default value specified on the \ref geometry_preferences_page "geometry preference dialog". + +Once constructed, the geometrical properties of dimension preview (flyout, plane) become interactively editable in OCC viewer. +For the description of interactive operations please refer to corresponding section at \ref managing_dimensions_page "Manage Dimensions" page. + +The legnth dimension can be constructed in three ways: as length on edge, as length between two points and as length between two parallel lines. +In order to construct the dimension, the selected geometry should met the following conditions: +
    +
  • Edge length - only the line edges are accepted. E.g. constructed from line segment, on two points.
  • +
  • Two points - any two points.
  • +
  • Parallel edges - only the parallel line edges are accepted.
  • +
+ +The diameter dimension can be constructed for the following geometry types: +
    +
  • Arc and circle. The selected geometry should be an arc, a circular edge or a circular face.
  • +
  • Sphere, cylinder, cone, torus.
  • +
+ +The angle dimension can be constructed in two ways: as angle between two edges, as angle by three points. +The following conditions should be met: +
    +
  • Two edges. The edges should be located in same plane. +
  • Three points. Any three points, with the second point being the center of the angle. +
+ +*/ diff --git a/doc/salome/gui/GEOM/input/geometry_preferences.doc b/doc/salome/gui/GEOM/input/geometry_preferences.doc index bfce50129..6ad3270cb 100644 --- a/doc/salome/gui/GEOM/input/geometry_preferences.doc +++ b/doc/salome/gui/GEOM/input/geometry_preferences.doc @@ -49,6 +49,20 @@ predefined materials. +
    +
  • Dimensions (Measurements)
  • +
      +
    • Color - allows to define color for persistent dimension presentations.
    • +
    • Line width - allows to define pixel width of dimension lines.
    • +
    • Font height - allows to define height of dimension text.
    • +
    • Length of arrows - allows to define length of dimension arrows.
    • +
    • Length measurement units - allows to define units of measurement for lengths dimensions.
    • +
    • Angle measurement units - allows to define units of measurement for angles dimensions.
    • +
    • Show units of measurements - when this option is on, the measurement units are added as prefix to value label of dimension.
    • +
    • Default flyout length - allows to define default flyout length used when creating the dimensions. The length can be interactively changed after creation by moving the flyouts.
    • +
    +
+
  • Number of isolines - allows to specify the number of isolines along Along U and Along V coordinate axes. They are shown on each selected face. For example: diff --git a/doc/salome/gui/GEOM/input/managing_dimensions.doc b/doc/salome/gui/GEOM/input/managing_dimensions.doc new file mode 100644 index 000000000..83c1df9fb --- /dev/null +++ b/doc/salome/gui/GEOM/input/managing_dimensions.doc @@ -0,0 +1,64 @@ +/*! + +\page managing_dimensions_page Manage Dimensions + +\image html dimensions_preview.png + +Dimensions of sub-elements can be measured for a geometrical object representing a shape. +There are three types of dimensions available +
      +
    • Length.
    • +
    • Diameter.
    • +
    • Angle.
    • +
    + +Measurement units and group of presentation attributes for the measurement dimensions can be seen and changed from the \ref geometry_preferences_page "geometry preference dialog". + +The application entities, representing the dimensions, are associated with the geometrical object for which its elements are measured. The dimensions follow their associated object on show/hide, transformation and deletion operations. + +Each dimension instance has its local visibility flag intended for showing/hiding it among other dimensions of the associated object. + +\image html manage_dimensions.png + +This dialog allows managing list of dimensions for the selected geometrical object. +It shows the list and provides dimension creation and removal, modification of name and visibility, along with the interactive modification of dimension's geometrical properties. + +The list view groups dimension objects by their type: "Distances", "Diameters", "Angles". This view allows selection of the dimensions and lets user to change the dimension's name and visibility. + +The buttons located at the right side of the dialog have the following purposes: +
      +
    • "Add" - opens \ref add_dimension_page "Add Dimension" dialog for interactive specification of a new dimension for the selected object.
    • +
    • "Remove" - removes selected instance of dimension.
    • +
    • "Show All" / "Hide All" - turn on/off local visibility flags of all dimensions presented in the list.
    • +
    + +\image html interact_with_dimensions.png + +Geometrical properties of the selected dimension become interactively editable in viewer. +When hovering with mouse, the element of dimension become highlighted. +This means that the element is ready for interactive operations. + +The following interactive operations are allowed: +
      +
    • Modification of flyout length. By dragging the flyout with left mouse button the user is allowed to change its length without changing its plane (direction).
    • +
    • Modification of flyout length & plane (direction). If dimension is viewed at least slightly from side, then dragging the flyout with holding ctrl key additionally enables modification of the flyout plane.
    • +
    • Modification of label alignment. By dragging the label the user is allowed to change its alignment.
    • +
    + +The following horizontally aligned positions can be specified: +
      +
    • Left. Label is located outside of the left flyout line.
    • +
    • Right. Label is located outside of the right flyout line.
    • +
    • Center. Label is centered among of the flyout lines.
    • +
    + +The following vertically aligned positions can be specified: +
      +
    • On flyout line. The label is located at the side of flyout line, which is farther from the measured geometry.
    • +
    • Under flyout line. The label is located at the side of flyout line, which is closer to the measured geometry.
    • +
    • In center of flyout line.
    • +
    + +All of the modifications to the dimensions, until applied, are temporary. The "Apply" and "Apply and Close" buttons save the changes. + +*/ diff --git a/doc/salome/gui/GEOM/input/using_measurement_tools.doc b/doc/salome/gui/GEOM/input/using_measurement_tools.doc index 238b12a08..f19f43ff9 100644 --- a/doc/salome/gui/GEOM/input/using_measurement_tools.doc +++ b/doc/salome/gui/GEOM/input/using_measurement_tools.doc @@ -19,7 +19,7 @@
  • \subpage whatis_page "WhatIs"
-\n Or to check their integrity: +\n To check their integrity:
  • \subpage boundaries_page "Check Free Boundaries"
  • @@ -30,6 +30,13 @@
  • \subpage check_self_intersections_page "Detect Self-intersections"
+\n Or to measure dimensions of the shape elements: + +
    +
  • \subpage managing_dimensions_page "Manage Dimensions"
  • +
  • \subpage add_dimension_page "Add Dimension"
  • +
+ \n Our TUI Scripts show how to use \ref tui_measurement_tools_page "Measurement Tools" with TUI commands. diff --git a/doc/salome/gui/GEOM/input/viewing_geom_obj.doc b/doc/salome/gui/GEOM/input/viewing_geom_obj.doc index 774dbaac2..b6b5a4f4e 100644 --- a/doc/salome/gui/GEOM/input/viewing_geom_obj.doc +++ b/doc/salome/gui/GEOM/input/viewing_geom_obj.doc @@ -59,6 +59,8 @@ geometrical object. TUI Command: sg.DisplayOnly(ID) \image html image33.png +
  • Show all dimensions - shows all of the persistent dimensions created for the selected geometrical object.
  • +
  • Hide all dimensions - hides all of the persistent dimensions created for the selected geometrical object.
  • Dump view - exports an object from the viewer in bmp, png, jpg or jpeg image format.
  • Change background - allows to redefine the background diff --git a/resources/SalomeApp.xml.in b/resources/SalomeApp.xml.in index 2fb47511b..269d3b366 100644 --- a/resources/SalomeApp.xml.in +++ b/resources/SalomeApp.xml.in @@ -69,13 +69,14 @@ - - - - - - - + + + + + + + + diff --git a/src/GEOMGUI/GEOMGUI_DimensionProperty.cxx b/src/GEOMGUI/GEOMGUI_DimensionProperty.cxx index c9ca8337f..0191e9c23 100644 --- a/src/GEOMGUI/GEOMGUI_DimensionProperty.cxx +++ b/src/GEOMGUI/GEOMGUI_DimensionProperty.cxx @@ -47,6 +47,7 @@ void GEOMGUI_DimensionProperty::Length::Init( const Handle(AIS_LengthDimension)& Flyout = theIO->GetFlyout(); TextHPos = theIO->DimensionAspect()->TextHorizontalPosition(); TextVPos = theIO->DimensionAspect()->TextVerticalPosition(); + ArrowPos = theIO->DimensionAspect()->ArrowOrientation(); } //================================================================================= @@ -68,6 +69,7 @@ void GEOMGUI_DimensionProperty::Length::Update( Handle(AIS_LengthDimension)& the Handle(Prs3d_DimensionAspect) aStyle = new Prs3d_DimensionAspect(); aStyle->SetTextHorizontalPosition( TextHPos ); aStyle->SetTextVerticalPosition( TextVPos ); + aStyle->SetArrowOrientation( ArrowPos ); theIO->SetDimensionAspect( aStyle ); } @@ -99,7 +101,8 @@ bool GEOMGUI_DimensionProperty::Length::operator == (const Length& theOther) con if ( Flyout != theOther.Flyout || TextHPos != theOther.TextHPos - || TextVPos != theOther.TextVPos ) + || TextVPos != theOther.TextVPos + || ArrowPos != theOther.ArrowPos ) { return false; } @@ -121,6 +124,7 @@ void GEOMGUI_DimensionProperty::Diameter::Init( const Handle(AIS_DiameterDimensi Flyout = theIO->GetFlyout(); TextHPos = theIO->DimensionAspect()->TextHorizontalPosition(); TextVPos = theIO->DimensionAspect()->TextVerticalPosition(); + ArrowPos = theIO->DimensionAspect()->ArrowOrientation(); } //================================================================================= @@ -154,6 +158,7 @@ void GEOMGUI_DimensionProperty::Diameter::Update( Handle(AIS_DiameterDimension)& Handle(Prs3d_DimensionAspect) aStyle = new Prs3d_DimensionAspect(); aStyle->SetTextHorizontalPosition( TextHPos ); aStyle->SetTextVerticalPosition( TextVPos ); + aStyle->SetArrowOrientation( ArrowPos ); theIO->SetDimensionAspect( aStyle ); } @@ -189,7 +194,8 @@ bool GEOMGUI_DimensionProperty::Diameter::operator == (const Diameter& theOther) if ( Flyout != theOther.Flyout || TextHPos != theOther.TextHPos - || TextVPos != theOther.TextVPos ) + || TextVPos != theOther.TextVPos + || ArrowPos != theOther.ArrowPos ) { return false; } @@ -212,6 +218,7 @@ void GEOMGUI_DimensionProperty::Angle::Init( const Handle(AIS_AngleDimension)& t Flyout = theIO->GetFlyout(); TextHPos = theIO->DimensionAspect()->TextHorizontalPosition(); TextVPos = theIO->DimensionAspect()->TextVerticalPosition(); + ArrowPos = theIO->DimensionAspect()->ArrowOrientation(); } //================================================================================= @@ -233,6 +240,7 @@ void GEOMGUI_DimensionProperty::Angle::Update( Handle(AIS_AngleDimension)& theIO Handle(Prs3d_DimensionAspect) aStyle = new Prs3d_DimensionAspect(); aStyle->SetTextHorizontalPosition( TextHPos ); aStyle->SetTextVerticalPosition( TextVPos ); + aStyle->SetArrowOrientation( ArrowPos ); theIO->SetDimensionAspect( aStyle ); } @@ -257,7 +265,8 @@ bool GEOMGUI_DimensionProperty::Angle::operator == (const Angle& theOther) const if ( Flyout != theOther.Flyout || TextHPos != theOther.TextHPos - || TextVPos != theOther.TextVPos ) + || TextVPos != theOther.TextVPos + || ArrowPos != theOther.ArrowPos ) { return false; } @@ -311,6 +320,15 @@ GEOMGUI_DimensionProperty::GEOMGUI_DimensionProperty( const GEOMGUI_DimensionPro } } +//================================================================================= +// function : Init constructor +// purpose : +//================================================================================= +GEOMGUI_DimensionProperty::GEOMGUI_DimensionProperty( SalomeApp_Study* theStudy, const std::string& theEntry ) +{ + LoadFromAttribute( theStudy, theEntry ); +} + //================================================================================= // function : Destructor // purpose : @@ -463,6 +481,8 @@ void GEOMGUI_DimensionProperty::AddRecord( const RecordPtr& theRecord ) //================================================================================= void GEOMGUI_DimensionProperty::RemoveRecord( const int theIndex ) { + myNames.remove( theIndex ); + myVisibility.remove( theIndex ); myRecords.remove( theIndex ); } @@ -472,6 +492,8 @@ void GEOMGUI_DimensionProperty::RemoveRecord( const int theIndex ) //================================================================================= void GEOMGUI_DimensionProperty::Clear() { + myNames.clear(); + myVisibility.clear(); myRecords.clear(); } @@ -480,8 +502,8 @@ void GEOMGUI_DimensionProperty::Clear() // purpose : //================================================================================= void GEOMGUI_DimensionProperty::SetRecord( const int theIndex, - const Handle(AIS_Dimension)& theIO, - const gp_Ax3& theLCS ) + const Handle(AIS_Dimension)& theIO, + const gp_Ax3& theLCS ) { int aType = TypeFromIO( theIO ); @@ -588,7 +610,7 @@ int GEOMGUI_DimensionProperty::GetType( const int theIndex ) const // purpose : //================================================================================= void GEOMGUI_DimensionProperty::LoadFromAttribute( SalomeApp_Study* theStudy, - const std::string& theEntry ) + const std::string& theEntry ) { Clear(); @@ -647,13 +669,16 @@ void GEOMGUI_DimensionProperty::LoadFromAttribute( SalomeApp_Study* theStudy, aLength->TextHPos = (Prs3d_DimensionTextHorizontalPosition)(int)aPacked[it++]; aLength->TextVPos = (Prs3d_DimensionTextVerticalPosition) (int)aPacked[it++]; - // point 1 [9,10,11] + // arrow flags [9] + aLength->ArrowPos = (Prs3d_DimensionArrowOrientation) (int)aPacked[it++]; + + // point 1 [10,11,12] Standard_Real aFirstX = aPacked[it++]; Standard_Real aFirstY = aPacked[it++]; Standard_Real aFirstZ = aPacked[it++]; aLength->FirstPoint = gp_Pnt( aFirstX, aFirstY, aFirstZ ); - // point 2 [12,13,14] + // point 2 [13,14,15] Standard_Real aSecondX = aPacked[it++]; Standard_Real aSecondY = aPacked[it++]; Standard_Real aSecondZ = aPacked[it++]; @@ -681,22 +706,25 @@ void GEOMGUI_DimensionProperty::LoadFromAttribute( SalomeApp_Study* theStudy, aDiam->TextHPos = (Prs3d_DimensionTextHorizontalPosition)(int)aPacked[it++]; aDiam->TextVPos = (Prs3d_DimensionTextVerticalPosition) (int)aPacked[it++]; - // circle location [9,10,11] + // arrow flags [9] + aDiam->ArrowPos = (Prs3d_DimensionArrowOrientation) (int)aPacked[it++]; + + // circle location [10,11,12] Standard_Real aLocX = (Standard_Real) aPacked[it++]; Standard_Real aLocY = (Standard_Real) aPacked[it++]; Standard_Real aLocZ = (Standard_Real) aPacked[it++]; - // circle normal [12,13,14] + // circle normal [13,14,15] Standard_Real aNormX = (Standard_Real) aPacked[it++]; Standard_Real aNormY = (Standard_Real) aPacked[it++]; Standard_Real aNormZ = (Standard_Real) aPacked[it++]; - // x-direction [15,16,17] + // x-direction [16,17,18] Standard_Real aXDirX = (Standard_Real) aPacked[it++]; Standard_Real aXDirY = (Standard_Real) aPacked[it++]; Standard_Real aXDirZ = (Standard_Real) aPacked[it++]; - // radius [18] + // radius [19] Standard_Real aRadius = (Standard_Real) aPacked[it++]; gp_Ax2 anAx( gp_Pnt( aLocX, aLocY, aLocZ ), @@ -720,22 +748,24 @@ void GEOMGUI_DimensionProperty::LoadFromAttribute( SalomeApp_Study* theStudy, anAngle->TextHPos = (Prs3d_DimensionTextHorizontalPosition)(int)aPacked[it++]; anAngle->TextVPos = (Prs3d_DimensionTextVerticalPosition) (int)aPacked[it++]; - // point 1 [5,6,7] + // arrow flags [5] + anAngle->ArrowPos = (Prs3d_DimensionArrowOrientation) (int)aPacked[it++]; + + // point 1 [6,7,8] Standard_Real aFirstX = (Standard_Real) aPacked[it++]; Standard_Real aFirstY = (Standard_Real) aPacked[it++]; Standard_Real aFirstZ = (Standard_Real) aPacked[it++]; - // point 2 [8,9,10] + // point 2 [9,10,11] Standard_Real aSecondX = (Standard_Real) aPacked[it++]; Standard_Real aSecondY = (Standard_Real) aPacked[it++]; Standard_Real aSecondZ = (Standard_Real) aPacked[it++]; - // center [11,12,13] + // center [12,13,14] Standard_Real aCenterX = (Standard_Real) aPacked[it++]; Standard_Real aCenterY = (Standard_Real) aPacked[it++]; Standard_Real aCenterZ = (Standard_Real) aPacked[it++]; - // points point 1 [4-6], point 2 [7-9], center [10-12] anAngle->FirstPoint = gp_Pnt( aFirstX, aFirstY, aFirstZ ); anAngle->SecondPoint = gp_Pnt( aSecondX, aSecondY, aSecondZ ); anAngle->CenterPoint = gp_Pnt( aCenterX, aCenterY, aCenterZ ); @@ -756,7 +786,7 @@ void GEOMGUI_DimensionProperty::LoadFromAttribute( SalomeApp_Study* theStudy, // purpose : //================================================================================= void GEOMGUI_DimensionProperty::SaveToAttribute( SalomeApp_Study *theStudy, - const std::string &theEntry ) + const std::string &theEntry ) { _PTR(SObject) aSObj = theStudy->studyDS()->FindObjectID( theEntry ); if ( !aSObj ) @@ -806,12 +836,15 @@ void GEOMGUI_DimensionProperty::SaveToAttribute( SalomeApp_Study *theStudy, aPacked.push_back( (double) aProps->TextHPos ); aPacked.push_back( (double) aProps->TextVPos ); - // point 1 [9,10,11] + // arrow flags [9] + aPacked.push_back( (double) aProps->ArrowPos ); + + // point 1 [10,11,12] aPacked.push_back( (double) aProps->FirstPoint.X() ); aPacked.push_back( (double) aProps->FirstPoint.Y() ); aPacked.push_back( (double) aProps->FirstPoint.Z() ); - // point 2 [12,13,14] + // point 2 [13,14,15] aPacked.push_back( (double) aProps->SecondPoint.X() ); aPacked.push_back( (double) aProps->SecondPoint.Y() ); aPacked.push_back( (double) aProps->SecondPoint.Z() ); @@ -837,22 +870,25 @@ void GEOMGUI_DimensionProperty::SaveToAttribute( SalomeApp_Study *theStudy, aPacked.push_back( (double) aProps->TextHPos ); aPacked.push_back( (double) aProps->TextVPos ); - // circle location [9,10,11] + // arrow flags [9] + aPacked.push_back( (double) aProps->ArrowPos ); + + // circle location [10,11,12] aPacked.push_back( (double) aProps->Circle.Location().X() ); aPacked.push_back( (double) aProps->Circle.Location().Y() ); aPacked.push_back( (double) aProps->Circle.Location().Z() ); - // circle normal [12,13,14] + // circle normal [13,14,15] aPacked.push_back( (double) aProps->Circle.Axis().Direction().X() ); aPacked.push_back( (double) aProps->Circle.Axis().Direction().Y() ); aPacked.push_back( (double) aProps->Circle.Axis().Direction().Z() ); - // x-direction [15,16,17] + // x-direction [16,17,18] aPacked.push_back( (double) aProps->Circle.XAxis().Direction().X() ); aPacked.push_back( (double) aProps->Circle.XAxis().Direction().Y() ); aPacked.push_back( (double) aProps->Circle.XAxis().Direction().Z() ); - // radius [18] + // radius [19] aPacked.push_back( (double) aProps->Circle.Radius() ); break; } @@ -868,17 +904,20 @@ void GEOMGUI_DimensionProperty::SaveToAttribute( SalomeApp_Study *theStudy, aPacked.push_back( (double) aProps->TextHPos ); aPacked.push_back( (double) aProps->TextVPos ); - // point 1 [5,6,7] + // arrow flags [5] + aPacked.push_back( (double) aProps->ArrowPos ); + + // point 1 [6,7,8] aPacked.push_back( (double) aProps->FirstPoint.X() ); aPacked.push_back( (double) aProps->FirstPoint.Y() ); aPacked.push_back( (double) aProps->FirstPoint.Z() ); - // point 2 [8,9,10] + // point 2 [9,10,11] aPacked.push_back( (double) aProps->SecondPoint.X() ); aPacked.push_back( (double) aProps->SecondPoint.Y() ); aPacked.push_back( (double) aProps->SecondPoint.Z() ); - // center [11,12,13] + // center [12,13,14] aPacked.push_back( (double) aProps->CenterPoint.X() ); aPacked.push_back( (double) aProps->CenterPoint.Y() ); aPacked.push_back( (double) aProps->CenterPoint.Z() ); diff --git a/src/GEOMGUI/GEOMGUI_DimensionProperty.h b/src/GEOMGUI/GEOMGUI_DimensionProperty.h index f2c5f7e58..49bbcd1b7 100644 --- a/src/GEOMGUI/GEOMGUI_DimensionProperty.h +++ b/src/GEOMGUI/GEOMGUI_DimensionProperty.h @@ -53,9 +53,9 @@ class SalomeApp_Study; * (name);(is_visible);(dimension type);(dimension property list); * * The following packing scheme is used to store dimension data: - * Length: (plane)[0-3] (flyout)[4] (text flags)[5-6] (p1)[7-9] (pnt2)[10-12] - * Diam: (plane)[0-3] (flyout)[4] (text flags)[5-6] (circle loc, xdir, ydir, rad)[7-16] - * Angle: (flyout)[0] (text flags)[1-2] (p1)[3-5] (p2)[6-8] (center)[9-11] + * Length: (plane)[0-3] (flyout)[4] (text flags)[5-6] (arrow flag)[7] (p1)[8-10] (pnt2)[11-13] + * Diam: (plane)[0-3] (flyout)[4] (text flags)[5-6] (arrow flag)[7] (circle loc, xdir, ydir, rad)[8-17] + * Angle: (flyout)[0] (text flags)[1-2] (arrow flag)[3] (p1)[4-6] (p2)[7-9] (center)[10-12] */ class Standard_EXPORT GEOMGUI_DimensionProperty { @@ -109,7 +109,8 @@ public: Plane( gp::XOY() ), Flyout( 0.0 ), TextHPos( Prs3d_DTHP_Fit ), - TextVPos( Prs3d_DTVP_Center ) + TextVPos( Prs3d_DTVP_Center ), + ArrowPos( Prs3d_DAO_Fit ) {} Length( const Length& theOther ) : @@ -119,7 +120,8 @@ public: Plane( theOther.Plane ), Flyout( theOther.Flyout ), TextHPos( theOther.TextHPos ), - TextVPos( theOther.TextVPos ) + TextVPos( theOther.TextVPos ), + ArrowPos( theOther.ArrowPos ) {} ~Length() {} @@ -150,6 +152,7 @@ public: double Flyout; Prs3d_DimensionTextHorizontalPosition TextHPos; Prs3d_DimensionTextVerticalPosition TextVPos; + Prs3d_DimensionArrowOrientation ArrowPos; }; /*! @@ -162,7 +165,8 @@ public: Plane( gp::XOY() ), Flyout( 0.0 ), TextHPos( Prs3d_DTHP_Fit ), - TextVPos( Prs3d_DTVP_Center ) + TextVPos( Prs3d_DTVP_Center ), + ArrowPos( Prs3d_DAO_Fit ) {} Diameter( const Diameter& theOther ) : @@ -171,7 +175,8 @@ public: Plane( theOther.Plane ), Flyout( theOther.Flyout ), TextHPos( theOther.TextHPos ), - TextVPos( theOther.TextVPos ) + TextVPos( theOther.TextVPos ), + ArrowPos( theOther.ArrowPos ) {} ~Diameter() {} @@ -201,6 +206,7 @@ public: double Flyout; Prs3d_DimensionTextHorizontalPosition TextHPos; Prs3d_DimensionTextVerticalPosition TextVPos; + Prs3d_DimensionArrowOrientation ArrowPos; }; /*! @@ -215,7 +221,8 @@ public: CenterPoint( gp::Origin() ), Flyout( 0.0 ), TextHPos( Prs3d_DTHP_Fit ), - TextVPos( Prs3d_DTVP_Center ) + TextVPos( Prs3d_DTVP_Center ), + ArrowPos( Prs3d_DAO_Fit ) {} Angle( const Angle& theOther ) : @@ -225,7 +232,8 @@ public: CenterPoint( theOther.CenterPoint ), Flyout( theOther.Flyout ), TextHPos( theOther.TextHPos ), - TextVPos( theOther.TextVPos ) + TextVPos( theOther.TextVPos ), + ArrowPos( theOther.ArrowPos ) {} ~Angle() {} @@ -256,6 +264,7 @@ public: double Flyout; Prs3d_DimensionTextHorizontalPosition TextHPos; Prs3d_DimensionTextVerticalPosition TextVPos; + Prs3d_DimensionArrowOrientation ArrowPos; }; typedef QSharedPointer RecordPtr; @@ -272,6 +281,11 @@ public: */ GEOMGUI_DimensionProperty( const GEOMGUI_DimensionProperty& theOther ); + /*! + * \brief Constructor. Inits property from attribute. + */ + GEOMGUI_DimensionProperty( SalomeApp_Study* theStudy, const std::string& theEntry ); + /*! * \brief Destructor. */ @@ -287,6 +301,14 @@ public: */ bool operator == (const GEOMGUI_DimensionProperty &theOther) const; + /*! + * \brief Overload comparsion. + */ + bool operator != (const GEOMGUI_DimensionProperty &theOther) const + { + return !(operator == (theOther)); + } + public: /*! diff --git a/src/GEOMGUI/GEOMGUI_Selection.cxx b/src/GEOMGUI/GEOMGUI_Selection.cxx index d1bdf3767..009c1565c 100644 --- a/src/GEOMGUI/GEOMGUI_Selection.cxx +++ b/src/GEOMGUI/GEOMGUI_Selection.cxx @@ -24,6 +24,7 @@ // Author : Alexander SOLOVYOV, Open CASCADE S.A.S. (alexander.solovyov@opencascade.com) #include "GEOMGUI_Selection.h" +#include #include "GeometryGUI.h" #include "GEOM_Displayer.h" @@ -178,6 +179,10 @@ QVariant GEOMGUI_Selection::parameter( const int idx, const QString& p ) const v = isPhysicalMaterial(idx); else if ( p == "isFolder" ) v = isFolder(idx); + else if ( p == "hasHiddenDimensions" ) + v = hasHiddenDimensions(idx); + else if ( p == "hasVisibleDimensions" ) + v = hasVisibleDimensions(idx); else v = LightApp_Selection::parameter( idx, p ); @@ -682,3 +687,59 @@ bool GEOMGUI_Selection::isFolder( const int index ) const return res; } +bool GEOMGUI_Selection::hasDimensions( const int theIndex, bool& theHidden, bool& theVisible ) const +{ + SalomeApp_Study* appStudy = dynamic_cast( study() ); + + if ( !appStudy ) + { + return false; + } + + QString anEntry = entry( theIndex ); + _PTR(Study) aStudy = appStudy->studyDS(); + if ( !aStudy || anEntry.isNull() ) + { + return false; + } + + GEOMGUI_DimensionProperty aDimensions( appStudy, anEntry.toStdString() ); + + theHidden = false; + theVisible = false; + + for ( int it = 0; it < aDimensions.GetNumber(); ++it ) + { + if ( aDimensions.IsVisible( it ) ) + theVisible = true; + else + theHidden = true; + } + + return aDimensions.GetNumber() > 0; +} + +bool GEOMGUI_Selection::hasHiddenDimensions( const int theIndex ) const +{ + bool isAnyVisible = false; + bool isAnyHidden = false; + if ( !hasDimensions( theIndex, isAnyHidden, isAnyVisible ) ) + { + return false; + } + + return isAnyHidden; +} + +bool GEOMGUI_Selection::hasVisibleDimensions( const int theIndex ) const +{ + bool isAnyVisible = false; + bool isAnyHidden = false; + if ( !hasDimensions( theIndex, isAnyHidden, isAnyVisible ) ) + { + return false; + } + + return isAnyVisible; +} + diff --git a/src/GEOMGUI/GEOMGUI_Selection.h b/src/GEOMGUI/GEOMGUI_Selection.h index b2738f75f..a9c17665e 100644 --- a/src/GEOMGUI/GEOMGUI_Selection.h +++ b/src/GEOMGUI/GEOMGUI_Selection.h @@ -78,6 +78,11 @@ private: bool isComponent( const int ) const; bool isFolder( const int ) const; + + bool hasDimensions( const int, bool&, bool& ) const; + bool hasHiddenDimensions( const int ) const; + bool hasVisibleDimensions( const int ) const; + GEOM::GEOM_Object_ptr getObject( const int ) const; GEOM::GEOM_BaseObject_ptr getBaseObject( const int ) const; diff --git a/src/GEOMGUI/GEOM_Displayer.cxx b/src/GEOMGUI/GEOM_Displayer.cxx index 2683c9603..77138e280 100644 --- a/src/GEOMGUI/GEOM_Displayer.cxx +++ b/src/GEOMGUI/GEOM_Displayer.cxx @@ -1100,6 +1100,7 @@ void GEOM_Displayer::updateDimensions( const Handle(SALOME_InteractiveObject)& t aStyle->MakeUnitsDisplayed( (Standard_Boolean) isUnitsShown ); aStyle->MakeText3d( Standard_True ); aStyle->MakeTextShaded( Standard_True ); + aStyle->SetExtensionSize( aFontHeight * 0.5 ); aStyle->TextAspect()->SetHeight( aFontHeight ); aStyle->ArrowAspect()->SetLength( anArrowLength ); aStyle->LineAspect()->SetWidth( aLineWidth ); @@ -1107,6 +1108,28 @@ void GEOM_Displayer::updateDimensions( const Handle(SALOME_InteractiveObject)& t aStyle->SetTextVerticalPosition( aPrs->DimensionAspect()->TextVerticalPosition() ); aPrs->SetDimensionAspect( aStyle ); aPrs->SetPolygonOffsets( Aspect_POM_Fill, -1.0, -1.0 ); + aPrs->Attributes()->SetDimLengthDisplayUnits( aUnitsLength.toLatin1().data() ); + aPrs->Attributes()->SetDimAngleDisplayUnits( aUnitsAngle.toLatin1().data() ); + + if ( aPrs->IsKind( STANDARD_TYPE(AIS_AngleDimension) ) ) + { + // show degree symbol for dimension instead of label "deg" + if ( aUnitsAngle == "deg" ) + { + aPrs->SetSpecialSymbol(0xB0); + aPrs->SetDisplaySpecialSymbol( isUnitsShown ? AIS_DSS_After : AIS_DSS_No ); + aStyle->MakeUnitsDisplayed(Standard_False); + } + else + { + aPrs->SetDisplaySpecialSymbol(AIS_DSS_No); + aStyle->MakeUnitsDisplayed( (Standard_Boolean) isUnitsShown ); + } + } + else + { + aStyle->MakeUnitsDisplayed( (Standard_Boolean) isUnitsShown ); + } aListOfIO.Append( aPrs ); } diff --git a/src/GEOMGUI/GEOM_msg_en.ts b/src/GEOMGUI/GEOM_msg_en.ts index e62e0794d..8aade3c3d 100644 --- a/src/GEOMGUI/GEOM_msg_en.ts +++ b/src/GEOMGUI/GEOM_msg_en.ts @@ -3276,6 +3276,10 @@ Please, select face, shell or solid and try again PREF_DIMENSIONS_ANGLE_UNITS Angle measurement units + + PREF_DIMENSIONS_DEFAULT_FLYOUT + Default flyout length + PREF_DIMENSIONS_SHOW_UNITS Show units of measurement @@ -4732,6 +4736,30 @@ Please, select face, shell or solid and try again STB_MANAGE_DIMENSIONS Manage measurement dimensions of an object + + MEN_POP_SHOW_ALL_DIMENSIONS + Show all dimensions + + + STB_POP_SHOW_ALL_DIMENSIONS + Show all hidden measures (dimension) created for the object + + + TOP_POP_SHOW_ALL_DIMENSIONS + Show all hidden measures (dimension) created for the object + + + MEN_POP_HIDE_ALL_DIMENSIONS + Hide all dimensions + + + STB_POP_HIDE_ALL_DIMENSIONS + Show all visible measures (dimension) created for the object + + + TOP_POP_HIDE_ALL_DIMENSIONS + Show all visible measures (dimension) created for the object + TOP_POP_AUTO_COLOR Auto color @@ -6166,6 +6194,16 @@ Number of sketch points too small WRN_TITLE_UNSAVED Unsaved changes + + WRN_MSG_CHANGES_LOST + The unsaved changes will be lost. +Do you wish to continue? + + + WRN_MSG_CHANGES_SAVE + The unsaved changes will be lost. +Do you wish to save them? + WRN_MSG_UNSAVED The unsaved changes will be lost. diff --git a/src/GEOMGUI/GEOM_msg_fr.ts b/src/GEOMGUI/GEOM_msg_fr.ts index dd5a103c7..ee3e881d8 100644 --- a/src/GEOMGUI/GEOM_msg_fr.ts +++ b/src/GEOMGUI/GEOM_msg_fr.ts @@ -3276,6 +3276,10 @@ Choisissez une face, une coque ou un solide et essayez de nouveau PREF_DIMENSIONS_ANGLE_UNITS Angle measurement units + + PREF_DIMENSIONS_DEFAULT_FLYOUT + Default flyout length + PREF_DIMENSIONS_SHOW_UNITS Show units of measurement @@ -4732,6 +4736,30 @@ Choisissez une face, une coque ou un solide et essayez de nouveau STB_MANAGE_DIMENSIONS Manage measurement dimensions of an object + + MEN_POP_SHOW_ALL_DIMENSIONS + Show all dimensions + + + STB_POP_SHOW_ALL_DIMENSIONS + Show all hidden measures (dimension) created for the object + + + TOP_POP_SHOW_ALL_DIMENSIONS + Show all hidden measures (dimension) created for the object + + + MEN_POP_HIDE_ALL_DIMENSIONS + Hide all dimensions + + + STB_POP_HIDE_ALL_DIMENSIONS + Show all visible measures (dimension) created for the object + + + TOP_POP_HIDE_ALL_DIMENSIONS + Show all visible measures (dimension) created for the object + TOP_POP_AUTO_COLOR Couleur automatique @@ -6166,6 +6194,16 @@ Le nombre de points n'est pas suffisant WRN_TITLE_UNSAVED Unsaved changes + + WRN_MSG_CHANGES_LOST + The unsaved changes will be lost. +Do you wish to continue? + + + WRN_MSG_CHANGES_SAVE + The unsaved changes will be lost. +Do you wish to save them? + WRN_MSG_UNSAVED The unsaved changes will be lost. diff --git a/src/GEOMGUI/GEOM_msg_ja.ts b/src/GEOMGUI/GEOM_msg_ja.ts index c3b84b8f6..7837cffaf 100644 --- a/src/GEOMGUI/GEOM_msg_ja.ts +++ b/src/GEOMGUI/GEOM_msg_ja.ts @@ -3271,6 +3271,10 @@ PREF_DIMENSIONS_ANGLE_UNITS Angle measurement units + + PREF_DIMENSIONS_DEFAULT_FLYOUT + Default flyout length + PREF_DIMENSIONS_SHOW_UNITS Show units of measurement @@ -4727,6 +4731,30 @@ STB_MANAGE_DIMENSIONS Manage measurement dimensions of an object + + MEN_POP_SHOW_ALL_DIMENSIONS + Show all dimensions + + + STB_POP_SHOW_ALL_DIMENSIONS + Show all hidden measures (dimension) created for the object + + + TOP_POP_SHOW_ALL_DIMENSIONS + Show all hidden measures (dimension) created for the object + + + MEN_POP_HIDE_ALL_DIMENSIONS + Hide all dimensions + + + STB_POP_HIDE_ALL_DIMENSIONS + Show all visible measures (dimension) created for the object + + + TOP_POP_HIDE_ALL_DIMENSIONS + Show all visible measures (dimension) created for the object + TOP_POP_AUTO_COLOR 自動色 @@ -6158,6 +6186,16 @@ WRN_TITLE_UNSAVED Unsaved changes + + WRN_MSG_CHANGES_LOST + The unsaved changes will be lost. +Do you wish to continue? + + + WRN_MSG_CHANGES_SAVE + The unsaved changes will be lost. +Do you wish to save them? + WRN_MSG_UNSAVED The unsaved changes will be lost. diff --git a/src/GEOMGUI/GeometryGUI.cxx b/src/GEOMGUI/GeometryGUI.cxx index bd3e7e5c0..f8c4a8268 100644 --- a/src/GEOMGUI/GeometryGUI.cxx +++ b/src/GEOMGUI/GeometryGUI.cxx @@ -635,6 +635,8 @@ void GeometryGUI::OnGUIEvent( int id, const QVariant& theParam ) case GEOMOp::OpPointCoordinates: // MENU MEASURE - POINT COORDINATES case GEOMOp::OpCheckSelfInters: // MENU MEASURE - CHECK SELF INTERSECTIONS case GEOMOp::OpManageDimensions: // MENU MEASURE - MANAGE DIMENSIONS + case GEOMOp::OpShowAllDimensions: // POPUP MENU - SHOW ALL DIMENSIONS + case GEOMOp::OpHideAllDimensions: // POPUP MENU - HIDE ALL DIMENSIONS libName = "MeasureGUI"; break; case GEOMOp::OpGroupCreate: // MENU GROUP - CREATE @@ -1071,6 +1073,8 @@ void GeometryGUI::initialize( CAM_Application* app ) createGeomAction( GEOMOp::OpPredefMaterCustom, "POP_PREDEF_MATER_CUSTOM" ); createGeomAction( GEOMOp::OpCreateFolder, "POP_CREATE_FOLDER" ); createGeomAction( GEOMOp::OpSortChildren, "POP_SORT_CHILD_ITEMS" ); + createGeomAction( GEOMOp::OpShowAllDimensions, "POP_SHOW_ALL_DIMENSIONS" ); + createGeomAction( GEOMOp::OpHideAllDimensions, "POP_HIDE_ALL_DIMENSIONS" ); // Create actions for increase/decrease transparency shortcuts createGeomAction( GEOMOp::OpIncrTransparency, "", "", 0, false, @@ -1588,6 +1592,14 @@ void GeometryGUI::initialize( CAM_Application* app ) mgr->insert( action(GEOMOp::OpShowOnlyChildren ), -1, -1 ); // display only children mgr->setRule(action(GEOMOp::OpShowOnlyChildren ), (canDisplay + "and ($type in {%1}) and client='ObjectBrowser' and hasChildren=true").arg( types ), QtxPopupMgr::VisibleRule ); + QString aDimensionRule = "($component={'GEOM'}) and selcount=1 and isVisible and type='Shape' and %1"; + + mgr->insert( separator(), -1, -1 ); // ----------- + mgr->insert( action( GEOMOp::OpShowAllDimensions ), -1, -1 ); // show all dimensions + mgr->setRule( action( GEOMOp::OpShowAllDimensions ), aDimensionRule.arg( "hasHiddenDimensions" ), QtxPopupMgr::VisibleRule ); + mgr->insert( action( GEOMOp::OpHideAllDimensions ), -1, -1 ); // hide all dimensions + mgr->setRule( action( GEOMOp::OpHideAllDimensions ), aDimensionRule.arg( "hasVisibleDimensions" ), QtxPopupMgr::VisibleRule ); + mgr->insert( separator(), -1, -1 ); // ----------- mgr->insert( action( GEOMOp::OpUnpublishObject ), -1, -1 ); // Unpublish object mgr->setRule( action( GEOMOp::OpUnpublishObject ), QString("client='ObjectBrowser' and $type in {'Shape' 'Group' 'Field' 'FieldStep'} and selcount>0"), QtxPopupMgr::VisibleRule ); @@ -2375,11 +2387,19 @@ void GeometryGUI::createPreferences() setPreferenceProperty( aDimLineWidthId, "min", 1 ); setPreferenceProperty( aDimLineWidthId, "max", 5 ); - addPreference( tr( "PREF_DIMENSIONS_FONT_HEIGHT" ), aDimGroupId, - LightApp_Preferences::DblSpin, "Geometry", "dimensions_font_height" ); + int aDimFontHeightId = addPreference( tr( "PREF_DIMENSIONS_FONT_HEIGHT" ), aDimGroupId, + LightApp_Preferences::DblSpin, "Geometry", "dimensions_font_height" ); + + setPreferenceProperty( aDimFontHeightId, "min", 1e-9 ); + setPreferenceProperty( aDimFontHeightId, "max", 1e+9 ); + setPreferenceProperty( aDimFontHeightId, "precision", 9 ); - addPreference( tr( "PREF_DIMENSIONS_ARROW_LENGTH" ), aDimGroupId, - LightApp_Preferences::IntSpin, "Geometry", "dimensions_arrow_length" ); + int aDimArrLengthId = addPreference( tr( "PREF_DIMENSIONS_ARROW_LENGTH" ), aDimGroupId, + LightApp_Preferences::DblSpin, "Geometry", "dimensions_arrow_length" ); + + setPreferenceProperty( aDimArrLengthId, "min", 1e-9 ); + setPreferenceProperty( aDimArrLengthId, "max", 1e+9 ); + setPreferenceProperty( aDimArrLengthId, "precision", 9 ); int aLengthUnitsId = addPreference( tr( "PREF_DIMENSIONS_LENGTH_UNITS" ), aDimGroupId, LightApp_Preferences::Selector, "Geometry", "dimensions_length_units" ); @@ -2404,6 +2424,13 @@ void GeometryGUI::createPreferences() setPreferenceProperty( aLengthUnitsId, "strings", aListOfLengthUnits ); setPreferenceProperty( anAngUnitsId, "strings", aListOfAngUnits ); + int aDimDefFlyout = addPreference( tr( "PREF_DIMENSIONS_DEFAULT_FLYOUT" ), aDimGroupId, + LightApp_Preferences::DblSpin, "Geometry", "dimensions_default_flyout" ); + + setPreferenceProperty( aDimDefFlyout, "min", 1e-9 ); + setPreferenceProperty( aDimDefFlyout, "max", 1e+9 ); + setPreferenceProperty( aDimDefFlyout, "precision", 9 ); + int isoGroup = addPreference( tr( "PREF_ISOS" ), tabId ); setPreferenceProperty( isoGroup, "columns", 2 ); int isoU = addPreference( tr( "PREF_ISOS_U" ), isoGroup, diff --git a/src/GEOMGUI/GeometryGUI_Operations.h b/src/GEOMGUI/GeometryGUI_Operations.h index d24ba7d8e..d63d3c7fd 100644 --- a/src/GEOMGUI/GeometryGUI_Operations.h +++ b/src/GEOMGUI/GeometryGUI_Operations.h @@ -190,6 +190,8 @@ namespace GEOMOp { OpCheckSelfInters = 5012, // MENU MEASURES - CHECK SELF INTERSECTIONS OpGetNonBlocks = 5013, // MENU MEASURES - GET NON BLOCKS OpManageDimensions = 5014, // MENU MEASURES - MANAGE DIMENSIONS + OpShowAllDimensions = 5015, // POPUP MENU - SHOW ALL DIMENSIONS + OpHideAllDimensions = 5016, // POPUP MENU - HIDE ALL DIMENSIONS // GroupGUI --------------------//-------------------------------- OpGroupCreate = 6000, // MENU GROUP - CREATE OpGroupEdit = 6001, // MENU GROUP - EDIT diff --git a/src/MeasureGUI/MeasureGUI.cxx b/src/MeasureGUI/MeasureGUI.cxx index e079e74bc..dea595628 100644 --- a/src/MeasureGUI/MeasureGUI.cxx +++ b/src/MeasureGUI/MeasureGUI.cxx @@ -28,8 +28,14 @@ #include #include "GeometryGUI_Operations.h" + +#include + +#include +#include #include #include +#include #include "MeasureGUI_PropertiesDlg.h" // Method PROPERTIES #include "MeasureGUI_CenterMassDlg.h" // Method CENTER MASS @@ -124,6 +130,12 @@ bool MeasureGUI::OnGUIEvent( int theCommandID, SUIT_Desktop* parent ) case GEOMOp::OpManageDimensions: dlg = new MeasureGUI_ManageDimensionsDlg( getGeometryGUI(), parent ); break; // MANAGE DIMENSIONS + case GEOMOp::OpShowAllDimensions: + ChangeDimensionsVisibility( true ); + break; // SHOW ALL DIMENSIONS + case GEOMOp::OpHideAllDimensions: + ChangeDimensionsVisibility( false ); + break; // HIDE ALL DIMENSIONS default: app->putInfo( tr( "GEOM_PRP_COMMAND" ).arg( theCommandID ) ); break; @@ -136,6 +148,56 @@ bool MeasureGUI::OnGUIEvent( int theCommandID, SUIT_Desktop* parent ) return true; } +//======================================================================= +// function : ChangeDimensionsVisibility +// purpose : +//======================================================================= +void MeasureGUI::ChangeDimensionsVisibility( const bool theIsVisible ) +{ + SalomeApp_Application* anApp = getGeometryGUI()->getApp(); + if (!anApp) + { + return; + } + + SalomeApp_Study* anActiveStudy = dynamic_cast( anApp->activeStudy() ); + if ( !anActiveStudy ) + { + return; + } + + LightApp_SelectionMgr* aSelMgr = anApp->selectionMgr(); + if ( !aSelMgr ) + { + return; + } + + SALOME_ListIO aListIO; + aSelMgr->selectedObjects( aListIO ); + if ( aListIO.Extent() != 1 ) + { + return; + } + + Handle(SALOME_InteractiveObject) anIObject = aListIO.First(); + if ( !anIObject->hasEntry() ) + { + return; + } + + SUIT_OverrideCursor(); + + GEOMGUI_DimensionProperty aDimensions( anActiveStudy, anIObject->getEntry() ); + + for ( int anIt = 0; anIt < aDimensions.GetNumber(); ++anIt ) + { + aDimensions.SetVisible( anIt, theIsVisible ); + } + + aDimensions.SaveToAttribute( anActiveStudy, anIObject->getEntry() ); + + GEOM_Displayer( anActiveStudy ).Redisplay( anIObject, true ); +} //===================================================================================== // EXPORTED METHODS diff --git a/src/MeasureGUI/MeasureGUI.h b/src/MeasureGUI/MeasureGUI.h index 4ab843810..fc909da1d 100644 --- a/src/MeasureGUI/MeasureGUI.h +++ b/src/MeasureGUI/MeasureGUI.h @@ -46,6 +46,9 @@ public: ~MeasureGUI(); bool OnGUIEvent( int, SUIT_Desktop* ); + + // Show/hide all dimension created for object + void ChangeDimensionsVisibility( const bool theIsVisible ); }; #endif // MEASUREGUI_H diff --git a/src/MeasureGUI/MeasureGUI_CreateDimensionDlg.cxx b/src/MeasureGUI/MeasureGUI_CreateDimensionDlg.cxx index 4daaf6039..5da50d8a3 100644 --- a/src/MeasureGUI/MeasureGUI_CreateDimensionDlg.cxx +++ b/src/MeasureGUI/MeasureGUI_CreateDimensionDlg.cxx @@ -34,6 +34,9 @@ #include #include +#include +#include +#include #include #include #include @@ -127,7 +130,13 @@ MeasureGUI_CreateDimensionDlg::MeasureGUI_CreateDimensionDlg( const GEOM::GeomOb myDimensionInteractor = new MeasureGUI_DimensionInteractor( theGUI, theParent ); + myDiameterArgs->setVisible( false ); + myAngleArgs ->setVisible( false ); + myLengthArgs ->setVisible( true ); + Init(); + + setHelpFileName("add_dimension_page.html"); } //================================================================================= @@ -404,6 +413,7 @@ void MeasureGUI_CreateDimensionDlg::StartLocalEditing() anAISContext->SetZLayer( myDimension, myEditingLayer ); anAISContext->Activate( myDimension, AIS_DSM_Line ); anAISContext->Activate( myDimension, AIS_DSM_Text ); + anAISContext->Redisplay( myDimension ); } //================================================================================= @@ -434,14 +444,15 @@ void MeasureGUI_CreateDimensionDlg::StopLocalEditing() //================================================================================= void MeasureGUI_CreateDimensionDlg::Init() { + myDimension = NULL; + StopLocalEditing(); erasePreview(); - myDiameterArgs->setVisible( false ); - myAngleArgs ->setVisible( false ); - myLengthArgs ->setVisible( true ); + myDiameterArgs->Reset(); myLengthArgs->Reset(); + myAngleArgs->Reset(); myRBGroup->button( TypeButtonID_Length )->click(); } @@ -461,11 +472,28 @@ Handle(AIS_Dimension) MeasureGUI_CreateDimensionDlg::CreateDimension() int aLineWidth = aResMgr->integerValue( "Geometry", "dimensions_line_width", 1 ); double aFontHeight = aResMgr->doubleValue ( "Geometry", "dimensions_font_height", 10 ); double anArrowLength = aResMgr->doubleValue ( "Geometry", "dimensions_arrow_length", 5 ); + double aDefFlyout = aResMgr->doubleValue ( "Geometry", "dimensions_default_flyout", 20 ); bool isUnitsShown = aResMgr->booleanValue( "Geometry", "dimensions_show_units", false ); QString aUnitsLength = aResMgr->stringValue ( "Geometry", "dimensions_length_units", "m" ); QString aUnitsAngle = aResMgr->stringValue ( "Geometry", "dimensions_angle_units", "deg" ); - MeasureGUI_DimensionCreateTool aTool( myGeomGUI ); + OCCViewer_ViewWindow* anActiveView = NULL; + + SalomeApp_Application* anApp = myGeomGUI->getApp(); + + if ( anApp ) + { + OCCViewer_ViewManager* aViewMgr = (OCCViewer_ViewManager*) anApp->getViewManager( OCCViewer_Viewer::Type(), false ); + if ( aViewMgr ) + { + anActiveView = (OCCViewer_ViewWindow*) aViewMgr->getActiveView(); + } + } + + MeasureGUI_DimensionCreateTool aTool; + + aTool.Settings.DefaultFlyout = aDefFlyout; + aTool.Settings.ActiveView = anActiveView ? anActiveView->getViewPort()->getView() : NULL; switch ( getConstructorId() ) { @@ -559,9 +587,33 @@ Handle(AIS_Dimension) MeasureGUI_CreateDimensionDlg::CreateDimension() aStyle->MakeUnitsDisplayed( (Standard_Boolean) isUnitsShown ); aStyle->MakeText3d( Standard_True ); aStyle->MakeTextShaded( Standard_True ); + aStyle->SetExtensionSize( aFontHeight * 0.5 ); aStyle->TextAspect()->SetHeight( aFontHeight ); aStyle->ArrowAspect()->SetLength( anArrowLength ); aStyle->LineAspect()->SetWidth( aLineWidth ); + + if ( aDimensionIO->IsKind( STANDARD_TYPE(AIS_AngleDimension) ) ) + { + // show degree symbol for dimension instead of label "deg" + if ( aUnitsAngle == "deg" ) + { + aDimensionIO->SetSpecialSymbol(0xB0); + aDimensionIO->SetDisplaySpecialSymbol( isUnitsShown ? AIS_DSS_After : AIS_DSS_No ); + aStyle->MakeUnitsDisplayed(Standard_False); + } + else + { + aDimensionIO->SetDisplaySpecialSymbol(AIS_DSS_No); + aStyle->MakeUnitsDisplayed( (Standard_Boolean) isUnitsShown ); + } + } + else + { + aStyle->MakeUnitsDisplayed( (Standard_Boolean) isUnitsShown ); + } + + aDimensionIO->Attributes()->SetDimLengthDisplayUnits( aUnitsLength.toLatin1().data() ); + aDimensionIO->Attributes()->SetDimAngleDisplayUnits( aUnitsAngle.toLatin1().data() ); aDimensionIO->SetDimensionAspect( aStyle ); aDimensionIO->SetPolygonOffsets( Aspect_POM_Fill, -1.0, -1.0 ); diff --git a/src/MeasureGUI/MeasureGUI_DimensionCreateTool.cxx b/src/MeasureGUI/MeasureGUI_DimensionCreateTool.cxx index c32d0c9ca..087e3e810 100644 --- a/src/MeasureGUI/MeasureGUI_DimensionCreateTool.cxx +++ b/src/MeasureGUI/MeasureGUI_DimensionCreateTool.cxx @@ -41,14 +41,28 @@ // OCCT includes #include #include +#include #include +#include #include +#include +#include +#include +#include +#include +#include #include #include +#include #include +#include #include #include #include +#include +#include +#include +#include #include #include #include @@ -58,36 +72,38 @@ #include #include #include +#include #include -#include #include //================================================================================= // function : Constructor // purpose : //================================================================================= -MeasureGUI_DimensionCreateTool::MeasureGUI_DimensionCreateTool( GeometryGUI* theGeomGUI ) -: myGeomGUI( theGeomGUI ) +MeasureGUI_DimensionCreateTool::MeasureGUI_DimensionCreateTool() { + Settings.DefaultFlyout = 0.0; + Settings.ActiveView = NULL; } //================================================================================= // function : LengthOnEdge // purpose : //================================================================================= -Handle(AIS_LengthDimension) MeasureGUI_DimensionCreateTool::LengthOnEdge( const GEOM::GeomObjPtr& theEdge ) +Handle(AIS_LengthDimension) MeasureGUI_DimensionCreateTool::LengthOnEdge( const GEOM::GeomObjPtr& theMeasuredObj ) const { /* ---------------------------------------------------------------- * * get the edge and parent shape * * ---------------------------------------------------------------- */ - TopoDS_Shape aShapeEdge; - TopoDS_Shape aShapeMain; - if ( !GEOMBase::GetShape( theEdge.get(), aShapeEdge ) ) + TopoDS_Shape aMeasuredShape; + TopoDS_Shape aMainShape; + if ( !GEOMBase::GetShape( theMeasuredObj.operator ->(), aMeasuredShape ) ) { return NULL; } - if ( !GEOMBase::GetShape( GetMainShape( theEdge ).get(), aShapeMain ) ) + + if ( !GEOMBase::GetShape( GetMainShape( theMeasuredObj ).get(), aMainShape ) ) { return NULL; } @@ -96,7 +112,7 @@ Handle(AIS_LengthDimension) MeasureGUI_DimensionCreateTool::LengthOnEdge( const /* check the input geometry */ /* ------------------------------------------------- */ - TopoDS_Edge anEdge = TopoDS::Edge( aShapeEdge ); + TopoDS_Edge anEdge = TopoDS::Edge( aMeasuredShape ); TopoDS_Vertex aVertex1; TopoDS_Vertex aVertex2; @@ -109,59 +125,85 @@ Handle(AIS_LengthDimension) MeasureGUI_DimensionCreateTool::LengthOnEdge( const return NULL; } - /* ------------------------------------------------- * - * compose list of possible flyout directions * - * ------------------------------------------------- */ + /* ------------------------- * + * position the dimension + * ------------------------- */ Bnd_Box aBnd; - BRepBndLib::AddClose( aShapeMain, aBnd ); + BRepBndLib::AddClose( aMainShape, aBnd ); - TColgp_SequenceOfDir aSeqOfFlyout; - ChooseLengthFlyoutsFromShape( aSeqOfFlyout, anEdge, aShapeMain ); - ChooseLengthFlyoutsFromBnd( aSeqOfFlyout, aPnt1, aPnt2, aBnd ); - if ( aSeqOfFlyout.IsEmpty() ) - { - return NULL; - } + // get face sides + TopTools_IndexedDataMapOfShapeListOfShape aRelationMap; + TopExp::MapShapesAndAncestors( aMainShape, TopAbs_EDGE, TopAbs_FACE, aRelationMap ); + const TopTools_ListOfShape& aRelatedFaces = aRelationMap.FindFromKey( anEdge ); - gp_Dir aPointDir = gce_MakeDir( aPnt1, aPnt2 ); + gp_Vec aFaceN1( gp::Origin(), gp::Origin() ); + gp_Vec aFaceN2( gp::Origin(), gp::Origin() ); + gp_Vec aFaceS1( gp::Origin(), gp::Origin() ); + gp_Vec aFaceS2( gp::Origin(), gp::Origin() ); - // make planes for dimension presentation according to flyout directions - NCollection_Sequence aSeqOfPlanes; - for ( Standard_Integer aFlyoutIt = 1; aFlyoutIt <= aSeqOfFlyout.Length(); ++aFlyoutIt ) + gp_Pnt aMiddlePnt = gp_Pnt( ( aPnt1.XYZ() + aPnt2.XYZ() ) * 0.5 ); + + TopTools_ListIteratorOfListOfShape aFaceIt( aRelatedFaces ); + + // get face side directions + if ( aFaceIt.More() ) { - gp_Pln aPlane( aPnt1, aPointDir ^ aSeqOfFlyout.Value( aFlyoutIt ) ); - aSeqOfPlanes.Append( aPlane ); - } + TopoDS_Face aFace = TopoDS::Face( aFaceIt.Value() ); - /* --------------------------------------------------------------------- * - * select best matching dimension plane for view projection * - * --------------------------------------------------------------------- */ + gp_Dir aSideDir; + if ( GetFaceSide( aFace, anEdge, aSideDir ) ) + { + aFaceS1 = aSideDir; + } - OCCViewer_ViewWindow* anActiveView = NULL; + Handle(Geom_Surface) aSurface = BRep_Tool::Surface( aFace ); + + Standard_Real aU = 0.0, aV = 0.0; + GeomLib_Tool::Parameters( aSurface, aMiddlePnt, Precision::Confusion(), aU, aV ); + + gp_Dir aNorm; + if ( GeomLib::NormEstim( aSurface, gp_Pnt2d( aU, aV ), Precision::Confusion(), aNorm ) <= 1 ) + { + aFaceN1 = aFace.Orientation() == TopAbs_REVERSED ? -aNorm : aNorm; + } - if ( myGeomGUI != NULL ) + aFaceIt.Next(); + } + + if ( aFaceIt.More() ) { - SalomeApp_Application* anApp = myGeomGUI->getApp(); - if ( !anApp ) + TopoDS_Face aFace = TopoDS::Face( aFaceIt.Value() ); + + gp_Dir aSideDir; + if ( GetFaceSide( aFace, anEdge, aSideDir ) ) { - OCCViewer_ViewManager* aViewMgr = (OCCViewer_ViewManager*) anApp->getViewManager( OCCViewer_Viewer::Type(), false ); - if ( aViewMgr ) - { - anActiveView = (OCCViewer_ViewWindow*) aViewMgr->getActiveView(); - } + aFaceS2 = aSideDir; + } + + Handle(Geom_Surface) aSurface = BRep_Tool::Surface( aFace ); + + Standard_Real aU = 0.0, aV = 0.0; + GeomLib_Tool::Parameters( aSurface, aMiddlePnt, Precision::Confusion(), aU, aV ); + + gp_Dir aNorm; + if ( GeomLib::NormEstim( aSurface, gp_Pnt2d( aU, aV ), Precision::Confusion(), aNorm ) <= 1 ) + { + aFaceN2 = aFace.Orientation() == TopAbs_REVERSED ? -aNorm : aNorm; } } - gp_Pln aChoosenPlane = anActiveView - ? SelectPlaneForProjection( aSeqOfPlanes, anActiveView->getViewPort()->getView() ) - : aSeqOfPlanes.First(); + gp_Pln aPln; + PositionLength( aBnd, aFaceN1, aFaceN2, aFaceS1, aFaceS2, aPnt1, aPnt2, aPln ); + + /* --------------------------------------------------------- * + * construct the dimension for the best selected position + * --------------------------------------------------------- */ - /* ------------------------------------------------------------------------------------ * - * construct interactive presentation * - * ------------------------------------------------------------------------------------ */ + Handle(AIS_LengthDimension) aDimension = new AIS_LengthDimension( anEdge, aPln ); + + aDimension->SetFlyout( Settings.DefaultFlyout ); - Handle(AIS_LengthDimension) aDimension = new AIS_LengthDimension( anEdge, aChoosenPlane ); if ( !aDimension->IsValid() ) { return NULL; @@ -174,45 +216,155 @@ Handle(AIS_LengthDimension) MeasureGUI_DimensionCreateTool::LengthOnEdge( const // function : LengthByPoints // purpose : //================================================================================= -Handle(AIS_LengthDimension) MeasureGUI_DimensionCreateTool::LengthByPoints( const GEOM::GeomObjPtr& thePoint1, - const GEOM::GeomObjPtr& thePoint2 ) +Handle(AIS_LengthDimension) MeasureGUI_DimensionCreateTool::LengthByPoints( const GEOM::GeomObjPtr& theMeasuredObj1, + const GEOM::GeomObjPtr& theMeasuredObj2 ) const { - TopoDS_Shape aFirstSh; - if ( !GEOMBase::GetShape( thePoint1.operator ->(), aFirstSh ) ) + /* ---------------------------------------------------------------- * + * get the edge and parent shape * + * ---------------------------------------------------------------- */ + + TopoDS_Shape aMeasuredShape1; + TopoDS_Shape aMeasuredShape2; + TopoDS_Shape aMainShape; + + if ( !GEOMBase::GetShape( theMeasuredObj1.operator ->(), aMeasuredShape1 ) ) { return NULL; } - TopoDS_Shape aSecondSh; - if ( !GEOMBase::GetShape( thePoint2.operator ->(), aSecondSh ) ) + if ( !GEOMBase::GetShape( theMeasuredObj2.operator ->(), aMeasuredShape2 ) ) { return NULL; } - TopoDS_Vertex aFirstVertex = TopoDS::Vertex( aFirstSh ); - TopoDS_Vertex aSecondVertex = TopoDS::Vertex( aSecondSh ); + if ( !GEOMBase::GetShape( GetMainShape( theMeasuredObj1 ).get(), aMainShape ) ) + { + return NULL; + } - gp_Pnt aPnt1 = BRep_Tool::Pnt( aFirstVertex ); - gp_Pnt aPnt2 = BRep_Tool::Pnt( aSecondVertex ); + /* ------------------------------------------------- */ + /* check the input geometry */ + /* ------------------------------------------------- */ + + TopoDS_Vertex aVertex1 = TopoDS::Vertex( aMeasuredShape1 ); + TopoDS_Vertex aVertex2 = TopoDS::Vertex( aMeasuredShape2 ); + + gp_Pnt aPnt1 = BRep_Tool::Pnt( aVertex1 ); + gp_Pnt aPnt2 = BRep_Tool::Pnt( aVertex2 ); + if ( aPnt1.Distance( aPnt2 ) <= Precision::Confusion() ) + { + return NULL; + } + + /* ------------------------- * + * position the dimension + * ------------------------- */ - gp_Vec aDir( aPnt1, aPnt2 ); - gp_Dir aUnitVecs[] = { gp::DZ(), gp::DY(), gp::DX() }; - int aUnitVecIt = 0; - for ( ; aUnitVecIt < 3; ++aUnitVecIt ) + Bnd_Box aBnd; + BRepBndLib::AddClose( aMainShape, aBnd ); + + // check whether the points share same edge + TopExp_Explorer anEdgeExp( aMainShape, TopAbs_EDGE, TopAbs_EDGE ); + for ( ; anEdgeExp.More(); anEdgeExp.Next() ) { - if ( aDir.Dot( aUnitVecs[aUnitVecIt] ) <= 0.5 ) + TopoDS_Vertex anEdgeV1; + TopoDS_Vertex anEdgeV2; + TopExp::Vertices( TopoDS::Edge( anEdgeExp.Current() ), anEdgeV1, anEdgeV2 ); + gp_Pnt anEdgePnt1 = BRep_Tool::Pnt( anEdgeV1 ); + gp_Pnt anEdgePnt2 = BRep_Tool::Pnt( anEdgeV2 ); + + if ( aPnt1.Distance( anEdgePnt1 ) <= Precision::Confusion() ) { - break; + if ( aPnt2.Distance( anEdgePnt2 ) <= Precision::Confusion() ) + { + break; + } + } + + if ( aPnt2.Distance( anEdgePnt1 ) <= Precision::Confusion() ) + { + if ( aPnt1.Distance( anEdgePnt2 ) <= Precision::Confusion() ) + { + break; + } } } - gp_Pnt aPnt3 = aPnt2.Translated( aUnitVecs[aUnitVecIt] ); + gp_Vec aFaceN1( gp::Origin(), gp::Origin() ); + gp_Vec aFaceN2( gp::Origin(), gp::Origin() ); + gp_Vec aFaceS1( gp::Origin(), gp::Origin() ); + gp_Vec aFaceS2( gp::Origin(), gp::Origin() ); - GC_MakePlane aMkPlane( aPnt1, aPnt2, aPnt3 ); - Handle(Geom_Plane) aPlane = aMkPlane.Value(); + // have shared edge + if ( anEdgeExp.More() ) + { + TopoDS_Edge anEdge = TopoDS::Edge( anEdgeExp.Current() ); + TopTools_IndexedDataMapOfShapeListOfShape aRelationMap; + TopExp::MapShapesAndAncestors( aMainShape, TopAbs_EDGE, TopAbs_FACE, aRelationMap ); + const TopTools_ListOfShape& aRelatedFaces = aRelationMap.FindFromKey( anEdge ); - // check whether it is possible to compute valid dimension - Handle(AIS_LengthDimension) aDimension = new AIS_LengthDimension ( aFirstVertex, aSecondVertex, aPlane->Pln() ); + gp_Pnt aMiddlePnt = gp_Pnt( ( aPnt1.XYZ() + aPnt2.XYZ() ) * 0.5 ); + + TopTools_ListIteratorOfListOfShape aFaceIt( aRelatedFaces ); + + // get face side directions + if ( aFaceIt.More() ) + { + TopoDS_Face aFace = TopoDS::Face( aFaceIt.Value() ); + + gp_Dir aSideDir; + if ( GetFaceSide( aFace, anEdge, aSideDir ) ) + { + aFaceS1 = aSideDir; + } + + Handle(Geom_Surface) aSurface = BRep_Tool::Surface( aFace ); + + Standard_Real aU = 0.0, aV = 0.0; + GeomLib_Tool::Parameters( aSurface, aMiddlePnt, Precision::Confusion(), aU, aV ); + + gp_Dir aNorm; + if ( GeomLib::NormEstim( aSurface, gp_Pnt2d( aU, aV ), Precision::Confusion(), aNorm ) <= 1 ) + { + aFaceN1 = aFace.Orientation() == TopAbs_REVERSED ? -aNorm : aNorm; + } + + aFaceIt.Next(); + } + + if ( aFaceIt.More() ) + { + TopoDS_Face aFace = TopoDS::Face( aFaceIt.Value() ); + + gp_Dir aSideDir; + if ( GetFaceSide( aFace, anEdge, aSideDir ) ) + { + aFaceS2 = aSideDir; + } + + Handle(Geom_Surface) aSurface = BRep_Tool::Surface( aFace ); + + Standard_Real aU = 0.0, aV = 0.0; + GeomLib_Tool::Parameters( aSurface, aMiddlePnt, Precision::Confusion(), aU, aV ); + + gp_Dir aNorm; + if ( GeomLib::NormEstim( aSurface, gp_Pnt2d( aU, aV ), Precision::Confusion(), aNorm ) <= 1 ) + { + aFaceN2 = aFace.Orientation() == TopAbs_REVERSED ? -aNorm : aNorm; + } + } + } + + gp_Pln aPln; + PositionLength( aBnd, aFaceN1, aFaceN2, aFaceS1, aFaceS2, aPnt1, aPnt2, aPln ); + + /* --------------------------------------------------------- * + * construct the dimension for the best selected position + * --------------------------------------------------------- */ + + Handle(AIS_LengthDimension) aDimension = new AIS_LengthDimension( aPnt1, aPnt2, aPln ); + + aDimension->SetFlyout( Settings.DefaultFlyout ); if ( !aDimension->IsValid() ) { @@ -227,7 +379,7 @@ Handle(AIS_LengthDimension) MeasureGUI_DimensionCreateTool::LengthByPoints( cons // purpose : //================================================================================= Handle(AIS_LengthDimension) MeasureGUI_DimensionCreateTool::LengthByParallelEdges( const GEOM::GeomObjPtr& theEdge1, - const GEOM::GeomObjPtr& theEdge2 ) + const GEOM::GeomObjPtr& theEdge2 ) const { TopoDS_Shape aFirstSh; if ( !GEOMBase::GetShape( theEdge1.operator ->(), aFirstSh ) ) @@ -258,6 +410,8 @@ Handle(AIS_LengthDimension) MeasureGUI_DimensionCreateTool::LengthByParallelEdge // check whether it is possible to compute valid dimension Handle(AIS_LengthDimension) aDimension = new AIS_LengthDimension ( aFirstEdge, aSecondEdge, aPlane->Pln() ); + aDimension->SetFlyout( Settings.DefaultFlyout ); + if ( !aDimension->IsValid() ) { return NULL; @@ -270,23 +424,250 @@ Handle(AIS_LengthDimension) MeasureGUI_DimensionCreateTool::LengthByParallelEdge // function : Diameter // purpose : //================================================================================= -Handle(AIS_DiameterDimension) MeasureGUI_DimensionCreateTool::Diameter( const GEOM::GeomObjPtr& theShape ) +Handle(AIS_DiameterDimension) MeasureGUI_DimensionCreateTool::Diameter( const GEOM::GeomObjPtr& theMeasuredObj ) const { - TopoDS_Shape aShape; - if ( !GEOMBase::GetShape( theShape.operator ->(), aShape ) ) + /* ------------------------------------------------ * + * get the shape and its parent (if exist) * + * ------------------------------------------------ */ + + TopoDS_Shape aMeasuredShape; + TopoDS_Shape aMainShape; + if ( !GEOMBase::GetShape( theMeasuredObj.operator ->(), aMeasuredShape ) ) { return NULL; } - if ( aShape.ShapeType() != TopAbs_EDGE && - aShape.ShapeType() != TopAbs_FACE && - aShape.ShapeType() != TopAbs_WIRE ) + if ( !GEOMBase::GetShape( GetMainShape( theMeasuredObj ).get(), aMainShape ) ) { return NULL; } - // check whether it is possible to compute dimension on the passed geometry - Handle(AIS_DiameterDimension) aDimension = new AIS_DiameterDimension( aShape ); + Bnd_Box aBnd; + BRepBndLib::AddClose( aMainShape, aBnd ); + + /* ------------------------------------------------ * + * get the dimension construction arguments * + * ------------------------------------------------ */ + + Handle(Geom_Circle) aCircle; + + Standard_Real aPmin = 0, aPmax = 2 * M_PI; + + gp_Vec aFaceN( gp_Pnt(0.0, 0.0, 0.0), gp_Pnt(0.0, 0.0, 0.0) ); + + switch ( aMeasuredShape.ShapeType() ) + { + case TopAbs_FACE: + { + TopoDS_Face aMeasuredFace = TopoDS::Face(aMeasuredShape); + + BRepAdaptor_Surface aSurf( aMeasuredFace ); + + Standard_Real aVmin = aSurf.FirstVParameter(); + Standard_Real aVmax = aSurf.LastVParameter(); + + // get arguments of closed sphere + if ( aSurf.GetType() == GeomAbs_Sphere ) + { + if ( !aSurf.IsUClosed() || !aSurf.IsVClosed() ) + { + return NULL; + } + + // take circle in XOY plane from sphere + gp_Sphere aSphere = aSurf.Sphere(); + gp_Ax2 anAx2 = gp_Ax2( aSphere.Location(), gp::DZ() ); + aCircle = new Geom_Circle( anAx2, aSphere.Radius() ); + break; + } + + + // get arguments of closed torus + if ( aSurf.GetType() == GeomAbs_Torus ) + { + if ( !aSurf.IsUClosed() || !aSurf.IsVClosed() ) + { + return NULL; + } + + gp_Torus aTorus = aSurf.Torus(); + gp_Ax2 anAx2 = aTorus.Position().Ax2(); + aCircle = new Geom_Circle( anAx2, aTorus.MinorRadius() ); + break; + } + + // get arguments of closed cone + if ( aSurf.GetType() == GeomAbs_Cone ) + { + if ( !aSurf.IsUClosed() || !aSurf.IsVClosed() ) + { + return NULL; + } + + gp_Cone aCone = aSurf.Cone(); + gp_Ax2 anAx2 = aCone.Position().Ax2(); + aCircle = new Geom_Circle( anAx2, aCone.RefRadius() ); + + aFaceN = aCone.SemiAngle() > 0.0 + ? anAx2.Axis().Direction() + : -anAx2.Axis().Direction(); + break; + } + + // get arguments of closed/opened cylinder + if ( aSurf.GetType() == GeomAbs_Cylinder ) + { + Handle(Geom_Curve) aCurve = aSurf.Surface().Surface()->VIso( (aVmax + aVmin) * 0.5 ); + + if ( aCurve->IsKind( STANDARD_TYPE( Geom_Circle ) ) ) + { + aPmin = aSurf.FirstUParameter(); + aPmax = aSurf.LastUParameter(); + aCircle = Handle(Geom_Circle)::DownCast( aCurve ); + } + else if ( aCurve->IsKind( STANDARD_TYPE( Geom_TrimmedCurve ) ) ) + { + Handle(Geom_TrimmedCurve) aTrimmedCurve = Handle(Geom_TrimmedCurve)::DownCast( aCurve ); + aPmin = aTrimmedCurve->FirstParameter(); + aPmax = aTrimmedCurve->LastParameter(); + + aCircle = Handle(Geom_Circle)::DownCast( aTrimmedCurve ); + } + + break; + } + + // face containing edge? + TopExp_Explorer anExp( aMeasuredShape, TopAbs_EDGE ); + if ( !anExp.More() ) + { + return NULL; + } + + TopoDS_Shape anExpEdge = anExp.Current(); + if ( anExpEdge.IsNull() ) + { + return NULL; + } + + // only a single edge is expected + anExp.Next(); + if ( anExp.More() ) + { + return NULL; + } + + // do not break, go to edge checking + aMeasuredShape = anExpEdge; + } + + case TopAbs_EDGE: + { + TopoDS_Edge aMeasureEdge = TopoDS::Edge( aMeasuredShape ); + + BRepAdaptor_Curve aCurve(aMeasureEdge); + + if ( aCurve.GetType() != GeomAbs_Circle ) + { + return NULL; + } + + aPmin = aCurve.FirstParameter(); + aPmax = aCurve.LastParameter(); + + aCircle = new Geom_Circle( aCurve.Circle() ); + + // check if there is an parent face containing the edge + TopTools_IndexedDataMapOfShapeListOfShape aShapeMap; + TopExp::MapShapesAndAncestors( aMainShape, TopAbs_EDGE, TopAbs_FACE, aShapeMap ); + const TopTools_ListOfShape& aFaces = aShapeMap.FindFromKey( aMeasureEdge ); + + TopTools_ListIteratorOfListOfShape aFaceIt( aFaces ); + for ( ; aFaceIt.More(); aFaceIt.Next() ) + { + Handle(Geom_Surface) aSurface = BRep_Tool::Surface( TopoDS::Face( aFaceIt.Value() ) ); + + gp_Pnt aCircCenter = aCircle->Circ().Location(); + Standard_Real aCircU = 0.0, aCircV = 0.0; + GeomLib_Tool::Parameters( aSurface, aCircCenter, Precision::Confusion(), aCircU, aCircV ); + + gp_Dir aNorm; + if ( GeomLib::NormEstim( aSurface, gp_Pnt2d( aCircU, aCircV ), Precision::Confusion(), aNorm ) > 1 ) + { + break; + } + + if ( aNorm.Angle( aCircle->Circ().Axis().Direction() ) > M_PI * 0.25 ) + { + continue; + } + + aFaceN = gp_Vec( aNorm ); + } + } + break; + } + + if ( aCircle.IsNull() ) + { + return NULL; + } + + ElCLib::AdjustPeriodic( 0.0, M_PI * 2, Precision::PConfusion(), aPmin, aPmax ); + + /* ------------------------- * + * position the dimension + * ------------------------- */ + + gp_Pnt aPnt1; + gp_Pnt aPnt2; + gp_Pln aPln; + + // diameter for closed circle + if ( Abs( ( aPmax - aPmin ) - M_PI * 2 ) <= Precision::PConfusion() ) + { + PositionDiameter( aBnd, aFaceN, aCircle->Circ(), aPnt1, aPnt2, aPln ); + } + // diameter for half-closed circle + else if ( Abs( aPmax - aPmin ) > M_PI ) + { + Standard_Real anAnchor = aPmin + ( ( aPmax - aPmin ) - M_PI ) * 0.5; + + PositionDiameter( aBnd, aFaceN, aCircle->Circ(), anAnchor, aPln ); + + aPnt1 = ElCLib::Value( anAnchor, aCircle->Circ() ); + aPnt2 = ElCLib::Value( anAnchor + M_PI, aCircle->Circ() ); + } + // diameter for less than half-closed circle + else + { + Standard_Real anAnchor = aPmin + ( aPmax - aPmin ) * 0.5; + + PositionDiameter( aBnd, aFaceN, aCircle->Circ(), anAnchor, aPln ); + + aPnt1 = ElCLib::Value( anAnchor, aCircle->Circ() ); + aPnt2 = ElCLib::Value( anAnchor + M_PI, aCircle->Circ() ); + } + + /* --------------------------------------------------------- * + * construct the dimension for the best selected position + * --------------------------------------------------------- */ + + gp_Pnt aCircP = aCircle->Circ().Location(); + gp_Dir aCircN = aCircle->Circ().Axis().Direction(); + gp_Dir aCircX = gce_MakeDir( aPnt1, aPnt2 ); + Standard_Real aCircR = aCircle->Circ().Radius(); + + // construct closed circle as base for the diameter dimension + gp_Circ aRuledCirc = gce_MakeCirc( gp_Ax2( aCircP, aCircN, aCircX ), aCircR ); + + Handle(AIS_DiameterDimension) aDimension = new AIS_DiameterDimension( aRuledCirc, aPln ); + + // if flyout is extended in tangent direction to circle, the default flyout value is used + // if flyout is extended in plane of circle, the zero flyout value is choosen initially + Standard_Real aFlyout = aCircN.IsParallel( aPln.Axis().Direction(), Precision::Angular() ) ? 0.0 : Settings.DefaultFlyout; + + aDimension->SetFlyout(aFlyout); if ( !aDimension->IsValid() ) { @@ -301,7 +682,7 @@ Handle(AIS_DiameterDimension) MeasureGUI_DimensionCreateTool::Diameter( const GE // purpose : //================================================================================= Handle(AIS_AngleDimension) MeasureGUI_DimensionCreateTool::AngleByTwoEdges( const GEOM::GeomObjPtr& theEdge1, - const GEOM::GeomObjPtr& theEdge2 ) + const GEOM::GeomObjPtr& theEdge2 ) const { /* --------------------------------------------------- */ /* get construction and parent shapes */ @@ -358,6 +739,8 @@ Handle(AIS_AngleDimension) MeasureGUI_DimensionCreateTool::AngleByTwoEdges( cons aDimension = new AIS_AngleDimension( aSecondPoint, aCenterPoint, aFirstPoint ); } + aDimension->SetFlyout( Settings.DefaultFlyout ); + return aDimension; } @@ -367,7 +750,7 @@ Handle(AIS_AngleDimension) MeasureGUI_DimensionCreateTool::AngleByTwoEdges( cons //================================================================================= Handle(AIS_AngleDimension) MeasureGUI_DimensionCreateTool::AngleByThreePoints( const GEOM::GeomObjPtr& thePoint1, const GEOM::GeomObjPtr& thePoint2, - const GEOM::GeomObjPtr& thePoint3 ) + const GEOM::GeomObjPtr& thePoint3 ) const { TopoDS_Shape aFirstSh; if ( !GEOMBase::GetShape( thePoint1.operator ->(), aFirstSh ) ) @@ -407,73 +790,248 @@ Handle(AIS_AngleDimension) MeasureGUI_DimensionCreateTool::AngleByThreePoints( c } //================================================================================= -// function : ChooseLengthFlyoutsFromShape -// purpose : +// function : PositionLength +// purpose : The method provides preliminary positioning algorithm for +// for length dimensions measuring the length between two points. +// Parameters: +// theBnd [in] - the bounding box of the main shape +// theFaceN1 [in] - the normal to a first face of edge length (if any) +// theFaceN2 [in] - the normal to a second face of edge length (if any) +// theFaceS1 [in] - the side vector from a first face of edge length (if any) +// theFaceS2 [in] - the side vector from a second face of edge length (if any) +// thePnt1 [in] - the first measured point +// thePnt2 [in] - the last measured point +// The method selects flyout plane to best match the current +// view projection. If edge length is constructed, then the flyout +// can go in line with sides of faces, normal to the faces, or +// aligned to XOY, YOZ, ZOX planes. //================================================================================= -void MeasureGUI_DimensionCreateTool::ChooseLengthFlyoutsFromShape( TColgp_SequenceOfDir& theDirs, - const TopoDS_Vertex& theVertex1, - const TopoDS_Vertex& theVertex2, - const TopoDS_Shape& theShape ) +void MeasureGUI_DimensionCreateTool::PositionLength( const Bnd_Box& theBnd, + const gp_Vec& theFaceN1, + const gp_Vec& theFaceN2, + const gp_Vec& theFaceS1, + const gp_Vec& theFaceS2, + const gp_Pnt& thePnt1, + const gp_Pnt& thePnt2, + gp_Pln& thePln ) const { -} - -//================================================================================= -// function : ChooseLengthFlyoutsFromShape -// purpose : -//================================================================================= -void MeasureGUI_DimensionCreateTool::ChooseLengthFlyoutsFromShape( TColgp_SequenceOfDir& theDirs, - const TopoDS_Edge& theEdge, - const TopoDS_Shape& theShape ) -{ - TopTools_IndexedDataMapOfShapeListOfShape aRelationMap; - TopExp::MapShapesAndAncestors( theShape, TopAbs_EDGE, TopAbs_FACE, aRelationMap ); - const TopTools_ListOfShape& aRelatedFaces = aRelationMap.FindFromKey( theEdge ); - - // get face side directions - gp_Dir aSideDir; - if ( aRelatedFaces.Extent() > 0 && GetFaceSide( TopoDS::Face( aRelatedFaces.First() ), theEdge, aSideDir ) ) - { - theDirs.Append( aSideDir ); - } - if ( aRelatedFaces.Extent() > 1 && GetFaceSide( TopoDS::Face( aRelatedFaces.Last() ), theEdge, aSideDir ) ) - { - theDirs.Append( aSideDir ); - } + Standard_Boolean isFace1 = theFaceN1.Magnitude() > Precision::Confusion(); + Standard_Boolean isFace2 = theFaceN2.Magnitude() > Precision::Confusion(); + gp_Vec anAverageN( gp_Pnt(0.0, 0.0, 0.0), gp_Pnt(0.0, 0.0, 0.0) ); // get average direction in case of two non-sharp angled faces - if ( theDirs.Length() == 2 ) + if ( isFace1 && isFace2 ) { - const gp_Dir& aDir1 = theDirs.First(); - const gp_Dir& aDir2 = theDirs.Last(); - Standard_Boolean isSame = aDir1.IsParallel( aDir2, Precision::Angular() ); + Standard_Boolean isSame = theFaceN1.IsParallel( theFaceN2, Precision::Angular() ); if ( !isSame ) { - gp_Dir aReferenceDir = aDir1 ^ aDir2; + gp_Dir aReferenceDir = theFaceN1 ^ theFaceN2; // compute angle between face sides [0 - 2PI] - Standard_Real aDirAngle = aDir1.AngleWithRef( aDir2, aReferenceDir ); + Standard_Real aDirAngle = theFaceN1.AngleWithRef( theFaceN2, aReferenceDir ); if ( aDirAngle < 0 ) { aDirAngle = ( M_PI * 2.0 ) - aDirAngle; } - // non-sharp angle, use averaged direction + // non-sharp angle, use averaged directio + if ( aDirAngle > M_PI * 0.5 ) + { + anAverageN = theFaceN1 + theFaceN2; + } + if ( aDirAngle > M_PI ) { - theDirs.Clear(); - theDirs.Append( aDir1.Rotated( gp_Ax1( gp::Origin(), aReferenceDir ), aDirAngle * 0.5 ) ); + isFace1 = Standard_False; + isFace2 = Standard_False; } } } + + Standard_Boolean isAverage = anAverageN.Magnitude() > Precision::Confusion(); + + SeqOfDirs aFlyoutDirs; + if ( isFace1 ) + { + aFlyoutDirs.Append( theFaceN1 ); + aFlyoutDirs.Append( theFaceS1 ); + } + if ( isFace2 ) + { + aFlyoutDirs.Append( theFaceN2 ); + aFlyoutDirs.Append( theFaceS2 ); + } + if ( isAverage ) + { + aFlyoutDirs.Append( anAverageN ); + } + + ChooseLengthFlyoutsFromBnd( aFlyoutDirs, thePnt1, thePnt2, theBnd ); + + if ( aFlyoutDirs.IsEmpty() ) + { + return; + } + + gp_Dir aPointDir = gce_MakeDir( thePnt1, thePnt2 ); + + // make planes for dimension presentation according to flyout directions + SeqOfPlanes aSeqOfPlanes; + for ( Standard_Integer aFlyoutIt = 1; aFlyoutIt <= aFlyoutDirs.Length(); ++aFlyoutIt ) + { + gp_Pln aPlane( thePnt1, aPointDir ^ aFlyoutDirs.Value( aFlyoutIt ) ); + aSeqOfPlanes.Append( aPlane ); + } + + Handle(V3d_View) aView = Settings.ActiveView; + + thePln = !aView.IsNull() + ? SelectPlaneForProjection( aSeqOfPlanes, aView ) + : aSeqOfPlanes.First(); +} + +//================================================================================= +// function : PositionDiameter +// purpose : The method provides preliminary positioning algorithm for +// for diameter dimensions measuring the circle. +// Parameters: +// theBnd [in] - the bounding box of the shape +// theFaceN [in] - the circle face normal (can be void) +// theCirc [in] - the measured circle +// thePnt1 [out] - first dimension point +// thePnt2 [out] - second dimension point +// thePln [out] - dimension flyout plane +// The method selects points on the circle for diameter dimension and +// flyout plane to best match the current view projection (if any) +// The points are aligned to XOY, YOZ, ZOX planes. +// The flyout takes into account bounding box of main shape of face normal +// vector. The flyouts tangetial to the circle plane are directed in +// accordance with the face normal (if not-null), otherwise the flyouts +// are turned to direct to the closest border of bounding box. +//================================================================================= +void MeasureGUI_DimensionCreateTool::PositionDiameter( const Bnd_Box& theBnd, + const gp_Vec& theFaceN, + const gp_Circ& theCirc, + gp_Pnt& thePnt1, + gp_Pnt& thePnt2, + gp_Pln& thePln ) const +{ + // plane associated with custom data + struct PlaneAndSegment + { + PlaneAndSegment() {} + PlaneAndSegment(const gp_Pln& thePlane, const Segment& theSegment) : pln(thePlane), seg(theSegment) {} + operator gp_Pln () const { return pln; } + operator Segment () const { return seg; } + gp_Pln pln; + Segment seg; + }; + typedef NCollection_Sequence SeqOfPlnsAndSegments; + + // select list of measured segments aligned to projection planes + SeqOfDirs aProjectionDirs; + aProjectionDirs.Append( gp::DX() ); + aProjectionDirs.Append( gp::DY() ); + aProjectionDirs.Append( gp::DZ() ); + + SeqOfSegments aMeasureSegments = GetInPlaneSegments( theCirc, aProjectionDirs ); + + SeqOfPlnsAndSegments aSelectedPlanes; + + // select in-circle-plane direction for flyout closest to border of bounding box + for ( Standard_Integer aSegmentIt = 1; aSegmentIt <= aMeasureSegments.Length(); ++aSegmentIt ) + { + const Segment& aSegment = aMeasureSegments.Value(aSegmentIt); + + Standard_Real anAnchor = ElCLib::Parameter( theCirc, aSegment.First ); + + gp_Pln aSelectedPlane; + + PositionDiameter( theBnd, theFaceN, theCirc, anAnchor, aSelectedPlane ); + + aSelectedPlanes.Append( PlaneAndSegment( aSelectedPlane, aSegment ) ); + } + + Handle(V3d_View) aView = Settings.ActiveView; + + PlaneAndSegment aChoosenParams = !aView.IsNull() + ? SelectPlaneForProjection( aSelectedPlanes, aView ) + : aSelectedPlanes.First(); + + thePnt1 = ((Segment)aChoosenParams).First; + thePnt2 = ((Segment)aChoosenParams).Last; + thePln = ((gp_Pln)aChoosenParams); +} + +//================================================================================= +// function : PositionDiameter +// purpose : The method provides preliminary positioning algorithm for +// for diameter dimensions measuring the circle. The diameter +// dimension is bound at anchor point on the circle. +// Parameters: +// theBnd [in] the bounding box of the shape +// theFaceN [in] - the circle face normal (can be void) +// theCirc [in] - the measured circle +// theAnchorAt [in] - the anchoring parameter +// thePln [out] - dimension flyout plane +// The method selects flyout plane to best match the current +// view projection. The flyout plane can be parallel to circle, +// or tangent to it. +//================================================================================= +void MeasureGUI_DimensionCreateTool::PositionDiameter( const Bnd_Box& theBnd, + const gp_Vec& theFaceN, + const gp_Circ& theCirc, + const Standard_Real& theAnchorAt, + gp_Pln& thePln ) const +{ + gp_Dir aCircN = theCirc.Axis().Direction(); + gp_Pnt aCircP = theCirc.Location(); + + // select tangent direction for flyout closest to border of bounding box + gp_Dir aSelectedTanDir; + if ( theFaceN.Magnitude() < Precision::Confusion() ) + { + SeqOfDirs aTangentDirs; + aTangentDirs.Append( aCircN ); + aTangentDirs.Append( -aCircN ); + aSelectedTanDir = ChooseDirFromBnd( aTangentDirs, aCircP, theBnd ); + } + else + { + aSelectedTanDir = gp_Dir( theFaceN ); + } + + gp_Pnt aPnt1 = ElCLib::Value( theAnchorAt, theCirc ); + gp_Pnt aPnt2 = ElCLib::Value( theAnchorAt + M_PI, theCirc ); + + gp_Dir aSegmentDir = gce_MakeDir( aPnt1, aPnt2 ); + + SeqOfDirs aSegmentDirs; + aSegmentDirs.Append( aCircN ^ aSegmentDir ); + aSegmentDirs.Append( -aCircN ^ aSegmentDir ); + gp_Dir aSelectedSegDir = ChooseDirFromBnd( aSegmentDirs, aCircP, theBnd ); + + gp_Pln aTangentFlyout( aCircP, aSegmentDir ^ aSelectedTanDir ); + gp_Pln aCoplanarFlyout( aCircP, aSegmentDir ^ aSelectedSegDir ); + + SeqOfPlanes aSelectedPlanes; + aSelectedPlanes.Append( aTangentFlyout ); + aSelectedPlanes.Append( aCoplanarFlyout ); + + Handle(V3d_View) aView = Settings.ActiveView; + + thePln = !aView.IsNull() + ? SelectPlaneForProjection( aSelectedPlanes, aView ) + : aSelectedPlanes.First(); } //================================================================================= // function : ChooseLengthFlyoutsFromBnd // purpose : //================================================================================= -void MeasureGUI_DimensionCreateTool::ChooseLengthFlyoutsFromBnd( TColgp_SequenceOfDir& theDirs, +void MeasureGUI_DimensionCreateTool::ChooseLengthFlyoutsFromBnd( SeqOfDirs& theDirs, const gp_Pnt& thePnt1, const gp_Pnt& thePnt2, - const Bnd_Box& theBnd ) + const Bnd_Box& theBnd ) const { // compose a list of axis-aligned planes for lying-in flyouts NCollection_Sequence anAAPlanes; @@ -526,12 +1084,54 @@ void MeasureGUI_DimensionCreateTool::ChooseLengthFlyoutsFromBnd( TColgp_Sequence } } +//================================================================================= +// function : ChooseDirFromBnd +// purpose : The method chooses the best direction from the passed list of +// directions, which is closest to the bounding box border. +// Parameters: +// theCandidates [in] the list of candidate directions +// thePos [in] the position from where the directions are traced +// theBnd [in] the bounding box of main shape +//================================================================================= +gp_Dir MeasureGUI_DimensionCreateTool::ChooseDirFromBnd( const SeqOfDirs& theCandidates, + const gp_Pnt& thePos, + const Bnd_Box& theBnd ) const +{ + gp_Dir aBestDir; + + Standard_Real aBestDistance = RealLast(); + + SeqOfDirs::Iterator anIt( theCandidates ); + for ( ; anIt.More(); anIt.Next() ) + { + const gp_Dir& aDir = anIt.Value(); + + gp_Ax3 aFlyoutSpace( thePos, aDir ); + + gp_Trsf aRelativeTransform; + aRelativeTransform.SetTransformation( gp_Ax3(), aFlyoutSpace ); + Bnd_Box aRelativeBounds = theBnd.Transformed( aRelativeTransform ); + + Standard_Real aXmin, aXmax, aYmin, aYmax, aZmin, aZmax; + aRelativeBounds.Get( aXmin, aYmin, aZmin, aXmax, aYmax, aZmax ); + + if ( aYmax < aBestDistance ) + { + aBestDir = aDir; + aBestDistance = aYmax; + } + } + + return aBestDir; +} + //================================================================================= // function : SelectPlaneForProjection // purpose : Select best matching plane in current view projection //================================================================================= -gp_Pln MeasureGUI_DimensionCreateTool::SelectPlaneForProjection( const NCollection_Sequence& thePlanes, - const Handle(V3d_View)& theView ) +template +TPlane MeasureGUI_DimensionCreateTool::SelectPlaneForProjection( const NCollection_Sequence& thePlanes, + const Handle(V3d_View)& theView ) const { Quantity_Parameter U[3]; Quantity_Parameter N[3]; @@ -541,15 +1141,15 @@ gp_Pln MeasureGUI_DimensionCreateTool::SelectPlaneForProjection( const NCollecti gp_Dir aViewN( (Standard_Real)N[0], (Standard_Real)N[1], (Standard_Real)N[2] ); gp_Dir aViewU( (Standard_Real)U[0], (Standard_Real)U[1], (Standard_Real)U[2] ); - gp_Pln aBestPlane = thePlanes.First(); + TPlane aBestPlane = thePlanes.First(); Standard_Real aBestDotProduct = RealFirst(); for ( Standard_Integer aPlnIt = 1; aPlnIt <= thePlanes.Length(); ++aPlnIt ) { - const gp_Pln& aPlane = thePlanes.Value( aPlnIt ); + const TPlane& aPlane = thePlanes.Value( aPlnIt ); - Standard_Real aDotProduct = Abs( aPlane.Axis().Direction() * aViewN ); + Standard_Real aDotProduct = Abs( ((gp_Pln)aPlane).Axis().Direction() * aViewN ); // preferred plane is "view parallel" if ( aDotProduct <= aBestDotProduct ) @@ -569,7 +1169,7 @@ gp_Pln MeasureGUI_DimensionCreateTool::SelectPlaneForProjection( const NCollecti // function : GetMainShape // purpose : //================================================================================= -GEOM::GeomObjPtr MeasureGUI_DimensionCreateTool::GetMainShape( const GEOM::GeomObjPtr& theShape ) +GEOM::GeomObjPtr MeasureGUI_DimensionCreateTool::GetMainShape( const GEOM::GeomObjPtr& theShape ) const { // iterate over top-level objects to search for main shape GEOM::GeomObjPtr aMainShapeIt = theShape; @@ -584,7 +1184,7 @@ GEOM::GeomObjPtr MeasureGUI_DimensionCreateTool::GetMainShape( const GEOM::GeomO // function : GetFaceSide // purpose : //================================================================================= -bool MeasureGUI_DimensionCreateTool::GetFaceSide( const TopoDS_Face& theFace, const TopoDS_Edge& theEdge, gp_Dir& theDir ) +bool MeasureGUI_DimensionCreateTool::GetFaceSide( const TopoDS_Face& theFace, const TopoDS_Edge& theEdge, gp_Dir& theDir ) const { // get correctly oriented edge from main shape TopoDS_Edge anEdgeFromFace; @@ -648,3 +1248,44 @@ bool MeasureGUI_DimensionCreateTool::GetFaceSide( const TopoDS_Face& theFace, co theDir = gp_Dir( aTangent ) ^ aNorm; return true; } + +//================================================================================= +// function : GetInPlaneSegments +// purpose : The method finds segments crossing the passed circle, +// which lie in the passed planes. +// Parameters: +// theCirc [in] the circle to be crossed. +// thePlanes [in] the projection planes crossing the circle. +//================================================================================= +MeasureGUI_DimensionCreateTool::SeqOfSegments + MeasureGUI_DimensionCreateTool::GetInPlaneSegments( const gp_Circ& theCirc, + const SeqOfDirs& thePlanes ) const +{ + SeqOfSegments aResult; + + gp_Pnt aCircP = theCirc.Location(); + gp_Dir aCircN = theCirc.Axis().Direction(); + Standard_Real aCircR = theCirc.Radius(); + + SeqOfDirs::Iterator anIt( thePlanes ); + for ( ; anIt.More(); anIt.Next() ) + { + const gp_Dir& aDir = anIt.Value(); + + if ( aDir.IsParallel( aCircN, Precision::Angular() ) ) + { + continue; + } + + gp_Dir aIntDir = aDir ^ aCircN; + + gp_Pnt aPnt1 = gp_Pnt( aCircP.XYZ() - aIntDir.XYZ() * aCircR ); + gp_Pnt aPnt2 = gp_Pnt( aCircP.XYZ() + aIntDir.XYZ() * aCircR ); + Segment aSegment; + aSegment.First = aPnt1; + aSegment.Last = aPnt2; + aResult.Append( aSegment ); + } + + return aResult; +} diff --git a/src/MeasureGUI/MeasureGUI_DimensionCreateTool.h b/src/MeasureGUI/MeasureGUI_DimensionCreateTool.h index 978aaa915..8a396786c 100644 --- a/src/MeasureGUI/MeasureGUI_DimensionCreateTool.h +++ b/src/MeasureGUI/MeasureGUI_DimensionCreateTool.h @@ -47,60 +47,96 @@ //================================================================================= class MeasureGUI_DimensionCreateTool { + struct Segment + { + gp_Pnt First; + gp_Pnt Last; + }; + typedef NCollection_Sequence SeqOfDirs; + typedef NCollection_Sequence SeqOfPlanes; + typedef NCollection_Sequence SeqOfSegments; + public: - MeasureGUI_DimensionCreateTool( GeometryGUI* ); + MeasureGUI_DimensionCreateTool(); + + struct + { + Standard_Real DefaultFlyout; + Handle(V3d_View) ActiveView; + } Settings; /* construction methods */ public: - Handle(AIS_LengthDimension) LengthOnEdge( const GEOM::GeomObjPtr& ); + Handle(AIS_LengthDimension) LengthOnEdge( const GEOM::GeomObjPtr& ) const; Handle(AIS_LengthDimension) LengthByPoints( const GEOM::GeomObjPtr&, - const GEOM::GeomObjPtr& ); + const GEOM::GeomObjPtr& ) const; Handle(AIS_LengthDimension) LengthByParallelEdges( const GEOM::GeomObjPtr&, - const GEOM::GeomObjPtr& ); + const GEOM::GeomObjPtr& ) const; - Handle(AIS_DiameterDimension) Diameter( const GEOM::GeomObjPtr& ); + Handle(AIS_DiameterDimension) Diameter( const GEOM::GeomObjPtr& ) const; Handle(AIS_AngleDimension) AngleByTwoEdges( const GEOM::GeomObjPtr&, - const GEOM::GeomObjPtr& ); + const GEOM::GeomObjPtr& ) const; Handle(AIS_AngleDimension) AngleByThreePoints( const GEOM::GeomObjPtr&, const GEOM::GeomObjPtr&, - const GEOM::GeomObjPtr& ); + const GEOM::GeomObjPtr& ) const; + /* selecting flyout direction for length dimensions */ protected: - void ChooseLengthFlyoutsFromShape( TColgp_SequenceOfDir&, - const TopoDS_Vertex&, - const TopoDS_Vertex&, - const TopoDS_Shape& ); - - void ChooseLengthFlyoutsFromShape( TColgp_SequenceOfDir&, - const TopoDS_Edge&, - const TopoDS_Shape& ); + void ChooseLengthFlyoutsFromBnd( SeqOfDirs&, + const gp_Pnt&, + const gp_Pnt&, + const Bnd_Box& ) const; - void ChooseLengthFlyoutsFromBnd( TColgp_SequenceOfDir&, - const gp_Pnt&, - const gp_Pnt&, - const Bnd_Box& ); + gp_Dir ChooseDirFromBnd( const SeqOfDirs&, + const gp_Pnt&, + const Bnd_Box& ) const; /* selecting best flyout direction taking into account view projection */ protected: - gp_Pln SelectPlaneForProjection( const NCollection_Sequence&, - const Handle(V3d_View)& ); + template + TPlane SelectPlaneForProjection( const NCollection_Sequence&, + const Handle(V3d_View)& ) const; + +/* positioning */ +protected: + + void PositionLength( const Bnd_Box&, + const gp_Vec&, + const gp_Vec&, + const gp_Vec&, + const gp_Vec&, + const gp_Pnt&, + const gp_Pnt&, + gp_Pln& ) const; + + void PositionDiameter( const Bnd_Box&, + const gp_Vec&, + const gp_Circ&, + gp_Pnt&, + gp_Pnt&, + gp_Pln& ) const; + + void PositionDiameter( const Bnd_Box&, + const gp_Vec&, + const gp_Circ&, + const Standard_Real&, + gp_Pln& ) const; /* utility */ protected: - GEOM::GeomObjPtr GetMainShape( const GEOM::GeomObjPtr& ); + GEOM::GeomObjPtr GetMainShape( const GEOM::GeomObjPtr& ) const; bool GetFaceSide( const TopoDS_Face&, const TopoDS_Edge&, - gp_Dir& ); - -private: - GeometryGUI* myGeomGUI; + gp_Dir& ) const; + SeqOfSegments GetInPlaneSegments( const gp_Circ&, + const SeqOfDirs& ) const; }; #endif diff --git a/src/MeasureGUI/MeasureGUI_DimensionInteractor.cxx b/src/MeasureGUI/MeasureGUI_DimensionInteractor.cxx index 48b9dbda4..56b921a20 100644 --- a/src/MeasureGUI/MeasureGUI_DimensionInteractor.cxx +++ b/src/MeasureGUI/MeasureGUI_DimensionInteractor.cxx @@ -518,8 +518,9 @@ void MeasureGUI_DimensionInteractor::MoveText( const Handle(V3d_View)& theView, const gp_Dir& aPlaneN = aPlane.Axis().Direction(); - Prs3d_DimensionTextHorizontalPosition aHPos = myInteractedIO->DimensionAspect()->TextHorizontalPosition(); - Prs3d_DimensionTextVerticalPosition aVPos = myInteractedIO->DimensionAspect()->TextVerticalPosition(); + Prs3d_DimensionTextHorizontalPosition aHPos = myInteractedIO->DimensionAspect()->TextHorizontalPosition(); + Prs3d_DimensionTextVerticalPosition aVPos = myInteractedIO->DimensionAspect()->TextVerticalPosition(); + Prs3d_DimensionArrowOrientation aArrPos = myInteractedIO->DimensionAspect()->ArrowOrientation(); Standard_Real aHeight = myInteractedIO->DimensionAspect()->TextAspect()->Height() * 0.5; @@ -563,15 +564,18 @@ void MeasureGUI_DimensionInteractor::MoveText( const Handle(V3d_View)& theView, if ( aPosX < 0.0 ) { - aHPos = Prs3d_DTHP_Left; + aHPos = Prs3d_DTHP_Left; + aArrPos = Prs3d_DAO_External; } else if ( aPosX > aFirstPoint.Distance( aSecondPoint ) ) { - aHPos = Prs3d_DTHP_Right; + aHPos = Prs3d_DTHP_Right; + aArrPos = Prs3d_DAO_External; } else { - aHPos = Prs3d_DTHP_Center; + aHPos = Prs3d_DTHP_Center; + aArrPos = Prs3d_DAO_Fit; } if ( aPosY > aHeight ) @@ -636,16 +640,19 @@ void MeasureGUI_DimensionInteractor::MoveText( const Handle(V3d_View)& theView, if ( aPointAngle < -aDirAngle * 0.5 ) // outside of second dir { aHPos = Prs3d_DTHP_Left; + aArrPos = Prs3d_DAO_External; aPosY = Abs( aPointVec.Dot( aFirstDir ) ) - Abs( myInteractedIO->GetFlyout() ); } else if ( aPointAngle > aDirAngle * 0.5 ) // outside of first dir { aHPos = Prs3d_DTHP_Right; + aArrPos = Prs3d_DAO_External; aPosY = Abs( aPointVec.Dot( aSecondDir ) ) - Abs( myInteractedIO->GetFlyout() ); } else // between first and second direction { aHPos = Prs3d_DTHP_Center; + aArrPos = Prs3d_DAO_Fit; aPosY = Abs( aPointVec.Magnitude() ) - Abs( myInteractedIO->GetFlyout() ); } @@ -665,6 +672,7 @@ void MeasureGUI_DimensionInteractor::MoveText( const Handle(V3d_View)& theView, myInteractedIO->DimensionAspect()->SetTextVerticalPosition( aVPos ); myInteractedIO->DimensionAspect()->SetTextHorizontalPosition( aHPos ); + myInteractedIO->DimensionAspect()->SetArrowOrientation( aArrPos ); myInteractedIO->SetToUpdate(); myViewer->getAISContext()->Redisplay( myInteractedIO ); diff --git a/src/MeasureGUI/MeasureGUI_ManageDimensionsDlg.cxx b/src/MeasureGUI/MeasureGUI_ManageDimensionsDlg.cxx index 62b43b4e2..fb739349e 100644 --- a/src/MeasureGUI/MeasureGUI_ManageDimensionsDlg.cxx +++ b/src/MeasureGUI/MeasureGUI_ManageDimensionsDlg.cxx @@ -121,6 +121,9 @@ MeasureGUI_ManageDimensionsDlg::MeasureGUI_ManageDimensionsDlg( GeometryGUI* the connect( buttonApply(), SIGNAL( clicked() ), SLOT( ClickOnApply() ) ); connect( this, SIGNAL( finished( int ) ), SLOT( OnFinish() ) ); + + connect( myGeomGUI, SIGNAL( SignalDeactivateActiveDialog() ), this, SLOT( OnDeactivateThisDialog() ) ); + connect( myGeomGUI, SIGNAL( SignalCloseAllDialogs() ), this, SLOT( ClickOnCancel() ) ); myDimensionInteractor = new MeasureGUI_DimensionInteractor( theGUI, theParent ), @@ -130,6 +133,8 @@ MeasureGUI_ManageDimensionsDlg::MeasureGUI_ManageDimensionsDlg( GeometryGUI* the { myObjectSelector->PushButton1->click(); } + + setHelpFileName("managing_dimensions_page.html"); } //================================================================================= @@ -151,7 +156,7 @@ void MeasureGUI_ManageDimensionsDlg::StartSelection( const Selection theSelectio myCurrentSelection = theSelection; - if ( theSelection == Selection_Object && WarnUnsaved() ) + if ( theSelection == Selection_Object && AllowedToCancelChanges() ) { /* ----------------------------------------------- * * selection of object * @@ -703,7 +708,7 @@ void MeasureGUI_ManageDimensionsDlg::ClickOnOk() //================================================================================= void MeasureGUI_ManageDimensionsDlg::ClickOnCancel() { - if ( !WarnUnsaved() ) + if ( !AllowedToCancelChanges() ) { return; } @@ -781,6 +786,70 @@ void MeasureGUI_ManageDimensionsDlg::OnFinish() redisplay( myEditObject.get() ); } +//================================================================================= +// function : enterEvent() +// purpose : +//================================================================================= +void MeasureGUI_ManageDimensionsDlg::enterEvent( QEvent* ) +{ + if ( !mainFrame()->GroupConstructors->isEnabled() ) + { + OnActivateThisDialog(); + } +} + +//================================================================================= +// function : OnActivateThisDialog +// purpose : +//================================================================================= +void MeasureGUI_ManageDimensionsDlg::OnActivateThisDialog() +{ + disconnect( myGeomGUI, SIGNAL( SignalDeactivateActiveDialog() ), this, SLOT( OnDeactivateThisDialog() ) ); + GEOMBase_Skeleton::ActivateThisDialog(); + connect( myGeomGUI, SIGNAL( SignalDeactivateActiveDialog() ), this, SLOT( OnDeactivateThisDialog() ) ); + + SelectionIntoArgument( Selection_Object ); + + if ( myEditObject.isNull() ) + { + myObjectSelector->PushButton1->click(); + } +} + +//================================================================================= +// function : OnDeactivateThisDialog +// purpose : +//================================================================================= +void MeasureGUI_ManageDimensionsDlg::OnDeactivateThisDialog() +{ + if ( AllowedToSaveChanges() ) + { + ClickOnApply(); + } + + if ( !myEditObject.isNull() ) + { + SalomeApp_Study* aStudy = NULL; + SalomeApp_Application* anApp = myGeomGUI->getApp(); + if ( anApp ) + { + aStudy = dynamic_cast( anApp->activeStudy() ); + } + + if ( aStudy ) + { + aStudy->setObjectProperty( GEOM::sharedPropertiesId(), + myEditObject->GetStudyEntry(), + GEOM::propertyName( GEOM::Dimensions ), + QVariant() ); + } + + redisplay( myEditObject.get() ); + } + + GEOMBase_Skeleton::DeactivateActiveDialog(); +} + //================================================================================= // function : SetEditObject // purpose : @@ -967,26 +1036,26 @@ void MeasureGUI_ManageDimensionsDlg::PopulateList() } //================================================================================= -// function : WarnUnsaved +// function : HasUnsavedChanges // purpose : //================================================================================= -bool MeasureGUI_ManageDimensionsDlg::WarnUnsaved() +bool MeasureGUI_ManageDimensionsDlg::HasUnsavedChanges() { if ( myEditObject.isNull() ) { - return true; + return false; } SalomeApp_Application* anApp = myGeomGUI->getApp(); if ( !anApp ) { - return true; + return false; } SalomeApp_Study* aStudy = dynamic_cast( anApp->activeStudy() ); if ( !aStudy ) { - return true; + return false; } GEOMGUI_DimensionProperty aCurrentState = @@ -996,14 +1065,43 @@ bool MeasureGUI_ManageDimensionsDlg::WarnUnsaved() QVariant() ) .value(); - if ( aCurrentState == mySavedPropertyState ) + return aCurrentState != mySavedPropertyState; +} + +//================================================================================= +// function : AllowedToCancelChanges +// purpose : +//================================================================================= +bool MeasureGUI_ManageDimensionsDlg::AllowedToCancelChanges() +{ + if ( !HasUnsavedChanges() ) { return true; } int aResponse = SUIT_MessageBox::warning( this, tr( "WRN_TITLE_UNSAVED" ), - tr( "WRN_MSG_UNSAVED" ), + tr( "WRN_MSG_CHANGES_LOST" ), + QMessageBox::Ok, + QMessageBox::Cancel ); + + return aResponse == QMessageBox::Ok; +} + +//================================================================================= +// function : AllowedToSaveChanges +// purpose : +//================================================================================= +bool MeasureGUI_ManageDimensionsDlg::AllowedToSaveChanges() +{ + if ( !HasUnsavedChanges() ) + { + return false; + } + + int aResponse = SUIT_MessageBox::warning( this, + tr( "WRN_TITLE_UNSAVED" ), + tr( "WRN_MSG_CHANGES_SAVE" ), QMessageBox::Ok, QMessageBox::Cancel ); diff --git a/src/MeasureGUI/MeasureGUI_ManageDimensionsDlg.h b/src/MeasureGUI/MeasureGUI_ManageDimensionsDlg.h index 25d99b27f..91a28978f 100644 --- a/src/MeasureGUI/MeasureGUI_ManageDimensionsDlg.h +++ b/src/MeasureGUI/MeasureGUI_ManageDimensionsDlg.h @@ -79,12 +79,17 @@ protected slots: virtual void ClickOnCancel(); bool ClickOnApply(); void OnFinish(); + void OnActivateThisDialog(); + void OnDeactivateThisDialog(); /* Utils */ private: void SetEditObject( const GEOM::GeomObjPtr& ); void RestoreState(); void PopulateList(); + bool HasUnsavedChanges(); + bool AllowedToCancelChanges(); + bool AllowedToSaveChanges(); bool WarnUnsaved(); int IdFromItem( QTreeWidgetItem* theItem ); int IdFromPrs( const Handle(AIS_InteractiveObject)& theAIS ); @@ -93,6 +98,9 @@ private: void SelectInViewer( SOCC_Viewer* theViewer, const int theId ); void RedisplayObject(); +private: + void enterEvent(QEvent*); + private: enum GroupItems { -- 2.39.2