mirror of
https://git.salome-platform.org/gitpub/modules/geom.git
synced 2024-12-26 01:10:36 +05:00
0023361: EDF - Partition by plane fails
This commit is contained in:
parent
d27962672e
commit
afce74184a
@ -4548,6 +4548,14 @@ module GEOM
|
||||
in double theTolerance,
|
||||
out ListOfLong theIntersections);
|
||||
|
||||
/*!
|
||||
* \brief Check boolean and partition operations agruments.
|
||||
* \param theShape the agrument of an operation to be checked.
|
||||
* \return TRUE if the agrument is valid for a boolean or partition
|
||||
* operation; FALSE otherwise.
|
||||
*/
|
||||
boolean CheckBOPArguments (in GEOM_Object theShape);
|
||||
|
||||
/*!
|
||||
* \brief Detect intersections of the given shapes with algorithm based on mesh intersections.
|
||||
* \param theShape1 First source object
|
||||
|
@ -1672,6 +1672,40 @@ bool GEOMImpl_IMeasureOperations::CheckSelfIntersectionsFast
|
||||
return theIntersections->IsEmpty();
|
||||
}
|
||||
|
||||
//=============================================================================
|
||||
/*!
|
||||
* CheckBOPArguments
|
||||
*/
|
||||
//=============================================================================
|
||||
bool GEOMImpl_IMeasureOperations::CheckBOPArguments
|
||||
(const Handle(GEOM_Object) &theShape)
|
||||
{
|
||||
SetErrorCode(KO);
|
||||
|
||||
if (theShape.IsNull()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
Handle(GEOM_Function) aRefShape = theShape->GetLastFunction();
|
||||
|
||||
if (aRefShape.IsNull()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
TopoDS_Shape aShape = aRefShape->GetValue();
|
||||
|
||||
if (aShape.IsNull()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
//Compute the parameters
|
||||
bool isValid = GEOMUtils::CheckBOPArguments(aShape);
|
||||
|
||||
SetErrorCode(OK);
|
||||
|
||||
return isValid;
|
||||
}
|
||||
|
||||
//=============================================================================
|
||||
/*!
|
||||
* FastIntersect
|
||||
|
@ -164,6 +164,8 @@ class GEOMImpl_IMeasureOperations : public GEOM_IOperations {
|
||||
float deflection,
|
||||
double tolerance,
|
||||
Handle(TColStd_HSequenceOfInteger)& theIntersections);
|
||||
|
||||
Standard_EXPORT bool CheckBOPArguments (const Handle(GEOM_Object) &theShape);
|
||||
|
||||
Standard_EXPORT bool FastIntersect (Handle(GEOM_Object) theShape1, Handle(GEOM_Object) theShape2,
|
||||
double tolerance, float deflection,
|
||||
|
@ -49,6 +49,7 @@
|
||||
|
||||
#include <Bnd_Box.hxx>
|
||||
|
||||
#include <BOPAlgo_ArgumentAnalyzer.hxx>
|
||||
#include <BOPTools_AlgoTools.hxx>
|
||||
|
||||
#include <TopAbs.hxx>
|
||||
@ -1098,6 +1099,29 @@ bool GEOMUtils::CheckShape( TopoDS_Shape& shape,
|
||||
return analyzer.IsValid();
|
||||
}
|
||||
|
||||
bool GEOMUtils::CheckBOPArguments(const TopoDS_Shape &theShape)
|
||||
{
|
||||
BOPAlgo_ArgumentAnalyzer aChecker;
|
||||
|
||||
aChecker.SetShape1(theShape);
|
||||
|
||||
// Set default options
|
||||
aChecker.ArgumentTypeMode() = Standard_True;
|
||||
aChecker.SelfInterMode() = Standard_True;
|
||||
aChecker.SmallEdgeMode() = Standard_True;
|
||||
aChecker.RebuildFaceMode() = Standard_True;
|
||||
aChecker.ContinuityMode() = Standard_True;
|
||||
aChecker.CurveOnSurfaceMode() = Standard_True;
|
||||
|
||||
aChecker.StopOnFirstFaulty() = Standard_True;
|
||||
aChecker.Perform();
|
||||
|
||||
// process result of checking
|
||||
const bool isValid = !aChecker.HasFaulty();
|
||||
|
||||
return isValid;
|
||||
}
|
||||
|
||||
bool GEOMUtils::FixShapeTolerance( TopoDS_Shape& shape,
|
||||
TopAbs_ShapeEnum type,
|
||||
Standard_Real tolerance,
|
||||
|
@ -252,6 +252,15 @@ namespace GEOMUtils
|
||||
* \return \c true if shape is valid or \c false otherwise
|
||||
*/
|
||||
Standard_EXPORT bool CheckShape( TopoDS_Shape& shape, bool checkGeometry = false );
|
||||
|
||||
/*!
|
||||
* \brief Check boolean and partition operations agruments
|
||||
*
|
||||
* \param theShape the agrument of an operation to be checked
|
||||
* \return \c true if the agrument is valid for a boolean or partition
|
||||
* operation or \c false otherwise
|
||||
*/
|
||||
Standard_EXPORT bool CheckBOPArguments(const TopoDS_Shape &theShape);
|
||||
|
||||
/*!
|
||||
* \brief Limit shape tolerance to the given value
|
||||
|
@ -808,6 +808,29 @@ CORBA::Boolean GEOM_IMeasureOperations_i::CheckSelfIntersectionsFast
|
||||
return isGood;
|
||||
}
|
||||
|
||||
//=============================================================================
|
||||
/*!
|
||||
* CheckBOPArguments
|
||||
*/
|
||||
//=============================================================================
|
||||
CORBA::Boolean GEOM_IMeasureOperations_i::CheckBOPArguments
|
||||
(GEOM::GEOM_Object_ptr theShape)
|
||||
{
|
||||
// Set a not done flag
|
||||
GetOperations()->SetNotDone();
|
||||
|
||||
// Get the reference shape
|
||||
HANDLE_NAMESPACE(GEOM_Object) aShape = GetObjectImpl(theShape);
|
||||
bool isGood = false;
|
||||
|
||||
if (!aShape.IsNull()) {
|
||||
// Check BOP agruments
|
||||
isGood = GetOperations()->CheckBOPArguments(aShape);
|
||||
}
|
||||
|
||||
return isGood;
|
||||
}
|
||||
|
||||
//=============================================================================
|
||||
/*!
|
||||
* FastIntersect
|
||||
|
@ -105,6 +105,8 @@ class GEOM_I_EXPORT GEOM_IMeasureOperations_i :
|
||||
CORBA::Double theTolerance,
|
||||
GEOM::ListOfLong_out theIntersections);
|
||||
|
||||
CORBA::Boolean CheckBOPArguments (GEOM::GEOM_Object_ptr theShape);
|
||||
|
||||
CORBA::Boolean FastIntersect (GEOM::GEOM_Object_ptr theShape1,
|
||||
GEOM::GEOM_Object_ptr theShape2,
|
||||
CORBA::Double theTolerance,
|
||||
|
@ -11443,6 +11443,24 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen):
|
||||
RaiseIfFailed("CheckSelfIntersectionsFast", self.MeasuOp)
|
||||
return IsValid
|
||||
|
||||
## Check boolean and partition operations agruments.
|
||||
# @param theShape the agrument of an operation to be checked
|
||||
# @return TRUE if the agrument is valid for a boolean or partition
|
||||
# operation; FALSE otherwise.
|
||||
@ManageTransactions("MeasuOp")
|
||||
def CheckBOPArguments(self, theShape):
|
||||
"""
|
||||
Check boolean and partition operations agruments.
|
||||
|
||||
Parameters:
|
||||
theShape the agrument of an operation to be checked
|
||||
|
||||
Returns:
|
||||
TRUE if the agrument is valid for a boolean or partition
|
||||
operation; FALSE otherwise.
|
||||
"""
|
||||
return self.MeasuOp.CheckBOPArguments(theShape)
|
||||
|
||||
## Detect intersections of the given shapes with algorithm based on mesh intersections.
|
||||
# @param theShape1 First source object
|
||||
# @param theShape2 Second source object
|
||||
|
Loading…
Reference in New Issue
Block a user