From: oan Date: Wed, 30 Oct 2019 09:08:19 +0000 (+0300) Subject: 0028500: Artifact in shaded view of the shape increase minimum number of discretizati... X-Git-Url: http://git.dev.opencascade.org/gitweb/?a=commitdiff_plain;h=refs%2Fheads%2FCR28500_1;p=occt-copy.git 0028500: Artifact in shaded view of the shape increase minimum number of discretization points by one explicitly on each iteration of model healer to cover cases degenerated to line --- diff --git a/src/BRepMesh/BRepMesh_CurveTessellator.cxx b/src/BRepMesh/BRepMesh_CurveTessellator.cxx index bb780d27e0..105df23e90 100644 --- a/src/BRepMesh/BRepMesh_CurveTessellator.cxx +++ b/src/BRepMesh/BRepMesh_CurveTessellator.cxx @@ -34,11 +34,13 @@ //======================================================================= BRepMesh_CurveTessellator::BRepMesh_CurveTessellator( const IMeshData::IEdgeHandle& theEdge, - const IMeshTools_Parameters& theParameters) + const IMeshTools_Parameters& theParameters, + const Standard_Integer theMinPointsNb) : myDEdge(theEdge), myParameters(theParameters), myEdge(theEdge->GetEdge()), - myCurve(myEdge) + myCurve(myEdge), + myMinPointsNb (theMinPointsNb) { init(); } @@ -51,11 +53,13 @@ BRepMesh_CurveTessellator::BRepMesh_CurveTessellator ( const IMeshData::IEdgeHandle& theEdge, const TopAbs_Orientation theOrientation, const IMeshData::IFaceHandle& theFace, - const IMeshTools_Parameters& theParameters) + const IMeshTools_Parameters& theParameters, + const Standard_Integer theMinPointsNb) : myDEdge(theEdge), myParameters(theParameters), myEdge(TopoDS::Edge(theEdge->GetEdge().Oriented(theOrientation))), - myCurve(myEdge, theFace->GetFace()) + myCurve(myEdge, theFace->GetFace()), + myMinPointsNb (theMinPointsNb) { init(); } @@ -96,7 +100,8 @@ void BRepMesh_CurveTessellator::init() myEdgeSqTol = BRep_Tool::Tolerance (myEdge); myEdgeSqTol *= myEdgeSqTol; - const Standard_Integer aMinPntNb = (myCurve.GetType() == GeomAbs_Circle) ? 4 : 2; //OCC287 + const Standard_Integer aMinPntNb = Max(myMinPointsNb, + (myCurve.GetType() == GeomAbs_Circle) ? 4 : 2); //OCC287 myDiscretTool.Initialize (myCurve, myCurve.FirstParameter(), myCurve.LastParameter(), diff --git a/src/BRepMesh/BRepMesh_CurveTessellator.hxx b/src/BRepMesh/BRepMesh_CurveTessellator.hxx index 4a666be6b8..4eb59c0e60 100644 --- a/src/BRepMesh/BRepMesh_CurveTessellator.hxx +++ b/src/BRepMesh/BRepMesh_CurveTessellator.hxx @@ -35,14 +35,16 @@ public: //! Constructor. Standard_EXPORT BRepMesh_CurveTessellator( const IMeshData::IEdgeHandle& theEdge, - const IMeshTools_Parameters& theParameters); + const IMeshTools_Parameters& theParameters, + const Standard_Integer theMinPointsNb = 2); //! Constructor. Standard_EXPORT BRepMesh_CurveTessellator ( const IMeshData::IEdgeHandle& theEdge, const TopAbs_Orientation theOrientation, const IMeshData::IFaceHandle& theFace, - const IMeshTools_Parameters& theParameters); + const IMeshTools_Parameters& theParameters, + const Standard_Integer theMinPointsNb = 2); //! Destructor. Standard_EXPORT virtual ~BRepMesh_CurveTessellator (); @@ -97,6 +99,7 @@ private: const IMeshTools_Parameters& myParameters; TopoDS_Edge myEdge; BRepAdaptor_Curve myCurve; + Standard_Integer myMinPointsNb; GCPnts_TangentialDeflection myDiscretTool; TopoDS_Vertex myFirstVertex; TopoDS_Vertex myLastVertex; diff --git a/src/BRepMesh/BRepMesh_EdgeDiscret.cxx b/src/BRepMesh/BRepMesh_EdgeDiscret.cxx index d9e575af43..04dbca5198 100644 --- a/src/BRepMesh/BRepMesh_EdgeDiscret.cxx +++ b/src/BRepMesh/BRepMesh_EdgeDiscret.cxx @@ -48,9 +48,10 @@ BRepMesh_EdgeDiscret::~BRepMesh_EdgeDiscret () //======================================================================= Handle(IMeshTools_CurveTessellator) BRepMesh_EdgeDiscret::CreateEdgeTessellator( const IMeshData::IEdgeHandle& theDEdge, - const IMeshTools_Parameters& theParameters) + const IMeshTools_Parameters& theParameters, + const Standard_Integer theMinPointsNb) { - return new BRepMesh_CurveTessellator(theDEdge, theParameters); + return new BRepMesh_CurveTessellator(theDEdge, theParameters, theMinPointsNb); } //======================================================================= @@ -61,11 +62,12 @@ Handle(IMeshTools_CurveTessellator) BRepMesh_EdgeDiscret::CreateEdgeTessellator( const IMeshData::IEdgeHandle& theDEdge, const TopAbs_Orientation theOrientation, const IMeshData::IFaceHandle& theDFace, - const IMeshTools_Parameters& theParameters) + const IMeshTools_Parameters& theParameters, + const Standard_Integer theMinPointsNb) { return theDEdge->GetSameParam() ? - new BRepMesh_CurveTessellator(theDEdge, theParameters) : - new BRepMesh_CurveTessellator(theDEdge, theOrientation, theDFace, theParameters); + new BRepMesh_CurveTessellator(theDEdge, theParameters, theMinPointsNb) : + new BRepMesh_CurveTessellator(theDEdge, theOrientation, theDFace, theParameters, theMinPointsNb); } //======================================================================= diff --git a/src/BRepMesh/BRepMesh_EdgeDiscret.hxx b/src/BRepMesh/BRepMesh_EdgeDiscret.hxx index 82ac8e48d2..76733d5f50 100644 --- a/src/BRepMesh/BRepMesh_EdgeDiscret.hxx +++ b/src/BRepMesh/BRepMesh_EdgeDiscret.hxx @@ -38,14 +38,16 @@ public: //! Creates instance of free edge tessellator. Standard_EXPORT static Handle(IMeshTools_CurveTessellator) CreateEdgeTessellator( const IMeshData::IEdgeHandle& theDEdge, - const IMeshTools_Parameters& theParameters); + const IMeshTools_Parameters& theParameters, + const Standard_Integer theMinPointsNb = 2); //! Creates instance of edge tessellator. Standard_EXPORT static Handle(IMeshTools_CurveTessellator) CreateEdgeTessellator( const IMeshData::IEdgeHandle& theDEdge, const TopAbs_Orientation theOrientation, const IMeshData::IFaceHandle& theDFace, - const IMeshTools_Parameters& theParameters); + const IMeshTools_Parameters& theParameters, + const Standard_Integer theMinPointsNb = 2); //! Creates instance of tessellation extractor. Standard_EXPORT static Handle(IMeshTools_CurveTessellator) CreateEdgeTessellationExtractor( diff --git a/src/BRepMesh/BRepMesh_ModelHealer.cxx b/src/BRepMesh/BRepMesh_ModelHealer.cxx index 6ad9b83f56..933aff2d77 100644 --- a/src/BRepMesh/BRepMesh_ModelHealer.cxx +++ b/src/BRepMesh/BRepMesh_ModelHealer.cxx @@ -49,6 +49,9 @@ namespace void operator()(const IMeshData::IEdgePtr& theDEdge) const { const IMeshData::IEdgeHandle aDEdge = theDEdge; + + const Standard_Integer aPointsNb = aDEdge->GetCurve()->ParametersNb(); + aDEdge->Clear(Standard_True); aDEdge->SetDeflection(Max(aDEdge->GetDeflection() / 3., Precision::Confusion())); @@ -56,7 +59,8 @@ namespace const IMeshData::IFaceHandle aDFace = aPCurve->GetFace(); Handle(IMeshTools_CurveTessellator) aTessellator = BRepMesh_EdgeDiscret::CreateEdgeTessellator( - aDEdge, aPCurve->GetOrientation(), aDFace, myParameters); + aDEdge, aPCurve->GetOrientation(), aDFace, + myParameters, aPointsNb + 1); BRepMesh_EdgeDiscret::Tessellate3d(aDEdge, aTessellator, Standard_False); BRepMesh_EdgeDiscret::Tessellate2d(aDEdge, Standard_False); diff --git a/tests/bugs/mesh/bug25044_12 b/tests/bugs/mesh/bug25044_12 index 1ddf82927d..31d1c179ad 100644 --- a/tests/bugs/mesh/bug25044_12 +++ b/tests/bugs/mesh/bug25044_12 @@ -1,6 +1,3 @@ -puts "TODO 25044 ALL: SelfIntersectingWire" -puts "TODO 25044 ALL: Number of triangles is equal to 0" - puts "=======" puts "0025044: BRepMesh tweaks" puts "=======" diff --git a/tests/bugs/mesh/bug25044_13 b/tests/bugs/mesh/bug25044_13 index f02bc31f58..12b8348b95 100644 --- a/tests/bugs/mesh/bug25044_13 +++ b/tests/bugs/mesh/bug25044_13 @@ -1,6 +1,3 @@ -puts "TODO 25044 ALL: SelfIntersectingWire" -puts "TODO 25044 ALL: Number of triangles is equal to 0" - puts "=======" puts "0025044: BRepMesh tweaks" puts "=======" diff --git a/tests/bugs/mesh/bug28500 b/tests/bugs/mesh/bug28500 index 3bab0b6875..3f265eb699 100644 --- a/tests/bugs/mesh/bug28500 +++ b/tests/bugs/mesh/bug28500 @@ -3,22 +3,20 @@ puts "CR28500: Artifact in shaded view of the shape" puts "=======" puts "" -puts "TODO CR28500 ALL: Artifact in shaded view of the shape" -puts "TODO CR30056 ALL: Meshing statuses: SelfIntersectingWire Failure Reused" +restore [locate_data_file bug28500_shape_mesh_artifact.brep] result -restore [locate_data_file bug28500_shape_mesh_artifact.brep] a - -incmesh a 0.01 +tclean result +incmesh result 0.01 vinit vsetdispmode 1 -vdisplay a +vdefaults -autoTriang 0 +vdisplay result vfit -set x 150 -set y 150 -if { [checkcolor $x $y 0 1 0] == 1 } { - puts "Error: Artifact in shaded view of the shape" +set log [tricheck result] +if { [llength $log] != 0 } { + puts "Error : Mesh containg faulties" } checkview -screenshot -3d -path ${imagedir}/${test_image}.png diff --git a/tests/bugs/moddata_2/bug428 b/tests/bugs/moddata_2/bug428 index c2bb6f5b7c..6bead81879 100755 --- a/tests/bugs/moddata_2/bug428 +++ b/tests/bugs/moddata_2/bug428 @@ -19,5 +19,5 @@ isos result 0 triangles result fit -checktrinfo result -tri 10886 -nod 7830 +checktrinfo result -tri 10799 -nod 7799 checkview -screenshot -2d -path ${imagedir}/${test_image}_axo.png diff --git a/tests/bugs/vis/bug22849 b/tests/bugs/vis/bug22849 index 5d53da5353..6fe5d8c4fb 100755 --- a/tests/bugs/vis/bug22849 +++ b/tests/bugs/vis/bug22849 @@ -1,4 +1,4 @@ -puts "TODO CR30056 ALL: Meshing statuses: SelfIntersectingWire Failure" +puts "TODO CR30056 ALL: Meshing statuses: Failure" puts "============" puts "OCC22849" diff --git a/tests/hlr/poly_hlr/C3 b/tests/hlr/poly_hlr/C3 index 9c0397e884..03981b436c 100644 --- a/tests/hlr/poly_hlr/C3 +++ b/tests/hlr/poly_hlr/C3 @@ -1,5 +1,5 @@ set viewname "vright" -set length 3060.33 +set length 3058.63 testreadstep [locate_data_file bug27341_570-DWLNL-40-08-L_131LANG_16VERSATZ_DIN.stp] a COMPUTE_HLR $viewname $algotype diff --git a/tests/hlr/poly_hlr/bug23625_1 b/tests/hlr/poly_hlr/bug23625_1 index 79d0e80de2..3eb20577f8 100644 --- a/tests/hlr/poly_hlr/bug23625_1 +++ b/tests/hlr/poly_hlr/bug23625_1 @@ -4,7 +4,7 @@ puts "============" puts "" set viewname "vfront" -set length 28096.2 +set length 28097.3 restore [locate_data_file bug23625_a1.brep] a COMPUTE_HLR $viewname $algotype diff --git a/tests/hlr/poly_hlr/bug23625_2 b/tests/hlr/poly_hlr/bug23625_2 index bf6139d390..88b1430259 100644 --- a/tests/hlr/poly_hlr/bug23625_2 +++ b/tests/hlr/poly_hlr/bug23625_2 @@ -4,7 +4,7 @@ puts "============" puts "" set viewname "vfront" -set length 28990.3 +set length 28997.3 restore [locate_data_file bug23625_a2.brep] a COMPUTE_HLR $viewname $algotype