From 01816571514e819ba417e0512b92f12c885ab3c4 Mon Sep 17 00:00:00 2001 From: skv Date: Wed, 15 Apr 2015 14:04:22 +0300 Subject: [PATCH 01/45] 0023043: EDF 10596 GEOM: GetShapesOnShape does not return all shapes expected --- src/GEOMImpl/GEOMImpl_IShapesOperations.cxx | 24 ++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/src/GEOMImpl/GEOMImpl_IShapesOperations.cxx b/src/GEOMImpl/GEOMImpl_IShapesOperations.cxx index 2afb575f3..affb64b9c 100644 --- a/src/GEOMImpl/GEOMImpl_IShapesOperations.cxx +++ b/src/GEOMImpl/GEOMImpl_IShapesOperations.cxx @@ -2787,9 +2787,31 @@ Handle(TColStd_HSequenceOfInteger) return aSeqOfIDs; } + // Compute classification tolerance. + TopTools_IndexedMapOfShape aMapVtx; + Standard_Real aTol = Precision::Confusion(); + + TopExp::MapShapes(aShape, TopAbs_VERTEX, aMapVtx); + + Standard_Integer i; + Standard_Integer aNbVtx = aMapVtx.Extent(); + + for (i = 1; i <= aNbVtx; ++i) { + const TopoDS_Vertex aVtx = TopoDS::Vertex(aMapVtx.FindKey(i)); + const Standard_Real aVtxTol = BRep_Tool::Tolerance(aVtx); + + if (aTol < aVtxTol) { + aTol = aVtxTol; + } + } + + // Bound the tolerance value. + if (aTol > 0.0001) { + aTol = 0.0001; + } + // Call algo GEOMAlgo_FinderShapeOn2 aFinder; - Standard_Real aTol = 0.0001; // default value Handle(GEOMAlgo_ClsfSolid) aClsfSolid = new GEOMAlgo_ClsfSolid; aClsfSolid->SetShape(aCheckShape); From e7d9b213f14362fffd921faaba8bb316fc0c60b6 Mon Sep 17 00:00:00 2001 From: eap Date: Wed, 15 Apr 2015 21:22:36 +0300 Subject: [PATCH 02/45] Basic geompy methods like MakeShell() are documented in Creating Advanced Geometrical Objects paragraph --- src/GEOM_SWIG/geomBuilder.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/GEOM_SWIG/geomBuilder.py b/src/GEOM_SWIG/geomBuilder.py index e2bf0b10b..c4ed468b6 100644 --- a/src/GEOM_SWIG/geomBuilder.py +++ b/src/GEOM_SWIG/geomBuilder.py @@ -4472,7 +4472,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): # end of l3_complex ## @} - ## @addtogroup l3_advanced + ## @addtogroup l3_basic_go ## @{ ## Create a linear edge with specified ends. @@ -4904,7 +4904,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): self._autoPublish(anObj, theName, "solid") return anObj - # end of l3_advanced + # end of l3_basic_go ## @} ## @addtogroup l2_measure From d66f8054ed42484b5f9f82cd4a3c08f92d1a67a3 Mon Sep 17 00:00:00 2001 From: ana Date: Thu, 16 Apr 2015 18:04:57 +0300 Subject: [PATCH 03/45] Windows compatibility --- src/GenerationGUI/CMakeLists.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/GenerationGUI/CMakeLists.txt b/src/GenerationGUI/CMakeLists.txt index 5f7afb3a1..b60f1dde6 100755 --- a/src/GenerationGUI/CMakeLists.txt +++ b/src/GenerationGUI/CMakeLists.txt @@ -50,6 +50,10 @@ ADD_DEFINITIONS( ${QT_DEFINITIONS} ) +IF(WIN32) + ADD_DEFINITIONS(-DNOGDI) +ENDIF(WIN32) + # libraries to link to SET(_link_LIBRARIES GEOMObject From 639766dc55de7f49d1986149d8b1abb20887337c Mon Sep 17 00:00:00 2001 From: akl Date: Fri, 17 Apr 2015 13:25:07 +0400 Subject: [PATCH 04/45] Copyrights correction. --- src/GEOMUtils/GEOMUtils_HTrsfCurve2d.cxx | 5 +---- src/GEOMUtils/GEOMUtils_HTrsfCurve2d.hxx | 5 +---- src/GEOMUtils/GEOMUtils_Trsf2d.cxx | 5 +---- src/GEOMUtils/GEOMUtils_Trsf2d.hxx | 5 +---- src/GEOMUtils/GEOMUtils_TrsfCurve2d.cxx | 5 +---- src/GEOMUtils/GEOMUtils_TrsfCurve2d.hxx | 5 +---- 6 files changed, 6 insertions(+), 24 deletions(-) diff --git a/src/GEOMUtils/GEOMUtils_HTrsfCurve2d.cxx b/src/GEOMUtils/GEOMUtils_HTrsfCurve2d.cxx index 976d29690..560f43aa2 100644 --- a/src/GEOMUtils/GEOMUtils_HTrsfCurve2d.cxx +++ b/src/GEOMUtils/GEOMUtils_HTrsfCurve2d.cxx @@ -1,7 +1,4 @@ -// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE -// -// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// Copyright (C) 2015 CEA/DEN, EDF R&D, OPEN CASCADE // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public diff --git a/src/GEOMUtils/GEOMUtils_HTrsfCurve2d.hxx b/src/GEOMUtils/GEOMUtils_HTrsfCurve2d.hxx index d37b7f293..510fdcb66 100644 --- a/src/GEOMUtils/GEOMUtils_HTrsfCurve2d.hxx +++ b/src/GEOMUtils/GEOMUtils_HTrsfCurve2d.hxx @@ -1,7 +1,4 @@ -// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE -// -// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// Copyright (C) 2015 CEA/DEN, EDF R&D, OPEN CASCADE // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public diff --git a/src/GEOMUtils/GEOMUtils_Trsf2d.cxx b/src/GEOMUtils/GEOMUtils_Trsf2d.cxx index 4938d4979..f96cb9a8a 100644 --- a/src/GEOMUtils/GEOMUtils_Trsf2d.cxx +++ b/src/GEOMUtils/GEOMUtils_Trsf2d.cxx @@ -1,7 +1,4 @@ -// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE -// -// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// Copyright (C) 2015 CEA/DEN, EDF R&D, OPEN CASCADE // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public diff --git a/src/GEOMUtils/GEOMUtils_Trsf2d.hxx b/src/GEOMUtils/GEOMUtils_Trsf2d.hxx index c287f90d8..4bb436650 100644 --- a/src/GEOMUtils/GEOMUtils_Trsf2d.hxx +++ b/src/GEOMUtils/GEOMUtils_Trsf2d.hxx @@ -1,7 +1,4 @@ -// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE -// -// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// Copyright (C) 2015 CEA/DEN, EDF R&D, OPEN CASCADE // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public diff --git a/src/GEOMUtils/GEOMUtils_TrsfCurve2d.cxx b/src/GEOMUtils/GEOMUtils_TrsfCurve2d.cxx index 6793bb132..f81acacb8 100644 --- a/src/GEOMUtils/GEOMUtils_TrsfCurve2d.cxx +++ b/src/GEOMUtils/GEOMUtils_TrsfCurve2d.cxx @@ -1,7 +1,4 @@ -// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE -// -// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// Copyright (C) 2015 CEA/DEN, EDF R&D, OPEN CASCADE // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public diff --git a/src/GEOMUtils/GEOMUtils_TrsfCurve2d.hxx b/src/GEOMUtils/GEOMUtils_TrsfCurve2d.hxx index b3bd19433..f0d94bbca 100644 --- a/src/GEOMUtils/GEOMUtils_TrsfCurve2d.hxx +++ b/src/GEOMUtils/GEOMUtils_TrsfCurve2d.hxx @@ -1,7 +1,4 @@ -// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE -// -// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// Copyright (C) 2015 CEA/DEN, EDF R&D, OPEN CASCADE // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public From 6c8fca7b1fc27090ae4fd7dae2f2c6fec07739ba Mon Sep 17 00:00:00 2001 From: mpa Date: Fri, 17 Apr 2015 12:44:44 +0300 Subject: [PATCH 05/45] documentation improvement --- doc/salome/gui/GEOM/images/pref15.png | Bin 117746 -> 107132 bytes .../gui/GEOM/input/geometry_preferences.doc | 42 +++++++++--------- src/GEOMGUI/GEOM_msg_en.ts | 12 ++--- src/GEOMGUI/GEOM_msg_fr.ts | 12 ++--- src/GEOMGUI/GEOM_msg_ja.ts | 12 ++--- 5 files changed, 40 insertions(+), 38 deletions(-) diff --git a/doc/salome/gui/GEOM/images/pref15.png b/doc/salome/gui/GEOM/images/pref15.png index d2b5966a61a4acdbe61e2e3bdb23afb3e20e570b..26d0a40dd9677fb26580e719106ae5b67b9bc330 100644 GIT binary patch literal 107132 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%0Dvh-~Bi{q@6s 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 z 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 diff --git a/doc/salome/gui/GEOM/input/geometry_preferences.doc b/doc/salome/gui/GEOM/input/geometry_preferences.doc index 87bb9fc56..454ac3210 100644 --- a/doc/salome/gui/GEOM/input/geometry_preferences.doc +++ b/doc/salome/gui/GEOM/input/geometry_preferences.doc @@ -5,7 +5,8 @@ \anchor pref_settings

Settings

