From 49cfd13dca593a95346be275e629dafce84cea43 Mon Sep 17 00:00:00 2001 From: oan Date: Thu, 6 Nov 2014 16:05:14 +0300 Subject: [PATCH] 0025445: Draw command incmesh should support all parameters used in BRepMesh Test-case for issue #25445 --- src/MeshTest/MeshTest.cxx | 62 +++++++++++++++++----- tests/bugs/demo/bug25445 | 28 ++++++++++ tests/bugs/mesh/bug24968_1 | 2 +- tests/bugs/mesh/bug24968_2 | 2 +- tests/mesh/advanced_incmesh/begin | 2 +- tests/mesh/advanced_incmesh_parallel/begin | 2 +- tests/mesh/end | 2 +- tests/mesh/standard_incmesh/begin | 2 +- tests/mesh/standard_incmesh_parallel/begin | 2 +- 9 files changed, 83 insertions(+), 21 deletions(-) create mode 100644 tests/bugs/demo/bug25445 diff --git a/src/MeshTest/MeshTest.cxx b/src/MeshTest/MeshTest.cxx index ab35f16c07..519e01e29e 100644 --- a/src/MeshTest/MeshTest.cxx +++ b/src/MeshTest/MeshTest.cxx @@ -54,6 +54,7 @@ #include #include #include +#include #include #include @@ -118,33 +119,66 @@ OSD_Chronometer chIsos, chPointsOnIsos; //function : incrementalmesh //purpose : //======================================================================= - static Standard_Integer incrementalmesh(Draw_Interpretor& di, Standard_Integer nbarg, const char** argv) { - if (nbarg < 3) { - di << " use incmesh shape deflection [inParallel (0/1) : 0 by default]\n"; + if (nbarg < 3) + { + di << "\ +Builds triangular mesh for the shape\n\ +usage: incmesh Shape LinearDeflection [options]\n\ +options:\n\ + -a val angular deflection in deg (default ~28.64 deg = 0.5 rad)\n\ + -relative notifies that relative deflection is used\n\ + (switched off by default)\n\ + -parallel enables parallel execution (switched off by default)\n"; return 0; } TopoDS_Shape aShape = DBRep::Get(argv[1]); - if (aShape.IsNull()) { - di << " null shapes is not allowed here\n"; + if (aShape.IsNull()) + { + di << " Null shapes are not allowed here\n"; return 0; } - Standard_Real aDeflection = Draw::Atof(argv[2]); + Standard_Real aLinDeflection = Max(Draw::Atof(argv[2]), Precision::Confusion()); + Standard_Real aAngDeflection = 0.5; + Standard_Boolean isRelative = Standard_False; Standard_Boolean isInParallel = Standard_False; - if (nbarg == 4) { - isInParallel = Draw::Atoi(argv[3]) == 1; + + if (nbarg > 3) + { + Standard_Integer i = 3; + while (i < nbarg) + { + TCollection_AsciiString aOpt(argv[i++]); + aOpt.LowerCase(); + + if (aOpt == "") + continue; + else if (aOpt == "-relative") + isRelative = Standard_True; + else if (aOpt == "-parallel") + isInParallel = Standard_True; + else if (i < nbarg) + { + Standard_Real aVal = Draw::Atof(argv[i++]); + if (aOpt == "-a") + aAngDeflection = aVal * M_PI / 180.; + else + --i; + } + } } + di << "Incremental Mesh, multi-threading " - << (isInParallel ? "ON\n" : "OFF\n"); - - BRepMesh_IncrementalMesh MESH(aShape, aDeflection, Standard_False, 0.5, isInParallel); - Standard_Integer statusFlags = MESH.GetStatusFlags(); + << (isInParallel ? "ON" : "OFF") << "\n"; + + BRepMesh_IncrementalMesh aMesher(aShape, aLinDeflection, isRelative, + aAngDeflection, isInParallel); di << "Meshing statuses: "; - + Standard_Integer statusFlags = aMesher.GetStatusFlags(); if( !statusFlags ) { di << "NoError"; @@ -1542,7 +1576,7 @@ void MeshTest::Commands(Draw_Interpretor& theCommands) g = "Mesh Commands"; - theCommands.Add("incmesh","incmesh shape deflection [inParallel (0/1) : 0 by default]",__FILE__, incrementalmesh, g); + theCommands.Add("incmesh","Builds triangular mesh for the shape, run w/o args for help",__FILE__, incrementalmesh, g); theCommands.Add("MemLeakTest","MemLeakTest",__FILE__, MemLeakTest, g); theCommands.Add("fastdiscret","fastdiscret shape deflection [shared [nbiter]]",__FILE__, fastdiscret, g); theCommands.Add("mesh","mesh result Shape deflection",__FILE__, triangule, g); diff --git a/tests/bugs/demo/bug25445 b/tests/bugs/demo/bug25445 new file mode 100644 index 0000000000..191509838f --- /dev/null +++ b/tests/bugs/demo/bug25445 @@ -0,0 +1,28 @@ +puts "========" +puts "OCC25445" +puts "========" +puts "" +####################################################################### +# Draw command incmesh should support all parameters used in BRepMesh +####################################################################### + +pcone aCone 100 10 100 + +tclean aCone +incmesh aCone 0.01 -a 0.4 +set bug_info [trinfo aCone] +set NbTrian_1 [lindex $bug_info 3] +set NbNodes_1 [lindex $bug_info 5] + +tclean aCone +incmesh aCone 0.01 -a 0.3 +set bug_info [trinfo aCone] +set NbTrian_2 [lindex $bug_info 3] +set NbNodes_2 [lindex $bug_info 5] + +if {$NbTrian_1 == $NbTrian_2} { + puts "ERROR: OCC25445 is not fixed. Number of triangles are equal for both meshes." +} +if {$NbNodes_1 == $NbNodes_2} { + puts "ERROR: OCC25445 is not fixed. Number of nodes are equal for both meshes." +} diff --git a/tests/bugs/mesh/bug24968_1 b/tests/bugs/mesh/bug24968_1 index 44995b57b2..4882dad2eb 100644 --- a/tests/bugs/mesh/bug24968_1 +++ b/tests/bugs/mesh/bug24968_1 @@ -13,7 +13,7 @@ restore [locate_data_file bug24968_Shape_1.brep] result tclean result dchrono h reset dchrono h start -incmesh result 0.1 0 +incmesh result 0.1 dchrono h stop set info [dchrono h show] diff --git a/tests/bugs/mesh/bug24968_2 b/tests/bugs/mesh/bug24968_2 index 0c21ea35ec..e38ff43549 100644 --- a/tests/bugs/mesh/bug24968_2 +++ b/tests/bugs/mesh/bug24968_2 @@ -13,7 +13,7 @@ restore [locate_data_file bug24968_Shape_1.brep] result tclean result dchrono h reset dchrono h start -incmesh result 0.1 1 +incmesh result 0.1 -parallel dchrono h stop set info [dchrono h show] diff --git a/tests/mesh/advanced_incmesh/begin b/tests/mesh/advanced_incmesh/begin index 8ed3003753..807dcb2a59 100644 --- a/tests/mesh/advanced_incmesh/begin +++ b/tests/mesh/advanced_incmesh/begin @@ -1,3 +1,3 @@ set command incmesh set group advanced -set parallel 0 +set parallel "" diff --git a/tests/mesh/advanced_incmesh_parallel/begin b/tests/mesh/advanced_incmesh_parallel/begin index cdd1e76439..579f49fcc7 100644 --- a/tests/mesh/advanced_incmesh_parallel/begin +++ b/tests/mesh/advanced_incmesh_parallel/begin @@ -1,3 +1,3 @@ set command incmesh set group advanced -set parallel 1 +set parallel -parallel diff --git a/tests/mesh/end b/tests/mesh/end index 5640b83cee..6598eb6e9a 100644 --- a/tests/mesh/end +++ b/tests/mesh/end @@ -33,7 +33,7 @@ if { [string compare $command "incmesh"] == 0 } { if {[array get env os_type] != ""} { set os $env(os_type) } - if { $parallel != 1 || [info exists count_parallel] == 0 } { + if { [string compare $parallel "-parallel"] != 0 || [info exists count_parallel] == 0 } { set count_parallel 1 } for {set i 1} {$i <= $count_parallel} {incr i} { diff --git a/tests/mesh/standard_incmesh/begin b/tests/mesh/standard_incmesh/begin index be09a2056c..007b5372cb 100644 --- a/tests/mesh/standard_incmesh/begin +++ b/tests/mesh/standard_incmesh/begin @@ -1,3 +1,3 @@ set command incmesh set group standard -set parallel 0 +set parallel "" diff --git a/tests/mesh/standard_incmesh_parallel/begin b/tests/mesh/standard_incmesh_parallel/begin index aefc3e6a8b..378b383444 100644 --- a/tests/mesh/standard_incmesh_parallel/begin +++ b/tests/mesh/standard_incmesh_parallel/begin @@ -1,3 +1,3 @@ set command incmesh set group standard -set parallel 1 +set parallel -parallel