mirror of
https://git.salome-platform.org/gitpub/modules/geom.git
synced 2024-12-26 01:10:36 +05:00
0022743: EDF GEOM: Regression in MakePipeTShapeChamfer: Some faces are missing in a GetShapesOnCylinder result
This commit is contained in:
parent
4b06093853
commit
fc58f61296
@ -45,6 +45,26 @@
|
||||
#include <gp_Pnt.hxx>
|
||||
#include <StdFail_NotDone.hxx>
|
||||
|
||||
// VSR 08/12/2014: debug PipeTShape function
|
||||
// Uncomment the macro below to correct tolerance of resulting face after creating fillet
|
||||
#define FIX_FACE_TOLERANCE
|
||||
|
||||
namespace
|
||||
{
|
||||
bool FixShape( TopoDS_Shape& shape,
|
||||
TopAbs_ShapeEnum type = TopAbs_SHAPE,
|
||||
Standard_Real tolerance = Precision::Confusion() )
|
||||
{
|
||||
ShapeFix_ShapeTolerance aSFT;
|
||||
aSFT.LimitTolerance( shape, tolerance, tolerance, type );
|
||||
Handle(ShapeFix_Shape) aSfs = new ShapeFix_Shape( shape );
|
||||
aSfs->Perform();
|
||||
shape = aSfs->Shape();
|
||||
BRepCheck_Analyzer ana( shape, false );
|
||||
return ana.IsValid();
|
||||
}
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : GetID
|
||||
//purpose :
|
||||
@ -135,20 +155,16 @@ Standard_Integer GEOMImpl_FilletDriver::Execute(TFunction_Logbook& log) const
|
||||
|
||||
if (aShape.IsNull()) return 0;
|
||||
|
||||
#ifdef FIX_FACE_TOLERANCE
|
||||
bool isOk = FixShape(aShape, TopAbs_FACE);
|
||||
#else
|
||||
// Check shape validity
|
||||
BRepCheck_Analyzer ana (aShape, false);
|
||||
if (!ana.IsValid()) {
|
||||
// 08.07.2008 added by skl during fixing bug 19761 from Mantis
|
||||
ShapeFix_ShapeTolerance aSFT;
|
||||
aSFT.LimitTolerance(aShape, Precision::Confusion(),
|
||||
Precision::Confusion(), TopAbs_SHAPE);
|
||||
Handle(ShapeFix_Shape) aSfs = new ShapeFix_Shape(aShape);
|
||||
aSfs->Perform();
|
||||
aShape = aSfs->Shape();
|
||||
ana.Init(aShape);
|
||||
if (!ana.IsValid())
|
||||
StdFail_NotDone::Raise("Fillet algorithm have produced an invalid shape result");
|
||||
}
|
||||
BRepCheck_Analyzer ana(aShape, false);
|
||||
// 08.07.2008 added by skl during fixing bug 19761 from Mantis
|
||||
bool isOk = ana.IsValid() || FixShape(aShape);
|
||||
#endif
|
||||
if ( !isOk )
|
||||
StdFail_NotDone::Raise("Fillet algorithm have produced an invalid shape result");
|
||||
|
||||
aFunction->SetValue(aShape);
|
||||
|
||||
|
@ -541,6 +541,8 @@ void GEOMImpl_HealingDriver::LimitTolerance (GEOMImpl_IHealing* theHI,
|
||||
TopoDS_Shape& theOutShape) const
|
||||
{
|
||||
Standard_Real aTol = theHI->GetTolerance();
|
||||
TopAbs_ShapeEnum aType = theHI->GetType();
|
||||
|
||||
if (aTol < Precision::Confusion())
|
||||
aTol = Precision::Confusion();
|
||||
|
||||
@ -551,7 +553,7 @@ void GEOMImpl_HealingDriver::LimitTolerance (GEOMImpl_IHealing* theHI,
|
||||
|
||||
// 2. Limit tolerance.
|
||||
ShapeFix_ShapeTolerance aSFT;
|
||||
aSFT.LimitTolerance(aShapeCopy, aTol, aTol, TopAbs_SHAPE);
|
||||
aSFT.LimitTolerance(aShapeCopy, aTol, aTol, aType);
|
||||
|
||||
// 3. Fix obtained shape.
|
||||
Handle(ShapeFix_Shape) aSfs = new ShapeFix_Shape (aShapeCopy);
|
||||
@ -902,6 +904,7 @@ GetCreationInformation(std::string& theOperationName,
|
||||
theOperationName = "LIMIT_TOLERANCE";
|
||||
AddParam( theParams, "Selected shape", aCI.GetOriginal() );
|
||||
AddParam( theParams, "Tolerance", aCI.GetTolerance() );
|
||||
AddParam( theParams, "Type", aCI.GetType() );
|
||||
break;
|
||||
case FUSE_COLLINEAR_EDGES:
|
||||
theOperationName = "FUSE_EDGES";
|
||||
|
@ -24,7 +24,8 @@
|
||||
|
||||
#include <TColStd_HArray1OfInteger.hxx>
|
||||
#include <TColStd_HArray1OfExtendedString.hxx>
|
||||
#include "TColStd_HSequenceOfTransient.hxx"
|
||||
#include <TColStd_HSequenceOfTransient.hxx>
|
||||
#include <TopAbs.hxx>
|
||||
|
||||
class GEOMImpl_IHealing
|
||||
{
|
||||
@ -41,7 +42,8 @@ public:
|
||||
ARG_DEV_EDGE_VALUE = 8,
|
||||
ARG_IS_BY_PARAMETER = 9,
|
||||
ARG_SUBSHAPE_INDEX = 10,
|
||||
ARG_LIST_SHAPES = 11
|
||||
ARG_LIST_SHAPES = 11,
|
||||
ARG_TYPE = 12
|
||||
};
|
||||
|
||||
GEOMImpl_IHealing(Handle(GEOM_Function) theFunction): _func(theFunction) {}
|
||||
@ -73,6 +75,9 @@ public:
|
||||
void SetTolerance( Standard_Real val ) { _func->SetReal(ARG_TOLERANCE, val); }
|
||||
Standard_Real GetTolerance() { return _func->GetReal(ARG_TOLERANCE); }
|
||||
|
||||
void SetType( TopAbs_ShapeEnum val ) { _func->SetInteger(ARG_TYPE, (Standard_Integer)val); }
|
||||
TopAbs_ShapeEnum GetType() { TopAbs_ShapeEnum type = (TopAbs_ShapeEnum)(_func->GetInteger(ARG_TYPE)); return _func->IsDone() ? type : TopAbs_SHAPE; }
|
||||
|
||||
void SetDevideEdgeValue( Standard_Real val ) { _func->SetReal(ARG_DEV_EDGE_VALUE, val); }
|
||||
Standard_Real GetDevideEdgeValue() { return _func->GetReal(ARG_DEV_EDGE_VALUE); }
|
||||
|
||||
|
@ -1056,7 +1056,8 @@ Handle(GEOM_Object) GEOMImpl_IHealingOperations::ChangeOrientationCopy (Handle(G
|
||||
*/
|
||||
//=============================================================================
|
||||
Handle(GEOM_Object) GEOMImpl_IHealingOperations::LimitTolerance (Handle(GEOM_Object) theObject,
|
||||
double theTolerance)
|
||||
double theTolerance,
|
||||
TopAbs_ShapeEnum theType)
|
||||
{
|
||||
// Set error code, check parameters
|
||||
SetErrorCode(KO);
|
||||
@ -1084,6 +1085,7 @@ Handle(GEOM_Object) GEOMImpl_IHealingOperations::LimitTolerance (Handle(GEOM_Obj
|
||||
GEOMImpl_IHealing HI (aFunction);
|
||||
HI.SetOriginal(aLastFunction);
|
||||
HI.SetTolerance(theTolerance);
|
||||
HI.SetType(theType);
|
||||
|
||||
// Compute
|
||||
try {
|
||||
|
@ -27,6 +27,7 @@
|
||||
#include "GEOM_Engine.hxx"
|
||||
#include "GEOM_Object.hxx"
|
||||
|
||||
#include <TopAbs.hxx>
|
||||
#include <TColStd_HArray1OfExtendedString.hxx>
|
||||
#include <TColStd_HArray1OfInteger.hxx>
|
||||
|
||||
@ -96,7 +97,8 @@ class GEOMImpl_IHealingOperations : public GEOM_IOperations {
|
||||
Standard_EXPORT Handle(GEOM_Object) ChangeOrientationCopy( Handle(GEOM_Object) theObject);
|
||||
|
||||
Standard_EXPORT Handle(GEOM_Object) LimitTolerance( Handle(GEOM_Object) theObject,
|
||||
double theTolerance );
|
||||
double theTolerance,
|
||||
TopAbs_ShapeEnum theType = TopAbs_SHAPE );
|
||||
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user