In the \b Geometry module you can set preferences for visualization of -geometrical figures, which can be used in later sessions with this module. +geometrical figures, which can be used right now or in later sessions +with this module according to the preferences. \image html pref15.png @@ -48,16 +49,16 @@ place (in the back) and add the additional wireframe actor in the viewer foregro
  • Shading With Edges - allows to switch display mode to shading with edges mode after "top-level" operation.
  • -
  • Transparency - allows to define default transparency value.
  • -
  • Deflection coefficient - allows to define default deflection +
  • Default transparency - allows to define default transparency value.
  • +
  • Default deflection coefficient - allows to define default deflection coefficient for lines and surfaces. A smaller coefficient provides better quality of a shape in the viewer.
  • Show predefined materials in popup menu - allows to customize the displaying of popup menu with list of predefined materials.
  • Default material - allows to define default material.
  • Subshapes color for editing a group - allows to select default color for subshapes in a group.
  • -
  • Edges width - allows to define default width of the edges.
  • -
  • Isolines width - allows to define default width of the isolines.
  • +
  • Default edges width - allows to define default width of the edges.
  • +
  • Default isolines width - allows to define default width of the isolines.
  • Preview edges width - allows to define width of the edges for preview.
  • Measures line width - allows to define lines width of measurements tools.
  • Step value for spin boxes - allows to define the increment @@ -82,7 +83,7 @@ of values set in spin boxes.
    • -
    • 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: +
    • Default number of isolines - allows to specify the default number of isolines along Along U and Along V coordinate axes. They are shown on each selected face. For example: \image html isos.png @@ -107,26 +108,15 @@ precision for floating-point data.
      -
    • Marker of Points
    • +
    • Default marker of points
      • -
      • Type - allows to select the symbol for representation of +
      • Type - allows to select the default symbol for representation of points (cross, asterisk, etc.).
      • -
      • Size - allows to define the size of the marker from 1 +
      • Size - allows to define the default size of the marker from 1 (smallest) to 7 (largest).
    -
      -
    • Origin and base vectors
    • -
        -
      • Length of base vectors - allows to define the length -of base vectors.
      • -
      • Auto create - allows to automatically create a point -of origin and three base vectors of the rectangular coordinate -system immediately after the module activation.
      • -
      -
    -
    • Scalar bar for field presentation
      • @@ -139,11 +129,23 @@ system immediately after the module activation.
    +
      +
    • Origin and base vectors
    • +
        +
      • Length of base vectors - allows to define the length +of base vectors.
      • +
      • Auto create - allows to automatically create a point +of origin and three base vectors of the rectangular coordinate +system immediately after the module activation.
      • +
      +
    • Operations
      • Preview - allows to customize the displaying preview by default.
      • +
      • Hide input objects from the viewer - allows automatic hiding of input +shapes from the 3D viewer (OCC and VTK) in all operations of Geometry module.
    diff --git a/src/GEOMGUI/GEOM_msg_en.ts b/src/GEOMGUI/GEOM_msg_en.ts index c1e7addb1..795130835 100644 --- a/src/GEOMGUI/GEOM_msg_en.ts +++ b/src/GEOMGUI/GEOM_msg_en.ts @@ -3262,7 +3262,7 @@ Please, select face, shell or solid and try again PREF_DEFLECTION - Deflection coefficient + Default deflection coefficient GEOM_PREF_def_precision @@ -3310,7 +3310,7 @@ Please, select face, shell or solid and try again PREF_TRANSPARENCY - Transparency + Default transparency PREF_FREE_BOUND_COLOR @@ -3334,7 +3334,7 @@ Please, select face, shell or solid and try again PREF_GROUP_VERTEX - Marker of Points + Default marker of points PREF_ISOS_COLOR @@ -3414,11 +3414,11 @@ Please, select face, shell or solid and try again PREF_EDGE_WIDTH - Edges width + Default edges width PREF_ISOLINES_WIDTH - Iso lines width + Default isolines width PREF_PREVIEW_EDGE_WIDTH @@ -3474,7 +3474,7 @@ Please, select face, shell or solid and try again PREF_ISOS - Number of isolines + Default number of isolines PREF_ISOS_U diff --git a/src/GEOMGUI/GEOM_msg_fr.ts b/src/GEOMGUI/GEOM_msg_fr.ts index 69786b158..1a43273b6 100644 --- a/src/GEOMGUI/GEOM_msg_fr.ts +++ b/src/GEOMGUI/GEOM_msg_fr.ts @@ -3210,7 +3210,7 @@ Choisissez une face, une coque ou un solide et essayez de nouveau PREF_DEFLECTION - Coefficient de déformation + Coefficient de déformation par défaut GEOM_PREF_def_precision @@ -3258,7 +3258,7 @@ Choisissez une face, une coque ou un solide et essayez de nouveau PREF_TRANSPARENCY - Transparence + Transparence par défaut PREF_FREE_BOUND_COLOR @@ -3282,7 +3282,7 @@ Choisissez une face, une coque ou un solide et essayez de nouveau PREF_GROUP_VERTEX - Marqueurs de points + Marqueurs de points par défaut PREF_ISOS_COLOR @@ -3362,11 +3362,11 @@ Choisissez une face, une coque ou un solide et essayez de nouveau PREF_EDGE_WIDTH - Epaisseur des arêtes + Epaisseur des arêtes par défaut PREF_ISOLINES_WIDTH - Epaisseur des isolignes + Epaisseur des isolignes par défaut PREF_PREVIEW_EDGE_WIDTH @@ -3422,7 +3422,7 @@ Choisissez une face, une coque ou un solide et essayez de nouveau PREF_ISOS - Nombre d'isolignes + Nombre d'isolignes par défaut PREF_ISOS_U diff --git a/src/GEOMGUI/GEOM_msg_ja.ts b/src/GEOMGUI/GEOM_msg_ja.ts index 6b5668ec8..b89688584 100644 --- a/src/GEOMGUI/GEOM_msg_ja.ts +++ b/src/GEOMGUI/GEOM_msg_ja.ts @@ -3153,7 +3153,7 @@ PREF_DEFLECTION - 変形倍率 + 既定の変形倍率 GEOM_PREF_def_precision @@ -3201,7 +3201,7 @@ PREF_TRANSPARENCY - 透明度 + 既定の透明度 PREF_FREE_BOUND_COLOR @@ -3225,7 +3225,7 @@ PREF_GROUP_VERTEX - ポイントのマーカー + 既定のポイントのマーカー PREF_ISOS_COLOR @@ -3305,11 +3305,11 @@ PREF_EDGE_WIDTH - エッジの厚さ + 既定のエッジの厚さ PREF_ISOLINES_WIDTH - 輪郭の太さ + 既定の輪郭の太さ PREF_PREVIEW_EDGE_WIDTH @@ -3365,7 +3365,7 @@ PREF_ISOS - 輪郭の数 + 既定の輪郭の数 PREF_ISOS_U From 193eb32f4ca56fa0e200b5b761cde879a6c06d5f Mon Sep 17 00:00:00 2001 From: rnv Date: Fri, 17 Apr 2015 13:10:22 +0300 Subject: [PATCH 06/45] Exclude *.md5 and *.map files from the DEV documentation --- doc/salome/tui/CMakeLists.txt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/doc/salome/tui/CMakeLists.txt b/doc/salome/tui/CMakeLists.txt index 14419f220..d716f2ae3 100755 --- a/doc/salome/tui/CMakeLists.txt +++ b/doc/salome/tui/CMakeLists.txt @@ -26,7 +26,10 @@ SALOME_CONFIGURE_FILE(static/header.html.in static/header.html) ADD_CUSTOM_TARGET(dev_docs ${DOXYGEN_EXECUTABLE}) INSTALL(CODE "FILE(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/GEOM)") -INSTALL(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/GEOM DESTINATION ${SALOME_INSTALL_DOC}/tui) +INSTALL(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/GEOM + DESTINATION ${SALOME_INSTALL_DOC}/tui + PATTERN "*.md5" EXCLUDE + PATTERN "*.map" EXCLUDE) INSTALL(FILES images/head.png DESTINATION ${SALOME_INSTALL_DOC}/tui/GEOM) SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES GEOM) From f115f2d5e7ee538701538c72322236b6845a6851 Mon Sep 17 00:00:00 2001 From: vsr Date: Fri, 17 Apr 2015 18:46:11 +0300 Subject: [PATCH 07/45] Increment version: 7.6.0 --- CMakeLists.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6b8e90fac..6431c2161 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -30,11 +30,11 @@ CMAKE_POLICY(SET CMP0003 NEW) STRING(TOUPPER ${PROJECT_NAME} PROJECT_NAME_UC) SET(${PROJECT_NAME_UC}_MAJOR_VERSION 7) -SET(${PROJECT_NAME_UC}_MINOR_VERSION 5) -SET(${PROJECT_NAME_UC}_PATCH_VERSION 1) +SET(${PROJECT_NAME_UC}_MINOR_VERSION 6) +SET(${PROJECT_NAME_UC}_PATCH_VERSION 0) SET(${PROJECT_NAME_UC}_VERSION ${${PROJECT_NAME_UC}_MAJOR_VERSION}.${${PROJECT_NAME_UC}_MINOR_VERSION}.${${PROJECT_NAME_UC}_PATCH_VERSION}) -SET(${PROJECT_NAME_UC}_VERSION_DEV 1) +SET(${PROJECT_NAME_UC}_VERSION_DEV 0) # Find KERNEL # =========== From cd3844620667b853f8660505e8e0ac02545a1a94 Mon Sep 17 00:00:00 2001 From: skv Date: Mon, 20 Apr 2015 18:23:17 +0300 Subject: [PATCH 08/45] Fix for test case geom/bugs_05/F7 --- src/GEOMAlgo/GEOMAlgo_ShapeInfoFiller_1.cxx | 57 ++++++++++++--------- 1 file changed, 32 insertions(+), 25 deletions(-) diff --git a/src/GEOMAlgo/GEOMAlgo_ShapeInfoFiller_1.cxx b/src/GEOMAlgo/GEOMAlgo_ShapeInfoFiller_1.cxx index ef1cc41d7..77fb5e0c6 100644 --- a/src/GEOMAlgo/GEOMAlgo_ShapeInfoFiller_1.cxx +++ b/src/GEOMAlgo/GEOMAlgo_ShapeInfoFiller_1.cxx @@ -416,19 +416,18 @@ void GEOMAlgo_ShapeInfoFiller::FillDetails(const TopoDS_Face& aF, aPx[i]=aInfoEx.Location(); } // + Standard_Boolean isRectangle = Standard_True; for (i=0; i<4; ++i) { j=(i==3) ? 0 : i+1; aDot=aDx[i]*aDx[j]; if (fabs (aDot) > myTolerance) { - aInfo.SetKindOfName(GEOMAlgo_KN_QUADRANGLE); - return; + isRectangle = Standard_False; + break; } } // // rectangle - aInfo.SetKindOfName(GEOMAlgo_KN_RECTANGLE); - // - // shift location to the center and calc. sizes + // shift location to the center aXYZc.SetCoord(0.,0.,0.); TopExp::MapShapes(aF, TopAbs_VERTEX, aMV); for (i=1; i<=aNbV; ++i) { @@ -440,33 +439,41 @@ void GEOMAlgo_ShapeInfoFiller::FillDetails(const TopoDS_Face& aF, // // Location : aPc in center of rectangle // Position : 0z is plane normal - // 0x is along length + // 0x is along the first edge (quadrangle) or + // along length (rectangle) // aXYZc.Divide(4.); aPc.SetXYZ(aXYZc); - // - gp_Lin aL0(aPx[0], aDx[0]); - gp_Lin aL1(aPx[1], aDx[1]); - // - aD0=aL0.Distance(aPc); - aD1=aL1.Distance(aPc); - // - aLength=aD0; - aWidth =aD1; - aDX=aL1.Direction(); - if (aD0aD1) { + aLength=aD0; + aWidth =aD1; + aDX=aDx[1]; + } + // + aLength=2.*aLength; + aWidth =2.*aWidth; + // + aInfo.SetLength(aLength); + aInfo.SetWidth(aWidth); + aInfo.SetKindOfName(GEOMAlgo_KN_RECTANGLE); + } else { + aInfo.SetKindOfName(GEOMAlgo_KN_QUADRANGLE); } // - aLength=2.*aLength; - aWidth =2.*aWidth; - // - aInfo.SetLocation(aPc); - aInfo.SetLength(aLength); - aInfo.SetWidth(aWidth); - // const gp_Dir& aDZ=aPln.Axis().Direction(); gp_Ax2 aAx2(aPc, aDZ, aDX); gp_Ax3 aAx3(aAx2); From 7cbe2e3bae41fbd45ae110b74703ef85505eb7b2 Mon Sep 17 00:00:00 2001 From: imn Date: Tue, 21 Apr 2015 10:07:44 +0300 Subject: [PATCH 09/45] INT PAL 0052699: Incorrect closing of "Manage dimensions" dialog box --- src/MeasureGUI/MeasureGUI_ManageDimensionsDlg.cxx | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/MeasureGUI/MeasureGUI_ManageDimensionsDlg.cxx b/src/MeasureGUI/MeasureGUI_ManageDimensionsDlg.cxx index 7dfda2db9..f238a6152 100644 --- a/src/MeasureGUI/MeasureGUI_ManageDimensionsDlg.cxx +++ b/src/MeasureGUI/MeasureGUI_ManageDimensionsDlg.cxx @@ -805,8 +805,6 @@ void MeasureGUI_ManageDimensionsDlg::OnFinish() myEditObject->GetStudyEntry(), GEOM::propertyName( GEOM::Dimensions ), QVariant() ); - - redisplay( myEditObject.get() ); } //================================================================================= @@ -889,8 +887,8 @@ void MeasureGUI_ManageDimensionsDlg::SetEditObject( const GEOM::GeomObjPtr& theO if ( myEditObject.isNull() ) { + myDimensionView->TreeWidget->clear(); myDimensionView->setEnabled( false ); - return; } @@ -955,8 +953,6 @@ void MeasureGUI_ManageDimensionsDlg::RestoreState() myEditObject->GetStudyEntry(), GEOM::propertyName( GEOM::Dimensions ), QVariant() ); - - RedisplayObject(); } //================================================================================= From e78691501537a90b85a546433cd5d3bb8703f835 Mon Sep 17 00:00:00 2001 From: imn Date: Tue, 21 Apr 2015 15:53:05 +0300 Subject: [PATCH 10/45] INT PAL 0052699: Incorrect closing of "Manage dimensions" dialog box (edited) --- src/MeasureGUI/MeasureGUI_ManageDimensionsDlg.cxx | 9 ++++++--- src/MeasureGUI/MeasureGUI_ManageDimensionsDlg.h | 2 +- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/MeasureGUI/MeasureGUI_ManageDimensionsDlg.cxx b/src/MeasureGUI/MeasureGUI_ManageDimensionsDlg.cxx index f238a6152..46d244459 100644 --- a/src/MeasureGUI/MeasureGUI_ManageDimensionsDlg.cxx +++ b/src/MeasureGUI/MeasureGUI_ManageDimensionsDlg.cxx @@ -134,7 +134,7 @@ MeasureGUI_ManageDimensionsDlg::MeasureGUI_ManageDimensionsDlg( GeometryGUI* the { myObjectSelector->PushButton1->click(); } - + isNeedRedisplay = false; setHelpFileName("managing_dimensions_page.html"); } @@ -805,6 +805,9 @@ void MeasureGUI_ManageDimensionsDlg::OnFinish() myEditObject->GetStudyEntry(), GEOM::propertyName( GEOM::Dimensions ), QVariant() ); + if ( isNeedRedisplay ) { + redisplay( myEditObject.get()); + } } //================================================================================= @@ -1103,8 +1106,8 @@ bool MeasureGUI_ManageDimensionsDlg::AllowedToCancelChanges() tr( "WRN_MSG_CHANGES_LOST" ), QMessageBox::Ok, QMessageBox::Cancel ); - - return aResponse == QMessageBox::Ok; + isNeedRedisplay = ( aResponse == QMessageBox::Ok ); + return isNeedRedisplay; } //================================================================================= diff --git a/src/MeasureGUI/MeasureGUI_ManageDimensionsDlg.h b/src/MeasureGUI/MeasureGUI_ManageDimensionsDlg.h index bed9d3465..39e04f254 100644 --- a/src/MeasureGUI/MeasureGUI_ManageDimensionsDlg.h +++ b/src/MeasureGUI/MeasureGUI_ManageDimensionsDlg.h @@ -114,7 +114,7 @@ private: private: GEOM::GeomObjPtr myEditObject; - + bool isNeedRedisplay; private: DlgRef_1Sel* myObjectSelector; MeasureGUI_1TreeWidget_4Button* myDimensionView; From 48589cb055fe5ae7f639993f40fa0fe24a8a1fc4 Mon Sep 17 00:00:00 2001 From: imn Date: Tue, 21 Apr 2015 16:00:30 +0300 Subject: [PATCH 11/45] INT PAL 0052699: Incorrect closing of "Manage dimensions" dialog box (edited) --- src/MeasureGUI/MeasureGUI_ManageDimensionsDlg.cxx | 8 ++++---- src/MeasureGUI/MeasureGUI_ManageDimensionsDlg.h | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/MeasureGUI/MeasureGUI_ManageDimensionsDlg.cxx b/src/MeasureGUI/MeasureGUI_ManageDimensionsDlg.cxx index 46d244459..b8954462a 100644 --- a/src/MeasureGUI/MeasureGUI_ManageDimensionsDlg.cxx +++ b/src/MeasureGUI/MeasureGUI_ManageDimensionsDlg.cxx @@ -134,7 +134,7 @@ MeasureGUI_ManageDimensionsDlg::MeasureGUI_ManageDimensionsDlg( GeometryGUI* the { myObjectSelector->PushButton1->click(); } - isNeedRedisplay = false; + myIsNeedRedisplay = false; setHelpFileName("managing_dimensions_page.html"); } @@ -805,7 +805,7 @@ void MeasureGUI_ManageDimensionsDlg::OnFinish() myEditObject->GetStudyEntry(), GEOM::propertyName( GEOM::Dimensions ), QVariant() ); - if ( isNeedRedisplay ) { + if ( myIsNeedRedisplay ) { redisplay( myEditObject.get()); } } @@ -1106,8 +1106,8 @@ bool MeasureGUI_ManageDimensionsDlg::AllowedToCancelChanges() tr( "WRN_MSG_CHANGES_LOST" ), QMessageBox::Ok, QMessageBox::Cancel ); - isNeedRedisplay = ( aResponse == QMessageBox::Ok ); - return isNeedRedisplay; + myIsNeedRedisplay = ( aResponse == QMessageBox::Ok ); + return myIsNeedRedisplay; } //================================================================================= diff --git a/src/MeasureGUI/MeasureGUI_ManageDimensionsDlg.h b/src/MeasureGUI/MeasureGUI_ManageDimensionsDlg.h index 39e04f254..7fd6f0904 100644 --- a/src/MeasureGUI/MeasureGUI_ManageDimensionsDlg.h +++ b/src/MeasureGUI/MeasureGUI_ManageDimensionsDlg.h @@ -114,7 +114,7 @@ private: private: GEOM::GeomObjPtr myEditObject; - bool isNeedRedisplay; + bool myIsNeedRedisplay; private: DlgRef_1Sel* myObjectSelector; MeasureGUI_1TreeWidget_4Button* myDimensionView; From bcf1da3d8281c41e52351cd3ee492f476b6f8c67 Mon Sep 17 00:00:00 2001 From: skv Date: Thu, 23 Apr 2015 11:36:19 +0300 Subject: [PATCH 12/45] fix for test cases bugs_13/N8 and imps_04/E5 --- src/GEOMImpl/GEOMImpl_BooleanDriver.cxx | 65 ------------------------- 1 file changed, 65 deletions(-) diff --git a/src/GEOMImpl/GEOMImpl_BooleanDriver.cxx b/src/GEOMImpl/GEOMImpl_BooleanDriver.cxx index 5c0812760..4d6a72f2a 100644 --- a/src/GEOMImpl/GEOMImpl_BooleanDriver.cxx +++ b/src/GEOMImpl/GEOMImpl_BooleanDriver.cxx @@ -548,71 +548,6 @@ TopoDS_Shape GEOMImpl_BooleanDriver::performOperation if ( !GEOMUtils::CheckShape(aShape, true) && !GEOMUtils::FixShapeTolerance(aShape) ) Standard_ConstructionError::Raise("Boolean operation aborted : non valid shape result"); - // BEGIN: Mantis issue 0021060: always limit tolerance of BOP result - // 1. Get shape parameters for comparison - int nbTypes [TopAbs_SHAPE]; - { - for (int iType = 0; iType < TopAbs_SHAPE; ++iType) - nbTypes[iType] = 0; - nbTypes[aShape.ShapeType()]++; - - TopTools_MapOfShape aMapOfShape; - aMapOfShape.Add(aShape); - TopTools_ListOfShape aListOfShape; - aListOfShape.Append(aShape); - - TopTools_ListIteratorOfListOfShape itL (aListOfShape); - for (; itL.More(); itL.Next()) { - TopoDS_Iterator it (itL.Value()); - for (; it.More(); it.Next()) { - TopoDS_Shape s = it.Value(); - if (aMapOfShape.Add(s)) { - aListOfShape.Append(s); - nbTypes[s.ShapeType()]++; - } - } - } - } - - // 2. Limit tolerance - TopoDS_Shape aShapeCopy; - TColStd_IndexedDataMapOfTransientTransient aMapTShapes; - TNaming_CopyShape::CopyTool(aShape, aMapTShapes, aShapeCopy); - - if ( GEOMUtils::FixShapeTolerance(aShapeCopy, true) ) { - int iType, nbTypesCopy [TopAbs_SHAPE]; - - for (iType = 0; iType < TopAbs_SHAPE; ++iType) - nbTypesCopy[iType] = 0; - nbTypesCopy[aShapeCopy.ShapeType()]++; - - TopTools_MapOfShape aMapOfShape; - aMapOfShape.Add(aShapeCopy); - TopTools_ListOfShape aListOfShape; - aListOfShape.Append(aShapeCopy); - - TopTools_ListIteratorOfListOfShape itL (aListOfShape); - for (; itL.More(); itL.Next()) { - TopoDS_Iterator it (itL.Value()); - for (; it.More(); it.Next()) { - TopoDS_Shape s = it.Value(); - if (aMapOfShape.Add(s)) { - aListOfShape.Append(s); - nbTypesCopy[s.ShapeType()]++; - } - } - } - - bool isEqual = true; - for (iType = 0; iType < TopAbs_SHAPE && isEqual; ++iType) { - if (nbTypes[iType] != nbTypesCopy[iType]) - isEqual = false; - } - if (isEqual) - aShape = aShapeCopy; - } - // END: Mantis issue 0021060 - return aShape; } From 38f47f419dd05cdac7cf862bb3ab9b58b8fcf9b0 Mon Sep 17 00:00:00 2001 From: vsr Date: Thu, 23 Apr 2015 14:09:47 +0300 Subject: [PATCH 13/45] 0023055: EDF 10725 GEOM: In the shape recognition functionality, it is not possible to select an area for the filtering sample Fix pb that imported image is Y-mirrored in a viewer --- src/EntityGUI/EntityGUI_PictureImportDlg.cxx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/EntityGUI/EntityGUI_PictureImportDlg.cxx b/src/EntityGUI/EntityGUI_PictureImportDlg.cxx index 74eacd8f8..425980457 100644 --- a/src/EntityGUI/EntityGUI_PictureImportDlg.cxx +++ b/src/EntityGUI/EntityGUI_PictureImportDlg.cxx @@ -188,9 +188,9 @@ bool EntityGUI_PictureImportDlg::execute( ObjectList& objects ) delete pixmap; GEOM::GEOM_Object_var P1 = aBasicOperations->MakePointXYZ( -0.5*width, -0.5*height, 0 ); - GEOM::GEOM_Object_var P2 = aBasicOperations->MakePointXYZ( -0.5*width, 0.5*height, 0 ); + GEOM::GEOM_Object_var P2 = aBasicOperations->MakePointXYZ( 0.5*width, -0.5*height, 0 ); GEOM::GEOM_Object_var P3 = aBasicOperations->MakePointXYZ( 0.5*width, 0.5*height, 0 ); - GEOM::GEOM_Object_var P4 = aBasicOperations->MakePointXYZ( 0.5*width, -0.5*height, 0 ); + GEOM::GEOM_Object_var P4 = aBasicOperations->MakePointXYZ( -0.5*width, 0.5*height, 0 ); GEOM::GEOM_Object_var aFace = aBlocksOperations->MakeQuad4Vertices(P1,P2,P3,P4); getDisplayer()->SetDisplayMode(3); From 7419ea9c89a5f2b4fab8b901a5b18c77b5961b73 Mon Sep 17 00:00:00 2001 From: skv Date: Thu, 23 Apr 2015 18:38:08 +0300 Subject: [PATCH 14/45] Fix for test case bugs_10/K4 --- src/GEOMImpl/GEOMImpl_DiskDriver.cxx | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) mode change 100755 => 100644 src/GEOMImpl/GEOMImpl_DiskDriver.cxx diff --git a/src/GEOMImpl/GEOMImpl_DiskDriver.cxx b/src/GEOMImpl/GEOMImpl_DiskDriver.cxx old mode 100755 new mode 100644 index 63a21d866..76a6b30dc --- a/src/GEOMImpl/GEOMImpl_DiskDriver.cxx +++ b/src/GEOMImpl/GEOMImpl_DiskDriver.cxx @@ -41,6 +41,7 @@ #include #include +#include #include #include #include @@ -91,12 +92,14 @@ Standard_Integer GEOMImpl_DiskDriver::Execute(TFunction_Logbook& log) const TopExp::Vertices(anE, V1, V2, Standard_True); if (!V1.IsNull() && !V2.IsNull()) { gp_Vec aV (BRep_Tool::Pnt(V1), BRep_Tool::Pnt(V2)); - gp_Ax2 anAxes (aP, -aV); + gp_Ax2 anAxes (aP, aV); + gp_Ax3 anAxes3(anAxes); + gp_Pln aPln(anAxes3); gp_Circ aCirc (anAxes, aCI.GetRadius()); TopoDS_Shape aCircle = BRepBuilderAPI_MakeEdge(aCirc).Edge(); BRepBuilderAPI_MakeWire MW; MW.Add(TopoDS::Edge(aCircle)); - BRepBuilderAPI_MakeFace MF (MW, Standard_False); + BRepBuilderAPI_MakeFace MF (aPln, MW); aShape = MF.Shape(); } } @@ -120,11 +123,14 @@ Standard_Integer GEOMImpl_DiskDriver::Execute(TFunction_Logbook& log) const Standard_ConstructionError::Raise("Disk creation aborted: coincident points given"); if (gp_Vec(aP1, aP2).IsParallel(gp_Vec(aP1, aP3), Precision::Angular())) Standard_ConstructionError::Raise("Disk creation aborted: points lay on one line"); - Handle(Geom_Circle) aCirc = GC_MakeCircle(aP3, aP2, aP1).Value(); + Handle(Geom_Circle) aCirc = GC_MakeCircle(aP1, aP2, aP3).Value(); + gp_Circ aGpCirc = aCirc->Circ(); + gp_Ax3 anAxes3(aGpCirc.Position()); + gp_Pln aPln(anAxes3); TopoDS_Shape aCircle = BRepBuilderAPI_MakeEdge(aCirc).Edge(); BRepBuilderAPI_MakeWire MW; MW.Add(TopoDS::Edge(aCircle)); - BRepBuilderAPI_MakeFace MF (MW, Standard_False); + BRepBuilderAPI_MakeFace MF (aPln, MW); aShape = MF.Shape(); } } @@ -139,12 +145,14 @@ Standard_Integer GEOMImpl_DiskDriver::Execute(TFunction_Logbook& log) const else if (anOrient == 3) aV = gp::DY(); - gp_Ax2 anAxes (aP, -aV); + gp_Ax2 anAxes (aP, aV); + gp_Ax3 anAxes3(anAxes); + gp_Pln aPln(anAxes3); gp_Circ aCirc (anAxes, aCI.GetRadius()); TopoDS_Shape aCircle = BRepBuilderAPI_MakeEdge(aCirc).Edge(); BRepBuilderAPI_MakeWire MW; MW.Add(TopoDS::Edge(aCircle)); - BRepBuilderAPI_MakeFace MF (MW, Standard_False); + BRepBuilderAPI_MakeFace MF (aPln, MW); aShape = MF.Shape(); } else { From c5e07167226acc10ab518a8074515222024701db Mon Sep 17 00:00:00 2001 From: rnv Date: Fri, 24 Apr 2015 16:43:36 +0300 Subject: [PATCH 15/45] Convert GEOM_Object to list of the GEOM_Object. --- src/GEOM_SWIG/geomBuilder.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/GEOM_SWIG/geomBuilder.py b/src/GEOM_SWIG/geomBuilder.py index c4ed468b6..270c45b35 100644 --- a/src/GEOM_SWIG/geomBuilder.py +++ b/src/GEOM_SWIG/geomBuilder.py @@ -7375,7 +7375,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): Returns: New GEOM.GEOM_Object, containing copies of theShapes without coincident faces. """ - anObj = self.ShapesOp.MakeGlueFacesByList(ToList(theShapes), theTolerance, theFaces, + anObj = self.ShapesOp.MakeGlueFacesByList(ToList(theShapes), theTolerance, ToList(theFaces), doKeepNonSolids, doGlueAllEdges) if anObj is None: raise RuntimeError, "MakeGlueFacesByList : " + self.ShapesOp.GetErrorCode() From ee311dbb3223d7d71d39f542ae251fc8c0f55c4f Mon Sep 17 00:00:00 2001 From: eap Date: Fri, 24 Apr 2015 17:38:25 +0300 Subject: [PATCH 16/45] 23034: EDF GEOM: Information after a transformation without copy IPAL52713: Wrong creation info for ProjectionOnCylinder object --- idl/GEOM_Gen.idl | 3 +- src/GEOM/GEOM_BaseObject.cxx | 22 ++-- src/GEOM/GEOM_BaseObject.hxx | 6 +- src/GEOMGUI/GEOMGUI_CreationInfoWdg.cxx | 112 +++++++++++++++------ src/GEOMGUI/GEOMGUI_CreationInfoWdg.h | 20 ++-- src/GEOMGUI/GeometryGUI.cxx | 67 ++++-------- src/GEOMImpl/GEOMImpl_ProjectionDriver.cxx | 50 ++++----- src/GEOM_I/GEOM_BaseObject_i.cc | 72 +++++++------ src/GEOM_I/GEOM_BaseObject_i.hh | 2 +- src/GEOM_I/GEOM_Gen_i.cc | 35 +++---- src/GEOM_SWIG/geomBuilder.py | 4 +- 11 files changed, 221 insertions(+), 172 deletions(-) diff --git a/idl/GEOM_Gen.idl b/idl/GEOM_Gen.idl index f63819e97..87a912edc 100644 --- a/idl/GEOM_Gen.idl +++ b/idl/GEOM_Gen.idl @@ -226,6 +226,7 @@ module GEOM string operationName; Parameters params; }; + typedef sequence CreationInformationSeq; /*! * \brief Reporting on shape healing @@ -348,7 +349,7 @@ module GEOM /*! * \brief Return name of operation and values of parameters used for object creation */ - CreationInformation GetCreationInformation(); + CreationInformationSeq GetCreationInformation(); }; //# GEOM_Object diff --git a/src/GEOM/GEOM_BaseObject.cxx b/src/GEOM/GEOM_BaseObject.cxx index 6c56f0f71..4b6745486 100644 --- a/src/GEOM/GEOM_BaseObject.cxx +++ b/src/GEOM/GEOM_BaseObject.cxx @@ -493,18 +493,24 @@ Handle(TColStd_HSequenceOfTransient) GEOM_BaseObject::GetLastDependency() */ //================================================================================ -Handle(TFunction_Driver) GEOM_BaseObject::GetCreationDriver() +std::vector< Handle(TFunction_Driver)> GEOM_BaseObject::GetCreationDrivers() { - Handle(TFunction_Driver) aDriver; + std::vector< Handle(TFunction_Driver)> aDriverVec; - Handle(GEOM_Function) function = GetFunction(1); - if ( !function.IsNull() ) + for ( int i = 1, nb = GetNbFunctions(); i <= nb; ++i ) { - Standard_GUID aGUID = function->GetDriverGUID(); - if ( TFunction_DriverTable::Get()->FindDriver(aGUID, aDriver)) - aDriver->Init( function->GetEntry() ); + Handle(GEOM_Function) function = GetFunction(i); + if ( !function.IsNull() ) + { + Standard_GUID aGUID = function->GetDriverGUID(); + aDriverVec.push_back( Handle(TFunction_Driver )() ); + if ( TFunction_DriverTable::Get()->FindDriver(aGUID, aDriverVec.back() )) + aDriverVec.back()->Init( function->GetEntry() ); + else + aDriverVec.pop_back(); + } } - return aDriver; + return aDriverVec; } //============================================================================= diff --git a/src/GEOM/GEOM_BaseObject.hxx b/src/GEOM/GEOM_BaseObject.hxx index 83388851f..28b9a40e0 100644 --- a/src/GEOM/GEOM_BaseObject.hxx +++ b/src/GEOM/GEOM_BaseObject.hxx @@ -31,6 +31,8 @@ #include #include +#include + class GEOM_BaseObject; class Handle(TFunction_Driver); class GEOM_Engine; @@ -146,8 +148,8 @@ public: //Returns the dependencies of the last function Standard_EXPORT Handle(TColStd_HSequenceOfTransient) GetLastDependency(); - //Returns a driver creator of this object - Standard_EXPORT Handle(TFunction_Driver) GetCreationDriver(); + //Returns drivers creators of this object + Standard_EXPORT std::vector< Handle(TFunction_Driver)> GetCreationDrivers(); //########################################################### // Internal methods diff --git a/src/GEOMGUI/GEOMGUI_CreationInfoWdg.cxx b/src/GEOMGUI/GEOMGUI_CreationInfoWdg.cxx index 88f76b7d8..f77dc535c 100644 --- a/src/GEOMGUI/GEOMGUI_CreationInfoWdg.cxx +++ b/src/GEOMGUI/GEOMGUI_CreationInfoWdg.cxx @@ -21,9 +21,13 @@ // Author : Edward AGAPOV (eap) #include "GEOMGUI_CreationInfoWdg.h" + +#include "GEOMImpl_Types.hxx" -#include #include +#include +#include +#include #include #include @@ -38,33 +42,16 @@ GEOMGUI_CreationInfoWdg::GEOMGUI_CreationInfoWdg( SalomeApp_Application* app ) //:QWidget( app->desktop() ) { setWindowTitle( tr( "CREATION_INFO_TITLE" ) ); - setObjectName( "geomCreationInformation" ); - QFrame* frame = new QFrame( this ); - - QVBoxLayout* myLayout = new QVBoxLayout( this ); - myLayout->addWidget( frame ); - myLayout->setMargin(0); - - QGroupBox* operationGB = new QGroupBox( tr( "OPERATION" ), frame ); - - myIconLbl = new QLabel( operationGB ); - myOperaionLnEd = new QLineEdit( operationGB ); - myOperaionLnEd->setReadOnly( true ); - myParamsTreeWd = new QTreeWidget( frame ); + myParamsTreeWd = new QTreeWidget( this ); myParamsTreeWd->setColumnCount( 2 ); myParamsTreeWd->setHeaderLabels( QStringList() << tr( "PARAMETER" ) << tr( "VALUE" ) ); myParamsTreeWd->header()->setStretchLastSection( true ); myParamsTreeWd->header()->setResizeMode( 0, QHeaderView::ResizeToContents ); - QHBoxLayout* operationLay = new QHBoxLayout( operationGB ); - operationLay->addWidget( myIconLbl ); - operationLay->addWidget( myOperaionLnEd ); - operationLay->setMargin(5); - - QVBoxLayout* aLayout = new QVBoxLayout( frame ); - aLayout->addWidget( operationGB ); + QVBoxLayout* aLayout = new QVBoxLayout( this ); aLayout->addWidget( myParamsTreeWd ); + aLayout->setMargin(11); // get a free dockable window id myWindowID = 10; @@ -73,19 +60,26 @@ GEOMGUI_CreationInfoWdg::GEOMGUI_CreationInfoWdg( SalomeApp_Application* app ) ++myWindowID; // pb when a GEOM is a sole module: CreationInfoWdg replaces Python console } -void GEOMGUI_CreationInfoWdg::setOperation(const QPixmap& icon, const QString& name) -{ - myIconLbl->setPixmap( icon ); - myOperaionLnEd->setText( name ); - - if ( name.isEmpty() ) - myOperaionLnEd->setText( tr("NO_INFO")); -} - -void GEOMGUI_CreationInfoWdg::addParam (const QString& name, const QString& value) +QTreeWidgetItem* GEOMGUI_CreationInfoWdg::addOperation(const QPixmap& icon, const QString& name) { QTreeWidgetItem* item = new QTreeWidgetItem( myParamsTreeWd ); + item->setIcon( 0, icon ); + item->setText( 0, name ); + if ( name.isEmpty() ) + item->setText( 0, tr("NO_INFO")); + + item->setExpanded( true ); + + return item; +} + +void GEOMGUI_CreationInfoWdg::addParam (QTreeWidgetItem* operation, + const QString& name, + const QString& value) +{ + QTreeWidgetItem* item = new QTreeWidgetItem( operation ); + //item->setFlags( Qt::NoItemFlags ); item->setExpanded( true ); @@ -95,8 +89,6 @@ void GEOMGUI_CreationInfoWdg::addParam (const QString& name, const QString& valu void GEOMGUI_CreationInfoWdg::clear() { - myIconLbl->setPixmap( QPixmap() ); - myOperaionLnEd->setText( "" ); myParamsTreeWd->clear(); } @@ -104,3 +96,57 @@ GEOMGUI_CreationInfoWdg::~GEOMGUI_CreationInfoWdg() { //std::cout<<"~GEOMGUI_CreationInfoWdg"<resourceMgr(); + for ( int j = 0, nb = info.length(); j < nb; ++j ) + { + QString name = info[j].operationName.in(); + if ( !name.isEmpty() ) + { + // get plugin_name if any + QString plugin_name; + for ( size_t i = 0; i < info[j].params.length(); ++i ) + { + QString value = info[j].params[i].name.in(); + if ( value == PLUGIN_NAME ) + plugin_name = info[j].params[i].value.in(); + } + // get icon + QString prefix = plugin_name.isEmpty() ? "GEOM" : plugin_name; + icon = resMgr->loadPixmap( prefix, tr( ("ICO_"+name).toLatin1().constData() ), false ); + + // translate operation name + operationName = tr( ("MEN_"+name).toLatin1().constData() ); + if ( operationName.startsWith( "MEN_" )) + operationName = name; // no translation + + QTreeWidgetItem* operation = addOperation( icon, operationName ); + + // add parameters + for ( size_t i = 0; i < info[j].params.length(); ++i ) + addParam( operation, + info[j].params[i].name.in(), + info[j].params[i].value.in() ); + } + } + } + else + { + addOperation( icon, operationName ); + } + } + catch (...) + { + } +} diff --git a/src/GEOMGUI/GEOMGUI_CreationInfoWdg.h b/src/GEOMGUI/GEOMGUI_CreationInfoWdg.h index 923b5ea91..de935e8f7 100644 --- a/src/GEOMGUI/GEOMGUI_CreationInfoWdg.h +++ b/src/GEOMGUI/GEOMGUI_CreationInfoWdg.h @@ -22,12 +22,16 @@ #include "GEOM_GEOMGUI.hxx" +#include +#include CORBA_SERVER_HEADER(GEOM_Gen) + #include -class QString; class QLabel; class QLineEdit; +class QString; class QTreeWidget; +class QTreeWidgetItem; class SalomeApp_Application; /*! @@ -46,16 +50,18 @@ class GEOMGUI_EXPORT GEOMGUI_CreationInfoWdg : public QWidget GEOMGUI_CreationInfoWdg( SalomeApp_Application* app ); ~GEOMGUI_CreationInfoWdg(); - int getWinID() { return myWindowID; } - + void setInfo( GEOM::CreationInformationSeq& info ); void clear(); - void setOperation(const QPixmap& icon, const QString& name); - void addParam (const QString& name, const QString& value); + + int getWinID() { return myWindowID; } private: - QLabel* myIconLbl; - QLineEdit* myOperaionLnEd; + QTreeWidgetItem* addOperation(const QPixmap& icon, const QString& name); + void addParam (QTreeWidgetItem* operation, const QString& name, const QString& value); + + QLabel* myIconLbl; + //QLineEdit* myOperaionLnEd; QTreeWidget* myParamsTreeWd; int myWindowID; diff --git a/src/GEOMGUI/GeometryGUI.cxx b/src/GEOMGUI/GeometryGUI.cxx index 790e65a7d..e63305ce2 100644 --- a/src/GEOMGUI/GeometryGUI.cxx +++ b/src/GEOMGUI/GeometryGUI.cxx @@ -1674,7 +1674,7 @@ void GeometryGUI::addPluginActions() // icon QPixmap icon; if ( !adata.icon.empty() ) - icon = resMgr->loadPixmap( pdata.name.c_str(), adata.icon.c_str() ); + icon = resMgr->loadPixmap( pdata.name.c_str(), adata.icon.c_str() ); // menu text (path) QStringList smenus = QString( adata.menuText.c_str() ).split( "/" ); QString actionName = smenus.last(); @@ -1691,30 +1691,30 @@ void GeometryGUI::addPluginActions() actionStat = actionStat.toUpper().prepend( "STB_" ); createAction( id, // ~ adata.label - tr( actionTool.toLatin1().constData() ), - icon, - tr( actionName.toLatin1().constData() ), - tr( actionStat.toLatin1().constData() ), - QKeySequence( tr( adata.accel.c_str() ) ), - application()->desktop(), - false /*toggle*/, - this, SLOT( OnGUIEvent() ), - QString() /*shortcutAction*/ ); + tr( actionTool.toLatin1().constData() ), + icon, + tr( actionName.toLatin1().constData() ), + tr( actionStat.toLatin1().constData() ), + QKeySequence( tr( adata.accel.c_str() ) ), + application()->desktop(), + false /*toggle*/, + this, SLOT( OnGUIEvent() ), + QString() /*shortcutAction*/ ); int menuId = -1; foreach ( QString subMenu, smenus ) { - QStringList subMenuList = subMenu.split( ":" ); - QString subMenuName = subMenuList[0].toUpper().prepend( "MEN_" ); - int subMenuGroup = subMenuList.size() > 1 ? subMenuList[1].toInt() : -1; - menuId = createMenu( tr( subMenuName.toLatin1().constData() ), menuId, -1, subMenuGroup ); + QStringList subMenuList = subMenu.split( ":" ); + QString subMenuName = subMenuList[0].toUpper().prepend( "MEN_" ); + int subMenuGroup = subMenuList.size() > 1 ? subMenuList[1].toInt() : -1; + menuId = createMenu( tr( subMenuName.toLatin1().constData() ), menuId, -1, subMenuGroup ); } createMenu( id, menuId, -1 ); if ( !stools.isEmpty() ) { - QString subTool = stools[0]; - subTool = subTool.toUpper().prepend( "TOOL_" ); - int toolId = createTool( tr( subTool.toLatin1().constData() ) ); - createTool(id, toolId); + QString subTool = stools[0]; + subTool = subTool.toUpper().prepend( "TOOL_" ); + int toolId = createTool( tr( subTool.toLatin1().constData() ) ); + createTool(id, toolId); } // add action id to map @@ -2015,38 +2015,15 @@ void GeometryGUI::updateCreationInfo() // pass creation info of geomObj to myCreationInfoWdg if ( myCreationInfoWdg ) { - QPixmap icon; - QString operationName; - myCreationInfoWdg->setOperation( icon, operationName ); + GEOM::CreationInformationSeq_var info; try { OCC_CATCH_SIGNALS; - GEOM::CreationInformation_var info = geomObj->GetCreationInformation(); - if ( &info.in() ) { - SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); - QString name = info->operationName.in(); - if ( !name.isEmpty() ) { - - QString plugin_name; - for ( size_t i = 0; i < info->params.length(); ++i ) { - myCreationInfoWdg->addParam( info->params[i].name.in(), - info->params[i].value.in() ); - QString value = info->params[i].name.in(); - if( value == PLUGIN_NAME ) { - plugin_name = info->params[i].value.in(); - } - } - QString prefix = plugin_name.isEmpty() ? "GEOM" : plugin_name; - icon = resMgr->loadPixmap( prefix, tr( ("ICO_"+name).toLatin1().constData() ), false ); - operationName = tr( ("MEN_"+name).toLatin1().constData() ); - if ( operationName.startsWith( "MEN_" )) - operationName = name; // no translation - myCreationInfoWdg->setOperation( icon, operationName ); - } - } + info = geomObj->GetCreationInformation(); } catch (...) { } + myCreationInfoWdg->setInfo( info ); } } @@ -2276,7 +2253,7 @@ void GeometryGUI::createPreferences() LightApp_Preferences::Selector, "Geometry", "toplevel_dm" ); int transparency = addPreference( tr( "PREF_TRANSPARENCY" ), genGroup, - LightApp_Preferences::IntSpin, "Geometry", "transparency" ); + LightApp_Preferences::IntSpin, "Geometry", "transparency" ); int defl = addPreference( tr( "PREF_DEFLECTION" ), genGroup, LightApp_Preferences::DblSpin, "Geometry", "deflection_coeff" ); diff --git a/src/GEOMImpl/GEOMImpl_ProjectionDriver.cxx b/src/GEOMImpl/GEOMImpl_ProjectionDriver.cxx index d226969c8..0c34bc8c2 100644 --- a/src/GEOMImpl/GEOMImpl_ProjectionDriver.cxx +++ b/src/GEOMImpl/GEOMImpl_ProjectionDriver.cxx @@ -473,41 +473,43 @@ GetCreationInformation(std::string& theOperationName, switch ( aType ) { case PROJECTION_COPY: - { - GEOMImpl_IMirror aCI( function ); + { + GEOMImpl_IMirror aCI( function ); - AddParam( theParams, "Source object", aCI.GetOriginal() ); - AddParam( theParams, "Target face", aCI.GetPlane() ); - break; - } + AddParam( theParams, "Source object", aCI.GetOriginal() ); + AddParam( theParams, "Target face", aCI.GetPlane() ); + break; + } case PROJECTION_ON_WIRE: - { - GEOMImpl_IProjection aProj (function); + { + GEOMImpl_IProjection aProj (function); - AddParam(theParams, "Point", aProj.GetPoint()); - AddParam(theParams, "Shape", aProj.GetShape()); + AddParam(theParams, "Point", aProj.GetPoint()); + AddParam(theParams, "Shape", aProj.GetShape()); - break; - } + break; + } case PROJECTION_ON_CYLINDER: - { - GEOMImpl_IProjOnCyl aProj (function); - const Standard_Real aLengthAngle = aProj.GetAngleLength(); + { + theOperationName = "PROJ_ON_CYL"; - AddParam(theParams, "Shape", aProj.GetShape()); - AddParam(theParams, "Radius", aProj.GetRadius()); - AddParam(theParams, "Start angle", aProj.GetStartAngle()); + GEOMImpl_IProjOnCyl aProj (function); + const Standard_Real aLengthAngle = aProj.GetAngleLength(); - if (aLengthAngle >= 0.) { - AddParam(theParams, "Length angle", aLengthAngle); - } + AddParam(theParams, "Shape", aProj.GetShape()); + AddParam(theParams, "Radius", aProj.GetRadius()); + AddParam(theParams, "Start angle", aProj.GetStartAngle()); - break; + if (aLengthAngle >= 0.) { + AddParam(theParams, "Length angle", aLengthAngle); } + + break; + } default: return false; } - + return true; } @@ -661,7 +663,7 @@ TopoDS_Shape GEOMImpl_ProjectionDriver::projectOnCylinder GEOMUtils::Handle(HTrsfCurve2d) aTrsfCurve = new GEOMUtils::HTrsfCurve2d(aCurve, aPar[0], aPar[1], aTrsf2d); Approx_Curve2d aConv (aTrsfCurve, aPar[0], aPar[1], - aUResol, aVResol, GeomAbs_C1, + aUResol, aVResol, GeomAbs_C1, 9, 1000); if (!aConv.IsDone() && !aConv.HasResult()) { diff --git a/src/GEOM_I/GEOM_BaseObject_i.cc b/src/GEOM_I/GEOM_BaseObject_i.cc index 5e77c3a45..39e19b427 100644 --- a/src/GEOM_I/GEOM_BaseObject_i.cc +++ b/src/GEOM_I/GEOM_BaseObject_i.cc @@ -268,50 +268,58 @@ char* GEOM_BaseObject_i::GetParameters() */ //================================================================================ -GEOM::CreationInformation* GEOM_BaseObject_i::GetCreationInformation() +GEOM::CreationInformationSeq* GEOM_BaseObject_i::GetCreationInformation() { - GEOM::CreationInformation_var info = new GEOM::CreationInformation; + GEOM::CreationInformationSeq_var info = new GEOM::CreationInformationSeq(); - Handle(GEOM_BaseDriver) driver = - Handle(GEOM_BaseDriver)::DownCast( _impl->GetCreationDriver() ); - if ( !driver.IsNull() ) + std::vector< Handle(TFunction_Driver)> drivers = _impl->GetCreationDrivers(); + info->length( drivers.size() ); + int nbI = 0; + for ( size_t i = 0; i < drivers.size(); ++i ) { - std::vector params; - std::string operationName; - try + Handle(GEOM_BaseDriver) driver = Handle(GEOM_BaseDriver)::DownCast( drivers[i] ); + if ( !driver.IsNull() ) { - OCC_CATCH_SIGNALS; - if ( driver->GetCreationInformation( operationName, params )) + std::vector params; + std::string operationName; + try { - info->operationName = operationName.c_str(); - info->params.length( params.size() ); - for ( size_t i = 0; i < params.size(); ++i ) + OCC_CATCH_SIGNALS; + if ( driver->GetCreationInformation( operationName, params )) { - info->params[i].name = params[i].name.c_str(); - info->params[i].value = params[i].value.c_str(); + info[nbI].operationName = operationName.c_str(); + info[nbI].params.length( params.size() ); + for ( size_t i = 0; i < params.size(); ++i ) + { + info[nbI].params[i].name = params[i].name.c_str(); + info[nbI].params[i].value = params[i].value.c_str(); + } + nbI++; } - } #ifdef _DEBUG_ - if ( operationName.empty() ) + if ( operationName.empty() ) + { + cout << endl << endl << endl << "Warning: " << endl << "Dear developer!!!" << endl + << " Consider implementing " + << typeid(*(driver.operator->())).name() << "::GetCreationInformation() " << endl + << " for the case of operation which has created '" << GetName() << "' object" << endl + << "PLEEEEEEEASE" << endl + << "\tPLEEEEEEEASE" << endl + << "\t\tPLEEEEEEEASE" << endl + << "\t\t\tPLEEEEEEEASE" << endl + << "\t\t\t\tPLEEEEEEEASE" << endl; + } +#endif + } + catch(...) { - cout << endl << endl << endl << "Warning: " << endl << "Dear developer!!!" << endl - << " Consider implementing " - << typeid(*(driver.operator->())).name() << "::GetCreationInformation() " << endl - << " for the case of operation which has created '" << GetName() << "' object" << endl - << "PLEEEEEEEASE" << endl - << "\tPLEEEEEEEASE" << endl - << "\t\tPLEEEEEEEASE" << endl - << "\t\t\tPLEEEEEEEASE" << endl - << "\t\t\t\tPLEEEEEEEASE" << endl; - } -#endif - } - catch(...) - { #ifdef _DEBUG_ - cout << "Ecxeption in GEOM_BaseObject_i::GetCreationInformation()" << endl; + cout << "Ecxeption in GEOM_BaseObject_i::GetCreationInformation()" << endl; #endif + } } } + info->length( nbI ); + return info._retn(); } diff --git a/src/GEOM_I/GEOM_BaseObject_i.hh b/src/GEOM_I/GEOM_BaseObject_i.hh index e7988fdf3..aeb291ca7 100644 --- a/src/GEOM_I/GEOM_BaseObject_i.hh +++ b/src/GEOM_I/GEOM_BaseObject_i.hh @@ -66,7 +66,7 @@ class GEOM_I_EXPORT GEOM_BaseObject_i : public virtual POA_GEOM::GEOM_BaseObject virtual char* GetParameters(); - virtual GEOM::CreationInformation* GetCreationInformation(); + virtual GEOM::CreationInformationSeq* GetCreationInformation(); Handle(GEOM_BaseObject) GetImpl() { return _impl; } diff --git a/src/GEOM_I/GEOM_Gen_i.cc b/src/GEOM_I/GEOM_Gen_i.cc index 3c6a97386..7a824de35 100755 --- a/src/GEOM_I/GEOM_Gen_i.cc +++ b/src/GEOM_I/GEOM_Gen_i.cc @@ -320,24 +320,25 @@ SALOMEDS::SObject_ptr GEOM_Gen_i::PublishInStudy(SALOMEDS::Study_ptr theStudy, aResultSO->SetAttrString("AttributePixMap","ICON_OBJBROWSER_LCS"); aNamePrefix = "LocalCS_"; } else if ( mytype >= USER_TYPE_EX ) { - char buf[20]; - sprintf( buf, "%d", aBaseObj->GetType() ); - GEOM::CreationInformation_var info = aBaseObj->GetCreationInformation(); - std::string plgId; - for ( size_t i = 0; i < info->params.length(); ++i ) { - std::string param_name = info->params[i].name.in(); - std::string param_value = info->params[i].value.in(); - if( param_name == PLUGIN_NAME) { - plgId = param_value; - break; - } + char buf[20]; + sprintf( buf, "%d", aBaseObj->GetType() ); + GEOM::CreationInformationSeq_var infoSeq = aBaseObj->GetCreationInformation(); + std::string plgId; + for ( size_t j = 0; j < infoSeq->length(); ++j ) + for ( size_t i = 0; i < infoSeq[j].params.length(); ++i ) { + std::string param_name = infoSeq[j].params[i].name.in(); + std::string param_value = infoSeq[j].params[i].value.in(); + if( param_name == PLUGIN_NAME) { + plgId = param_value; + break; + } } - if(plgId.length() > 0 ) { - plgId += "::"; - } - plgId +="ICON_OBJBROWSER_"; - plgId += buf; - aResultSO->SetAttrString("AttributePixMap",plgId.c_str()); + if(plgId.length() > 0 ) { + plgId += "::"; + } + plgId +="ICON_OBJBROWSER_"; + plgId += buf; + aResultSO->SetAttrString("AttributePixMap",plgId.c_str()); } else if ( mytype > USER_TYPE ) { char buf[20]; sprintf( buf, "%d", aBaseObj->GetType() ); diff --git a/src/GEOM_SWIG/geomBuilder.py b/src/GEOM_SWIG/geomBuilder.py index 270c45b35..60304b987 100644 --- a/src/GEOM_SWIG/geomBuilder.py +++ b/src/GEOM_SWIG/geomBuilder.py @@ -9161,7 +9161,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): self._autoPublish(anObj, theName, "projection") return anObj - ## Create a projection projection of the given point on a wire or an edge. + ## Create a projection of the given point on a wire or an edge. # If there are no solutions or there are 2 or more solutions It throws an # exception. # @param thePoint the point to be projected. @@ -9179,7 +9179,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): @ManageTransactions("TrsfOp") def MakeProjectionOnWire(self, thePoint, theWire, theName=None): """ - Create a projection projection of the given point on a wire or an edge. + Create a projection of the given point on a wire or an edge. If there are no solutions or there are 2 or more solutions It throws an exception. From 354aaa03b1034ac7bf4f481ef2f100c57d3c30a9 Mon Sep 17 00:00:00 2001 From: eap Date: Fri, 24 Apr 2015 18:04:30 +0300 Subject: [PATCH 17/45] 52713: Wrong creation info for ProjectionOnCylinder object fix Python API of GetCreationInformation() --- src/GEOM_SWIG/geomBuilder.py | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/src/GEOM_SWIG/geomBuilder.py b/src/GEOM_SWIG/geomBuilder.py index 60304b987..ccbad10f6 100644 --- a/src/GEOM_SWIG/geomBuilder.py +++ b/src/GEOM_SWIG/geomBuilder.py @@ -10966,14 +10966,17 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): return aDict def GetCreationInformation(self, theShape): - info = theShape.GetCreationInformation() - # operationName - opName = info.operationName - if not opName: opName = "no info available" - res = "Operation: " + opName - # parameters - for parVal in info.params: - res += " \n %s = %s" % ( parVal.name, parVal.value ) + res = '' + infos = theShape.GetCreationInformation() + for info in infos: + # operationName + opName = info.operationName + if not opName: opName = "no info available" + if res: res += "\n" + res += "Operation: " + opName + # parameters + for parVal in info.params: + res += "\n \t%s = %s" % ( parVal.name, parVal.value ) return res ## Get a point, situated at the centre of mass of theShape. From 8febd640e20590e6935d5b331e33e0ebfdf7b5f4 Mon Sep 17 00:00:00 2001 From: eap Date: Fri, 24 Apr 2015 18:25:52 +0300 Subject: [PATCH 18/45] IPAL52714: Wrong creation information of Thickness GEOM object --- src/GEOMImpl/GEOMImpl_OffsetDriver.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/GEOMImpl/GEOMImpl_OffsetDriver.cxx b/src/GEOMImpl/GEOMImpl_OffsetDriver.cxx index da393a67e..112966a3f 100644 --- a/src/GEOMImpl/GEOMImpl_OffsetDriver.cxx +++ b/src/GEOMImpl/GEOMImpl_OffsetDriver.cxx @@ -210,7 +210,7 @@ GetCreationInformation(std::string& theOperationName, break; case OFFSET_THICKENING: case OFFSET_THICKENING_COPY: - theOperationName = "MakeThickening"; + theOperationName = "THICKNESS"; AddParam( theParams, "Object", aCI.GetShape() ); AddParam( theParams, "Offset", aCI.GetParam() ? -aCI.GetValue() : aCI.GetValue() ); { From 3e008980d404aacbbfda91fdcfd289f6dac267f4 Mon Sep 17 00:00:00 2001 From: vsr Date: Tue, 28 Apr 2015 14:11:21 +0300 Subject: [PATCH 19/45] 0023057: [EDF GEOM] Direction of edge of a circle has changed on Salome V7_6_BR 0023058: [CEA 1493] Regression : MakeDiskPntVecR does not create the same disk as before --- src/GEOMImpl/GEOMImpl_DiskDriver.cxx | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/GEOMImpl/GEOMImpl_DiskDriver.cxx b/src/GEOMImpl/GEOMImpl_DiskDriver.cxx index 76a6b30dc..460f1050d 100644 --- a/src/GEOMImpl/GEOMImpl_DiskDriver.cxx +++ b/src/GEOMImpl/GEOMImpl_DiskDriver.cxx @@ -95,7 +95,8 @@ Standard_Integer GEOMImpl_DiskDriver::Execute(TFunction_Logbook& log) const gp_Ax2 anAxes (aP, aV); gp_Ax3 anAxes3(anAxes); gp_Pln aPln(anAxes3); - gp_Circ aCirc (anAxes, aCI.GetRadius()); + gp_Ax2 anAxes1(aP, -aV); + gp_Circ aCirc (anAxes1, aCI.GetRadius()); TopoDS_Shape aCircle = BRepBuilderAPI_MakeEdge(aCirc).Edge(); BRepBuilderAPI_MakeWire MW; MW.Add(TopoDS::Edge(aCircle)); @@ -123,9 +124,10 @@ Standard_Integer GEOMImpl_DiskDriver::Execute(TFunction_Logbook& log) const Standard_ConstructionError::Raise("Disk creation aborted: coincident points given"); if (gp_Vec(aP1, aP2).IsParallel(gp_Vec(aP1, aP3), Precision::Angular())) Standard_ConstructionError::Raise("Disk creation aborted: points lay on one line"); - Handle(Geom_Circle) aCirc = GC_MakeCircle(aP1, aP2, aP3).Value(); + Handle(Geom_Circle) aCirc = GC_MakeCircle(aP3, aP2, aP1).Value(); gp_Circ aGpCirc = aCirc->Circ(); - gp_Ax3 anAxes3(aGpCirc.Position()); + gp_Ax2 anAxes = aGpCirc.Position(); + gp_Ax3 anAxes3(anAxes.Location(), -anAxes.Direction()); gp_Pln aPln(anAxes3); TopoDS_Shape aCircle = BRepBuilderAPI_MakeEdge(aCirc).Edge(); BRepBuilderAPI_MakeWire MW; @@ -146,9 +148,10 @@ Standard_Integer GEOMImpl_DiskDriver::Execute(TFunction_Logbook& log) const aV = gp::DY(); gp_Ax2 anAxes (aP, aV); + gp_Ax2 anAxes1(aP, -aV); gp_Ax3 anAxes3(anAxes); gp_Pln aPln(anAxes3); - gp_Circ aCirc (anAxes, aCI.GetRadius()); + gp_Circ aCirc (anAxes1, aCI.GetRadius()); TopoDS_Shape aCircle = BRepBuilderAPI_MakeEdge(aCirc).Edge(); BRepBuilderAPI_MakeWire MW; MW.Add(TopoDS::Edge(aCircle)); From 462ad02a36ed4f93d173c46d0d8a17a63ae653cf Mon Sep 17 00:00:00 2001 From: vsr Date: Tue, 28 Apr 2015 17:07:20 +0300 Subject: [PATCH 20/45] IPAL52720: TC 7.6.0: Interpolation of curve creation is incorrect 1) Fix regression caused by commit cd24269e (issue 0022885); 2) Throw away points which are too close to each other after reordering. --- src/GEOMImpl/GEOMImpl_SplineDriver.cxx | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/src/GEOMImpl/GEOMImpl_SplineDriver.cxx b/src/GEOMImpl/GEOMImpl_SplineDriver.cxx index 4b15e3277..c4c3b509d 100644 --- a/src/GEOMImpl/GEOMImpl_SplineDriver.cxx +++ b/src/GEOMImpl/GEOMImpl_SplineDriver.cxx @@ -55,7 +55,7 @@ // Below macro specifies how the closed point set is processed (issue 0022885). // See below for more information. // Currently solution 4 is chosen! -#define BSPLINE_PROCESS_CLOSED_PNTSET 4 +#define BSPLINE_PROCESS_CLOSED_PNTSET 2 namespace { @@ -152,6 +152,8 @@ Standard_Integer GEOMImpl_SplineDriver::Execute(TFunction_Logbook& log) const // reorder points if required (bspline only) if ((aType == SPLINE_INTERPOLATION || aType == SPLINE_INTERPOL_TANGENTS) && aCI.GetDoReordering()) { + int nbDup = 0; + gp_Pnt pPrev = points->Value(1); for (int i = 1; i < length - 1; i++) { gp_Pnt pi = points->Value(i); int nearest = 0; @@ -175,6 +177,22 @@ Standard_Integer GEOMImpl_SplineDriver::Execute(TFunction_Logbook& log) const points->SetValue(j, points->Value(j-1)); points->SetValue(i+1, p); } + if ( pPrev.Distance(points->Value(i+1)) <= Precision::Confusion() ) + nbDup++; + else + pPrev = points->Value(i+1); + } + if ( nbDup > 0 ) { + Handle(TColgp_HArray1OfPnt) tmpPoints = new TColgp_HArray1OfPnt(1, length-nbDup); + int j = 1; + for (int i = 1; i <= length; i++) { + if (i == 1 || pPrev.Distance(points->Value(i)) > Precision::Confusion() ) { + tmpPoints->SetValue(j++, points->Value(i)); + pPrev = points->Value(i); + } + } + points = tmpPoints; + length = points->Length(); } } // end of reordering From 8620d4d7358d0bb8c3216b5295d3a100c902278b Mon Sep 17 00:00:00 2001 From: rnv Date: Wed, 29 Apr 2015 16:44:24 +0300 Subject: [PATCH 21/45] Fix for the "52700: Bad processing of selection button in Point creation dialog box" issue. --- src/BasicGUI/BasicGUI_PointDlg.cxx | 6 +++--- src/GroupGUI/GroupGUI_GroupDlg.cxx | 18 ++++++++++++++++-- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/src/BasicGUI/BasicGUI_PointDlg.cxx b/src/BasicGUI/BasicGUI_PointDlg.cxx index 84b9a7bd5..983666d28 100644 --- a/src/BasicGUI/BasicGUI_PointDlg.cxx +++ b/src/BasicGUI/BasicGUI_PointDlg.cxx @@ -613,9 +613,9 @@ void BasicGUI_PointDlg::SetEditCurrentArgument() } send->setDown(true); - if ((send == GroupLineIntersection->PushButton1 || - send == GroupLineIntersection->PushButton2) && !myBusy) - SelectionIntoArgument(); + // if ((send == GroupLineIntersection->PushButton1 || + // send == GroupLineIntersection->PushButton2) && !myBusy) + // SelectionIntoArgument(); } diff --git a/src/GroupGUI/GroupGUI_GroupDlg.cxx b/src/GroupGUI/GroupGUI_GroupDlg.cxx index 82a51075e..68b6314b1 100644 --- a/src/GroupGUI/GroupGUI_GroupDlg.cxx +++ b/src/GroupGUI/GroupGUI_GroupDlg.cxx @@ -439,11 +439,17 @@ void GroupGUI_GroupDlg::SetEditCurrentArgument() if (send == mySelBtn) { myEditCurrentArgument = myMainName; myShape2Name->setText(""); + mySelBtn->setDown(true); + mySelBtn2->setDown(false); } else if (send == mySelBtn2 || sender() == myRestrictGroup) { setInPlaceObj(GEOM::GEOM_Object::_nil()); myShape2Name->setText(""); - if (subSelectionWay() != ALL_SUBSHAPES) { + if ( send == mySelBtn2 ) { + mySelBtn2->setDown(true); + mySelBtn->setDown(false); + } + if (subSelectionWay() != ALL_SUBSHAPES) { myEditCurrentArgument = myShape2Name; } else { @@ -451,7 +457,11 @@ void GroupGUI_GroupDlg::SetEditCurrentArgument() } } - activateSelection(); + // activateSelection(); + if(myEditCurrentArgument) { + myEditCurrentArgument->setFocus(); + send->setDown(true); + } updateState(); } @@ -558,6 +568,9 @@ void GroupGUI_GroupDlg::SelectionIntoArgument() { if (subSelectionWay() != ALL_SUBSHAPES && myEditCurrentArgument == myShape2Name) { onGetInPlace(); + if( !myInPlaceObj->_is_nil() ) { + mySelBtn2->setDown(false); + } return; } @@ -582,6 +595,7 @@ void GroupGUI_GroupDlg::SelectionIntoArgument() } myMainObj = anObj; if (!CORBA::is_nil(myMainObj)) { + mySelBtn->setDown(false); SALOME_View* view = GEOM_Displayer::GetActiveView(); if (view) { CORBA::String_var aMainEntry = myMainObj->GetStudyEntry(); From 939beceaf89288d6d03ec783f17d61b18c43ec18 Mon Sep 17 00:00:00 2001 From: vsr Date: Wed, 29 Apr 2015 17:10:44 +0300 Subject: [PATCH 22/45] 0023055: EDF 10725 GEOM: In the shape recognition functionality, it is not possible to select an area for the filtering sample --- src/EntityGUI/EntityGUI_FeatureDetectorDlg.cxx | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/EntityGUI/EntityGUI_FeatureDetectorDlg.cxx b/src/EntityGUI/EntityGUI_FeatureDetectorDlg.cxx index a2d7c67a2..8a35f1681 100644 --- a/src/EntityGUI/EntityGUI_FeatureDetectorDlg.cxx +++ b/src/EntityGUI/EntityGUI_FeatureDetectorDlg.cxx @@ -26,7 +26,8 @@ // SALOME includes #include "EntityGUI_FeatureDetectorDlg.h" -#include +#include "ShapeRec_FeatureDetector.hxx" +#include "GEOM_Constants.h" #include #include @@ -444,13 +445,20 @@ void EntityGUI_FeatureDetectorDlg::SelectionIntoArgument() } else return ; - - std::string theImgFileName = myAISShape->TextureFile(); - if ( theImgFileName == "" ) + + SalomeApp_Study* study = dynamic_cast( SUIT_Session::session()->activeApplication()->activeStudy() ); + if ( !study ) return; + LightApp_Application* app = ::qobject_cast( study->application() ); + if ( !app ) return; + SUIT_ViewManager* vm = app->activeViewManager(); + if ( !vm ) return; + PropMap propMap = study->getObjectProperties( vm->getGlobalId(), myFaceEntry ); + QString theImgFileName = propMap.value( GEOM::propertyName( GEOM::Texture ) ).toString(); + if ( theImgFileName.isEmpty() ) return ; // Setting the image caracteristics - myDetector->SetPath( theImgFileName ); + myDetector->SetPath( theImgFileName.toStdString() ); height = myDetector->GetImgHeight(); width = myDetector->GetImgWidth(); pictureLeft = -0.5 * width; // X coordinate of the top left corner of the background image in the view From ebcf62307947c5d7380c1705b39876fa3e3a2237 Mon Sep 17 00:00:00 2001 From: skv Date: Wed, 29 Apr 2015 17:30:40 +0300 Subject: [PATCH 23/45] Fix for the test advanced_geom_objs_ex01.py --- .../AdvancedEngine_IOperations.cxx | 68 ++----------------- 1 file changed, 7 insertions(+), 61 deletions(-) diff --git a/src/AdvancedEngine/AdvancedEngine_IOperations.cxx b/src/AdvancedEngine/AdvancedEngine_IOperations.cxx index d311338c9..cddf9c5cf 100644 --- a/src/AdvancedEngine/AdvancedEngine_IOperations.cxx +++ b/src/AdvancedEngine/AdvancedEngine_IOperations.cxx @@ -1474,70 +1474,16 @@ bool AdvancedEngine_IOperations::MakePipeTShapePartition(Handle(GEOM_Object) the face_t->GetLastFunction()->SetDescription(""); theShapes.push_back(face_t); - gp_Pnt aP2 = BRep_Tool::Pnt(TopoDS::Vertex(P2->GetValue())); - gp_Pnt aP5 = BRep_Tool::Pnt(TopoDS::Vertex(vi1->GetValue())); - double deltaZ = aP2.Z() - aP5.Z(); - // std::cerr << "Creating new point from vi1 with deltaZ = " << deltaZ << std::endl; - Handle(GEOM_Object) P5bis = myTransformOperations->TranslateDXDYDZCopy(vi1, 0, 0, deltaZ); - if (P5bis.IsNull()) { - SetErrorCode("Impossible to translate vertex"); + // Create a prism from edge_chan_inc + Handle(GEOM_Object) aPrismDir = myBasicOperations->MakeVectorDXDYDZ(1., 1., 0.); + + if (aPrismDir.IsNull()) { + SetErrorCode("Impossible to build Prism direction"); return false; } - P5bis->GetLastFunction()->SetDescription(""); + aPrismDir->GetLastFunction()->SetDescription(""); + face_t2 = my3DPrimOperations->MakePrismVecH(edge_chan_inc, aPrismDir, theR2 + theW2); - gp_Pnt aP4 = BRep_Tool::Pnt(TopoDS::Vertex(P4->GetValue())); - gp_Pnt aP6 = BRep_Tool::Pnt(TopoDS::Vertex(vi2->GetValue())); - deltaZ = aP4.Z() - aP6.Z(); - // std::cerr << "Creating new point from vi2 with deltaZ = " << deltaZ << std::endl; - Handle(GEOM_Object) P6bis = myTransformOperations->TranslateDXDYDZCopy(vi2, 0, 0, deltaZ); - if (P6bis.IsNull()) { - SetErrorCode("Impossible to translate vertex"); - return false; - } - P6bis->GetLastFunction()->SetDescription(""); - - // std::cerr << "Creating new line 1 from 2 previous points" << std::endl; - Handle(GEOM_Object) Cote_3 = myBasicOperations->MakeLineTwoPnt(P5bis, P2); - if (Cote_3.IsNull()) { - SetErrorCode("Impossible to build edge in thickness"); - return false; - } - Cote_3->GetLastFunction()->SetDescription(""); - - // std::cerr << "Creating new line 2 from 2 previous points" << std::endl; - Handle(GEOM_Object) Cote_4 = myBasicOperations->MakeLineTwoPnt(P6bis, P4); - if (Cote_4.IsNull()) { - SetErrorCode("Impossible to build edge in thickness"); - return false; - } - Cote_4->GetLastFunction()->SetDescription(""); - - // std::cerr << "Creating new line 3 from 2 previous points" << std::endl; - Handle(GEOM_Object) Cote_5 = myBasicOperations->MakeLineTwoPnt(P5bis, P6bis); - if (Cote_4.IsNull()) { - SetErrorCode("Impossible to build edge in thickness"); - return false; - } - Cote_5->GetLastFunction()->SetDescription(""); - - //std::list edgeList2; - //edgeList2.push_back(edge_chan_inc); - //edgeList2.push_back(Cote_3); - //edgeList2.push_back(Cote_5); - //edgeList2.push_back(Cote_4); - // std::cerr << "Creating wire 2" << std::endl; - //wire_t2 = myShapesOperations->MakeWire(edgeList2, 1e-7); - //if (wire_t2.IsNull()) { - // SetErrorCode("Impossible to build wire"); - // return false; - //} - //wire_t2->GetLastFunction()->SetDescription(""); - // std::cerr << "Creating face 2" << std::endl; - //face_t2 = myShapesOperations->MakeFace(wire_t2, false); - - // Mantis issue 0021682 - face_t2 = my3DPrimOperations->MakePrismVecH(edge_chan_inc, Cote_4, - (theR2 + theW2)); - //face_t2 = my3DPrimOperations->MakePrismVecH(edge_chan_inc, Cote_4, - 2.0*theR2); if (face_t2.IsNull()) { SetErrorCode("Impossible to build face"); return false; From a864dc1826151837a66635d95b94a05f09e45000 Mon Sep 17 00:00:00 2001 From: rnv Date: Thu, 30 Apr 2015 14:26:53 +0300 Subject: [PATCH 24/45] Fix for the '52718: TC7.6.0:size of local coordinate system is different in comparison of salome version 7.4.0 and selection mechanizm does not work' issue: now LCS presentations are selectable in the VTK Viewer. --- src/OBJECT/GEOM_VTKTrihedron.cxx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/OBJECT/GEOM_VTKTrihedron.cxx b/src/OBJECT/GEOM_VTKTrihedron.cxx index 2cb53b854..54cf54fe2 100644 --- a/src/OBJECT/GEOM_VTKTrihedron.cxx +++ b/src/OBJECT/GEOM_VTKTrihedron.cxx @@ -259,6 +259,7 @@ void GEOM_VTKTrihedron::SetSize( double theSize ) aRes->AddInputConnection( aSrcZ->GetOutputPort() ); myMapper->SetInputConnection( aRes->GetOutputPort() ); + aRes->Update(); SALOME_Actor::SetMapper( myMapper ); aSrcX->Delete(); From 18a41b7599f126c5785c302a2f6af7d9848a98c0 Mon Sep 17 00:00:00 2001 From: eap Date: Thu, 30 Apr 2015 14:57:25 +0300 Subject: [PATCH 25/45] 23034: EDF GEOM: Information after a transformation without copy Show "(No info available)" --- src/GEOMGUI/GEOMGUI_CreationInfoWdg.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/GEOMGUI/GEOMGUI_CreationInfoWdg.cxx b/src/GEOMGUI/GEOMGUI_CreationInfoWdg.cxx index f77dc535c..5c3681e28 100644 --- a/src/GEOMGUI/GEOMGUI_CreationInfoWdg.cxx +++ b/src/GEOMGUI/GEOMGUI_CreationInfoWdg.cxx @@ -106,7 +106,7 @@ void GEOMGUI_CreationInfoWdg::setInfo( GEOM::CreationInformationSeq& info ) try { - if ( &info ) + if ( &info && info.length() > 0 ) { SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); for ( int j = 0, nb = info.length(); j < nb; ++j ) From f97146650479e1172ced7dba227382a2e203c4ad Mon Sep 17 00:00:00 2001 From: vsr Date: Tue, 5 May 2015 14:59:30 +0300 Subject: [PATCH 26/45] 0023090: [CEA 1510] Error at Salome launch with Japanese language --- src/GEOMGUI/GeometryGUI.cxx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/GEOMGUI/GeometryGUI.cxx b/src/GEOMGUI/GeometryGUI.cxx index e63305ce2..3e61afba7 100644 --- a/src/GEOMGUI/GeometryGUI.cxx +++ b/src/GEOMGUI/GeometryGUI.cxx @@ -1751,8 +1751,8 @@ bool GeometryGUI::activateModule( SUIT_Study* study ) else { PyObjWrapper result = PyObject_CallMethod(pluginsmanager, (char*)"initialize", (char*)"isss", 1, "geom", - tr("MEN_NEW_ENTITY").toStdString().c_str(), - tr("GEOM_PLUGINS_OTHER").toStdString().c_str()); + tr("MEN_NEW_ENTITY").toUtf8().data(), + tr("GEOM_PLUGINS_OTHER").toUtf8().data()); if ( !result ) PyErr_Print(); } From 474f3f809890a35ded56c648b368d04466f76322 Mon Sep 17 00:00:00 2001 From: Florian BRUNET Date: Mon, 4 May 2015 15:04:24 +0200 Subject: [PATCH 27/45] Minor fixes to handle boundary values of the angle for the portion of cylinder primitive. --- src/GEOM_SWIG/geomBuilder.py | 12 ++++++++---- src/PrimitiveGUI/PrimitiveGUI_CylinderDlg.cxx | 2 +- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/GEOM_SWIG/geomBuilder.py b/src/GEOM_SWIG/geomBuilder.py index ccbad10f6..f932a632a 100644 --- a/src/GEOM_SWIG/geomBuilder.py +++ b/src/GEOM_SWIG/geomBuilder.py @@ -3055,10 +3055,12 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): theR,theH,theA,Parameters = ParseParameters(theR, theH, theA) if flag: theA = theA*math.pi/180. - anObj = self.PrimOp.MakeCylinderPntVecRHA(thePnt, theAxis, theR, theH, theA) - RaiseIfFailed("MakeCylinderPntVecRHA", self.PrimOp) - anObj.SetParameters(Parameters) - self._autoPublish(anObj, theName, "cylinder") + if theA<=0. or theA>=2*math.pi: + raise ValueError("The angle parameter should be strictly between 0 and 2*pi.") + anObj = self.PrimOp.MakeCylinderPntVecRHA(thePnt, theAxis, theR, theH, theA) + RaiseIfFailed("MakeCylinderPntVecRHA", self.PrimOp) + anObj.SetParameters(Parameters) + self._autoPublish(anObj, theName, "cylinder") return anObj ## Create a cylinder with given radius and height at @@ -3136,6 +3138,8 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): theR,theH,theA,Parameters = ParseParameters(theR, theH, theA) if flag: theA = theA*math.pi/180. + if theA<=0. or theA>=2*math.pi: + raise ValueError("The angle parameter should be strictly between 0 and 2*pi.") anObj = self.PrimOp.MakeCylinderRHA(theR, theH, theA) RaiseIfFailed("MakeCylinderRHA", self.PrimOp) anObj.SetParameters(Parameters) diff --git a/src/PrimitiveGUI/PrimitiveGUI_CylinderDlg.cxx b/src/PrimitiveGUI/PrimitiveGUI_CylinderDlg.cxx index 9149eee9f..fd30c9b44 100644 --- a/src/PrimitiveGUI/PrimitiveGUI_CylinderDlg.cxx +++ b/src/PrimitiveGUI/PrimitiveGUI_CylinderDlg.cxx @@ -411,7 +411,7 @@ bool PrimitiveGUI_CylinderDlg::isValid (QString& msg) { ok = GroupDimensions->SpinBox_DX->isValid( msg, !IsPreview() ) && GroupDimensions->SpinBox_DY->isValid( msg, !IsPreview() ) && - ( GroupDimensions->checkBox->isChecked() || GroupDimensions->SpinBox_DZ->isValid( msg, !IsPreview() ) ); + ( !GroupDimensions->checkBox->isChecked() || GroupDimensions->SpinBox_DZ->isValid( msg, !IsPreview() ) ); if ( GroupDimensions->checkBox->isChecked() && ( GroupDimensions->SpinBox_DZ->value() <= 0. || GroupDimensions->SpinBox_DZ->value() >= 360. ) ) { msg += tr("GEOM_CYLINDER_ANGLE_ERR") + "\n"; From 6c27d2b4d562b229293c7ff523038afd2a216bd3 Mon Sep 17 00:00:00 2001 From: Christophe Bourcier Date: Tue, 5 May 2015 16:01:23 +0200 Subject: [PATCH 28/45] Update translation files from Crowdin --- src/BREPPlugin/BREPPlugin_msg_ja.ts | 2 +- .../resources/DependencyTree_msg_fr.ts | 6 +- .../resources/DependencyTree_msg_ja.ts | 18 +- src/GEOMGUI/GEOM_msg_en.ts | 94 +- src/GEOMGUI/GEOM_msg_fr.ts | 172 +++- src/GEOMGUI/GEOM_msg_ja.ts | 805 +++++++++++------- src/IGESPlugin/IGESPlugin_msg_ja.ts | 2 +- src/STEPPlugin/STEPPlugin_msg_ja.ts | 2 +- src/STLPlugin/STLPlugin_msg_ja.ts | 6 +- src/VTKPlugin/VTKPlugin_msg_ja.ts | 4 +- src/XAOPlugin/XAOPlugin_msg_ja.ts | 24 +- 11 files changed, 724 insertions(+), 411 deletions(-) diff --git a/src/BREPPlugin/BREPPlugin_msg_ja.ts b/src/BREPPlugin/BREPPlugin_msg_ja.ts index cca0947a3..cc1bb291f 100644 --- a/src/BREPPlugin/BREPPlugin_msg_ja.ts +++ b/src/BREPPlugin/BREPPlugin_msg_ja.ts @@ -32,7 +32,7 @@ BREPPlugin_GUI BREP_FILES - BREPファイル + BREP ファイル ( *.brep ) EXPORT_TITLE diff --git a/src/DependencyTree/resources/DependencyTree_msg_fr.ts b/src/DependencyTree/resources/DependencyTree_msg_fr.ts index 33c54ff5a..8e838db17 100644 --- a/src/DependencyTree/resources/DependencyTree_msg_fr.ts +++ b/src/DependencyTree/resources/DependencyTree_msg_fr.ts @@ -31,16 +31,14 @@ UPDATE Mise à jour - - DependencyTree_ViewModel MEN_REBUILD_THE_TREE - Rebuild the tree + Reconstruire l'arbre MEN_REDUCE_STUDY - Reduce study + Réduire l'étude diff --git a/src/DependencyTree/resources/DependencyTree_msg_ja.ts b/src/DependencyTree/resources/DependencyTree_msg_ja.ts index a463109e8..b53b0f588 100644 --- a/src/DependencyTree/resources/DependencyTree_msg_ja.ts +++ b/src/DependencyTree/resources/DependencyTree_msg_ja.ts @@ -5,40 +5,40 @@ DependencyTree_View DEPENDENCY_TREE - Dependency Tree + 依存関係ツリー MOVE_NODES - Move nodes + ノードの移動 HIERARCHY_DEPTH - Hierarchy depth + 階層の深さ DISPLAY_ASCENDANTS - Display ascendants + 上位の表示 DISPLAY_DESCENDANTS - Display descendants + 下位の表示 SHOW_ALL - Show all + すべてを表示 UPDATE - Update + 更新 DependencyTree_ViewModel MEN_REBUILD_THE_TREE - Rebuild the tree + ツリーの再構築 MEN_REDUCE_STUDY - Reduce study + スタディの削減 diff --git a/src/GEOMGUI/GEOM_msg_en.ts b/src/GEOMGUI/GEOM_msg_en.ts index 795130835..72fb131e1 100644 --- a/src/GEOMGUI/GEOM_msg_en.ts +++ b/src/GEOMGUI/GEOM_msg_en.ts @@ -537,7 +537,7 @@ Please, select face, shell or solid and try again GEOM_CYLINDER_ANGLE_ERR - Angle values 0 and 360 are unsafe to build proper volumes. Please uncheck the "Angle" box to use the regular cylinder constructor. + Angle values 0 and 360 are unsafe to build proper volumes. Please uncheck the "Angle" box to use the regular cylinder constructor. GEOM_D1 @@ -2473,12 +2473,12 @@ Please, select face, shell or solid and try again 2D Polyline - TOP_CURVE_CREATOR - Create 2D polyline + TOP_CURVE_CREATOR + Create 2D polyline - STB_CURVE_CREATOR - Create 2D polyline + STB_CURVE_CREATOR + Create 2D polyline MEN_ALL_SEL_ONLY @@ -3591,8 +3591,8 @@ Please, select face, shell or solid and try again STB_FAST_CHECK_INTERSECTIONS Fast intersection - - + + STB_CHECK_FREE_BNDS Check free boundaries @@ -5735,23 +5735,23 @@ shells and solids on the other hand. - CurveCreator_TableView - - TABLE_SECTION - Section - - - TABLE_INDEX - Index - - - TABLE_X - X - - - TABLE_Y - Y - + CurveCreator_TableView + + TABLE_SECTION + Section + + + TABLE_INDEX + Index + + + TABLE_X + X + + + TABLE_Y + Y + CurveCreator_Widget @@ -7175,7 +7175,7 @@ Do you want to create new material? Main shape - GEOM_INSPECT_OBJECT_SHOW + GEOM_INSPECT_OBJECT_SHOW Show Selected @@ -7287,22 +7287,22 @@ Do you want to create new material? GEOM_CHECK_INTE_V_E Vertex to Edge + all above - - GEOM_CHECK_INTE_E_E - Edge to Edge + all above - - - GEOM_CHECK_INTE_V_F - Vertex to Face + all above - - - GEOM_CHECK_INTE_E_F - Edge to Face + all above - - - GEOM_CHECK_INTE_ALL - Face to Face + all above - + + GEOM_CHECK_INTE_E_E + Edge to Edge + all above + + + GEOM_CHECK_INTE_V_F + Vertex to Face + all above + + + GEOM_CHECK_INTE_E_F + Edge to Face + all above + + + GEOM_CHECK_INTE_ALL + Face to Face + all above + MeasureGUI_FastCheckIntersectionsDlg @@ -7451,16 +7451,16 @@ Do you want to create new material? TransformationGUI_ProjectionOnCylDlg - GEOM_PROJ_ON_CYL_TITLE - Projection On A Cylinder + GEOM_PROJ_ON_CYL_TITLE + Projection On A Cylinder - GEOM_PROJ_ON_CYL_START_ANGLE - Starting angle + GEOM_PROJ_ON_CYL_START_ANGLE + Starting angle - GEOM_PROJ_ON_CYL_LENGTH_ANGLE - Length angle + GEOM_PROJ_ON_CYL_LENGTH_ANGLE + Length angle diff --git a/src/GEOMGUI/GEOM_msg_fr.ts b/src/GEOMGUI/GEOM_msg_fr.ts index 1a43273b6..203e4d6aa 100644 --- a/src/GEOMGUI/GEOM_msg_fr.ts +++ b/src/GEOMGUI/GEOM_msg_fr.ts @@ -675,6 +675,18 @@ Choisissez une face, une coque ou un solide et essayez de nouveau GEOM_EXTRUSION_TITLE Construction par extrusion + + GEOM_THICKNESS_TITLE + Epaississement + + + GEOM_THICKNESS_NAME + Epaississement + + + GEOM_TOWARDS_INSIDE + Epaissit vers l'intérieur + GEOM_SCALE_PRISM Appliquer le facteur d'échelle @@ -1248,6 +1260,10 @@ Choisissez une face, une coque ou un solide et essayez de nouveau GEOM_PROJECTION_TITLE Projection sur une face + + GEOM_PROJECTION_NAME + Projection + GEOM_PROJ_ON_FACE_SOURCE Point, arête ou contour source @@ -1396,6 +1412,14 @@ Choisissez une face, une coque ou un solide et essayez de nouveau GEOM_SELECT_UNPUBLISHED_EDGES Choisir les arêtes non-publiées + + GEOM_GENERATE_GROUPS + Générer les groupes + + + GEOM_GROUP_NAME_PREFIX + Préfixe des groupes + GEOM_PLANE Plan @@ -2404,6 +2428,26 @@ Choisissez une face, une coque ou un solide et essayez de nouveau WRN_NULL_OBJECT_OR_SHAPE La forme %1 pour la création d'un solide est invalide + + GROUP_DOWN + Bas + + + GROUP_UP + Haut + + + GROUP_SIDE1 + Gauche + + + GROUP_SIDE2 + Droite + + + GROUP_OTHER + Autre + GEOM_X X : @@ -2429,12 +2473,12 @@ Choisissez une face, une coque ou un solide et essayez de nouveau Créateur de courbe - TOP_CURVE_CREATOR - Créer une courbe + TOP_CURVE_CREATOR + Créer une courbe - STB_CURVE_CREATOR - Créer une courbe + STB_CURVE_CREATOR + Créer une courbe MEN_ALL_SEL_ONLY @@ -2832,6 +2876,10 @@ Choisissez une face, une coque ou un solide et essayez de nouveau MEN_PROJECTION Projection + + MEN_PROJ_ON_CYL + Projection sur un cylindre + MEN_OPERATIONS Opérations @@ -2852,6 +2900,10 @@ Choisissez une face, une coque ou un solide et essayez de nouveau MEN_PIPE_PATH Retrouver le chemin + + MEN_THICKNESS + Epaisseur + MEN_PLANE Plan @@ -3290,7 +3342,7 @@ Choisissez une face, une coque ou un solide et essayez de nouveau PREF_LABEL_COLOR - Color of labels + Couleur des étiquettes PREF_TOPLEVEL_COLOR @@ -3418,7 +3470,7 @@ Choisissez une face, une coque ou un solide et essayez de nouveau PREF_HIDE_INPUT_OBJECT - Hide input objects from the viewer + Cacher dans la vue les objets en entrée PREF_ISOS @@ -3539,7 +3591,7 @@ Choisissez une face, une coque ou un solide et essayez de nouveau STB_FAST_CHECK_INTERSECTIONS Intersection rapide - + STB_CHECK_FREE_BNDS Vérifier les contours libres @@ -3788,6 +3840,10 @@ Choisissez une face, une coque ou un solide et essayez de nouveau STB_PROJECTION Projeter un point, une arête ou un contour sur une face + + STB_PROJ_ON_CYL + Projète un contour ou une face sur un cylindre + STB_ORIGIN_AND_VECTORS Créer les vecteurs de base et l'origine @@ -3804,6 +3860,10 @@ Choisissez une face, une coque ou un solide et essayez de nouveau STB_PIPE_PATH Retrouver le chemin à partir d'un objet de type tuyau + + STB_THICKNESS + Crée un solide par ajout d'épaisseur + STB_PLANE Créer un plan @@ -3950,7 +4010,7 @@ Choisissez une face, une coque ou un solide et essayez de nouveau STB_NAME_MODE - Show/Hide names of visible shapes + Montrer/cacher le nom des objets visibles STB_SHADING_COLOR @@ -4404,6 +4464,10 @@ Choisissez une face, une coque ou un solide et essayez de nouveau TOP_PROJECTION Projection + + TOP_PROJ_ON_CYL + Projection sur un cylindre + TOP_ORIGIN_AND_VECTORS Créer l'origine et les vecteurs de base @@ -4420,6 +4484,10 @@ Choisissez une face, une coque ou un solide et essayez de nouveau TOP_PIPE_PATH Retrouver le chemin + + TOP_THICKNESS + Epaississement + TOP_PLANE Créer un plan @@ -5371,22 +5439,6 @@ le paramètre '%1' aux préférences du module Géométrie.TOOL_IMPORTEXPORT Import / Export XAO - - TABLE_SECTION - Section - - - TABLE_INDEX - Indice - - - TABLE_X - X - - - TABLE_Y - Y - BasicGUI_CurveDlg @@ -5682,6 +5734,25 @@ le paramètre '%1' aux préférences du module Géométrie.X=%1, Y=%2, Z=%3 + + CurveCreator_TableView + + TABLE_SECTION + Section + + + TABLE_INDEX + Indice + + + TABLE_X + X + + + TABLE_Y + Y + + CurveCreator_Widget @@ -6040,10 +6111,6 @@ Le nombre de points n'est pas suffisant GEOM_ADD_THICKNESS Epaissir (arêtes ou contours uniquement) - - GEOM_TOWARDS_INSIDE - Epaissir vers l'intérieur - GroupGUI @@ -7108,7 +7175,7 @@ Voulez-vous en créer un nouveau ? Forme principale - GEOM_INSPECT_OBJECT_SHOW + GEOM_INSPECT_OBJECT_SHOW Afficher la sélection @@ -7220,22 +7287,22 @@ Voulez-vous en créer un nouveau ? GEOM_CHECK_INTE_V_E Point à arête + tout au-delà - - GEOM_CHECK_INTE_E_E - Arête à arête + tout au-delà - - - GEOM_CHECK_INTE_V_F - Point à face + tout au-delà - - - GEOM_CHECK_INTE_E_F - Arête à Face + tout au-delà - - - GEOM_CHECK_INTE_ALL - Face à Face + tout au-delà - + + GEOM_CHECK_INTE_E_E + Arête à arête + tout au-delà + + + GEOM_CHECK_INTE_V_F + Point à face + tout au-delà + + + GEOM_CHECK_INTE_E_F + Arête à Face + tout au-delà + + + GEOM_CHECK_INTE_ALL + Face à Face + tout au-delà + MeasureGUI_FastCheckIntersectionsDlg @@ -7381,4 +7448,19 @@ Voulez-vous en créer un nouveau ? Matériaux: %1 de %2 + + TransformationGUI_ProjectionOnCylDlg + + GEOM_PROJ_ON_CYL_TITLE + Projection sur un cylindre + + + GEOM_PROJ_ON_CYL_START_ANGLE + Angle de départ + + + GEOM_PROJ_ON_CYL_LENGTH_ANGLE + Longueur de l'angle + + diff --git a/src/GEOMGUI/GEOM_msg_ja.ts b/src/GEOMGUI/GEOM_msg_ja.ts index b89688584..fc01a2b0a 100644 --- a/src/GEOMGUI/GEOM_msg_ja.ts +++ b/src/GEOMGUI/GEOM_msg_ja.ts @@ -35,6 +35,14 @@ DEVIDE_EDGE_NEW_OBJECT_NAME NewObject + + DEVIDE_EDGE_BAD_PROJ_MSG + エッジ外側の投影 + + + DEVIDE_EDGE_BY_PROJ_POINT + 投影点 + ERROR_SHAPE_TYPE 選択したオブジェクトの種類が正しくありません!\nフェース、シェルまたはソリッドを選択し、もう一度やり直してください。 @@ -403,6 +411,10 @@ GEOM_NONBLOCKS GroupeSolidesNonBlocs + + GEOM_USE_C1_CRITERION + C1 criterion の使用 + GEOM_CHECK_INFOS オブジェクトとその位相情報 @@ -412,24 +424,8 @@ 自己交差の検出 - GEOM_FAST_CHECK_INTERSECTIONS - Fast intersection - - - GEOM_CHECK_SELF_INTERSECTIONS_FAILED - 自己交差の検出に失敗しました - - - GEOM_NO_SELF_INTERSECTIONS - 自己交差は検出されませんでした。 - - - GEOM_SELF_INTERSECTIONS_FOUND - 自己交差が検出されました。 - - - GEOM_CHECK_SELF_INTERSECTIONS_ERRORS - 警告: 操作中にエラーがあったので、リストが不完全かもしれない + GEOM_FAST_CHECK_INTERSECTIONS + クイック交点 GEOM_CIRCLE @@ -537,7 +533,7 @@ GEOM_CYLINDER_ANGLE_ERR - Angle values 0 and 360 are unsafe to build proper volumes. Please uncheck the "Angle" box to use the regular cylinder constructor. + 角度値0°と360°はボリューム構築には不適切です。標準の円筒構築機能を使用するために角度ボックスのチェックを外してください。 GEOM_D1 @@ -675,6 +671,18 @@ GEOM_EXTRUSION_TITLE 面の押出し + + GEOM_THICKNESS_TITLE + 厚みの構築 + + + GEOM_THICKNESS_NAME + Thickness + + + GEOM_TOWARDS_INSIDE + 内側への厚み + GEOM_SCALE_PRISM 面のサイズを変えながら押し出す @@ -707,25 +715,29 @@ GEOM_FACE_FFW 顔輪郭またはエッジからの作成 + + GEOM_FACE_FROM_SURFACE + ワイヤによる境界面からの面作成 + GEOM_FACE_OPT 平らなフェースを作成 - GEOM_FACE_FFWC - Face creation from wire and constraints + GEOM_FACE_FFWC + ワイヤと拘束点からの面作成 - GEOM_CONSTRAINTS - Constraints + GEOM_CONSTRAINTS + 拘束 - GEOM_FACE_CONSTRAINT - Constraint Face + GEOM_FACE_CONSTRAINT + 拘束面 - GEOM_SOLID_FROM_FACE_OPT - Intersect/sew shapes + GEOM_SOLID_FROM_FACE_OPT + 形状の交差・縫合 MAKE_FACE_TOLERANCE_TOO_BIG @@ -851,6 +863,10 @@ GEOM_FREE_FACES フリーフェース + + GEOM_FREE_FACES_NAME + Free_face + GEOM_FREE_FACES_TITLE フリーフェース @@ -883,6 +899,14 @@ GEOM_GLUE_EDGES_TITLE エッジ固着 + + GEOM_GLUE_EDGES_DETECT_TITLE + 一致エッジ検出 + + + GEOM_GLUE_FACES_DETECT_TITLE + 一致面検出 + GLUE_ERROR_STICKED_SHAPES 公差の値が大きすぎます。「付着」図形の検出。 @@ -1216,16 +1240,48 @@ 加工図 - GEOM_PROJECTION - Projection + GEOM_PROJECTION_ON_FACE + 面上の投影 + + + GEOM_PROJECTION_ON_WIRE + ワイヤ上の投影 + + + GEOM_PROJECTION_ON_EDGE + エッジ上の投影 GEOM_PROJECTION_TITLE フェース上に投影 - GEOM_SOURCE_OBJECT - 基になるポイント、エッジ、またはワイヤー + GEOM_PROJECTION_NAME + Projection + + + GEOM_PROJ_ON_FACE_SOURCE + ソース頂点、エッジまたはワイヤ + + + GEOM_PROJ_ON_FACE_TARGET + ターゲット面 + + + GEOM_PROJ_ON_WIRE_SOURCE + ソース頂点 + + + GEOM_PROJ_ON_WIRE_TARGET + ターゲットワイヤ + + + GEOM_PROJ_ON_EDGE_SOURCE + ソース頂点 + + + GEOM_PROJ_ON_EDGE_TARGET + ターゲットエッジ GEOM_SOLUTION @@ -1235,10 +1291,6 @@ GEOM_SOLUTION_I %1 のソリューション - - GEOM_TARGET_OBJECT - 目的面 - GEOM_WITH_CONTACT 接触している @@ -1355,6 +1407,14 @@ GEOM_SELECT_UNPUBLISHED_EDGES 非公開のエッジを選択 + + GEOM_GENERATE_GROUPS + グループの作成 + + + GEOM_GROUP_NAME_PREFIX + グループ名Prefix + GEOM_PLANE Plane @@ -1671,6 +1731,10 @@ GEOM_SELECTED_SHAPE 選択した形状 + + GEOM_SELECTED_SHAPES + 選択済み形状 + GEOM_SELECTION 選択 @@ -1949,11 +2013,11 @@ GEOM_SOLID_SHELLS - Make Solid From Shells + シェルからソリッドの作成 GEOM_SOLID_FACES - Make Solid From Connected Set Of Faces/Shells + 接続された面、シェルからソリッド作成 GEOM_SPHERE @@ -2359,6 +2423,26 @@ WRN_NULL_OBJECT_OR_SHAPE ソリッド作成のオブジェクト %1 が無効 + + GROUP_DOWN + + + + GROUP_UP + + + + GROUP_SIDE1 + 横1 + + + GROUP_SIDE2 + 横2 + + + GROUP_OTHER + その他 + GEOM_X X : @@ -2385,11 +2469,11 @@ TOP_CURVE_CREATOR - Create 2D polyline + 2Dポリラインの作成 STB_CURVE_CREATOR - Create 2D polyline + 2Dポリラインの作成 MEN_ALL_SEL_ONLY @@ -2464,8 +2548,8 @@ 自己交差の確認 - MEN_FAST_CHECK_INTERSECTIONS - Fast intersection + MEN_FAST_CHECK_INTERSECTIONS + クイック交点 MEN_CHECK_FREE_BNDS @@ -2787,6 +2871,10 @@ MEN_PROJECTION 投影 + + MEN_PROJ_ON_CYL + 円筒の投影 + MEN_OPERATIONS 操作 @@ -2807,6 +2895,10 @@ MEN_PIPE_PATH 経路の復元 + + MEN_THICKNESS + 厚み + MEN_PLANE 平面 @@ -2921,12 +3013,12 @@ MEN_POP_VERTICES - Show Vertices + 頂点の表示 MEN_POP_SHOW_NAME - Show Name - + 名前の表示 + MEN_PREFERENCES 設定 @@ -3015,13 +3107,17 @@ MEN_ISOLINE 等高線 + + MEN_SURFACE_FROM_FACE + 面から表面 + MEN_SOLID ソリッド - MEN_SOLID_FROM_FACES - Solid from connected faces + MEN_SOLID_FROM_FACES + 接続された面からソリッド MEN_SOLID_SEL_ONLY @@ -3057,7 +3153,7 @@ MEN_MATERIALS_LIBRARY - 材料の特性 + 材料ライブラリ MEN_TEXTURE @@ -3105,19 +3201,19 @@ MEN_VERTICES_MODE_ON - Show Vertices + 頂点の表示 MEN_VERTICES_MODE_OFF - Hide Vertices + 頂点の非表示 MEN_NAME_MODE_ON - Show Name + 名前の表示 MEN_NAME_MODE_OFF - Hide Name + 名前の非表示 MEN_WIREFRAME @@ -3143,6 +3239,14 @@ MEN_POP_PREDEF_MATER_CUSTOM カスタム... + + MEN_EDGE_EXTEND + 拡張エッジ + + + MEN_FACE_EXTEND + 拡張面 + NAME_LBL 名前: @@ -3153,7 +3257,7 @@ PREF_DEFLECTION - 既定の変形倍率 + 変形倍率 GEOM_PREF_def_precision @@ -3201,7 +3305,7 @@ PREF_TRANSPARENCY - 既定の透明度 + 透明度 PREF_FREE_BOUND_COLOR @@ -3225,15 +3329,15 @@ PREF_GROUP_VERTEX - 既定のポイントのマーカー + ポイントのマーカー PREF_ISOS_COLOR 輪郭の色 - PREF_LABEL_COLOR - Color of labels + PREF_LABEL_COLOR + ラベルの色 PREF_TOPLEVEL_COLOR @@ -3305,11 +3409,11 @@ PREF_EDGE_WIDTH - 既定のエッジの厚さ + エッジの厚さ PREF_ISOLINES_WIDTH - 既定の輪郭の太さ + 輪郭の太さ PREF_PREVIEW_EDGE_WIDTH @@ -3360,12 +3464,12 @@ 測定単位の表示 - PREF_HIDE_INPUT_OBJECT - Hide input objects from the viewer + PREF_HIDE_INPUT_OBJECT + ビューワから入力したオブジェクトの非表示 PREF_ISOS - 既定の輪郭の数 + 輪郭の数 PREF_ISOS_U @@ -3409,11 +3513,11 @@ MATERIAL_LIBRARY_TLT - 図書館資料 + 材料ライブラリ REMOVE_HOLES_NEW_OBJ_NAME - SuppressHoles + SupressHoles REMOVE_INT_WIRES_NEW_OBJ_NAME @@ -3480,9 +3584,9 @@ 自己交差の確認 - STB_FAST_CHECK_INTERSECTIONS - Fast intersection - + STB_FAST_CHECK_INTERSECTIONS + クイック交点 + STB_CHECK_FREE_BNDS 自由境界をチェック @@ -3731,6 +3835,10 @@ STB_PROJECTION ポイント、エッジ、または輪郭上の 1 つの側面を投影 + + STB_PROJ_ON_CYL + 円筒上のワイヤまたは面を投影 + STB_ORIGIN_AND_VECTORS 起源と基底ベクトルを作成します。 @@ -3747,6 +3855,10 @@ STB_PIPE_PATH 経路の復元 + + STB_THICKNESS + 厚みのあるソリッドの作成 + STB_PLANE 平面を作成 @@ -3821,11 +3933,11 @@ STB_POP_VERTICES - Show Vertices + 頂点の表示 STB_POP_SHOW_NAME - Show Name + 名前の表示 STB_POP_SETTEXTURE @@ -3892,8 +4004,8 @@ エッジの表示モードを変更 - STB_NAME_MODE - Show/Hide names of visible shapes + STB_NAME_MODE + 表示中の形状の名前を表示/非表示 STB_SHADING_COLOR @@ -3923,6 +4035,10 @@ STB_ISOLINE UまたはV方向等高線の作成 + + STB_SURFACE_FROM_FACE + 面から表面の作成 + STB_SOLID ソリッドを構築 @@ -4001,7 +4117,7 @@ SUPRESS_FACE_NEW_OBJ_NAME - SuppressFaces + SupressFaces ShHealOper_ErrorExecution_msg @@ -4100,8 +4216,8 @@ 自己交差の確認 - TOP_FAST_CHECK_INTERSECTIONS - Fast intersection + TOP_FAST_CHECK_INTERSECTIONS + クイック交点 TOP_CHECK_FREE_BNDS @@ -4343,6 +4459,10 @@ TOP_PROJECTION 投影 + + TOP_PROJ_ON_CYL + 円筒上に投影 + TOP_ORIGIN_AND_VECTORS 起源と根拠のベクトルを作成します。 @@ -4359,6 +4479,10 @@ TOP_PIPE_PATH 経路の復元 + + TOP_THICKNESS + 厚み + TOP_PLANE 平面を作成 @@ -4491,6 +4615,10 @@ TOP_ISOLINE 等高線 + + TOP_SURFACE_FROM_FACE + 面から表面 + TOP_SOLID ソリッドを作成 @@ -4737,23 +4865,23 @@ MEN_UNION_FACES - 連合に直面しています。 + 面の共有 STB_UNION_FACES 連合に直面しています。 - TOP_INSPECT_OBJECT - Inspect Object + TOP_INSPECT_OBJECT + オブジェクトの点検 - MEN_INSPECT_OBJECT - Inspect Object + MEN_INSPECT_OBJECT + オブジェクトの点検 - STB_INSPECT_OBJECT - Inspect Object + STB_INSPECT_OBJECT + オブジェクトの点検 TOP_NORMALE @@ -4793,11 +4921,11 @@ MEN_POP_SHOW_DEPENDENCY_TREE - Show dependency tree + 依存ツリーの表示 MEN_POP_REDUCE_STUDY - Reduce study + スタディの削減 MEN_POP_SHOW_ALL_DIMENSIONS @@ -5047,6 +5175,30 @@ STB_GET_SHARED_SHAPES 共有アイテムを取得 + + TOP_TRANSFER_DATA + データ転送 + + + MEN_TRANSFER_DATA + データ転送 + + + STB_TRANSFER_DATA + データ転送 + + + TOP_EXTENSION + エッジまたは面の拡張 + + + MEN_EXTENSION + 拡張 + + + STB_EXTENSION + エッジまたは面の拡張 + GEOM_PUBLISH_RESULT_GRP 高度なオプション @@ -5065,63 +5217,63 @@ PREF_TAB_DEPENDENCY_VIEW - Dependency Tree + 依存ツリー PREF_HIERARCHY_TYPE - Hierarchy type + 階層タイプ MEN_ONLY_ASCENDANTS - Display only ascendants tree + ツリー上位のみ表示 MEN_ONLY_DESCENDANTS - Display only descendants tree + ツリー下位のみ表示 MEN_BOTH_ASCENDANTS_DESCENDANTS - Display both ascendants and descendants trees + ツリー上位と下位の両方表示 GEOM_MOVE_POSSIBILITY - Possibility to move nodes + ノード移動可能性 PREF_GROUP_DEPENDENCY_VIEW_COLOR - Color + PREF_DEPENDENCY_VIEW_BACKGROUND_COLOR - Background color + 背景色 PREF_DEPENDENCY_VIEW_NODE_COLOR - Default node color + デフォルトノード色 PREF_DEPENDENCY_VIEW_MAIN_NODE_COLOR - Main node color + 主ノード色 PREF_DEPENDENCY_VIEW_UNPUBLISH_NODE_COLOR - Unpublished node color + 非公開ノード色 PREF_DEPENDENCY_VIEW_SELECT_NODE_COLOR - Selected node color + 選択ノード色 PREF_DEPENDENCY_VIEW_ARROW_COLOR - Default arrow color + デフォルト矢印色 PREF_DEPENDENCY_VIEW_HIGHLIGHT_ARROW_COLOR - Highlighted arrow color + ハイライト矢印色 PREF_DEPENDENCY_VIEW_SELECT_ARROW_COLOR - Selected arrow color + 選択矢印色 GEOM_ALL_IMPORT_FILES @@ -5177,110 +5329,106 @@ CC_PNT_ITEM_X_Y - X=%1, Y=%2 + X=%1, Y=%2 CC_PNT_ITEM_X_Y_Z - X=%1, Y=%2, Z=%3 + X=%1, Y=%2, Z=%3 - GEOM_FILTER - Filter + GEOM_FILTER + フィルタ - GEOM_LESS_THAN - Less Than + GEOM_LESS_THAN + 未満 - GEOM_LESSOREQUAL_THAN - Equal or Less Than + GEOM_LESSOREQUAL_THAN + 以下 - GEOM_GREAT_THAN - Greater Than + GEOM_GREAT_THAN + 超える - GEOM_GREATOREQUAL_THAN - Equal or Greater Than + GEOM_GREATOREQUAL_THAN + 以上 - GEOM_SOME_SHAPES_SELECTED - %1 shape(s) has(have) been selected + GEOM_SOME_SHAPES_SELECTED + %1 個選択済み - GEOM_NO_SHAPES_SELECTED - There are no shapes that meet filtering parameters + GEOM_NO_SHAPES_SELECTED + フィルタリングパラメータに適合する形状はありません + + + GEOM_HEALING_STATS_TITLE + 行われた変更 + + + GEOM_HEALING_STATS_COL_1 + カウント + + + GEOM_HEALING_STATS_COL_2 + 修正 GeometryGUI TOOL_BASIC - Basic + 基本 TOOL_BLOCKS - Blocks + ブロック TOOL_BOOLEAN - Boolean operations + ブーリアン演算 TOOL_FEATURES - Modification + 修正 TOOL_GENERATION - Generation + 作成 TOOL_PRIMITIVES - Primitives + プリミティブ TOOL_TRANSFORMATION - Transformation + 変形 TOOL_BUILD - Build + 構築 TOOL_OPERATIONS - Operations + 操作 TOOL_PICTURES - Pictures + 画像 TOOL_ADVANCED - Advanced + 上級 TOOL_MEASURES - Measures + 測定 TOOL_IMPORTEXPORT - Import / Export XAO - - - TABLE_SECTION - Section - - - TABLE_INDEX - Index - - - TABLE_X - X - - - TABLE_Y - Y + インポート / エクスポート XAO @@ -5527,35 +5675,35 @@ CurveCreator_NewSectionDlg SECTION_NAME - Name + 名前 SECTION_LINE_TYPE - Type + タイプ SECTION_POLYLINE_TYPE - Polyline + ポリライン SECTION_SPLINE_TYPE - Spline + スプライン SECTION_LINE_CLOSED - Closed + 閉じたライン SECTION_ADD_BTN - Add + 追加 SECTION_OK_BTN - Ok + Ok SECTION_CANCEL_BTN - Cancel + キャンセル ADD_NEW_SECTION @@ -5570,18 +5718,37 @@ CurveCreator_TreeViewModel X=%1, Y=%2 - X=%1, Y=%2 + X=%1, Y=%2 X=%1, Y=%2, Z=%3 - X=%1, Y=%2, Z=%3 + X=%1, Y=%2, Z=%3 + + + + CurveCreator_TableView + + TABLE_SECTION + Section + + + TABLE_INDEX + Index + + + TABLE_X + X + + + TABLE_Y + Y CurveCreator_Widget SECTION_GROUP_TITLE - Sections + 断面 UNDO @@ -5700,27 +5867,27 @@ EntityGUI_PolylineDlg POLYLINE_DLG_TITLE - Polyline Construction + ポリラインの構築 POLYLINE_TITLE - Polyline + ポリライン POLYLINE_NAME - Polyline + Polyline POLYLINE_IMPORT - Import polyline + ポリラインのインポート POLYLINE_ADD_SECTION - Add section + 断面の追加 POLYLINE_EDIT_SECTION - Edit section + 断面の編集 @@ -5933,10 +6100,6 @@ GEOM_ADD_THICKNESS 厚み追加(エッジまたはワイヤーのみ) - - GEOM_TOWARDS_INSIDE - 内側に向かって厚く - GroupGUI @@ -6244,11 +6407,11 @@ X - X + X Y - Y + Y Z @@ -6676,19 +6839,19 @@ WIDTH_FACTOR_TOL - Width factor tol. + Width factor tol. VOLUME_TOL - Volume tol. + Volume tol. TO_MERGE_SOLIDS - To merge solids + ソリッドのマージ 用 SELECT_ALL - 全選択 + すべて選択 @@ -6877,8 +7040,8 @@ Shared_%1 - GEOM_SHARED_SHAPES_MULTISHARE - Shared by all + GEOM_SHARED_SHAPES_MULTISHARE + すべてが共有する @@ -6916,55 +7079,55 @@ GEOMToolsGUI_ReduceStudyDlg GEOM_REDUCE_STUDY_TITLE - Reduce study + スタディの削減 GEOM_REDUCE_STUDY_KEPT_OBJECTS - Objects to be kept + 保持されたオブジェクト GEOM_REDUCE_STUDY_REMOVE_OBJECTS - Objects to be removed + 削除されたオブジェクト GEOM_REDUCE_STUDY_NAME - Name + Name GEOM_REDUCE_STUDY_OPTIONS - Options + オプション GEOM_REDUCE_STUDY_INTERMEDIATES - Intermediate objects + 中間オブジェクト GEOM_REDUCE_STUDY_SUB_OBJECTS - Sub-objects + サブオブジェクト GEOM_REDUCE_STUDY_KEEP - Keep + 保持 GEOM_REDUCE_STUDY_UNPUBLISH - Unpublish + 非公開 GEOM_REDUCE_STUDY_REMOVE - Remove + 削除 GEOM_REDUCE_STUDY_REMOVE_EMPTY_FOLDER - Remove empty folders + 空フォルダの削除 GEOM_REDUCE_STUDY_SOFT_REMOVAL - Soft removal + ソフト除去 GEOM_REDUCE_STUDY_WARNING_DELETE - Do you really want to delete intermediate objects? After applying this operation study will be broken. + 本当に中間オブジェクトを削除しますか? この操作の適用後、スタディは無くなります。 @@ -6985,32 +7148,32 @@ RepairGUI_InspectObjectDlg - GEOM_INSPECT_OBJECT_TITLE - Inspect object + GEOM_INSPECT_OBJECT_TITLE + オブジェクト点検 - GEOM_INSPECT_OBJECT_MAIN_SHAPE - Main shape + GEOM_INSPECT_OBJECT_MAIN_SHAPE + 主形状 - GEOM_INSPECT_OBJECT_SHOW - Show Selected + GEOM_INSPECT_OBJECT_SHOW + 選択を表示 - GEOM_INSPECT_OBJECT_SHOW_ONLY - Show Only Selected + GEOM_INSPECT_OBJECT_SHOW_ONLY + 選択のみを表示 - GEOM_INSPECT_OBJECT_HIDE - Hide Selected + GEOM_INSPECT_OBJECT_HIDE + 選択を非表示 - GEOM_INSPECT_OBJECT_PUBLISH - Publish Selected + GEOM_INSPECT_OBJECT_PUBLISH + 選択を公開 - GEOM_INSPECT_OBJECT_NAME - Name + GEOM_INSPECT_OBJECT_NAME + 名前 @@ -7055,160 +7218,230 @@ V-Isoline - + MeasureGUI_CheckSelfIntersectionsDlg - GEOM_CHECK_INTE_INTERSECTIONS - Self-intersections + GEOM_CHECK_INTE_INTERSECTIONS + 自己交差 - GEOM_CHECK_INTE_SUBSHAPES - Sub-shapes + GEOM_CHECK_INTE_SUBSHAPES + サブ形状 - GEOM_CHECK_INTE_CHECK_LEVEL - Level of check + GEOM_CHECK_INTE_CHECK_LEVEL + チェックのレベル - GEOM_CHECK_INTE_SUMMARY - Summary + GEOM_CHECK_INTE_SUMMARY + サマリ - GEOM_CHECK_INTE_COMPUTE - Compute self-intersections + GEOM_CHECK_INTE_COMPUTE + 自己交差の計算 - GEOM_SELF_INTERSECTION_NAME - Self_intersection + GEOM_SELF_INTERSECTION_NAME + 自己交差 - GEOM_NO_SELF_INTERSECTIONS - There are no self-intersections in the shape + GEOM_NO_SELF_INTERSECTIONS + 形状内に自己交差はありません。 - GEOM_SELF_INTERSECTIONS_FOUND - Some self-intersections detected + GEOM_SELF_INTERSECTIONS_FOUND + いくつかの自己交差が検出されました - GEOM_CHECK_SELF_INTERSECTIONS_FAILED - Detection of self-intersections failed + GEOM_CHECK_SELF_INTERSECTIONS_FAILED + 自己交差の検出に失敗しました - GEOM_CHECK_SELF_INTERSECTIONS_ERRORS - Warning: there were errors during the operation, so the list may be incomplete. + GEOM_CHECK_SELF_INTERSECTIONS_ERRORS + 警告: 操作中にエラーが発生したため、リストは完成されません。 - GEOM_CHECK_INTE_V_V - Vertex to Vertex + GEOM_CHECK_INTE_V_V + 頂点から頂点 - GEOM_CHECK_INTE_V_E - Vertex to Edge + all above + GEOM_CHECK_INTE_V_E + 頂点からエッジ と上記すべて - - GEOM_CHECK_INTE_E_E - Edge to Edge + all above - - - GEOM_CHECK_INTE_V_F - Vertex to Face + all above - - - GEOM_CHECK_INTE_E_F - Edge to Face + all above - - - GEOM_CHECK_INTE_ALL - Face to Face + all above - - - + + GEOM_CHECK_INTE_E_E + エッジからエッジと上記すべて + + + GEOM_CHECK_INTE_V_F + 頂点から面と上記すべて + + + GEOM_CHECK_INTE_E_F + エッジから面と上記すべて + + + GEOM_CHECK_INTE_ALL + 面から面と上記すべて + + + MeasureGUI_FastCheckIntersectionsDlg - GEOM_FAST_CHECK_INT_DEFLECT - Deflection coefficient + GEOM_FAST_CHECK_INT_DEFLECT + たわみ係数 - GEOM_FAST_CHECK_INT_DETECT_GAPS - Detect gaps with tolerance + GEOM_FAST_CHECK_INT_DETECT_GAPS + トレランスによるギャップ検出 - GEOM_FAST_CHECK_INT_SUBSHAPES - Sub-shapes of Object %1: + GEOM_FAST_CHECK_INT_SUBSHAPES + オブジェクト %1 のサブ形状: - GEOM_FAST_CHECK_INT_COMPUTE - Compute intersections + GEOM_FAST_CHECK_INT_COMPUTE + 交点の計算 - GEOM_FAST_INTERSECTION_NAME - Fast_intersection + GEOM_FAST_INTERSECTION_NAME + クイック交点 - GEOM_FAST_INTERSECTION_FAILS - No intersections + GEOM_FAST_INTERSECTION_FAILS + 交点はない - GEOM_FAST_CHECK_OBJ - Objects And Results + GEOM_FAST_CHECK_OBJ + オブジェクトと結果 - - + + TransformationGUI_ExtensionDlg - GEOM_EXTENSION_TITLE - Extension of Edge or Face + GEOM_EXTENSION_TITLE + エッジまたは面の拡張 - GEOM_EXTENSION - Extension + GEOM_EXTENSION + 拡張 - GEOM_EXTENSION_MIN - First Parameter + GEOM_EXTENSION_MIN + 第1パラメータ - GEOM_EXTENSION_MAX - Last Parameter + GEOM_EXTENSION_MAX + 最後のパラメータ - GEOM_EXTENSION_MIN_U - First U-Parameter + GEOM_EXTENSION_MIN_U + 第1U-パラメータ - GEOM_EXTENSION_MAX_U - Last U-Parameter + GEOM_EXTENSION_MAX_U + 最後のU-パラメータ - GEOM_EXTENSION_MIN_V - First V-Parameter + GEOM_EXTENSION_MIN_V + 第1V-パラメータ - GEOM_EXTENSION_MAX_V - Last V-Parameter + GEOM_EXTENSION_MAX_V + 最後のV-パラメータ - GEOM_EXTENSION_EDGE_NAME - ExtendedEdge + GEOM_EXTENSION_EDGE_NAME + ExtendedEdge - GEOM_EXTENSION_FACE_NAME - ExtendedFace + GEOM_EXTENSION_FACE_NAME + 拡張面 - - + + EntityGUI_SurfFromFaceDlg - GEOM_SURF_FROM_FACE_TITLE - Surface From Face Construction + GEOM_SURF_FROM_FACE_TITLE + 面から表面の作成 - GEOM_SURF_FROM_FACE - Surface From Face + GEOM_SURF_FROM_FACE + 面から表面 - GEOM_SURF_FROM_FACE_NAME - SurfaceFromFace + GEOM_SURF_FROM_FACE_NAME + SurfaceFromFace - + + + OperationGUI_TransferDataDlg + + GEOM_TRANSFER_DATA_TITLE + データ転送 + + + GEOM_TRANSFER_DATA + データ転送 + + + GEOM_TRANSFER_DATA_FROM + ソース形状 + + + GEOM_TRANSFER_DATA_TO + 行き先形状 + + + GEOM_TRANSFER_DATA_METHOD + 検出操作のタイプ + + + GEOM_TD_METHOD_GETINPLACE + 場所の中で取得 + + + GEOM_TD_METHOD_GETINPLACE_OLD + 場所(旧)の中で取得 + + + GEOM_TD_METHOD_GETINPLACE_HISTORY + 履歴より場所の中で取得 + + + GEOM_TRANSFER_DATA_INFO + データ転送: 情報 + + + GEOM_TRANSFER_DATA_NOT_COPIED + コピーされたものはありません。 + + + GEOM_TRANSFER_DATA_COPIED + 以下のデータがコピーされます: + + + GEOM_TRANSFER_DATA_NAMES + 名前: %2 の %1 + + + GEOM_TRANSFER_DATA_MATERIALS + 材料: %2 の %1 + + + + TransformationGUI_ProjectionOnCylDlg + + GEOM_PROJ_ON_CYL_TITLE + 円筒上に投影 + + + GEOM_PROJ_ON_CYL_START_ANGLE + Starting angle + + + GEOM_PROJ_ON_CYL_LENGTH_ANGLE + Length angle + + diff --git a/src/IGESPlugin/IGESPlugin_msg_ja.ts b/src/IGESPlugin/IGESPlugin_msg_ja.ts index e7f66919e..ef4817a65 100644 --- a/src/IGESPlugin/IGESPlugin_msg_ja.ts +++ b/src/IGESPlugin/IGESPlugin_msg_ja.ts @@ -32,7 +32,7 @@ IGESPlugin_GUI IGES_FILES - IGESファイル + IGES ファイル ( *.iges *.igs ) EXPORT_TITLE diff --git a/src/STEPPlugin/STEPPlugin_msg_ja.ts b/src/STEPPlugin/STEPPlugin_msg_ja.ts index 1d8b70447..686db9ad4 100644 --- a/src/STEPPlugin/STEPPlugin_msg_ja.ts +++ b/src/STEPPlugin/STEPPlugin_msg_ja.ts @@ -32,7 +32,7 @@ STEPPlugin_GUI STEP_FILES - STEPファイル + STEP ファイル ( *.step *.stp ) EXPORT_TITLE diff --git a/src/STLPlugin/STLPlugin_msg_ja.ts b/src/STLPlugin/STLPlugin_msg_ja.ts index da367eaf3..5054d2f6a 100644 --- a/src/STLPlugin/STLPlugin_msg_ja.ts +++ b/src/STLPlugin/STLPlugin_msg_ja.ts @@ -32,7 +32,7 @@ STLPlugin_GUI STL_FILES - STLファイル + STL ファイル( *.stl ) EXPORT_TITLE @@ -51,11 +51,11 @@ RELATIVE - Relative + 相対 DEFLECTION - Deflection + たわみ diff --git a/src/VTKPlugin/VTKPlugin_msg_ja.ts b/src/VTKPlugin/VTKPlugin_msg_ja.ts index 87944b0bb..5736f4b5e 100644 --- a/src/VTKPlugin/VTKPlugin_msg_ja.ts +++ b/src/VTKPlugin/VTKPlugin_msg_ja.ts @@ -32,7 +32,7 @@ VTKPlugin_GUI VTK_FILES - VTKファイル + VTKファイル( *.vtk ) EXPORT_TITLE @@ -43,7 +43,7 @@ VTKPlugin_ExportDlg DEFLECTION - Deflection + たわみ diff --git a/src/XAOPlugin/XAOPlugin_msg_ja.ts b/src/XAOPlugin/XAOPlugin_msg_ja.ts index 7d26ad27a..4f340dbdd 100644 --- a/src/XAOPlugin/XAOPlugin_msg_ja.ts +++ b/src/XAOPlugin/XAOPlugin_msg_ja.ts @@ -5,27 +5,27 @@ @default MEN_EXPORTXAO - エクスポートしました。 + XAOエクスポート TOP_EXPORTXAO - エクスポートしました。 + XAOのエクスポート STB_EXPORTXAO - ソテーした形式でフォームをエクスポートします。 + XAOのエクスポート MEN_IMPORTXAO - インポートしました。 + XAOインポート TOP_IMPORTXAO - インポートしました。 + XAOのインポート STB_IMPORTXAO - ソテーしたフォームをインポートします。 + XAOのインポート XAOPLUGIN_IMPORT_SELECT @@ -33,22 +33,22 @@ XAOPLUGIN_EXPORT_SELECT - エクスポートしました。 + XAOへのエクスポート XAOPLUGIN_FILES - ファイルした (*.xao) + XAO ファイル (*.xao) XAOPlugin_ExportDlg XAOPLUGIN_EXPORT_TITLE - エクスポートしました。 + XAOエクスポート XAOPLUGIN_EXPORTXAO - エクスポートしました。 + XAOエクスポート XAOPLUGIN_EXPORT_INGSHAPE @@ -75,11 +75,11 @@ XAOPlugin_ImportDlg XAOPLUGIN_IMPORT_TITLE - インポートしました。 + XAOインポート XAOPLUGIN_IMPORTXAO - インポートしました。 + XAOインポート XAOPLUGIN_IMPORT_INGSHAPE From 398df1400a6093604d3e77da81b59d10f68dc088 Mon Sep 17 00:00:00 2001 From: skv Date: Wed, 6 May 2015 17:10:57 +0300 Subject: [PATCH 29/45] Fix for test case geom/boolean_operations_05/F5 (implement copying of source shapes for MakeFaceWires) --- src/GEOMImpl/GEOMImpl_ShapeDriver.cxx | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/GEOMImpl/GEOMImpl_ShapeDriver.cxx b/src/GEOMImpl/GEOMImpl_ShapeDriver.cxx index 8ad9f4349..933ad9eea 100644 --- a/src/GEOMImpl/GEOMImpl_ShapeDriver.cxx +++ b/src/GEOMImpl/GEOMImpl_ShapeDriver.cxx @@ -59,6 +59,8 @@ #include #include +#include + #include #include #include @@ -86,6 +88,7 @@ #include #include +#include #include #include #include @@ -208,6 +211,7 @@ Standard_Integer GEOMImpl_ShapeDriver::Execute(TFunction_Logbook& log) const // 1. Extract all edges from the given arguments TopTools_MapOfShape aMapEdges; Handle(TopTools_HSequenceOfShape) aSeqEdgesIn = new TopTools_HSequenceOfShape; + TColStd_IndexedDataMapOfTransientTransient aMapTShapes; for (ind = 1; ind <= nbshapes; ind++) { Handle(GEOM_Function) aRefSh_i = Handle(GEOM_Function)::DownCast(aShapes->Value(ind)); @@ -216,7 +220,12 @@ Standard_Integer GEOMImpl_ShapeDriver::Execute(TFunction_Logbook& log) const TopExp_Explorer anExpE_i (aSh_i, TopAbs_EDGE); for (; anExpE_i.More(); anExpE_i.Next()) { if (aMapEdges.Add(anExpE_i.Current())) { - aSeqEdgesIn->Append(anExpE_i.Current()); + // Copy the original shape. + TopoDS_Shape aShapeCopy; + + TNaming_CopyShape::CopyTool + (anExpE_i.Current(), aMapTShapes, aShapeCopy); + aSeqEdgesIn->Append(aShapeCopy); } } } From 8d74e7ed1f6627856bbe6ef83d9adc4df46dd9d1 Mon Sep 17 00:00:00 2001 From: Christophe Bourcier Date: Thu, 7 May 2015 10:53:40 +0200 Subject: [PATCH 30/45] Fix Japanese translation --- src/AdvancedGUI/AdvancedGEOM_msg_ja.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/AdvancedGUI/AdvancedGEOM_msg_ja.ts b/src/AdvancedGUI/AdvancedGEOM_msg_ja.ts index fb449602e..67a8923d3 100644 --- a/src/AdvancedGUI/AdvancedGEOM_msg_ja.ts +++ b/src/AdvancedGUI/AdvancedGEOM_msg_ja.ts @@ -129,7 +129,7 @@ INTERNAL_FACES - 内部の顔 + 内部の面 From 18a5df8c670275043051d51e0667742b63159834 Mon Sep 17 00:00:00 2001 From: eap Date: Thu, 7 May 2015 19:27:01 +0300 Subject: [PATCH 31/45] 23034: EDF GEOM: Information after a transformation without copy Fix regression of geom/imps_07/H9 -- no info on field steps --- src/GEOM/GEOM_BaseObject.cxx | 23 ++++++++--------------- src/GEOM/GEOM_BaseObject.hxx | 2 +- src/GEOMImpl/GEOMImpl_FieldDriver.cxx | 14 ++++++++++++++ src/GEOM_I/GEOM_BaseObject_i.cc | 9 +++++---- 4 files changed, 28 insertions(+), 20 deletions(-) diff --git a/src/GEOM/GEOM_BaseObject.cxx b/src/GEOM/GEOM_BaseObject.cxx index 4b6745486..b2a5efca7 100644 --- a/src/GEOM/GEOM_BaseObject.cxx +++ b/src/GEOM/GEOM_BaseObject.cxx @@ -493,24 +493,17 @@ Handle(TColStd_HSequenceOfTransient) GEOM_BaseObject::GetLastDependency() */ //================================================================================ -std::vector< Handle(TFunction_Driver)> GEOM_BaseObject::GetCreationDrivers() +Handle(TFunction_Driver) GEOM_BaseObject::GetCreationDriver(int funNb) { - std::vector< Handle(TFunction_Driver)> aDriverVec; - - for ( int i = 1, nb = GetNbFunctions(); i <= nb; ++i ) + Handle(TFunction_Driver) driver; + Handle(GEOM_Function) function = GetFunction(funNb); + if ( !function.IsNull() ) { - Handle(GEOM_Function) function = GetFunction(i); - if ( !function.IsNull() ) - { - Standard_GUID aGUID = function->GetDriverGUID(); - aDriverVec.push_back( Handle(TFunction_Driver )() ); - if ( TFunction_DriverTable::Get()->FindDriver(aGUID, aDriverVec.back() )) - aDriverVec.back()->Init( function->GetEntry() ); - else - aDriverVec.pop_back(); - } + Standard_GUID aGUID = function->GetDriverGUID(); + if ( TFunction_DriverTable::Get()->FindDriver(aGUID, driver )) + driver->Init( function->GetEntry() ); } - return aDriverVec; + return driver; } //============================================================================= diff --git a/src/GEOM/GEOM_BaseObject.hxx b/src/GEOM/GEOM_BaseObject.hxx index 28b9a40e0..68e6bdc5a 100644 --- a/src/GEOM/GEOM_BaseObject.hxx +++ b/src/GEOM/GEOM_BaseObject.hxx @@ -149,7 +149,7 @@ public: Standard_EXPORT Handle(TColStd_HSequenceOfTransient) GetLastDependency(); //Returns drivers creators of this object - Standard_EXPORT std::vector< Handle(TFunction_Driver)> GetCreationDrivers(); + Standard_EXPORT Handle(TFunction_Driver) GetCreationDriver(int funNb); //########################################################### // Internal methods diff --git a/src/GEOMImpl/GEOMImpl_FieldDriver.cxx b/src/GEOMImpl/GEOMImpl_FieldDriver.cxx index 434f0289a..96c30e6a6 100644 --- a/src/GEOMImpl/GEOMImpl_FieldDriver.cxx +++ b/src/GEOMImpl/GEOMImpl_FieldDriver.cxx @@ -83,6 +83,20 @@ GetCreationInformation(std::string& theOperationName, AddParam( theParams, "Step", data.GetStepID() ); AddParam( theParams, "Stamp", data.GetStepStamp() ); } + else if ( funType == GEOM_Field::FUN_CHANGE_COMP_NAMES ) + { + theOperationName = "Change component names"; + } + else if ( funType == GEOM_Field::FUN_CHANGE_STEP_STAMP ) + { + theOperationName = "Change stamp"; + AddParam( theParams, "Stamp", data.GetStepStamp() ); + } + else if ( funType == GEOM_Field::FUN_CHANGE_VALUE ) + { + theOperationName = "FIELD_EDIT";//"Change values"; + AddParam( theParams, "Values", "..." ); + } else { return false; diff --git a/src/GEOM_I/GEOM_BaseObject_i.cc b/src/GEOM_I/GEOM_BaseObject_i.cc index 39e19b427..e16ef5940 100644 --- a/src/GEOM_I/GEOM_BaseObject_i.cc +++ b/src/GEOM_I/GEOM_BaseObject_i.cc @@ -272,12 +272,13 @@ GEOM::CreationInformationSeq* GEOM_BaseObject_i::GetCreationInformation() { GEOM::CreationInformationSeq_var info = new GEOM::CreationInformationSeq(); - std::vector< Handle(TFunction_Driver)> drivers = _impl->GetCreationDrivers(); - info->length( drivers.size() ); + int nbFun = _impl->GetNbFunctions(); + info->length( nbFun ); int nbI = 0; - for ( size_t i = 0; i < drivers.size(); ++i ) + for ( int i = 1; i <= nbFun; ++i ) { - Handle(GEOM_BaseDriver) driver = Handle(GEOM_BaseDriver)::DownCast( drivers[i] ); + Handle(GEOM_BaseDriver) driver = + Handle(GEOM_BaseDriver)::DownCast( _impl->GetCreationDriver( i )); if ( !driver.IsNull() ) { std::vector params; From fbf0bc3dd1c876602687ab346bb23e391281557c Mon Sep 17 00:00:00 2001 From: vsr Date: Fri, 8 May 2015 13:47:35 +0300 Subject: [PATCH 32/45] Fix problem with arguments positioning in CAF for Projection driver --- src/GEOMImpl/GEOMImpl_IProjOnCyl.hxx | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/GEOMImpl/GEOMImpl_IProjOnCyl.hxx b/src/GEOMImpl/GEOMImpl_IProjOnCyl.hxx index 9fc6024d1..a5162534e 100644 --- a/src/GEOMImpl/GEOMImpl_IProjOnCyl.hxx +++ b/src/GEOMImpl/GEOMImpl_IProjOnCyl.hxx @@ -24,10 +24,10 @@ #include "GEOM_Function.hxx" -#define PROJECTION_ARG_SHAPE 1 -#define PROJECTION_ARG_RADIUS 2 -#define PROJECTION_ARG_START_ANGLE 3 -#define PROJECTION_ARG_ANGLE_LENGTH 4 +#define PROJCYL_ARG_SHAPE 1 +#define PROJCYL_ARG_RADIUS 2 +#define PROJCYL_ARG_START_ANGLE 3 +#define PROJCYL_ARG_ANGLE_LENGTH 4 class GEOMImpl_IProjOnCyl { @@ -37,22 +37,22 @@ public: GEOMImpl_IProjOnCyl(Handle(GEOM_Function) theFunction): _func(theFunction) {} void SetShape (const Handle(GEOM_Function) &theShape) - { _func->SetReference(PROJECTION_ARG_SHAPE, theShape); } + { _func->SetReference(PROJCYL_ARG_SHAPE, theShape); } void SetRadius (const Standard_Real theRadius) - { _func->SetReal(PROJECTION_ARG_RADIUS, theRadius); } + { _func->SetReal(PROJCYL_ARG_RADIUS, theRadius); } void SetStartAngle (const Standard_Real theStartAngle) - { _func->SetReal(PROJECTION_ARG_START_ANGLE, theStartAngle); } + { _func->SetReal(PROJCYL_ARG_START_ANGLE, theStartAngle); } void SetAngleLength (const Standard_Real theAngleLength) - { _func->SetReal(PROJECTION_ARG_ANGLE_LENGTH, theAngleLength); } + { _func->SetReal(PROJCYL_ARG_ANGLE_LENGTH, theAngleLength); } Handle(GEOM_Function) GetShape() - { return _func->GetReference(PROJECTION_ARG_SHAPE); } + { return _func->GetReference(PROJCYL_ARG_SHAPE); } Standard_Real GetRadius() - { return _func->GetReal(PROJECTION_ARG_RADIUS ); } + { return _func->GetReal(PROJCYL_ARG_RADIUS ); } Standard_Real GetStartAngle() - { return _func->GetReal(PROJECTION_ARG_START_ANGLE ); } + { return _func->GetReal(PROJCYL_ARG_START_ANGLE ); } Standard_Real GetAngleLength() - { return _func->GetReal(PROJECTION_ARG_ANGLE_LENGTH ); } + { return _func->GetReal(PROJCYL_ARG_ANGLE_LENGTH ); } private: From 39d63c1e291cc636ef63072fe336373c3fbd76da Mon Sep 17 00:00:00 2001 From: vsr Date: Thu, 7 May 2015 19:01:50 +0300 Subject: [PATCH 33/45] OCCT 6.9.0 (IR-2015-05-23) compatibility --- src/CurveCreator/CurveCreator_Utils.cxx | 2 +- src/GEOMGUI/GEOMGUI_OCCSelector.cxx | 2 +- src/OBJECT/GEOM_AISShape.cxx | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/CurveCreator/CurveCreator_Utils.cxx b/src/CurveCreator/CurveCreator_Utils.cxx index b8471abe8..7b6075c2b 100644 --- a/src/CurveCreator/CurveCreator_Utils.cxx +++ b/src/CurveCreator/CurveCreator_Utils.cxx @@ -582,7 +582,7 @@ void CurveCreator_Utils::setSelectedPoints( Handle(AIS_InteractiveContext) theCo for( aSelection->Init(); aSelection->More(); aSelection->Next() ) { #if OCC_VERSION_LARGE > 0x06080100 - const SelectMgr_HSensitiveEntity aHSenEntity = aSelection->Sensitive(); + const Handle(SelectMgr_SensitiveEntity) aHSenEntity = aSelection->Sensitive(); if( aHSenEntity.IsNull() ) continue; Handle_SelectBasics_SensitiveEntity aSenEntity = aHSenEntity->BaseSensitive(); diff --git a/src/GEOMGUI/GEOMGUI_OCCSelector.cxx b/src/GEOMGUI/GEOMGUI_OCCSelector.cxx index efb4dcd6b..8bed68fb2 100644 --- a/src/GEOMGUI/GEOMGUI_OCCSelector.cxx +++ b/src/GEOMGUI/GEOMGUI_OCCSelector.cxx @@ -179,7 +179,7 @@ static void getEntityOwners( const Handle(AIS_InteractiveObject)& theObj, for ( sel->Init(); sel->More(); sel->Next() ) { #if OCC_VERSION_LARGE > 0x06080100 - const SelectMgr_HSensitiveEntity aHSenEntity = sel->Sensitive(); + const Handle(SelectMgr_SensitiveEntity) aHSenEntity = sel->Sensitive(); if( aHSenEntity.IsNull() ) continue; diff --git a/src/OBJECT/GEOM_AISShape.cxx b/src/OBJECT/GEOM_AISShape.cxx index 5415d5373..b2a0efa5c 100644 --- a/src/OBJECT/GEOM_AISShape.cxx +++ b/src/OBJECT/GEOM_AISShape.cxx @@ -109,7 +109,7 @@ static void getEntityOwners( const Handle(AIS_InteractiveObject)& theObj, for ( sel->Init(); sel->More(); sel->Next() ) { #if OCC_VERSION_LARGE > 0x06080100 - const SelectMgr_HSensitiveEntity aHSenEntity = sel->Sensitive(); + const Handle(SelectMgr_SensitiveEntity) aHSenEntity = sel->Sensitive(); if( aHSenEntity.IsNull() ) continue; From cf95ec2d01057b91831ca7ddab2a198a92ddc80c Mon Sep 17 00:00:00 2001 From: ana Date: Fri, 8 May 2015 15:48:37 +0300 Subject: [PATCH 34/45] Fix for "0052725: Sketcher 2D construction of rectangle type has incorrect initial values" issue --- src/EntityGUI/EntityGUI_SketcherDlg.cxx | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/EntityGUI/EntityGUI_SketcherDlg.cxx b/src/EntityGUI/EntityGUI_SketcherDlg.cxx index 29af40921..f489c89c2 100644 --- a/src/EntityGUI/EntityGUI_SketcherDlg.cxx +++ b/src/EntityGUI/EntityGUI_SketcherDlg.cxx @@ -632,15 +632,14 @@ void EntityGUI_SketcherDlg::RectClicked() SIGNAL( currentSelectionChanged() ), this, SLOT( SelectionIntoArgument() ) ); GroupRect->show(); - + myX1=0; - myX2=10; - myY1=0; - myY2=10; - GroupRect->SpinBox_DX1->setValue(myX1); + myY1=0; GroupRect->SpinBox_DY1->setValue(myY1); + myX2=10; GroupRect->SpinBox_DX2->setValue(myX2); + myY2=10; GroupRect->SpinBox_DY2->setValue(myY2); resize( minimumSizeHint() ); From a1baa9d06d92ad49b0394cba1a9678c1065d2559 Mon Sep 17 00:00:00 2001 From: skv Date: Tue, 12 May 2015 16:44:56 +0300 Subject: [PATCH 35/45] 0052535: TC7.5.0: Fuse operation failes --- src/BlockFix/BlockFix_UnionEdges.cxx | 47 +++++++++++++++++++++++++--- 1 file changed, 43 insertions(+), 4 deletions(-) diff --git a/src/BlockFix/BlockFix_UnionEdges.cxx b/src/BlockFix/BlockFix_UnionEdges.cxx index 09e4974c5..4647d9e55 100644 --- a/src/BlockFix/BlockFix_UnionEdges.cxx +++ b/src/BlockFix/BlockFix_UnionEdges.cxx @@ -95,9 +95,11 @@ // be merged. The edges can be merged if: // 1. They belong to same faces. // 2. They either both seam or both not seam on each face. -// 3. They are based on coincident lines, or: -// 4. They are based on coincident circles, or: -// 5. They are based on either Bezier of BSplines. +// 3. There are no another edges (e.g. seam) on each common face +// that are connected to the common vertex of two edges. +// 4. They are based on coincident lines, or: +// 5. They are based on coincident circles, or: +// 6. They are based on either Bezier of BSplines. //======================================================================= static Standard_Boolean IsToMerge (const TopoDS_Edge &theEdge1, @@ -108,7 +110,6 @@ static Standard_Boolean IsToMerge Standard_Boolean aResult = Standard_False; Standard_Boolean isDegen1 = BRep_Tool::Degenerated(theEdge1); Standard_Boolean isDegen2 = BRep_Tool::Degenerated(theEdge2); - Standard_Boolean isCompareGeom = Standard_False; if (isDegen1 && isDegen2) { // Both of edges are degenerated. @@ -141,6 +142,44 @@ static Standard_Boolean IsToMerge Standard_Boolean isSeam2 = BRep_Tool::IsClosed(theEdge2, aFace1); isSame = (isSeam1 && isSeam2) || (isSeam1 == isSeam2); + + if (isSame) { + // Check if there are no other edges (e.g. seam) on this face + // that are connected to the common vertex. + TopoDS_Vertex aVCommon; + + if (TopExp::CommonVertex(theEdge1, theEdge2, aVCommon)) { + TopTools_IndexedDataMapOfShapeListOfShape aMapVE; + + TopExp::MapShapesAndAncestors + (aFace1, TopAbs_VERTEX, TopAbs_EDGE, aMapVE); + + if (aMapVE.Contains(aVCommon)) { + TopTools_ListIteratorOfListOfShape + anItE(aMapVE.FindFromKey(aVCommon)); + + for (; anItE.More(); anItE.Next()) { + const TopoDS_Shape &anEdge = anItE.Value(); + + if (!theEdge1.IsSame(anEdge) && + !theEdge2.IsSame(anEdge)) { + // There is another edge that shares the common vertex. + // Nothing to merge. + isSame = Standard_False; + break; + } + } + } else { + // Common vertex doesn't belong to the face. + // Nothing to merge. NEVERREACHED. + isSame = Standard_False; + } + } else { + // No common vertex. Nothing to merge. NEVERREACHED. + isSame = Standard_False; + } + } + break; } } From 0f279d32855c49f8df686ea14c0030f93c56f3d3 Mon Sep 17 00:00:00 2001 From: skv Date: Thu, 14 May 2015 10:44:37 +0300 Subject: [PATCH 36/45] 0023048: [CEA 1474] Performance regression on MakeGlueEdges --- src/GEOMAlgo/GEOMAlgo_AlgoTools.cxx | 13 +++++++++++++ 1 file changed, 13 insertions(+) mode change 100755 => 100644 src/GEOMAlgo/GEOMAlgo_AlgoTools.cxx diff --git a/src/GEOMAlgo/GEOMAlgo_AlgoTools.cxx b/src/GEOMAlgo/GEOMAlgo_AlgoTools.cxx old mode 100755 new mode 100644 index 8c2a1cd1b..3505101d4 --- a/src/GEOMAlgo/GEOMAlgo_AlgoTools.cxx +++ b/src/GEOMAlgo/GEOMAlgo_AlgoTools.cxx @@ -222,6 +222,19 @@ Standard_Integer GEOMAlgo_AlgoTools::BuildPCurveForEdgeOnFace return iRet; } // +#if OCC_VERSION_LARGE > 0x06070100 + // Try to copy PCurve from old edge to the new one. + iRet = BOPTools_AlgoTools2D::AttachExistingPCurve(aEold, aEnew, aF, aCtx); + + if (iRet) { + // Do PCurve using projection algorithm. + iRet = 0; + } else { + // The PCurve is attached successfully. + return iRet; + } +#endif + // BOPTools_AlgoTools2D::BuildPCurveForEdgeOnFace(aEnew, aF); aC2D=BRep_Tool::CurveOnSurface(aEnew, aF, aT1, aT2); if (aC2D.IsNull()){ From 544fdbbac540be8c5063972a7effe47f79423437 Mon Sep 17 00:00:00 2001 From: vsr Date: Thu, 14 May 2015 15:40:11 +0300 Subject: [PATCH 37/45] 0023048: [CEA 1474] Performance regression on MakeGlueEdges - Small correction to previous commit to provide backward compatibility with OCCT 6.8.0. --- src/GEOMAlgo/GEOMAlgo_AlgoTools.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/GEOMAlgo/GEOMAlgo_AlgoTools.cxx b/src/GEOMAlgo/GEOMAlgo_AlgoTools.cxx index 3505101d4..ae08f5480 100644 --- a/src/GEOMAlgo/GEOMAlgo_AlgoTools.cxx +++ b/src/GEOMAlgo/GEOMAlgo_AlgoTools.cxx @@ -222,7 +222,7 @@ Standard_Integer GEOMAlgo_AlgoTools::BuildPCurveForEdgeOnFace return iRet; } // -#if OCC_VERSION_LARGE > 0x06070100 +#if OCC_VERSION_LARGE > 0x06080000 // Try to copy PCurve from old edge to the new one. iRet = BOPTools_AlgoTools2D::AttachExistingPCurve(aEold, aEnew, aF, aCtx); From 10ae356a871648f90ee45ddc9dc002f79bbf0bf6 Mon Sep 17 00:00:00 2001 From: ana Date: Fri, 15 May 2015 12:00:16 +0300 Subject: [PATCH 38/45] CMake procedure: Detecting OpenCV third-party product on Windows --- adm_local/cmake_files/FindSalomeOpenCV.cmake | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/adm_local/cmake_files/FindSalomeOpenCV.cmake b/adm_local/cmake_files/FindSalomeOpenCV.cmake index 8556e961d..63932fea4 100644 --- a/adm_local/cmake_files/FindSalomeOpenCV.cmake +++ b/adm_local/cmake_files/FindSalomeOpenCV.cmake @@ -23,7 +23,14 @@ # # !! Please read the generic detection procedure in SalomeMacros.cmake !! # -SALOME_FIND_PACKAGE_AND_DETECT_CONFLICTS(OpenCV OpenCV_DIR 2) +SET(UpCount 2) + +IF (WIN32) + SET(UpCount 0) +ENDIF (WIN32) + +SALOME_FIND_PACKAGE_AND_DETECT_CONFLICTS(OpenCV OpenCV_DIR ${UpCount}) + #MARK_AS_ADVANCED() IF(OpenCV_FOUND) From e38148a84089d539f11967ac1ae37b8a376dccb9 Mon Sep 17 00:00:00 2001 From: skv Date: Wed, 20 May 2015 12:24:39 +0300 Subject: [PATCH 39/45] 0021173: EDF 1787 GEOM: PipeTShape in meter cannot be built: Doc update --- doc/salome/gui/GEOM/images/tolerances.png | Bin 0 -> 3033 bytes doc/salome/gui/GEOM/input/faq.doc | 1 + .../gui/GEOM/input/size_models_range.doc | 87 ++++++++++++++++++ 3 files changed, 88 insertions(+) create mode 100644 doc/salome/gui/GEOM/images/tolerances.png create mode 100644 doc/salome/gui/GEOM/input/size_models_range.doc diff --git a/doc/salome/gui/GEOM/images/tolerances.png b/doc/salome/gui/GEOM/images/tolerances.png new file mode 100644 index 0000000000000000000000000000000000000000..69b1367672a97c694dd34b0ab15c30a78536cc94 GIT binary patch literal 3033 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
  • \subpage partition_explanation "What is the difference between partition, compounds and fuse operation ?"
  • +
  • \subpage size_models_range "What are the valid sizes of models ?"
  • diff --git a/doc/salome/gui/GEOM/input/size_models_range.doc b/doc/salome/gui/GEOM/input/size_models_range.doc new file mode 100644 index 000000000..5f77a22e3 --- /dev/null +++ b/doc/salome/gui/GEOM/input/size_models_range.doc @@ -0,0 +1,87 @@ +/*! + +\page size_models_range Sizes of Models in Salome + +\tableofcontents + +This document determines the range of numbers (tolerances, locations +and sizes) that are to be taken into account for any 3D model design +in Salome. Although it is not obligatory to create models within this range, +algorithms can fail or return unexpected result in this case. + +This document refers mainly to Open CASCADE Technology (OCCT). However it +concerns Salome as well as OCCT is a modeling core of Salome %GEOM module. + +Any model in 3D-space has its location and sizes. The last two things in Salome +and OCCT are represented by the double precision floating point numbers. + +The goal of the document is to define the range of numbers that can be used in +modeling algorithms provided by Salome and Open CASCADE Technology. + +\section sec1 Maximal Size of the Model + +The Maximal Size of the model is a number defined as the maximal diameter of +enclosed sphere built for the model. In OCCT any model has a location defined +relative the absolute origin. Thus the maximal diameter above should be built +taking into account the model itself and its location. + +In Open CASCADE there are two tolerances: Tolerance Confusion (TolC) +and Tolerance Angular (TolA) (see OCCT Precision package for more details). +These values are used for geometric comparisons. They are not used inside +low-level algorithms (intersection for e.g.), where more precise values are +used instead. The value TolC guarantees that the error associated with +the computations for given geometric entity is not greater than TolC. + +- TolC - precision value when checking coincidence of two points + [by default 1.e-7]; +- TolA - precision value when checking the equality of two angles + [by default 1.e-12]. + +For more information on tolerance definition please see +Chapter 4 of this document. To see limitations +that are due to modeling errors or inaccuracies of tolerance usage please +refer to Chapter 9.2.2 of the same document. + +To provide robust geometric modeling the computations should be consistent, +i.e. the one tolerance value should be used for all computations. To provide +consistent computations the values TolC and TolA should be consistent: + +
    Smax = TolC / TolA             (1)
    + +\image html tolerances.png "TolC, TolA and Maximal Size Consistency" + +In accordance with (1) the Maximal Size for the Model is [by default]: + +
    Smax = 1.e-7 / 1.e-12 = 1.e+5  (2)
    + +\section sec2 Minimal Size of the Model + +The Minimal Size of the Model is defined as maximal diameter of enclosed +sphere built for the smallest BRep entity of the Model. + +All models in Open CASCADE Technology are represented using double precision +floating point numbers. This representation contains approximately 14-16 +significant digits. + +From the experience of using it is considered that the least four significant +digits contain rounding-off errors occurring during the computation. So +(taking in account the worst cases), there are ten reliable significant digits +for double precision floating point numbers. Having the estimation it is +possible to compute the value of the Minimal size of the model: + +
    Smin=Smax / 1.e+10             (3)
    + +In accordance with (2) for the default value it will be [by default]: + +
    Smin=1.e-5.                    (4)
    + +\section sec3 Full Range of Sizes + +The values Smax (2), Smin (4) are theoretical. Taking into +account the practical purposes of improving the reliability the lower limit +should be restricted by one order. Thus, the full Range of Sizes of the Models +is: + +
    [Smin, Smax] = [1.e-4, 1.e+5]  (5)
    + +*/ From 38f42c5163a99bdc2c4307556ddef1872e21ce3a Mon Sep 17 00:00:00 2001 From: ana Date: Wed, 20 May 2015 13:22:35 +0300 Subject: [PATCH 40/45] Fix for "0052732: OCC viewer is not switched back to 3D mode after closing Create Polyline dialog box" issue --- src/EntityGUI/EntityGUI_PolylineDlg.cxx | 11 +---------- src/EntityGUI/EntityGUI_PolylineDlg.h | 1 - 2 files changed, 1 insertion(+), 11 deletions(-) diff --git a/src/EntityGUI/EntityGUI_PolylineDlg.cxx b/src/EntityGUI/EntityGUI_PolylineDlg.cxx index 7f8a52283..ed2f4ee36 100644 --- a/src/EntityGUI/EntityGUI_PolylineDlg.cxx +++ b/src/EntityGUI/EntityGUI_PolylineDlg.cxx @@ -162,6 +162,7 @@ EntityGUI_PolylineDlg::EntityGUI_PolylineDlg EntityGUI_PolylineDlg::~EntityGUI_PolylineDlg() { erasePreview(); + myEditorWidget->SetViewer2DMode(false); } //================================================================================= @@ -381,16 +382,6 @@ bool EntityGUI_PolylineDlg::ClickOnApply() return true; } -//================================================================================= -// function : ClickOnCancel() -// purpose : -//================================================================================= -void EntityGUI_PolylineDlg::ClickOnCancel() -{ - myEditorWidget->SetViewer2DMode(false); - GEOMBase_Skeleton::ClickOnCancel(); -} - //================================================================================= // function : processStartedSubOperation // purpose : diff --git a/src/EntityGUI/EntityGUI_PolylineDlg.h b/src/EntityGUI/EntityGUI_PolylineDlg.h index 53ff8dfc9..3172a040b 100644 --- a/src/EntityGUI/EntityGUI_PolylineDlg.h +++ b/src/EntityGUI/EntityGUI_PolylineDlg.h @@ -152,7 +152,6 @@ protected slots: void ClickOnOk(); bool ClickOnApply(); - void ClickOnCancel(); void processStartedSubOperation( QWidget*, bool ); void processFinishedSubOperation( QWidget* ); void SetEditCurrentArgument( bool ); From 02107d63e897c70d3dda2509afb4f58bdd10f56d Mon Sep 17 00:00:00 2001 From: ana Date: Wed, 20 May 2015 13:23:31 +0300 Subject: [PATCH 41/45] Fix for "0052722: TC7.6.0 Incorrect behavior in "Shape processing" dialog" issue --- src/RepairGUI/RepairGUI_ShapeProcessDlg.cxx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/RepairGUI/RepairGUI_ShapeProcessDlg.cxx b/src/RepairGUI/RepairGUI_ShapeProcessDlg.cxx index 0ad89b708..e3df32f8a 100755 --- a/src/RepairGUI/RepairGUI_ShapeProcessDlg.cxx +++ b/src/RepairGUI/RepairGUI_ShapeProcessDlg.cxx @@ -959,6 +959,7 @@ void RepairGUI_ShapeProcessDlg::operatorChecked( QListWidgetItem * item ) { if ( item && item->checkState() == Qt::Checked ) { + item->setSelected(true); myStack->setCurrentIndex( myOpList->row( item )); } updateSelectAll(); From da1ba107c6893399d40650790023102eae6b6cb6 Mon Sep 17 00:00:00 2001 From: skv Date: Fri, 22 May 2015 17:00:10 +0300 Subject: [PATCH 42/45] 0052604: [TC7.5.1] GetInPlace failure --- src/GEOMAlgo/GEOMAlgo_GetInPlaceAPI.cxx | 98 ++++++++++--------------- 1 file changed, 40 insertions(+), 58 deletions(-) diff --git a/src/GEOMAlgo/GEOMAlgo_GetInPlaceAPI.cxx b/src/GEOMAlgo/GEOMAlgo_GetInPlaceAPI.cxx index 6c1afa4e9..c7abe5e96 100644 --- a/src/GEOMAlgo/GEOMAlgo_GetInPlaceAPI.cxx +++ b/src/GEOMAlgo/GEOMAlgo_GetInPlaceAPI.cxx @@ -126,93 +126,75 @@ Standard_Integer GEOMAlgo_GetInPlaceAPI::GetInPlaceOld return 1; } - TopoDS_Shape aPntShape; - TopoDS_Vertex aVertex; - bool isFound = false; - TopAbs_ShapeEnum iType = TopAbs_SOLID; - //Standard_Real aWhat_Mass = 0., aWhere_Mass = 0.; - Standard_Real tab_aWhat[4], tab_aWhere[4]; - Standard_Real dl_l = 1e-3; - Standard_Real min_l, Tol_0D, Tol_1D, Tol_2D, Tol_3D, Tol_Mass; - Standard_Real aXmin, aYmin, aZmin, aXmax, aYmax, aZmax; - Bnd_Box BoundingBox; - gp_Pnt aPnt, aPnt_aWhat, tab_Pnt[2]; - GProp_GProps aProps; + // Check shape type. + TopAbs_ShapeEnum iType = GEOMUtils::GetTypeOfSimplePart(theWhat); - iType = GEOMUtils::GetTypeOfSimplePart(theWhat); if (iType == TopAbs_SHAPE) { // Error: An attempt to extract a shape of not supported type. return 2; } - TopExp_Explorer Exp_aWhat ( theWhat, iType ); - TopExp_Explorer Exp_aWhere ( theWhere, iType ); - TopExp_Explorer Exp_Edge ( theWhere, TopAbs_EDGE ); + // Compute confusion tolerance. + Standard_Real aTolConf = Precision::Confusion(); + Standard_Integer i; - // Find the shortest edge in theShapeWhere shape - BRepBndLib::Add(theWhere, BoundingBox); - BoundingBox.Get(aXmin, aYmin, aZmin, aXmax, aYmax, aZmax); - min_l = fabs(aXmax - aXmin); - if( min_l < fabs(aYmax - aYmin) ) min_l = fabs(aYmax - aYmin); - if( min_l < fabs(aZmax - aZmin) ) min_l = fabs(aZmax - aZmin); - min_l /= dl_l; - // Mantis issue 0020908 BEGIN - if (!Exp_Edge.More()) { - min_l = Precision::Confusion(); - } - // Mantis issue 0020908 END - for ( Standard_Integer nbEdge = 0; Exp_Edge.More(); Exp_Edge.Next(), nbEdge++ ) { - TopExp_Explorer Exp_Vertex( Exp_Edge.Current(), TopAbs_VERTEX); - for ( Standard_Integer nbVertex = 0; Exp_Vertex.More(); Exp_Vertex.Next(), nbVertex++ ) { - aPnt = BRep_Tool::Pnt( TopoDS::Vertex( Exp_Vertex.Current() ) ); - tab_Pnt[nbVertex] = aPnt; - } - if ( ! tab_Pnt[0].IsEqual(tab_Pnt[1], dl_l) ) { - BRepGProp::LinearProperties(Exp_Edge.Current(), aProps); - if ( aProps.Mass() < min_l ) min_l = aProps.Mass(); + for (i = 0; i < 2; ++i) { + TopExp_Explorer anExp(i == 0 ? theWhere : theWhat, TopAbs_VERTEX); + + for (; anExp.More(); anExp.Next()) { + const TopoDS_Vertex aVtx = TopoDS::Vertex(anExp.Current()); + const Standard_Real aTolVtx = BRep_Tool::Tolerance(aVtx); + + if (aTolVtx > aTolConf) { + aTolConf = aTolVtx; + } } } - // Compute tolerances - Tol_0D = dl_l; - Tol_1D = dl_l * min_l; - Tol_2D = dl_l * ( min_l * min_l) * ( 2. + dl_l); - Tol_3D = dl_l * ( min_l * min_l * min_l ) * ( 3. + (3 * dl_l) + (dl_l * dl_l) ); + // Compute mass tolerance. + Bnd_Box aBoundingBox; + Standard_Real aXmin, aYmin, aZmin, aXmax, aYmax, aZmax; + Standard_Real aMassTol; - if (Tol_0D < Precision::Confusion()) Tol_0D = Precision::Confusion(); - if (Tol_1D < Precision::Confusion()) Tol_1D = Precision::Confusion(); - if (Tol_2D < Precision::Confusion()) Tol_2D = Precision::Confusion(); - if (Tol_3D < Precision::Confusion()) Tol_3D = Precision::Confusion(); + BRepBndLib::Add(theWhere, aBoundingBox); + BRepBndLib::Add(theWhat, aBoundingBox); + aBoundingBox.Get(aXmin, aYmin, aZmin, aXmax, aYmax, aZmax); + aMassTol = Max(aXmax - aXmin, aYmax - aYmin); + aMassTol = Max(aMassTol, aZmax - aZmin); + aMassTol *= aTolConf; - Tol_Mass = Tol_3D; - if ( iType == TopAbs_VERTEX ) Tol_Mass = Tol_0D; - else if ( iType == TopAbs_EDGE ) Tol_Mass = Tol_1D; - else if ( iType == TopAbs_FACE ) Tol_Mass = Tol_2D; - - // Searching for the sub-shapes inside the ShapeWhere shape + // Compute the result. + TopExp_Explorer Exp_aWhat (theWhat, iType); + TopExp_Explorer Exp_aWhere (theWhere, iType); + Standard_Real tab_aWhat[4], tab_aWhere[4]; + gp_Pnt aPnt, aPnt_aWhat; + TopoDS_Shape aPntShape; + TopoDS_Vertex aVertex; + bool isFound = false; TopTools_MapOfShape map_aWhere; - for ( Exp_aWhere.ReInit(); Exp_aWhere.More(); Exp_aWhere.Next() ) { + + for (; Exp_aWhere.More(); Exp_aWhere.Next()) { if (!map_aWhere.Add(Exp_aWhere.Current())) continue; // skip repeated shape to avoid mass addition GetShapeProperties( Exp_aWhere.Current(), tab_aWhere, aPnt ); for ( Exp_aWhat.ReInit(); Exp_aWhat.More(); Exp_aWhat.Next() ) { GetShapeProperties( Exp_aWhat.Current(), tab_aWhat, aPnt_aWhat ); - if ( fabs(tab_aWhat[3] - tab_aWhere[3]) <= Tol_Mass && aPnt_aWhat.Distance(aPnt) <= Tol_1D ) + if (fabs(tab_aWhat[3] - tab_aWhere[3]) <= aMassTol && aPnt_aWhat.Distance(aPnt) <= aTolConf) isFound = true; else { - if ( (tab_aWhat[3] - tab_aWhere[3]) > Tol_Mass ) { + if ((tab_aWhat[3] - tab_aWhere[3]) > aMassTol) { aPntShape = BRepBuilderAPI_MakeVertex( aPnt ).Shape(); aVertex = TopoDS::Vertex( aPntShape ); BRepExtrema_DistShapeShape aWhereDistance ( aVertex, Exp_aWhere.Current() ); BRepExtrema_DistShapeShape aWhatDistance ( aVertex, Exp_aWhat.Current() ); - if ( aWhereDistance.IsDone() && aWhatDistance.IsDone() && - fabs(aWhereDistance.Value() - aWhatDistance.Value()) <= Tol_1D ) + if (aWhereDistance.IsDone() && aWhatDistance.IsDone() && + fabs(aWhereDistance.Value() - aWhatDistance.Value()) <= aTolConf) { // 0020162: "EDF 961 GEOM : Getinplace is getting additionnal orthogonal faces" // aVertex must be projected to the same point on Where and on What gp_Pnt pOnWhat = aWhatDistance.PointOnShape2(1); gp_Pnt pOnWhere = aWhereDistance.PointOnShape2(1); - isFound = ( pOnWhat.Distance(pOnWhere) <= Tol_1D ); + isFound = (pOnWhat.Distance(pOnWhere) <= aTolConf); if ( isFound && iType == TopAbs_FACE ) { // check normals at pOnWhat and pOnWhere From b7331b45228fd331aaa80545873251266da39b2b Mon Sep 17 00:00:00 2001 From: ysn Date: Mon, 25 May 2015 12:45:48 +0300 Subject: [PATCH 43/45] Help Update for version 7.6.0 --- .../input/add_point_on_edge_operation.doc | 31 ++++++----- .../GEOM/input/check_compound_of_blocks.doc | 10 ++-- .../GEOM/input/check_self_intersections.doc | 17 +++--- .../gui/GEOM/input/creating_complex_obj.doc | 6 +-- .../gui/GEOM/input/creating_explode.doc | 54 +++++++++---------- .../GEOM/input/creating_surface_from_face.doc | 8 +-- .../GEOM/input/creating_thickness_page.doc | 26 ++++----- doc/salome/gui/GEOM/input/dependency_tree.doc | 8 +-- doc/salome/gui/GEOM/input/display_mode.doc | 7 ++- .../gui/GEOM/input/extension_operation.doc | 31 +++++------ .../gui/GEOM/input/fast_intersection.doc | 15 +++--- .../gui/GEOM/input/glue_edges_operation.doc | 10 ++-- .../gui/GEOM/input/glue_faces_operation.doc | 4 +- .../GEOM/input/inspect_object_operation.doc | 10 ++-- .../projection_on_cylinder_operation.doc | 13 +++-- .../gui/GEOM/input/sewing_operation.doc | 8 +-- .../GEOM/input/shape_processing_operation.doc | 12 ++--- doc/salome/gui/GEOM/input/shared_shapes.doc | 16 +++--- .../gui/GEOM/input/size_models_range.doc | 50 ++++++++--------- doc/salome/gui/GEOM/input/transfer_data.doc | 19 ++++--- doc/salome/gui/GEOM/input/whatis.doc | 6 +-- .../gui/GEOM/input/working_with_groups.doc | 16 +++--- 22 files changed, 180 insertions(+), 197 deletions(-) diff --git a/doc/salome/gui/GEOM/input/add_point_on_edge_operation.doc b/doc/salome/gui/GEOM/input/add_point_on_edge_operation.doc index 187cefbcd..92d6c31a1 100644 --- a/doc/salome/gui/GEOM/input/add_point_on_edge_operation.doc +++ b/doc/salome/gui/GEOM/input/add_point_on_edge_operation.doc @@ -10,25 +10,24 @@ This operation is available in OCC Viewer only. The \b Result will be a \b GEOM_Object. -\n Location of a new vertex on a selected edge can be defined two ways: +\n The location of a new vertex on the selected edge can be defined in two ways:
      -
    1. We can specify a position (ranging from 0.0 to 1.0) of the - vertex on the selected edge either by length or by parameter. +
    2. By specifying the position (ranging from 0.0 to 1.0) by length or by parameter.

      TUI Command: geompy.DivideEdge(Shape, EdgeID, Value, IsByParameter)

        -
      • \em Shape is a shape which contains an edge to be divided
      • +
      • \em Shape is a shape, which contains an edge to be divided;
      • \em EdgeID is the ID of the edge to be divided, if it is = -1, - then \em Shape should be an edge itself.
      • + then \em Shape should be an edge itself;
      • \em Value is a value of parameter on edge or length parameter, - depending on \em IsByParameter.
      • -
      • \em IsByParameter is a boolean flag, specifying operation mode: - - \c True: \em Value is treated as a curve parameter [0..1] - - \c False: \em Value is treated as a length parameter [0..1]
      • + depending on \em IsByParameter; +
      • \em IsByParameter is a boolean flag, specifying the operation mode: + - \c True: \em Value is treated as a curve parameter; [0..1] + - \c False: \em Value is treated as a length parameter. [0..1]
      \b Arguments: Name + 1 Edge + 1 Value setting the position of - the point according to one of the selected modes. + the point according to the selected mode. The difference between "by parameter" and "by length" modes becomes apparent on the edges with irregular parametrization (for example, @@ -41,15 +40,15 @@ The \b Result will be a \b GEOM_Object. \image html repair8.png \n\n
    3. -
    4. We can select several points that will be projected to the selected +
    5. By selecting several points that will be projected to the selected edge to find the location of new vertices.

      - TUI Command: geompy.DivideEdgeByPoint(Shape, Edge, Points) + TUI Command: geompy.DivideEdgeByPoint(Shape, Edge, Points):

        -
      • \em Shape is a shape which contains an edge to be divided
      • -
      • \em Edge is an edge to be divided (or it's ID, if it is = -1, - then \em Shape should be an edge itself).
      • -
      • \em Points is a list of points to project to \a Edge.
      • +
      • \em Shape is a shape, which contains an edge to be divided;
      • +
      • \em Edge is an edge to be divided (or its ID, if it is = -1, + then \em Shape should be an edge itself);
      • +
      • \em Points is a list of points to be projected to the \a Edge.
      \b Arguments: Name + 1 Edge + 1 or more Points. diff --git a/doc/salome/gui/GEOM/input/check_compound_of_blocks.doc b/doc/salome/gui/GEOM/input/check_compound_of_blocks.doc index 7151dcff7..d903fc1ba 100644 --- a/doc/salome/gui/GEOM/input/check_compound_of_blocks.doc +++ b/doc/salome/gui/GEOM/input/check_compound_of_blocks.doc @@ -8,10 +8,10 @@ This operation checks whether a shape is a compound of glued blocks. To be considered as a compound of blocks, the given shape must satisfy the following conditions: -- Each element of the compound should be a Block (6 quadrangle faces); -- Each quadrangle face is a face that has 1 wire with 4 edges. If there are -more than 4 edges in a single wire and C1 continuity mode is switched on, -a face is quadrangular if it has 4 bounds of C1 continuity. +- Each element of the compound should be a Block, i.e. have 6 quadrangle faces; +- Each quadrangle face should have one wire with four edges. If there are +more than four edges in a single wire and C1 continuity mode is switched on, +a face is quadrangular if it has four bounds with C1 continuity. - Blocks can be connected only via an entire quadrangle face or an entire edge; - The compound should be connected; - Each couple of connecting quadrangle faces should be glued. @@ -20,7 +20,7 @@ a face is quadrangular if it has 4 bounds of C1 continuity. In this dialog: - \b Object - the checked object. \b Selection button allows picking it in the viewer or in the object browser. -- Use C1 criterion - option that shitches on/off the C1 continuity mode. +- Use C1 criterion - option switches on/off the C1 continuity mode. - Angular Tolerance - angular tolerance to check C1 continuity between neighbor edges in a wire. - \b Errors list informs of possible errors, for example: - Not a block; diff --git a/doc/salome/gui/GEOM/input/check_self_intersections.doc b/doc/salome/gui/GEOM/input/check_self_intersections.doc index 8cf4d57bf..41658151a 100644 --- a/doc/salome/gui/GEOM/input/check_self_intersections.doc +++ b/doc/salome/gui/GEOM/input/check_self_intersections.doc @@ -9,17 +9,14 @@ This operation checks the topology of the selected shape to detect self-intersec In this dialog: - \b Object - the checked object. \b Selection button allows picking it in the viewer or in the object browser. -- Level of check - The combo box that allows to set the level of checking shape on self-interference. - It defines which interferferences will be checked. Default value is "All interferences". -- Compute self-intersections button computes self-interferences. -- \b Summary section contains the general report if the object has self-intersections and/or if errors are occured during computation. -- \b Self-intersections list contains the list of self-intersections detected. -Select the intersection(s) to show Sub-shapes in the field to the right. -- \b Apply and Apply and Close buttons are used to store interferences selected in the "Self-intersections" list box in the study for further analysis. -If no any interference is selected, all interferences are published in the study. Each interference is published as a child -compound of the source shape and contains a couple of intersecting sub-shapes. +- Level of check - combo box allows setting the level of self-interference checking. It defines, which interferences will be checked. The default value is "All interferences". +- Compute self-intersections button performs the computation. +- \b Summary section contains the general report about self-intersections of the object and/or errors that occurred during the computation. +- \b Self-intersections list contains the list of detected self-intersections. Select the intersection to show Sub-shapes in the field to the right. +- \b Apply and Apply and Close buttons store the interferences selected in the Self-intersections list box in the study for further analysis. +If no interferences are selected, all of them are published in the study. Each interference is published as a child compound of the source shape and contains a couple of intersecting sub-shapes. -\note This tool is useful for detection of shapes, not suitable for +\note This tool is useful for detection of shapes that are not suitable as arguments of Boolean operations and Partition algorithm. For more information about Partition and Boolean Operations Algorithms and their limitations refer to this document. diff --git a/doc/salome/gui/GEOM/input/creating_complex_obj.doc b/doc/salome/gui/GEOM/input/creating_complex_obj.doc index 1fbb1d6a2..01b6eb85f 100644 --- a/doc/salome/gui/GEOM/input/creating_complex_obj.doc +++ b/doc/salome/gui/GEOM/input/creating_complex_obj.doc @@ -15,10 +15,8 @@ axis, creating a body of revolution.
    6. \subpage create_extrusion_alongpath_page "Extrude an object along a path", creating a more complex trajectory object.
    7. \subpage create_pipe_path_page "Restore Path" of a pipe-like shape.
    8. -
    9. \subpage create_thickness_page "Thickness" operation that allows to add a thickness to objects.
    10. - -
    11. \subpage create_groups_page "Generate Groups". -This cross-operation functionality allows creation of groups for certain generation operations.
    12. +
    13. \subpage create_thickness_page "Add thickness" to objects.
    14. +
    15. \subpage create_groups_page "Generate Groups" for certain generation operations.
    16. New entity -> Advanced sub-menu allows creating new geometric diff --git a/doc/salome/gui/GEOM/input/creating_explode.doc b/doc/salome/gui/GEOM/input/creating_explode.doc index c25b719ae..693773973 100644 --- a/doc/salome/gui/GEOM/input/creating_explode.doc +++ b/doc/salome/gui/GEOM/input/creating_explode.doc @@ -16,7 +16,7 @@ obtain from it. The \b Result of the operation will be a List of \b GEOM_Objects (vertexes, edges, wires, faces, shells or solids). -Available choices in the Sub Shapes Type combo box depend on the type +The choices available in the Sub Shapes Type combo box depend on the type of selected Main Object: - \b Compound: to extract compounds; - \b Compsolid: to extract compsolids; @@ -29,72 +29,70 @@ of selected Main Object: - \b Shape: to extract top-level contents of the compound shape; - \b Flat: to extract "flat" contents of the compound shape. -Note: "flat" contents means top-level simple-type sub-shapes extracted from -the compound object recursively (i.e. there is no compounds in the result). -For example, if a compound C1 contains a solid S1 and another compound C2 that -contains solids S2 and S3 (see picture below): +Note: "flat" contents means that top-level simple-type sub-shapes are extracted from +the compound object recursively (i.e. there are no compounds in the result). + +Let us take, for example, compound C1 that contains solid S1 and another compound C2 that +contains solids S2 and S3 (see the picture below): - Explode operation with \b Shape type given as parameter will return S1 and C2; - Explode operation with \b Flat type given as parameter will return S1, S2 and S3. \image html flat_contents.png Switching on Select Sub-shapes check box allows manual selection of sub-shapes -to be extracted from the main object. In this mode the user can select sub-shapes +to be extracted from the main object. In this mode it is possible to select sub-shapes directly in 3D viewer. When Select Sub-shapes check box is switched on, additional \b Filter controls -allow to automatically pick up entites which satisfy specified threshold value(s). -The numerical functor for each sub-shape that is compared with threshold value(s) -is computed according to the shape's topological properties: -- length for edges and wires -- area for faces and shells -- volume for solids, compounds, compsolids +allow to automatically pick up entities, which satisfy the specified threshold value(s). +The numerical functor for each sub-shape that is compared with the threshold value(s) +is computed according to the topological properties of the shape: +- length for edges and wires; +- area for faces and shells; +- volume for solids, compounds and compsolids. Filtering capabilities are not available for vertices. -In order to filter out some entities: -- Activate one or two filtering controls by switching on corresponding check boxes; -- Select required threshold comparator type; the following choices are available: +To filter out some entities it is necessary to do the following: +- Activate one or two filtering controls by switching on the corresponding check boxes; +- Select the required threshold comparator type; the following choices are available: - Less Than or Equal or Less Than for the first comparator; - Greater Than or Equal or Greater Than for the second comparator; -- Enter required threshold value (values); +- Enter the required threshold value (values); - Press \b Apply button in the \b Filter group. -The entities which satisfy entered filtering parameters will be automatically highlighted +The entities, which correspond to the entered filtering parameters, will be automatically highlighted in the 3D viewer. Using TUI Commands you can perform this operation in a variety of ways: - geompy.ExtractShapes(Shape, Type, isSorted) explodes a Shape into sub-shapes of a given Type and returns a List of sub-shapes. - This method does not return the Shape itself if it matches the - Type. -- geompy.SubShapeAll(Shape, Type) explodes a Shape on + This method does not return the Shape itself if it matches the Type. +- geompy.SubShapeAll(Shape, Type) explodes a Shape into sub-shapes of a given Type and returns a List of sub-shapes. -- geompy.SubShapeAllIDs(Shape, Type) explodes a Shape on - sub-shapes of a given Type and returns a List of IDs of - sub-shapes. +- geompy.SubShapeAllIDs(Shape, Type) explodes a Shape into sub-shapes of a given Type and returns a List of IDs of sub-shapes. - geompy.SubShapeAllSortedCentres(Shape, Type) explodes a - shape on sub-shapes of a given type and sorts them taking into account + shape into sub-shapes of a given type and sorts them taking into account their gravity centers, to provide a stable order of sub-shapes. It returns a list of sub-shapes. - geompy.SubShapeAllSortedCentresIDs(Shape, Type) explodes - a shape on sub-shapes of a given type and sorts them taking into + a shape into sub-shapes of a given type and sorts them taking into account their gravity centers, to provide a stable order of sub-shapes. It returns a List of IDs of sub-shapes. - geompy.SubShape(Shape, Type, ListOfInd) allows to obtain - a compound of sub-shapes of the Shape, selected by they indices in a + a compound of sub-shapes of the Shape, selected by their indexes in a list of all sub-shapes of the given Type. Each index is in the range [1, Nb_Sub-Shapes_Of_Given_Type]. - geompy.SubShapeSortedCentres(Shape, Type, ListOfInd) allows to obtain a compound of sub-shapes of the Shape, selected by - they indices in sorted list of all sub-shapes of the given Type. Each + their indexes in a sorted list of all sub-shapes of the given Type. Each index is in the range [1, Nb_Sub-Shapes_Of_Given_Type] Arguments: 1 SHAPE + 1 type of SubShape. Example: -\image html explode.png "A box, exploded into faces" +\image html explode.png "A box exploded into faces" */ diff --git a/doc/salome/gui/GEOM/input/creating_surface_from_face.doc b/doc/salome/gui/GEOM/input/creating_surface_from_face.doc index 6034ed5e3..a707dc64e 100644 --- a/doc/salome/gui/GEOM/input/creating_surface_from_face.doc +++ b/doc/salome/gui/GEOM/input/creating_surface_from_face.doc @@ -4,10 +4,10 @@ To create a Surface From Face in the Main Menu select New Entity - > Basic - > Surface From Face -\n This function takes some face as input parameter and creates new -GEOM_Object, i.e. topological shape by extracting underlying surface -of the source face and limiting it by the Umin, Umax, Vmin, Vmax -parameters of the source face (in the parametrical space). +\n This function takes a face at input and creates a new +GEOM_Object, i.e. topological shape by extracting the underlying surface +of the source face and limiting it by the Umin, Umax, Vmin and Vmax +parameters of the source face (in the parametric space). \n \ref restore_presentation_parameters_page "Advanced options". diff --git a/doc/salome/gui/GEOM/input/creating_thickness_page.doc b/doc/salome/gui/GEOM/input/creating_thickness_page.doc index 140c02fc1..88dfc221e 100644 --- a/doc/salome/gui/GEOM/input/creating_thickness_page.doc +++ b/doc/salome/gui/GEOM/input/creating_thickness_page.doc @@ -2,26 +2,28 @@ \page create_thickness_page Thickness Construction -To add a \b Thickness to a shape in the Main Menu select New Entity - > Generation - > Thickness -\n -It is possible to create a Solid from a Face or a Shell by applying a -\b Thickness. To do it you should define an \b Object that is a Face or a -Shell, \b Thickness and to define the thickness direction by means of -Thicken towards the inside check box. +To add \b Thickness to a shape in the Main Menu select New Entity - > Generation - > Thickness. + +Switch between adding thickness to a Face (Shell) or a Solid using radio buttons. + +Firstly, \b Thickness can be applied to a Face or a Shell to create a Solid. \image html thickness.png +It is necessary to define an \b Object (Face or Shell) and the value of \b Thickness. +Thicken towards the inside check box allows changing the thickness direction. + Example: \image html thickness_result.png "Thickness of Shell" -It is possible to apply \b Thickness to a Solid. The result of this operation -is the hollowed Solid. To do it you should define an \b Object that is a Solid, -\b Faces to be removed from result, \b Thickness and the thickness direction by -means of Thicken towards the inside check box. +Secondly, the \b Thickness can be applied to a Solid to create a hollowed Solid. \image html thicksolid.png +It is necessary to define a Solid \b Object \b Faces to be removed from the result and \b Thickness. +Thicken towards the inside check box allows changing the thickness direction. + Example: \image html thicksolid_result.png "Thickness of Solid" @@ -36,8 +38,8 @@ Modifies a shape to make it a thick solid. Arguments: Name + 1 shape (face, shell or solid) + thickness + the list of face IDs. -\n If the shape is face or shell the list of face IDs is not used. -The thickness can be positive or negative for thicken towards the inside. +\n If the shape is a face or a shell the list of face IDs is not used. +The thickness can be positive or negative for thickening towards the inside. \n\n Advanced options \ref preview_anchor "Preview" Our TUI Scripts provide you with useful examples of creation of diff --git a/doc/salome/gui/GEOM/input/dependency_tree.doc b/doc/salome/gui/GEOM/input/dependency_tree.doc index 2f07c9bd3..b8346eec7 100644 --- a/doc/salome/gui/GEOM/input/dependency_tree.doc +++ b/doc/salome/gui/GEOM/input/dependency_tree.doc @@ -34,7 +34,7 @@ All necessary parameters of Dependency Tree Viewer can be edited in the \ref pre Tree nodes in the Dependency Viewer are named according to the study names of the corresponding objects. -All nodes have fixed size, so long names are cut; the full object name can be seen in the tooltip +All nodes have fixed size, so long names are cut; the full object name can be seen in the tool-tip when the cursor is hovered over the node. "Dependency Tree" view supports the following states of nodes: @@ -61,11 +61,11 @@ Browser, OCC Viewer or Dependency Tree Viewer; Dependency Tree Viewer shows oriented links between nodes to represent the dependency direction. The viewer supports the following states of links: -
      • Unidirectional link - shows that object B depends on object A;
      +
      • Unidirectional link - shows that object \b B depends on object \b A;
      \image html tree_unidir_link.png -
      • Bidirectional link - shows that object B depends on -object A and, at the same time, object A depends on object B;
      +
      • Bidirectional link - shows that object \b B depends on +object \b A and, at the same time, object \b A depends on object \b B;
      \image html tree_bidir_link.png
      • Self-dependency link - shows that an object depends on itself;
      diff --git a/doc/salome/gui/GEOM/input/display_mode.doc b/doc/salome/gui/GEOM/input/display_mode.doc index 7ba535184..af842ccf1 100644 --- a/doc/salome/gui/GEOM/input/display_mode.doc +++ b/doc/salome/gui/GEOM/input/display_mode.doc @@ -29,7 +29,7 @@ functionality for all objects in the current view via the main menu \n TUI Command: gg.setVectorsMode(ID, Bool) -\n Also it is possible to show the vertices of the selected +\n It is possible to show the vertices of the selected shape. For this, choose in the context menu of the shape Display mode -> Show Vertices, or apply this functionality for all objects in the current view via the main menu @@ -40,10 +40,9 @@ functionality for all objects in the current view via the main menu \n TUI Command: gg.setVerticesMode(ID, Bool) -\n Moreover user can show the name of the selected -shape. For this, choose in the context menu of the shape +\n To show the name of the selected shape, choose in its context menu Display mode -> Show Name, or apply this -functionality for all objects in the current view via the main menu +functionality for all objects in the current view via the main menu option View -> Display Mode -> Show/Hide Name. \image html name_mode.png diff --git a/doc/salome/gui/GEOM/input/extension_operation.doc b/doc/salome/gui/GEOM/input/extension_operation.doc index 605ff176f..dd2ad27fa 100644 --- a/doc/salome/gui/GEOM/input/extension_operation.doc +++ b/doc/salome/gui/GEOM/input/extension_operation.doc @@ -1,25 +1,20 @@ /*! -\page extension_operation_page Extension of an Edge or a Face +\page extension_operation_page Extension -\n To produce an \b Extension in the Main Menu select -Operations - > Transformation - > Extension +\n To produce an \b Extension of an Edge or a Face select in the Main Menu +Operations - > Transformation - > Extension. The type of extension is defined using the radio buttons. -\n This operation resizes an \b Edge by means of first - and last parameters modification or a \b Face by means of modification - of minimal and maximal U- and V-Parameters. \n -\ref restore_presentation_parameters_page "Advanced options". +Firstly it is possible to resize an \b Edge by modifying its first +and last parameters -The type of extension is defined using the radio buttons. +\image html extension1.png "Edge Extension" -Firstly it is possible to resize an \b Edge. \n TUI Command: geompy.ExtendEdge(theEdge, theMin, theMax), where \em theEdge the input edge to be resized, \em theMin the minimal parameter value, \em theMax the maximal parameter value. \n Arguments: Name + Object (Edge) + 2 values (Min and Max Parameters). -\image html extension1.png "Extension of an Edge" - \n Example: \image html extend_edge_example.png "Original edge (white) and extended edge" @@ -28,8 +23,12 @@ parameter value, \em theMax the maximal parameter value. negative, the input Edge is extended, otherwise it is shrinked by \b theMin parameter. If \b theMax is greater than 1, the Edge is extended, otherwise it is shrinked by \b theMax parameter. + +Secondly it is possible to resize a \b Face by modifying its +minimal and maximal U- and V-Parameters. -Secondly it is possible to resize a \b Face. + \image html extension2.png "Face Extension" + \n TUI Command: geompy.ExtendFace(theFace, theUMin, theUMax, theVMin, theVMax), where \em theFace the input face to be resized, \em theUMin the minimal U-Parameter value, \em theUMax the maximal U-Parameter @@ -38,18 +37,16 @@ V-Parameter value. \n Arguments: Name + Object (Face) + 4 values (Min and Max U- and V-Parameters). -\image html extension2.png "Extension of a Face" \n Example: -\image html extend_face_example.png "The original face (gray) and a result - face shrinked along U-Direction and extended along V-Direction" +\image html extend_face_example.png "The original face (gray) and a result face shrinked along U-Direction and extended along V-Direction" \note The input Face U- and V-Parameters range is [0, 1]. If \b theUMin parameter is negative, the input Face is extended, otherwise it is - shrinked along U-Direction by \b theUMin parameter. If theUMax is + shrinked along U-Direction by \b theUMin parameter. If \b theUMax is greater than 1, the Face is extended, otherwise it is shrinked along - U-Direction by \b theUMax parameter. So as for \b theVMin, \b theVMax + U-Direction by \b theUMax parameter. The same applies to \b theVMin, \b theVMax and V-Direction of the input Face. Our TUI Scripts provide you with useful examples of the use of diff --git a/doc/salome/gui/GEOM/input/fast_intersection.doc b/doc/salome/gui/GEOM/input/fast_intersection.doc index 4de27fc29..f27a6d944 100644 --- a/doc/salome/gui/GEOM/input/fast_intersection.doc +++ b/doc/salome/gui/GEOM/input/fast_intersection.doc @@ -1,11 +1,11 @@ /*! \page fast_intersection_page Fast intersection -This operation checks whether or not two selected shapes are overlapped. +This operation checks if two selected shapes are overlapped. This tool is useful for fast detection of intersections and gaps. In contrast to Boolean Operations, Partition and Detect Self-intersection -algorithms that compute topological intersections, this algoritm computes +algorithms that compute topological intersections, this algorithm computes intersections by generating tessellation (triangulation) of the source shapes and detecting overlapping of resulting meshes. High performance is achieved through the use of existing triangulation of faces. @@ -28,22 +28,21 @@ of the GUI module's documentation. In this dialog: -- \b Object 1 - first checked object. \b Selection button allows picking it in the viewer or in the object browser. -- \b Object 2 - second checked object. \b Selection button allows picking it in the viewer or in the object browser. +- Object 1 and Object 2 the checked objects. \b Selection button allows picking them in the viewer or in the object browser. - Deflection coefficient specifies the quality of shapes tessellation. - Detect gaps - when switched on, allows detecting gaps between shapes. -- Tolerance - specifies a distance between shapes used for detecting gaps. +- Tolerance - specifies the distance between shapes used for detecting gaps. - Compute intersections - press this button to compute interferences. - Sub-shapes of Object 1 - list of sub-shapes from the first source shape that localize the intersection. - Sub-shapes of Object 2 - list of sub-shapes from the second source shape that localize the intersection. - \b Apply and Apply and Close buttons are used to store selected intersected shapes in the study for further analysis (see below). -\note Quality of the result depends on the quality of triangulation. Changing a value of the deflection coefficient -parameter can strongly affect the result. On the other hand, small values of deflection coefficient might lead to +\note The result quality depends on the quality of triangulation. Changing the value of the deflection coefficient +parameter can strongly affect the result. However, small values of the deflection coefficient might lead to some performance loss of the algorithm, as number of triangles of the tesselation mesh depends on this parameter. -It is possible to store sub-shapes selected by the user in the study, for the further analysis. +Press Apply and Close or \b Apply button to store the selected sub-shapes in the study for further analysis. The selection will be published as a compound containing intersected sub-shapes from both source objects. TUI Command: geompy.FastIntersect(theShape1, theShape2, theTolerance = 0.0, theDeflection = 0.001), \n diff --git a/doc/salome/gui/GEOM/input/glue_edges_operation.doc b/doc/salome/gui/GEOM/input/glue_edges_operation.doc index eb7d2377c..2b5c8a981 100644 --- a/doc/salome/gui/GEOM/input/glue_edges_operation.doc +++ b/doc/salome/gui/GEOM/input/glue_edges_operation.doc @@ -17,7 +17,7 @@ given tolerance value. \n TUI Command:

      geompy.MakeGlueEdges( theShapes, theTolerance ), -\n where \em theShapes is either a list or compound of shapes to be +\n where \em theShapes is a list or compound of shapes to be glued, and \em theTolerance is a maximum distance between two edges, which can be considered as coincident. @@ -41,12 +41,12 @@ The selected edges will be marked in white. theTolerance is a maximum distance between two edges, which can be considered as coincident. The \b Result will be a list of \b GEOM_Objects (edges), containing one sub-shape per each detected set of - coincident sub-shapes. For example if there are two coincident edges -in selected shapes, the result list contains one of the two coincident edges. + coincident sub-shapes. For example, if there are two coincident edges +in the selected shapes, the result list contains one of the two coincident edges. geompy.MakeGlueEdgesByList( theShapes, theTolerance, theEdges ), -\n where \em theShape is either a list or compound of shapes to be glued, \em - theTolerance is a maximum distance between two edges, which can +\n where \em theShape is a list or compound of shapes to be glued, +\em theTolerance is a maximum distance between two edges, which can be considered as coincident, \em theEdges is a list of edges to be glued. diff --git a/doc/salome/gui/GEOM/input/glue_faces_operation.doc b/doc/salome/gui/GEOM/input/glue_faces_operation.doc index 8f020115b..c6a6fa021 100644 --- a/doc/salome/gui/GEOM/input/glue_faces_operation.doc +++ b/doc/salome/gui/GEOM/input/glue_faces_operation.doc @@ -41,12 +41,12 @@ The selected faces will be marked in white. When the faces are glued their edges are glued as well. By default, other edges are not glued. To force gluing of all edges, check Glue all coincident edges -checkbox. +check-box. \n TUI Commands: geompy.GetGlueFaces( theShapes, theTolerance ), -\n where \em theShapes is either a list or compound of shapes to be glued, \em +\n where \em theShapes is a list or compound of shapes to be glued, \em theTolerance is a maximum distance between two faces, which can be considered as coincident. The \b Result will be a list of \b GEOM_Objects (faces), containing one sub-shape per each detected set of diff --git a/doc/salome/gui/GEOM/input/inspect_object_operation.doc b/doc/salome/gui/GEOM/input/inspect_object_operation.doc index 40cc4c027..0650bd47b 100755 --- a/doc/salome/gui/GEOM/input/inspect_object_operation.doc +++ b/doc/salome/gui/GEOM/input/inspect_object_operation.doc @@ -12,11 +12,11 @@ In this dialog: - Click on the "selection" button and select an object to inspect in the Object Browser or in the viewer. - Show/hide sub-shape(s) in the 3D viewer, by pressing “eye” icon in the first column of the tree view. - Show/hide all sub-shapes in the 3D viewer, by pressing “eye” icon in the first column of the tree view header. -- Rename selected sub-shape by double-clicking on the item or pressing key. -- Show selected sub-shape(s) in the 3D viewer by pressing Show Selected button. -- Show selected sub-shape(s) in the 3D viewer and erase all currently shown objects by pressing Show Only Selected button. -- Hide selected sub-shape(s) from the 3D viewer by pressing Hide Selected button. -- Publish selected sub-shapes in the study, by pressing Publish Selected button. +- Rename the selected sub-shape by double-clicking on the item or pressing key. +- Show the selected sub-shape(s) in the 3D viewer by pressing Show Selected button. +- Show the selected sub-shape(s) in the 3D viewer and erase all currently shown objects by pressing Show Only Selected button. +- Hide the selected sub-shape(s) from the 3D viewer by pressing Hide Selected button. +- Publish the selected sub-shapes in the study, by pressing Publish Selected button. - Close dialog box, by pressing Close button. */ diff --git a/doc/salome/gui/GEOM/input/projection_on_cylinder_operation.doc b/doc/salome/gui/GEOM/input/projection_on_cylinder_operation.doc index be0c5aa27..88e4d9fbd 100644 --- a/doc/salome/gui/GEOM/input/projection_on_cylinder_operation.doc +++ b/doc/salome/gui/GEOM/input/projection_on_cylinder_operation.doc @@ -14,12 +14,11 @@ To make a projection it is necessary to define: - \b Object to be projected. It can be either a planar wire or a face; - \b Radius of the cylinder; - Starting angle from the cylinder's X axis around Z axis. This is -the angle of the projection starting. -- Length angle in which to project the total length of -the wire. If it is unchecked the projection is not scaled and natural +the angle of the projection start. +- Length angle where the total length of +the wire should be projected. If it is unchecked the projection is not scaled and the natural wire length is kept for the projection. - -\ref restore_presentation_parameters_page "Advanced options". +- \ref restore_presentation_parameters_page "Advanced options". \image html proj_on_cyl_dlg.png @@ -29,8 +28,8 @@ wire length is kept for the projection. \n TUI Command: geompy.MakeProjectionOnCylinder(theObject, theRadius, theStartAngle=0.0, theAngleLength=-1.0), -where \em theObject is a shape which has to be projected, \em theRadius -is a cylinder radius, \em theStartAngle the starting angle of projection in +where \em theObject is a shape to be projected, \em theRadius +is a cylinder radius, \em theStartAngle is the starting angle of projection in radians, \em theAngleLength the projection length angle in radians. The \em Result will be a \em GEOM_Object. diff --git a/doc/salome/gui/GEOM/input/sewing_operation.doc b/doc/salome/gui/GEOM/input/sewing_operation.doc index 0008dc80a..9d293dec4 100644 --- a/doc/salome/gui/GEOM/input/sewing_operation.doc +++ b/doc/salome/gui/GEOM/input/sewing_operation.doc @@ -3,18 +3,18 @@ \page sewing_operation_page Sewing \b Sewing operation allows uniting several faces (possibly contained -in a shell, solid or compound) into one shell while geometrically +in a shell, solid or compound) into one shell. Geometrically coincident (within a specified tolerance) edges (or parts of edges) of different faces are replaced by one edge thus producing a shell of faces with shared boundaries.

      This operation is similar to New Entity - > Build - > Shell operation, the difference is that with \b Sewing you can specify the -tolerance and can get a non-manifold result.

      -Possibility to create a non-manifold shell can be used e.g. to create a +tolerance and get a non-manifold result.

      +The possibility to create a non-manifold shell can be used e.g. to create a shell forming several closed domains and then to create several solids with shared boundaries from this shell. -\note Geometrically coincident faces (or part of faces) won't be +\note Geometrically coincident faces (or parts of faces) will not be replaced by one face during \b Sewing. To produce a \b Sewing operation in the Main Menu select Repair - > Sewing. diff --git a/doc/salome/gui/GEOM/input/shape_processing_operation.doc b/doc/salome/gui/GEOM/input/shape_processing_operation.doc index c92d48b8c..643c70638 100644 --- a/doc/salome/gui/GEOM/input/shape_processing_operation.doc +++ b/doc/salome/gui/GEOM/input/shape_processing_operation.doc @@ -56,22 +56,22 @@ merge with neighboring edges.

    17. 3D Tolerance (DropSmallEdges.Tolerance3d) - defines minimum possible distance between two parallel edges.
    18. -
    19. Drop Small Solids (DropSmallSolids) - either removes small +
    20. Drop Small Solids (DropSmallSolids) - removes small solids or merges them with neighboring ones.
      • Width factor tol. (DropSmallSolids.WidthFactorThreshold) - - defines maximum value of 2V/S of a solid which is - considered small, where \a V is volume and \a S is surface area of + defines the maximum value of 2V/S of a solid, which is + considered small, where \a V is the volume and \a S is the surface area of the solid.
      • Volume tol. (DropSmallSolids.VolumeThreshold) - defines - maximum volume of a solid which is considered small.
      • + the maximum volume of a solid, which is considered small.
      • To merge solids (DropSmallSolids.MergeSolids) - if activated, small solids are removed, else small solids are merged to - adjacent non-small solids or left untouched if cannot be merged. + adjacent non-small solids or left untouched if they cannot be merged.
      If the both tolerances are activated a solid is considered small if -it meets the both criteria. +it meets both criteria.
    21. Split Angle (SplitAngle) - splits faces based on conical surfaces, surfaces of revolution and cylindrical surfaces in segments using a certain angle.
    22. diff --git a/doc/salome/gui/GEOM/input/shared_shapes.doc b/doc/salome/gui/GEOM/input/shared_shapes.doc index 802fc45a1..23d94d2f0 100755 --- a/doc/salome/gui/GEOM/input/shared_shapes.doc +++ b/doc/salome/gui/GEOM/input/shared_shapes.doc @@ -15,22 +15,22 @@ Shared Shapes.
      The following dialog box will appear. In this dialog: - Name is the base name of the resulting shapes. -- Shapes are the shapes to fing shared sub-shapes of. +- Shapes are the shapes whose shared sub-shapes should be found. - Sub-shapes Type is the type of required sub-shapes. - Shared by all option specifies what type of shared sub-shapes should be checked: - - \b On: causes to search sub-shapes from the first input shape shared with all other input shapes; - - \b Off: causes to search sub-shapes shared between couples of input shapes. + - \b On: searches for sub-shapes from the first input shape shared with all other input shapes; + - \b Off: searches for sub-shapes shared between couples of input shapes. \note For the case when "Shared by all" option is switched off - if an input list of shapes -contains single compound, the sub-shapes shared between all possible couples of its top-level shapes -are searched; otherwise, only sub-shapes that are shared between first input shape and all rest input -shapes are searched. +contains a single compound, the sub-shapes shared between all possible couples of its top-level shapes +are searched for; otherwise, only sub-shapes that are shared between the first input shape and +all other input shapes are searched. Advanced options: \ref preview_anchor "Preview" TUI Command: geompy.GetSharedShapesMulti( Shapes, Type ), -
      where \em Shapes is a list or compound of shapes to fing shared sub- -shapes of and \em Type is the type of required sub-shapes. +
      where \em Shapes is a list or compound of shapes, whose shared sub- +shapes should be found and \em Type is the type of required sub-shapes. Our TUI Scripts provide you with useful examples of the use of Get Shared Shapes functionality: diff --git a/doc/salome/gui/GEOM/input/size_models_range.doc b/doc/salome/gui/GEOM/input/size_models_range.doc index 5f77a22e3..c8594abff 100644 --- a/doc/salome/gui/GEOM/input/size_models_range.doc +++ b/doc/salome/gui/GEOM/input/size_models_range.doc @@ -4,37 +4,33 @@ \tableofcontents -This document determines the range of numbers (tolerances, locations -and sizes) that are to be taken into account for any 3D model design -in Salome. Although it is not obligatory to create models within this range, -algorithms can fail or return unexpected result in this case. +In Salome and Open CASCADE Technology (OCCT), which is a modeling core +of Salome %GEOM module, any model has its location in the 3D-space and size. + +This document defines the range of values (tolerances, locations +and sizes) that should be taken into account for any 3D model design. -This document refers mainly to Open CASCADE Technology (OCCT). However it -concerns Salome as well as OCCT is a modeling core of Salome %GEOM module. - -Any model in 3D-space has its location and sizes. The last two things in Salome -and OCCT are represented by the double precision floating point numbers. - -The goal of the document is to define the range of numbers that can be used in -modeling algorithms provided by Salome and Open CASCADE Technology. +It is not obligatory to create models within this range, +however, algorithms can fail or return unexpected results if the +recommendations are not followed. \section sec1 Maximal Size of the Model -The Maximal Size of the model is a number defined as the maximal diameter of +The Maximal Size of the model corresponds to the maximal diameter of enclosed sphere built for the model. In OCCT any model has a location defined -relative the absolute origin. Thus the maximal diameter above should be built +relatively to the absolute origin. Thus the maximal diameter should be built taking into account the model itself and its location. -In Open CASCADE there are two tolerances: Tolerance Confusion (TolC) +In OCCT there are two tolerances: Tolerance Confusion (TolC) and Tolerance Angular (TolA) (see OCCT Precision package for more details). -These values are used for geometric comparisons. They are not used inside -low-level algorithms (intersection for e.g.), where more precise values are +These values are used for geometric comparisons. However, they are not used inside +low-level algorithms (e.g. intersection), where more precise values are used instead. The value TolC guarantees that the error associated with -the computations for given geometric entity is not greater than TolC. +the computations for a given geometric entity is not greater than TolC. -- TolC - precision value when checking coincidence of two points +- TolC - precision value used to check the coincidence of two points [by default 1.e-7]; -- TolA - precision value when checking the equality of two angles +- TolA - precision value used to check the equality of two angles [by default 1.e-12]. For more information on tolerance definition please see @@ -43,8 +39,8 @@ that are due to modeling errors or inaccuracies of tolerance usage please refer to Chapter 9.2.2 of the same document. To provide robust geometric modeling the computations should be consistent, -i.e. the one tolerance value should be used for all computations. To provide -consistent computations the values TolC and TolA should be consistent: +i.e. the one tolerance value should be used for all computations. Thus, the +TolC and TolA values should be consistent:
      Smax = TolC / TolA             (1)
      @@ -56,16 +52,16 @@ In accordance with (1) the Maximal Size for the Model is [by default]: \section sec2 Minimal Size of the Model -The Minimal Size of the Model is defined as maximal diameter of enclosed +The Minimal Size of the Model is defined as the maximal diameter of enclosed sphere built for the smallest BRep entity of the Model. -All models in Open CASCADE Technology are represented using double precision +All models in OCCT are represented using double precision floating point numbers. This representation contains approximately 14-16 significant digits. -From the experience of using it is considered that the least four significant +From the experience, it is considered that the last four significant digits contain rounding-off errors occurring during the computation. So -(taking in account the worst cases), there are ten reliable significant digits +(taking into account the worst cases), there are ten reliable significant digits for double precision floating point numbers. Having the estimation it is possible to compute the value of the Minimal size of the model: @@ -78,7 +74,7 @@ In accordance with (2) for the default value it will be [by default]: \section sec3 Full Range of Sizes The values Smax (2), Smin (4) are theoretical. Taking into -account the practical purposes of improving the reliability the lower limit +account the practical purposes of improving the reliability, the lower limit should be restricted by one order. Thus, the full Range of Sizes of the Models is: diff --git a/doc/salome/gui/GEOM/input/transfer_data.doc b/doc/salome/gui/GEOM/input/transfer_data.doc index b34b34f31..87a64860f 100644 --- a/doc/salome/gui/GEOM/input/transfer_data.doc +++ b/doc/salome/gui/GEOM/input/transfer_data.doc @@ -21,24 +21,23 @@ In this dialog:
      • Source Shape is an object that is a source of non-topological data.
      • Destination Shape is a data destination object.
      • -
      • Type of detection operation is the method to search sub-shapes of - Source Shape in Destination Shape. Data are transferred - from these corresponding sub-shapes. This is a combo-box with the following - possible values: +
      • Type of detection operation allows choosing how to search sub-shapes of the + Source Shape in the Destination Shape. The data are transferred + from these corresponding sub-shapes. The following methods are possible:
          -
        • Get In Place - current implementation of Get In Place algorithm +
        • Get In Place - the current implementation of Get In Place algorithm (default value).
        • -
        • Get In Place (old) - old implementation of Get In Place +
        • Get In Place (old) - the old implementation of Get In Place algorithm.
        • Get In Place By History - Get In Place By History algorithm.
      -To copy data click on \b Apply or Apply and Close button. As the result -it is possible to see how many names and materials are copied as well as -maximum number of names and materials available for copying. This information is -provided on the following message box: +To copy the data click on \b Apply or Apply and Close button. +It is possible to see how many names and materials are copied as well as +the maximum number of names and materials available for copying. This information is +provided in the following message box: \image html transfer_data2.png "Transfer Data Information" diff --git a/doc/salome/gui/GEOM/input/whatis.doc b/doc/salome/gui/GEOM/input/whatis.doc index fad70f01c..43dc0f6f7 100644 --- a/doc/salome/gui/GEOM/input/whatis.doc +++ b/doc/salome/gui/GEOM/input/whatis.doc @@ -5,13 +5,13 @@ This operation provides the list of types and quantities of all topological entities, composing the selected geometrical object. -For the \em COMPOUND or \em COMPSOLID shape, additionally the information about -"flat" content is shown - a number of "simple" top-level shapes enclosed into the compound. +The information about \em COMPOUND or \em COMPSOLID shapes additionally shows +"flat" content - the number of "simple" top-level shapes enclosed into the compound. \image html measures8.png \note This dialog supports navigation through the selectable objects (in OCC 3D viewer only): -- Scroll mouse wheel with pressed \em Ctrl key or press \em "S", \em "P" keys when input focus is +- Scroll mouse wheel with pressed \em Ctrl key or press \em "S", \em "P" keys when the input focus is in the viewer to navigate between selectable objects. - Press left mouse button to select an appropriate object to the dialog box. . diff --git a/doc/salome/gui/GEOM/input/working_with_groups.doc b/doc/salome/gui/GEOM/input/working_with_groups.doc index 36a0d49a3..2ca5154dc 100644 --- a/doc/salome/gui/GEOM/input/working_with_groups.doc +++ b/doc/salome/gui/GEOM/input/working_with_groups.doc @@ -81,24 +81,24 @@ creation of other groups), or skip it by clicking \b Close button. \n The Result of the operation will be a \b GEOM_Object. -The \b Filter controls allow to automatically pick up entites which satisfy specified +The \b Filter controls allow to automatically pick up entities, which satisfy specified threshold value(s). The numerical functor for each sub-shape that is compared with threshold value(s) is computed according to the shape's topological properties: -- length for edges and wires -- area for faces and shells -- volume for solids, compounds, compsolids +- length for edges and wires; +- area for faces and shells; +- volume for solids, compounds, compsolids. Filtering capabilities are not available for vertices. In order to filter out some entities: -- Activate one or two filtering controls by switching on corresponding check boxes; -- Select required threshold comparator type; the following choices are available: +- Activate one or two filtering controls by switching on the corresponding check boxes; +- Select the required threshold comparator type; the following choices are available: - Less Than or Equal or Less Than for the first comparator; - Greater Than or Equal or Greater Than for the second comparator; -- Enter required threshold value (values); +- Enter the required threshold value (values); - Press \b Apply button in the \b Filter group. -The entities which satisfy entered filtering parameters will be automatically highlighted +The entities, which satisfy the entered filtering parameters, will be automatically highlighted in the 3D viewer. \n TUI Command: geompy.CreateGroup(MainShape, From f312091eb5bf90096c0a8d4d0ed4be68f34fbd9b Mon Sep 17 00:00:00 2001 From: vsr Date: Tue, 26 May 2015 13:56:05 +0300 Subject: [PATCH 44/45] Remove redundant code --- src/EntityGUI/EntityGUI_FeatureDetectorDlg.cxx | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/src/EntityGUI/EntityGUI_FeatureDetectorDlg.cxx b/src/EntityGUI/EntityGUI_FeatureDetectorDlg.cxx index 8a35f1681..00b35eaec 100644 --- a/src/EntityGUI/EntityGUI_FeatureDetectorDlg.cxx +++ b/src/EntityGUI/EntityGUI_FeatureDetectorDlg.cxx @@ -400,7 +400,6 @@ void EntityGUI_FeatureDetectorDlg::SelectionIntoArgument() // TODO supprimer les lignes qui ne servent à rien le cas échéant SUIT_ViewWindow* theViewWindow = getDesktop()->activeWindow(); - std::map< std::string , std::vector >::iterator AISit; SOCC_Viewer* soccViewer = (SOCC_Viewer*)(theViewWindow->getViewManager()->getViewModel()); if (!myEditCurrentArgument->isEnabled()) @@ -434,17 +433,6 @@ void EntityGUI_FeatureDetectorDlg::SelectionIntoArgument() if ( myEditCurrentArgument == mySelectionGroup->LineEdit1 ) { myFace = aSelectedObject; - AISit = soccViewer->entry2aisobjects.find(myFaceEntry.toStdString()); - if (AISit == soccViewer->entry2aisobjects.end()) - return; - - Handle(AIS_InteractiveObject) myAIS = (*AISit).second[0]; - Handle(GEOM_AISShape) myAISShape; - if( myAIS->IsInstance( STANDARD_TYPE(GEOM_AISShape) ) ) { - myAISShape = Handle(GEOM_AISShape)::DownCast( myAIS ); - } - else - return ; SalomeApp_Study* study = dynamic_cast( SUIT_Session::session()->activeApplication()->activeStudy() ); if ( !study ) return; @@ -455,7 +443,7 @@ void EntityGUI_FeatureDetectorDlg::SelectionIntoArgument() PropMap propMap = study->getObjectProperties( vm->getGlobalId(), myFaceEntry ); QString theImgFileName = propMap.value( GEOM::propertyName( GEOM::Texture ) ).toString(); if ( theImgFileName.isEmpty() ) - return ; + return; // Setting the image caracteristics myDetector->SetPath( theImgFileName.toStdString() ); From 44ee08e8492cdceb03d6633b4c855936fc8b636f Mon Sep 17 00:00:00 2001 From: vsr Date: Wed, 27 May 2015 10:50:06 +0300 Subject: [PATCH 45/45] Fix error in the script which takes place when generating documentation in plugins --- doc/salome/gui/GEOM/collect_geom_methods.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/doc/salome/gui/GEOM/collect_geom_methods.py b/doc/salome/gui/GEOM/collect_geom_methods.py index 3639181c4..2f489aefb 100644 --- a/doc/salome/gui/GEOM/collect_geom_methods.py +++ b/doc/salome/gui/GEOM/collect_geom_methods.py @@ -117,16 +117,22 @@ if __name__ == "__main__": if len( args ) < 1: sys.exit("Plugin name is not specified") f = open(options.output, "w") - + + if len(args) > 1: + plugins_names = " ".join(args) + " plugins" + elif len(args) == 1: + plugins_names = args[0] + " plugin" + else: + plugins_names = "" output = [] if options.dummygeomhelp: output.append( "## @package geomBuilder" ) - output.append( "# Documentation of the methods dynamically added by the " + plugin_name + " Geometry plug-in to the geomBuilder class." ) + output.append( "# Documentation of the methods dynamically added by the " + plugins_names + " to the @b %geomBuilder class." ) # Add dummy Geometry help # This is supposed to be done when generating documentation for Geometry module plug-ins output.append( "# @note The documentation below does not provide complete description of class @b %geomBuilder" ) output.append( "# from @b geomBuilder package. This documentation provides only information about" ) - output.append( "# the methods dynamically added to the %geomBuilder class by the " + plugin_name + " plugin" ) + output.append( "# the methods dynamically added to the %geomBuilder class by the " + plugins_names + "." ) output.append( "# For more details on the %geomBuilder class, please refer to the SALOME %Geometry module" ) output.append( "# documentation." ) pass