Method EstimateDeflection has been added to BRepLib in order to check and update value of deflection provided by Poly_Triangulation;
Introduction of Poly_TriangulationParameters intended to keep info about initial parameters of mesh stored by Poly_Triangulation;
BRepMesh stores user-specified parameters to Poly_Triangulation via Poly_TriangulationParameters;
Prefer initial parameters of mesh generator stored in Poly_Triangulation during check of mesh consistency.
return aRetVal;
}
+//=======================================================================
+//function : UpdateDeflection
+//purpose :
+//=======================================================================
+namespace
+{
+ //! Tool to estimate deflection of the given UV point
+ //! with regard to its representation in 3D space.
+ struct EvalDeflection
+ {
+ BRepAdaptor_Surface Surface;
+
+ //! Initializes tool with the given face.
+ EvalDeflection (const TopoDS_Face& theFace)
+ : Surface (theFace)
+ {
+ }
+
+ //! Evaluates deflection of the given 2d point from its 3d representation.
+ Standard_Real Eval (const gp_Pnt2d& thePoint2d, const gp_Pnt& thePoint3d)
+ {
+ gp_Pnt aPnt;
+ Surface.D0 (thePoint2d.X (), thePoint2d.Y (), aPnt);
+ return (thePoint3d.XYZ () - aPnt.XYZ ()).SquareModulus ();
+ }
+ };
+
+ //! Represents link of triangulation.
+ struct Link
+ {
+ Standard_Integer Node[2];
+
+ //! Constructor
+ Link (const Standard_Integer theNode1, const Standard_Integer theNode2)
+ {
+ Node[0] = theNode1;
+ Node[1] = theNode2;
+ }
+
+ //! Computes a hash code for the this link
+ Standard_Integer HashCode (const Standard_Integer theUpperBound) const
+ {
+ return ::HashCode (Node[0] + Node[1], theUpperBound);
+ }
+
+ //! Returns true if this link has the same nodes as the other.
+ Standard_Boolean IsEqual (const Link& theOther) const
+ {
+ return ((Node[0] == theOther.Node[0] && Node[1] == theOther.Node[1]) ||
+ (Node[0] == theOther.Node[1] && Node[1] == theOther.Node[0]));
+ }
+
+ //! Alias for IsEqual.
+ Standard_Boolean operator ==(const Link& theOther) const
+ {
+ return IsEqual (theOther);
+ }
+ };
+
+ //! Computes a hash code for the given link
+ inline Standard_Integer HashCode (const Link& theLink, const Standard_Integer theUpperBound)
+ {
+ return theLink.HashCode (theUpperBound);
+ }
+}
+
+void BRepLib::UpdateDeflection (const TopoDS_Shape& theShape)
+{
+ TopExp_Explorer anExpFace (theShape, TopAbs_FACE);
+ for (; anExpFace.More(); anExpFace.Next())
+ {
+ const TopoDS_Face& aFace = TopoDS::Face (anExpFace.Current());
+ const Handle(Geom_Surface) aSurf = BRep_Tool::Surface (aFace);
+ if (aSurf.IsNull())
+ {
+ continue;
+ }
+
+ TopLoc_Location aLoc;
+ const Handle(Poly_Triangulation)& aPT = BRep_Tool::Triangulation (aFace, aLoc);
+ if (aPT.IsNull() || !aPT->HasUVNodes())
+ {
+ continue;
+ }
+
+ // Collect all nodes of degenerative edges and skip elements
+ // build upon them due to huge distortions introduced by passage
+ // from UV space to 3D.
+ NCollection_Map<Standard_Integer> aDegNodes;
+ TopExp_Explorer anExpEdge (aFace, TopAbs_EDGE);
+ for (; anExpEdge.More(); anExpEdge.Next())
+ {
+ const TopoDS_Edge& aEdge = TopoDS::Edge (anExpEdge.Current());
+ if (BRep_Tool::Degenerated (aEdge))
+ {
+ const Handle(Poly_PolygonOnTriangulation)& aPolygon = BRep_Tool::PolygonOnTriangulation (aEdge, aPT, aLoc);
+ if (aPolygon.IsNull ())
+ {
+ continue;
+ }
+
+ for (Standard_Integer aNodeIt = aPolygon->Nodes().Lower(); aNodeIt <= aPolygon->Nodes().Upper(); ++aNodeIt)
+ {
+ aDegNodes.Add (aPolygon->Node (aNodeIt));
+ }
+ }
+ }
+
+ EvalDeflection aTool (aFace);
+ NCollection_Map<Link> aLinks;
+ Standard_Real aSqDeflection = 0.;
+ const gp_Trsf& aTrsf = aLoc.Transformation();
+ for (Standard_Integer aTriIt = 1; aTriIt <= aPT->NbTriangles(); ++aTriIt)
+ {
+ const Poly_Triangle& aTriangle = aPT->Triangle (aTriIt);
+
+ int aNode[3];
+ aTriangle.Get (aNode[0], aNode[1], aNode[2]);
+ if (aDegNodes.Contains (aNode[0]) ||
+ aDegNodes.Contains (aNode[1]) ||
+ aDegNodes.Contains (aNode[2]))
+ {
+ continue;
+ }
+
+ const gp_Pnt aP3d[3] = {
+ aPT->Node (aNode[0]).Transformed (aTrsf),
+ aPT->Node (aNode[1]).Transformed (aTrsf),
+ aPT->Node (aNode[2]).Transformed (aTrsf)
+ };
+
+ const gp_Pnt2d aP2d[3] = {
+ aPT->UVNode (aNode[0]),
+ aPT->UVNode (aNode[1]),
+ aPT->UVNode (aNode[2])
+ };
+
+ // Check midpoint of triangle.
+ const gp_Pnt aMid3d_t = (aP3d[0].XYZ() + aP3d[1].XYZ() + aP3d[2].XYZ()) / 3.;
+ const gp_Pnt2d aMid2d_t = (aP2d[0].XY () + aP2d[1].XY () + aP2d[2].XY ()) / 3.;
+
+ aSqDeflection = Max (aSqDeflection, aTool.Eval (aMid2d_t, aMid3d_t));
+
+ for (Standard_Integer i = 0; i < 3; ++i)
+ {
+ const Standard_Integer j = (i + 1) % 3;
+ const Link aLink (aNode[i], aNode[j]);
+ if (!aLinks.Add (aLink))
+ {
+ // Do not estimate boundary links due to high distortions at the edge.
+ const gp_Pnt& aP3d1 = aP3d[i];
+ const gp_Pnt& aP3d2 = aP3d[j];
+
+ const gp_Pnt2d& aP2d1 = aP2d[i];
+ const gp_Pnt2d& aP2d2 = aP2d[j];
+
+ const gp_Pnt aMid3d_l = (aP3d1.XYZ() + aP3d2.XYZ()) / 2.;
+ const gp_Pnt2d aMid2d_l = (aP2d1.XY () + aP2d2.XY ()) / 2.;
+
+ aSqDeflection = Max (aSqDeflection, aTool.Eval (aMid2d_l, aMid3d_l));
+ }
+ }
+ }
+
+ aPT->Deflection (Sqrt (aSqDeflection));
+ }
+}
+
//=======================================================================
//function : SortFaces
//purpose :
//! Returns TRUE if any correction is done.
Standard_EXPORT static Standard_Boolean EnsureNormalConsistency (const TopoDS_Shape& S, const Standard_Real theAngTol = 0.001, const Standard_Boolean ForceComputeNormals = Standard_False);
+ //! Updates value of deflection in Poly_Triangulation of faces
+ //! by the maximum deviation measured on existing triangulation.
+ Standard_EXPORT static void UpdateDeflection (const TopoDS_Shape& S);
+
//! Calculates the bounding sphere around the set of vertexes from the theLV list.
//! Returns the center (theNewCenter) and the radius (theNewTol) of this sphere.
//! This can be used to construct the new vertex which covers the given set of
collectNodes(aTriangulation);
- aTriangulation->Deflection(myDFace->GetDeflection());
BRepMesh_ShapeTool::AddInFace(myDFace->GetFace(), aTriangulation);
}
#include <IMeshData_Edge.hxx>
#include <IMeshData_PCurve.hxx>
#include <OSD_Parallel.hxx>
+#include <BRepLib.hxx>
+#include <Poly_TriangulationParameters.hxx>
IMPLEMENT_STANDARD_RTTIEXT(BRepMesh_ModelPostProcessor, IMeshTools_ModelAlgo)
Handle(IMeshData_Model) myModel;
};
+
+ //! Estimates and updates deflection of triangulations for corresponding faces.
+ class DeflectionEstimator
+ {
+ public:
+ //! Constructor
+ DeflectionEstimator (const Handle(IMeshData_Model)& theModel,
+ const IMeshTools_Parameters& theParams)
+ : myModel (theModel)
+ , myParams (new Poly_TriangulationParameters (
+ theParams.Deflection, theParams.Angle, theParams.MinSize))
+ {
+ }
+
+ //! Main functor.
+ void operator()(const Standard_Integer theFaceIndex) const
+ {
+ const IMeshData::IFaceHandle& aDFace = myModel->GetFace (theFaceIndex);
+ if (aDFace->IsSet (IMeshData_Failure) ||
+ aDFace->IsSet (IMeshData_Reused))
+ {
+ return;
+ }
+
+ BRepLib::UpdateDeflection (aDFace->GetFace());
+
+ TopLoc_Location aLoc;
+ const Handle(Poly_Triangulation)& aTriangulation =
+ BRep_Tool::Triangulation (aDFace->GetFace(), aLoc);
+
+ if (!aTriangulation.IsNull())
+ {
+ aTriangulation->Parameters (myParams);
+ }
+ }
+
+ private:
+
+ Handle(IMeshData_Model) myModel;
+ Handle(Poly_TriangulationParameters) myParams;
+ };
}
//=======================================================================
//=======================================================================
Standard_Boolean BRepMesh_ModelPostProcessor::performInternal(
const Handle(IMeshData_Model)& theModel,
- const IMeshTools_Parameters& /*theParameters*/,
+ const IMeshTools_Parameters& theParameters,
const Message_ProgressRange& theRange)
{
(void )theRange;
}
// TODO: Force single threaded solution due to data races on edges sharing the same TShape
- OSD_Parallel::For(0, theModel->EdgesNb(), PolygonCommitter(theModel), Standard_True/*!theParameters.InParallel*/);
+ OSD_Parallel::For (0, theModel->EdgesNb(), PolygonCommitter (theModel), Standard_True/*!theParameters.InParallel*/);
+
+ // Estimate deflection here due to BRepLib::EstimateDeflection requires
+ // existence of both Poly_Triangulation and Poly_PolygonOnTriangulation.
+ OSD_Parallel::For (0, theModel->FacesNb(), DeflectionEstimator (theModel, theParameters), !theParameters.InParallel);
return Standard_True;
}
#include <IMeshData_PCurve.hxx>
#include <OSD_Parallel.hxx>
#include <BRepMesh_ConeRangeSplitter.hxx>
+#include <Poly_TriangulationParameters.hxx>
IMPLEMENT_STANDARD_RTTIEXT(BRepMesh_ModelPreProcessor, IMeshTools_ModelAlgo)
if (!aTriangulation.IsNull())
{
+ // If there is an info about initial parameters, use it due to deflection kept
+ // by Poly_Triangulation is generally an estimation upon generated mesh and can
+ // be either less or even greater than specified value.
+ const Handle(Poly_TriangulationParameters)& aSourceParams = aTriangulation->Parameters();
+ const Standard_Real aDeflection = (!aSourceParams.IsNull() && aSourceParams->HasDeflection()) ?
+ aSourceParams->Deflection() : aTriangulation->Deflection();
+
Standard_Boolean isTriangulationConsistent =
- BRepMesh_Deflection::IsConsistent (aTriangulation->Deflection(),
+ BRepMesh_Deflection::IsConsistent (aDeflection,
aDFace->GetDeflection(),
myAllowQualityDecrease);
Poly_PolygonOnTriangulation.cxx
Poly_PolygonOnTriangulation.hxx
Poly_Triangle.hxx
+Poly_TriangulationParameters.hxx
+Poly_TriangulationParameters.cxx
Poly_Triangulation.cxx
Poly_Triangulation.hxx
class OSD_FileSystem;
class Poly_Triangulation;
+class Poly_TriangulationParameters;
+
DEFINE_STANDARD_HANDLE(Poly_Triangulation, Standard_Transient)
//! Provides a triangulation for a surface, a set of surfaces, or
//! See more on deflection in Polygon2D
void Deflection (const Standard_Real theDeflection) { myDeflection = theDeflection; }
+ //! Returns initial set of parameters used to generate this triangulation.
+ const Handle(Poly_TriangulationParameters)& Parameters() const { return myParams; }
+
+ //! Updates initial set of parameters used to generate this triangulation.
+ void Parameters (const Handle(Poly_TriangulationParameters)& theParams) { myParams = theParams; }
+
//! Clears internal arrays of nodes and all attributes.
Standard_EXPORT virtual void Clear();
NCollection_Array1<gp_Vec3f> myNormals;
Poly_MeshPurpose myPurpose;
+ Handle(Poly_TriangulationParameters) myParams;
};
#endif // _Poly_Triangulation_HeaderFile
--- /dev/null
+// Created on: 2021-07-20
+// Copyright (c) 2021 OPEN CASCADE SAS
+// Created by: Oleg AGASHIN
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement.
+
+#include <Poly_TriangulationParameters.hxx>
+
+IMPLEMENT_STANDARD_RTTIEXT (Poly_TriangulationParameters, Standard_Transient)
--- /dev/null
+// Created on: 2021-07-20
+// Copyright (c) 2021 OPEN CASCADE SAS
+// Created by: Oleg AGASHIN
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement.
+
+#ifndef _Poly_TriangulationParameters_HeaderFile
+#define _Poly_TriangulationParameters_HeaderFile
+
+#include <Standard_Transient.hxx>
+#include <Standard_DefineHandle.hxx>
+
+//! Represents initial set of parameters triangulation is built for.
+class Poly_TriangulationParameters : public Standard_Transient
+{
+public:
+
+ //! Constructor.
+ //! Initializes object with the given parameters.
+ //! @param theDeflection linear deflection
+ //! @param theAngle angular deflection
+ //! @param theMinSize minimum size
+ Poly_TriangulationParameters (const Standard_Real theDeflection = -1.,
+ const Standard_Real theAngle = -1.,
+ const Standard_Real theMinSize = -1.)
+ : myDeflection (theDeflection)
+ , myAngle (theAngle)
+ , myMinSize (theMinSize)
+ {
+ }
+
+ //! Destructor.
+ virtual ~Poly_TriangulationParameters()
+ {
+ }
+
+ //! Returns true if linear deflection is defined.
+ Standard_Boolean HasDeflection() const
+ {
+ return !(myDeflection < 0.);
+ }
+
+ //! Returns true if angular deflection is defined.
+ Standard_Boolean HasAngle() const
+ {
+ return !(myAngle < 0.);
+ }
+
+ //! Returns true if minimum size is defined.
+ Standard_Boolean HasMinSize() const
+ {
+ return !(myMinSize < 0.);
+ }
+
+ //! Returns linear deflection or -1 if undefined.
+ Standard_Real Deflection() const
+ {
+ return myDeflection;
+ }
+
+ //! Returns angular deflection or -1 if undefined.
+ Standard_Real Angle() const
+ {
+ return myAngle;
+ }
+
+ //! Returns minimum size or -1 if undefined.
+ Standard_Real MinSize() const
+ {
+ return myMinSize;
+ }
+
+ DEFINE_STANDARD_RTTIEXT (Poly_TriangulationParameters, Standard_Transient)
+
+private:
+
+ Standard_Real myDeflection;
+ Standard_Real myAngle;
+ Standard_Real myMinSize;
+};
+
+DEFINE_STANDARD_HANDLE (Poly_TriangulationParameters, Standard_Transient)
+
+#endif
incmesh r 0.1
trinfo r
-checktrinfo r -defl 0.1 -tol_abs_defl 0.01 -tol_rel_defl 0.01
+checktrinfo r -defl 0.049761016978299343 -tol_abs_defl 0.01 -tol_rel_defl 0.01
vinit
vsetdispmode 1
# check deflections
-checktrinfo s -tri -defl 0.001 -tol_abs_defl 1e-6
+checktrinfo s -tri -defl 0.00072921907260989653 -tol_abs_defl 1e-6
checktrinfo r -tri -max_defl 0.001 -tol_abs_defl 1e-6
# compare number of triangles, allow twice more
checkshape result
incmesh result 0.1
-checktrinfo result -tri -defl 0.1 -tol_abs_defl 1e-6
+checktrinfo result -tri -defl 1.6315061764065284 -tol_abs_defl 1e-6
checkview -screenshot -3d -path ${imagedir}/${test_image}.png
-checktrinfo result -tri 62936 -nod 31509 -defl 0.00096399964870812682
+checktrinfo result -tri 62936 -nod 31509 -defl 0.01006437767331419 -tol_abs_defl 1e-6
set log [tricheck result]
if { [llength $log] != 0 } {
trinfo f
-checktrinfo f -tri 20 -nod 21 -defl 0.3345840532742983 -tol_abs_defl 1.e-3 -tol_rel_defl 0.01
+checktrinfo f -tri 20 -nod 21 -defl 0.70238336519888955 -tol_abs_defl 1.e-3 -tol_rel_defl 0.01
vinit
vdisplay f
tclean result
incmesh result 1.5 -relative
-checktrinfo result -tri 8 -nod 10 -defl 3.1950444624834377e-05
+checktrinfo result -tri 8 -nod 10 -defl 3.3489133970888776e-05 -tol_abs_defl 1e-6
vinit
vsetdispmode 1
checkview -screenshot -3d -path ${imagedir}/${test_image}.png
-checktrinfo result -tri 957 -nod 558 -defl 50.000000020000009
+checktrinfo result -tri 957 -nod 558 -defl 1.1088499641289298 -tol_abs_defl 1e-6
set log [tricheck result]
if { [llength $log] != 0 } {
incmesh result 0.0001 -a 30 -force_face_def -parallel
-checktrinfo result -tri 13854 -nod 9190 -defl 0.00012495021746395917
+checktrinfo result -tri 13854 -nod 9190 -defl 0.00028360162213471898 -tol_abs_defl 1e-6
vinit
vsetdispmode 1
isos a 0
triangles a
-checktrinfo a -tri 2971 -nod 1592 -defl 0.091190343620839553 -tol_rel_defl 0.05 -tol_rel_tri 0.05 -tol_rel_nod 0.05
+checktrinfo a -tri 2971 -nod 1592 -defl 0.25443792426360728 -tol_rel_defl 0.05 -tol_rel_tri 0.05 -tol_rel_nod 0.05
checkview -screenshot -2d -path ${imagedir}/${test_image}.png
isos f 0
triangles f
-checktrinfo f -tri 2220 -nod 1232 -defl 0.0093553610383019445
+checktrinfo f -tri 2220 -nod 1232 -defl 0.0099011902071009586 -tol_abs_defl 1e-6
smallview +X+Y
fit
checkview -screenshot -2d -path ${imagedir}/${test_image}.png
vfit
checkview -screenshot -3d -path ${imagedir}/${test_image}.png
-checktrinfo result -tri 3006 -nod 4360 -defl 10
+checktrinfo result -tri 3006 -nod 4360 -defl 3.0544822246414993 -tol_abs_defl 1e-6
set log [tricheck result]
if { [llength $log] != 0 } {
tclean result
incmesh result 0.1
-checktrinfo result -tri 7998 -nod 4931 -defl 1.2277233425620309
+checktrinfo result -tri 7998 -nod 4931 -defl 1.9852316024615062 -tol_abs_defl 1e-6
# Reduce shape tolerance in order to hard check of mesh quality
settolerance result 1.0e-7
checkview -screenshot -3d -path ${imagedir}/${test_image}.png
-checktrinfo result -tri 8 -nod 10 -defl 6.8481042509220045e-05
+checktrinfo result -tri 8 -nod 10 -defl 0.16816650423537197 -tol_abs_defl 1e-6
set log [tricheck result]
if { [llength $log] != 0 } {
puts "Mesh is OK"
}
-checktrinfo result -tri 148 -nod 103 -defl 0.27179801813852145
+checktrinfo result -tri 148 -nod 103 -defl 0.34778084099529977 -tol_abs_defl 1e-6
checkview -screenshot -3d -path ${imagedir}/${test_image}.png
puts "Mesh is OK"
}
-checktrinfo result -tri 1013 -nod 578 -defl 0.1
+checktrinfo result -tri 1013 -nod 578 -defl 0.1164052220738387 -tol_abs_defl 1e-6
checkview -screenshot -3d -path ${imagedir}/${test_image}.png
puts "Mesh is OK"
}
-checktrinfo result -tri 2 -nod 4 -defl 0.0
+checktrinfo result -tri 2 -nod 4 -defl 5.5579174982152475 -tol_abs_defl 1e-6
tclean result
incmesh result 0.01
puts "Mesh is OK"
}
-checktrinfo result -tri 78200 -nod 39103 -defl 0.035123046705520911
+checktrinfo result -tri 78200 -nod 39103 -defl 5.8003351598212323 -tol_abs_defl 1e-6
don result
isos result 0
vviewparams -scale 8.46292 -proj 0.653203 -0.644806 0.396926 -up -0.0109833 0.51609 0.856464 -at 347.559 1026.89 219.262 -eye 2080.75 -684.022 1272.45
tricheck result
-checktrinfo result -tri 6978 -nod 4890 -defl 7.6167024939147652
+checktrinfo result -tri 6978 -nod 4890 -defl 8.4394056682382157 -tol_abs_defl 1e-6
checkview -screenshot -3d -path ${imagedir}/${test_image}.png
incmesh result 0.15 -a 20
tricheck result
-checktrinfo result -tri 191 -nod 146 -defl 0.0362596 -tol_abs_defl 1.0e-6
+checktrinfo result -tri 191 -nod 146 -defl 0.052300780129031083 -tol_abs_defl 1.0e-6
vinit
vfit
tricheck result
-checktrinfo result -tri 3424 -nod 1801 -max_defl 0.52
+checktrinfo result -tri 3424 -nod 1801 -max_defl 0.55846824898476011 -tol_abs_defl 1.0e-6
checkview -screenshot -3d -path ${imagedir}/${test_image}.png
tclean result
incmesh result 0.004 -a 14
-checktrinfo result -tri 70556 -nod 39944 -defl 0.22962869401103247
+checktrinfo result -tri 70556 -nod 39944 -defl 0.24607185555570676 -tol_abs_defl 1e-6
vdisplay result -redisplay
vfit
tclean result
incmesh result 0.004 -a 14 -force_face_def
-checktrinfo result -tri 292556 -nod 150944 -defl 0.04579460790575135
+checktrinfo result -tri 292556 -nod 150944 -defl 0.16388671063364907 -tol_abs_defl 1e-6
vdisplay result -redisplay
vfit
--- /dev/null
+puts "======="
+puts "0032471: Mesh - Deflection of the triangulation is not recomputed for planar face"
+puts "======="
+puts ""
+
+restore [locate_data_file bug32471.brep] result
+
+incmesh result 0.01
+
+checktrinfo result -tri 2 -nod 4 -defl 0 -tol_rel_defl 1e-7
+
+vinit
+vdefaults -autoTriang 0
+vsetdispmode 1
+vdisplay result
+vfit
+checkview -screenshot -3d -path ${imagedir}/${test_image}.png
set Deflection 1.
catch {incmesh result ${Deflection} }
-checktrinfo result -tri 52956 -nod 46525 -defl 1.0 -tol_rel_defl 0.001 -tol_rel_tri 0.001 -tol_rel_nod 0.001
+checktrinfo result -tri 52956 -nod 46525 -defl 1.2592398118022043 -tol_rel_defl 0.001 -tol_rel_tri 0.001 -tol_rel_nod 0.001
checkview -display result -2d -path ${imagedir}/${test_image}.png
set Deflection 0.1
catch {incmesh result ${Deflection} }
-checktrinfo result -tri 4204 -nod 4206 -defl 1.9388020580310417e-07 -tol_rel_defl 0.1 -tol_rel_tri 0.001 -tol_rel_nod 0.001
+checktrinfo result -tri 4204 -nod 4206 -defl 2.3419011146460291e-07 -tol_rel_defl 0.1 -tol_rel_tri 0.001 -tol_rel_nod 0.001
checkprops result -s 275.426
checknbshapes result -vertex 964 -edge 964 -wire 1 -face 1 -shell 1 -solid 0 -compsolid 0 -compound 0 -shape 1931
set Deflection 0.001
incmesh result ${Deflection}
-checktrinfo result -tri 375392 -nod 190670 -defl 0.0092442421472206764 -tol_rel_defl 0.001 -tol_rel_tri 0.001 -tol_rel_nod 0.001
+checktrinfo result -tri 375392 -nod 190670 -defl 0.080199363667810539 -tol_rel_defl 0.001 -tol_rel_tri 0.001 -tol_rel_nod 0.001
vinit
vdisplay result
mkface result s
incmesh result 1
-checktrinfo result -max_defl 1
+checktrinfo result -max_defl 2.4039063417856825 -tol_abs_defl 1e-6
vdisplay result
vsetdispmode 1
incmesh result 0.1
dchrono t stop counter MeshBug23795
-checktrinfo result -tri 10992 -nod 11016 -defl 0.1
+checktrinfo result -tri 10992 -nod 11016 -defl 0.99900001814148409 -tol_abs_defl 1e-6
vinit
vdefaults -autoTriang 0
incmesh a_1 0.01 1
dchrono t stop counter incmesh
-checktrinfo a_1 -tri 525271 -nod 263456 -defl 0.081028355715069861
+checktrinfo a_1 -tri 525271 -nod 263456 -defl 0.069482224632795617 -tol_abs_defl 1e-6
set log [tricheck a_1]
if { [llength $log] != 0 } {
incmesh a_1 0.1 1
dchrono t stop counter incmesh
-checktrinfo a_1 -tri 68779 -nod 34737 -defl 0.11671770612283024
+checktrinfo a_1 -tri 68779 -nod 34737 -defl 0.24900556935704937 -tol_abs_defl 1e-6
set log [tricheck a_1]
if { [llength $log] != 0 } {
incmesh a_1 1.0 1
dchrono t stop counter incmesh
-checktrinfo a_1 -tri 12469 -nod 6503 -defl 1.0
+checktrinfo a_1 -tri 12469 -nod 6503 -defl 1.2783003174746328 -tol_abs_defl 1e-6
set log [tricheck a_1]
if { [llength $log] != 0 } {
vfit
checkview -screenshot -3d -path ${imagedir}/${test_image}.png
-checktrinfo a -tri 14764 -nod 7587 -defl 0.098772787476728782
\ No newline at end of file
+checktrinfo a -tri 14764 -nod 7587 -defl 0.29573935005082458 -tol_abs_defl 1e-6
set ref_tri 7857
set ref_nod 7859
-set ref_def 1e-5
+set ref_def 1.5252689837551246e-12
set tol_rel 0.01
# Computes deviation of the value from specified one
BUC60857
vfit
+sewing BUC60857_BLUE 1e-7 BUC60857_BLUE
+sewing BUC60857_RED 1e-7 BUC60857_RED
+sewing BUC60857_GREEN 1e-7 BUC60857_GREEN
+
set Property_BLUE [sprops BUC60857_BLUE]
set area_BLUE [lindex ${Property_BLUE} 2]