mirror of
https://git.salome-platform.org/gitpub/modules/geom.git
synced 2025-01-30 01:00:32 +05:00
EDF 25230 - Large tolerance delta
This commit is contained in:
parent
a501322551
commit
0c6ec0b5a4
@ -216,12 +216,16 @@ void BuildGUI_FaceDlg::Init()
|
|||||||
|
|
||||||
connect( buttonOk(), SIGNAL( clicked() ), this, SLOT( ClickOnOk() ) );
|
connect( buttonOk(), SIGNAL( clicked() ), this, SLOT( ClickOnOk() ) );
|
||||||
connect( buttonApply(), SIGNAL( clicked() ), this, SLOT( ClickOnApply() ) );
|
connect( buttonApply(), SIGNAL( clicked() ), this, SLOT( ClickOnApply() ) );
|
||||||
|
|
||||||
connect( myGroupWire->LineEdit1, SIGNAL( returnPressed()), this, SLOT( LineEditReturnPressed() ) );
|
connect( myGroupWire->LineEdit1, SIGNAL( returnPressed()), this, SLOT( LineEditReturnPressed() ) );
|
||||||
connect( myGroupWire->PushButton1, SIGNAL( clicked() ), this, SLOT( SetEditCurrentArgument() ) );
|
connect( myGroupWire->PushButton1, SIGNAL( clicked() ), this, SLOT( SetEditCurrentArgument() ) );
|
||||||
|
connect( myGroupWire->CheckButton1, SIGNAL( toggled(bool) ), this, SLOT( OnPlanarCheck() ) );
|
||||||
|
|
||||||
connect( myGroupSurf->LineEdit1, SIGNAL( returnPressed()), this, SLOT( LineEditReturnPressed() ) );
|
connect( myGroupSurf->LineEdit1, SIGNAL( returnPressed()), this, SLOT( LineEditReturnPressed() ) );
|
||||||
connect( myGroupSurf->PushButton1, SIGNAL( clicked() ), this, SLOT( SetEditCurrentArgument() ) );
|
connect( myGroupSurf->PushButton1, SIGNAL( clicked() ), this, SLOT( SetEditCurrentArgument() ) );
|
||||||
connect( myGroupSurf->LineEdit2, SIGNAL( returnPressed()), this, SLOT( LineEditReturnPressed() ) );
|
connect( myGroupSurf->LineEdit2, SIGNAL( returnPressed()), this, SLOT( LineEditReturnPressed() ) );
|
||||||
connect( myGroupSurf->PushButton2, SIGNAL( clicked() ), this, SLOT( SetEditCurrentArgument() ) );
|
connect( myGroupSurf->PushButton2, SIGNAL( clicked() ), this, SLOT( SetEditCurrentArgument() ) );
|
||||||
|
|
||||||
connect( myGroupWireConstraints->LineEdit1, SIGNAL( returnPressed() ), this, SLOT( LineEditReturnPressed() ) );
|
connect( myGroupWireConstraints->LineEdit1, SIGNAL( returnPressed() ), this, SLOT( LineEditReturnPressed() ) );
|
||||||
connect( myGroupWireConstraints->PushButton1, SIGNAL( clicked() ), this, SLOT( SetEditCurrentArgument() ) );
|
connect( myGroupWireConstraints->PushButton1, SIGNAL( clicked() ), this, SLOT( SetEditCurrentArgument() ) );
|
||||||
connect( ( (SalomeApp_Application*)( SUIT_Session::session()->activeApplication() ) )->selectionMgr(),
|
connect( ( (SalomeApp_Application*)( SUIT_Session::session()->activeApplication() ) )->selectionMgr(),
|
||||||
@ -534,6 +538,15 @@ void BuildGUI_FaceDlg::SetEditCurrentArgument()
|
|||||||
SelectionIntoArgument();
|
SelectionIntoArgument();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//=================================================================================
|
||||||
|
// function : OnPlanarCheck()
|
||||||
|
// purpose :
|
||||||
|
//=================================================================================
|
||||||
|
void BuildGUI_FaceDlg::OnPlanarCheck()
|
||||||
|
{
|
||||||
|
erasePreview();
|
||||||
|
displayPreview( true, false, true, true, -1, -1, -1, true );
|
||||||
|
}
|
||||||
|
|
||||||
//=================================================================================
|
//=================================================================================
|
||||||
// function : ActivateThisDialog()
|
// function : ActivateThisDialog()
|
||||||
|
@ -84,6 +84,7 @@ private slots:
|
|||||||
void ActivateThisDialog();
|
void ActivateThisDialog();
|
||||||
void SelectionIntoArgument();
|
void SelectionIntoArgument();
|
||||||
void SetEditCurrentArgument();
|
void SetEditCurrentArgument();
|
||||||
|
void OnPlanarCheck();
|
||||||
void onItemClicked( QTreeWidgetItem*, int );
|
void onItemClicked( QTreeWidgetItem*, int );
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -184,7 +184,6 @@ class GEOMAlgo_AlgoTools {
|
|||||||
const TopoDS_Edge& aEnew,
|
const TopoDS_Edge& aEnew,
|
||||||
const TopoDS_Face& aF,
|
const TopoDS_Face& aF,
|
||||||
const Handle(IntTools_Context)& aCtx) ;
|
const Handle(IntTools_Context)& aCtx) ;
|
||||||
|
|
||||||
//
|
//
|
||||||
Standard_EXPORT
|
Standard_EXPORT
|
||||||
static void FindChains(const GEOMAlgo_ListOfCoupleOfShapes& aLCS,
|
static void FindChains(const GEOMAlgo_ListOfCoupleOfShapes& aLCS,
|
||||||
|
@ -39,10 +39,18 @@
|
|||||||
#include <gp_Ax1.hxx>
|
#include <gp_Ax1.hxx>
|
||||||
#include <gp_Vec.hxx>
|
#include <gp_Vec.hxx>
|
||||||
|
|
||||||
|
#include <BRep_Tool.hxx>
|
||||||
|
#include <TopLoc_Location.hxx>
|
||||||
|
|
||||||
#include <GeomAbs_SurfaceType.hxx>
|
#include <GeomAbs_SurfaceType.hxx>
|
||||||
#include <GeomAdaptor_Surface.hxx>
|
#include <GeomAdaptor_Surface.hxx>
|
||||||
#include <IntSurf_Quadric.hxx>
|
#include <IntSurf_Quadric.hxx>
|
||||||
|
|
||||||
|
#include <TopoDS.hxx>
|
||||||
|
#include <TopExp_Explorer.hxx>
|
||||||
|
#include <TopoDS_Edge.hxx>
|
||||||
|
#include <Geom2d_Curve.hxx>
|
||||||
|
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
//function : GetState
|
//function : GetState
|
||||||
@ -232,3 +240,75 @@ Standard_Boolean GEOMAlgo_SurfaceTools::IsConformState
|
|||||||
}
|
}
|
||||||
return bRet;
|
return bRet;
|
||||||
}
|
}
|
||||||
|
//=======================================================================
|
||||||
|
//function : IsBelongsToSameSurface
|
||||||
|
//purpose : Returns true if all edges of theShape have a reference to
|
||||||
|
// the same surface
|
||||||
|
//=======================================================================
|
||||||
|
Standard_Boolean GEOMAlgo_SurfaceTools::IsBelongsToSameSurface
|
||||||
|
(const TopoDS_Shape& theShape)
|
||||||
|
{
|
||||||
|
Standard_Boolean aResult = false;
|
||||||
|
|
||||||
|
TopExp_Explorer ex;
|
||||||
|
ex.Init(theShape,TopAbs_EDGE);
|
||||||
|
if (!ex.More()) return aResult; // no edges ....
|
||||||
|
|
||||||
|
TopoDS_Edge anEdge = TopoDS::Edge(ex.Current());
|
||||||
|
Standard_Real f,l,ff,ll;
|
||||||
|
Handle(Geom2d_Curve) PC,aPPC;
|
||||||
|
Handle(Geom_Surface) aSurface, aCurSurface;
|
||||||
|
TopLoc_Location aLoc, aCurLoc;
|
||||||
|
Standard_Integer i = 0,j;
|
||||||
|
|
||||||
|
// iterate on the surfaces of the first edge
|
||||||
|
for(;;)
|
||||||
|
{
|
||||||
|
i++;
|
||||||
|
BRep_Tool::CurveOnSurface(anEdge,PC,aSurface,aLoc,f,l,i);
|
||||||
|
if (aSurface.IsNull())
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
// check the other edges
|
||||||
|
for (ex.Init(theShape,TopAbs_EDGE); ex.More(); ex.Next())
|
||||||
|
{
|
||||||
|
if (!anEdge.IsSame(ex.Current()))
|
||||||
|
{
|
||||||
|
j = 0;
|
||||||
|
for(;;)
|
||||||
|
{
|
||||||
|
j++;
|
||||||
|
BRep_Tool::CurveOnSurface(TopoDS::Edge(ex.Current()),aPPC,aCurSurface,aCurLoc,ff,ll,j);
|
||||||
|
if (aCurSurface.IsNull()) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if ((aCurSurface == aSurface) && (aCurLoc.IsEqual(aLoc)))
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
aCurSurface.Nullify();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (aCurSurface.IsNull())
|
||||||
|
{
|
||||||
|
aSurface.Nullify();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!aSurface.IsNull())
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!aSurface.IsNull())
|
||||||
|
{
|
||||||
|
aResult = Standard_True;
|
||||||
|
}
|
||||||
|
|
||||||
|
return aResult;
|
||||||
|
|
||||||
|
}
|
@ -42,6 +42,7 @@
|
|||||||
#include <gp_Pln.hxx>
|
#include <gp_Pln.hxx>
|
||||||
#include <gp_Sphere.hxx>
|
#include <gp_Sphere.hxx>
|
||||||
|
|
||||||
|
#include <TopoDS_Shape.hxx>
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
//function : GEOMAlgo_SurfaceTools
|
//function : GEOMAlgo_SurfaceTools
|
||||||
@ -77,5 +78,9 @@ class GEOMAlgo_SurfaceTools
|
|||||||
Standard_EXPORT
|
Standard_EXPORT
|
||||||
static TopAbs_State ReverseState(const TopAbs_State aSt) ;
|
static TopAbs_State ReverseState(const TopAbs_State aSt) ;
|
||||||
|
|
||||||
|
//! Returns true if all edges of theShape have a reference to the same surface
|
||||||
|
Standard_EXPORT
|
||||||
|
static Standard_Boolean IsBelongsToSameSurface(const TopoDS_Shape& theShape) ;
|
||||||
|
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
@ -23,6 +23,7 @@
|
|||||||
#include <Standard_Stream.hxx>
|
#include <Standard_Stream.hxx>
|
||||||
|
|
||||||
#include <GEOMImpl_Block6Explorer.hxx>
|
#include <GEOMImpl_Block6Explorer.hxx>
|
||||||
|
#include <GEOMAlgo_SurfaceTools.hxx>
|
||||||
|
|
||||||
#include <ShHealOper_ShapeProcess.hxx>
|
#include <ShHealOper_ShapeProcess.hxx>
|
||||||
|
|
||||||
@ -43,6 +44,7 @@
|
|||||||
#include <BRepBuilderAPI_MakeWire.hxx>
|
#include <BRepBuilderAPI_MakeWire.hxx>
|
||||||
#include <BRepBuilderAPI_MakeFace.hxx>
|
#include <BRepBuilderAPI_MakeFace.hxx>
|
||||||
#include <BRepBuilderAPI_Transform.hxx>
|
#include <BRepBuilderAPI_Transform.hxx>
|
||||||
|
#include <BRepBuilderAPI_FindPlane.hxx>
|
||||||
|
|
||||||
#include <TopAbs.hxx>
|
#include <TopAbs.hxx>
|
||||||
#include <TopoDS.hxx>
|
#include <TopoDS.hxx>
|
||||||
@ -1224,6 +1226,17 @@ TCollection_AsciiString GEOMImpl_Block6Explorer::MakeFace (const TopoDS_Wire&
|
|||||||
const Standard_Boolean isPlanarWanted,
|
const Standard_Boolean isPlanarWanted,
|
||||||
TopoDS_Shape& theResult)
|
TopoDS_Shape& theResult)
|
||||||
{
|
{
|
||||||
|
TCollection_AsciiString aWarning;
|
||||||
|
BRepBuilderAPI_FindPlane aFindPlane(theWire);
|
||||||
|
if (aFindPlane.Found())
|
||||||
|
{
|
||||||
|
BRepBuilderAPI_MakeFace MK (theWire, isPlanarWanted);
|
||||||
|
if (MK.IsDone()) {
|
||||||
|
theResult = MK.Shape();
|
||||||
|
return aWarning;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!isPlanarWanted)
|
if (!isPlanarWanted)
|
||||||
return MakeAnyFace(theWire, theResult);
|
return MakeAnyFace(theWire, theResult);
|
||||||
|
|
||||||
@ -1232,14 +1245,6 @@ TCollection_AsciiString GEOMImpl_Block6Explorer::MakeFace (const TopoDS_Wire&
|
|||||||
// If required tolerance increase will be
|
// If required tolerance increase will be
|
||||||
// higher than PLANAR_FACE_MAX_TOLERANCE,
|
// higher than PLANAR_FACE_MAX_TOLERANCE,
|
||||||
// we will try to build a non-planar face.
|
// we will try to build a non-planar face.
|
||||||
|
|
||||||
TCollection_AsciiString aWarning;
|
|
||||||
BRepBuilderAPI_MakeFace MK (theWire, isPlanarWanted);
|
|
||||||
if (MK.IsDone()) {
|
|
||||||
theResult = MK.Shape();
|
|
||||||
return aWarning;
|
|
||||||
}
|
|
||||||
|
|
||||||
// try to update wire tolerances to build a planar face
|
// try to update wire tolerances to build a planar face
|
||||||
|
|
||||||
// Find a deviation
|
// Find a deviation
|
||||||
@ -1301,12 +1306,15 @@ TCollection_AsciiString GEOMImpl_Block6Explorer::MakeAnyFace (const TopoDS_Wire&
|
|||||||
{
|
{
|
||||||
TCollection_AsciiString aWarning;
|
TCollection_AsciiString aWarning;
|
||||||
|
|
||||||
// try to build a face on any surface under the edges of the wire
|
//check if all edges already belong to the some surface
|
||||||
BRepBuilderAPI_MakeFace MK (theWire, Standard_False);
|
if(GEOMAlgo_SurfaceTools::IsBelongsToSameSurface(theWire))
|
||||||
|
{
|
||||||
|
BRepBuilderAPI_MakeFace MK (theWire, false);
|
||||||
if (MK.IsDone()) {
|
if (MK.IsDone()) {
|
||||||
theResult = MK.Shape();
|
theResult = MK.Shape();
|
||||||
return aWarning;
|
return aWarning;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// try to construct filling surface
|
// try to construct filling surface
|
||||||
BRepOffsetAPI_MakeFilling MF;
|
BRepOffsetAPI_MakeFilling MF;
|
||||||
|
Loading…
Reference in New Issue
Block a user