1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-04-08 18:40:55 +03:00
occt/src/BRepFill/BRepFill_AdvancedEvolved.hxx
nbv 858435884d 0029523: Problem with BRepOffsetAPI_MakeEvolved
The capabilities of the class BRepOffsetAPI_MakeEvolved have been extended with involving alternate algorithm of resolving the loops in the piped shape. The new option theIsVolume is added for that in the constructor.

New class BRepFill_AdvancedEvolved has been created in order to provide new OCCT-algorithm combining BRepFill_PipeShell and BOPAlgo_MakerVolume.

A change in BOPAlgo_PaveFiller.cxx has been made in order to solve a specific problem of Boolean operation.

The interface of DRAW-command "evolved" has been updated to add the new option. DRAW-command "evolvedsolid" has been deleted. Now it is replaced with DRAW-command "evolved" with the option "-solid".

Testgrid "evolved" has been created.
2019-05-07 14:20:58 +03:00

142 lines
4.5 KiB
C++

// Created on: 2018-03-14
// Created by: Nikolai BUKHALOV
// Copyright (c) 1999-2018 OPEN CASCADE SAS
//
// 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 _BRepFill_AdvancedEvolved_HeaderFile
#define _BRepFill_AdvancedEvolved_HeaderFile
#include <Standard.hxx>
#include <Standard_DefineAlloc.hxx>
#include <Standard_Handle.hxx>
#include <TopoDS_Compound.hxx>
#include <TopoDS_Wire.hxx>
#include <TopTools_IndexedMapOfShape.hxx>
#include <TopTools_ListOfShape.hxx>
#include <Standard_CString.hxx>
class BOPAlgo_MakerVolume;
class TopoDS_Face;
//! Constructs an evolved volume from a spine (wire or face)
//! and a profile ( wire).
class BRepFill_AdvancedEvolved
{
public:
DEFINE_STANDARD_ALLOC;
//! Constructor
Standard_EXPORT BRepFill_AdvancedEvolved() :myErrorStatus(BRepFill_AdvancedEvolved_Empty),
myFuzzyValue(0.0),
myIsParallel(Standard_True),
myDebugShapesPath("C:\\Temp")
{
}
Standard_EXPORT void Perform(const TopoDS_Wire& theSpine,
const TopoDS_Wire& theProfile,
const Standard_Real theTolerance,
const Standard_Boolean theSolidReq = Standard_True);
Standard_Boolean IsDone(unsigned int* theErrorCode = 0) const
{
if (theErrorCode)
*theErrorCode = myErrorStatus;
return (myErrorStatus == BRepFill_AdvancedEvolved_OK);
}
//! returns the resulting shape.
const TopoDS_Shape& Shape() const
{
return myResult;
}
//! Sets directory where the debug shapes will be saved
void SetTemporaryDirectory(const Standard_CString& thePath)
{
myDebugShapesPath = thePath;
}
//! Sets/Unsets computation in parallel mode
void SetParallelMode(const Standard_Boolean theVal)
{
myIsParallel = theVal;
}
protected:
Standard_EXPORT void PerformSweep();
Standard_EXPORT void GetLids();
Standard_EXPORT void BuildSolid();
Standard_EXPORT void RemoveExcessSolids(const TopTools_ListOfShape& theLSplits,
const TopoDS_Shape& theShape,
TopTools_ListOfShape& theArgsList,
BOPAlgo_MakerVolume& theMV);
Standard_EXPORT void ExtractOuterSolid(TopoDS_Shape& theShape,
TopTools_ListOfShape& theArgsList);
Standard_EXPORT void GetSpineAndProfile(const TopoDS_Wire& theSpine,
const TopoDS_Wire& theProfile);
Standard_EXPORT void UnifyShape();
Standard_EXPORT Standard_Boolean PerformBoolean(const TopTools_ListOfShape& theArgsList,
TopoDS_Shape& theResult) const;
Standard_EXPORT Standard_Boolean CheckSingularityAndAdd(const TopoDS_Face& theF,
const Standard_Real theFuzzyToler,
TopTools_ListOfShape& theListOfFaces,
TopTools_ListOfShape& theListOfSplits) const;
Standard_EXPORT Standard_Boolean IsLid(const TopoDS_Face& theF,
const TopTools_IndexedMapOfShape& theMapOfLids) const;
private:
enum
{
BRepFill_AdvancedEvolved_Empty = 0,
BRepFill_AdvancedEvolved_NotPlanarSpine,
BRepFill_AdvancedEvolved_SweepError,
BRepFill_AdvancedEvolved_NoLids,
BRepFill_AdvancedEvolved_NotSolid,
BRepFill_AdvancedEvolved_NotVolume,
BRepFill_AdvancedEvolved_OK = UINT_MAX
} myErrorStatus;
TopoDS_Wire mySpine;
TopoDS_Wire myProfile;
TopoDS_Shape myPipeShell;
TopoDS_Compound myTopBottom; // Lids can be split on several faces
TopoDS_Shape myResult;
Standard_Real myFuzzyValue;
Standard_Boolean myIsParallel;
Standard_CString myDebugShapesPath;
};
#endif // _BRepFill_AdvancedEvolved_HeaderFile