mirror of
https://git.salome-platform.org/gitpub/modules/geom.git
synced 2024-11-12 00:29:18 +05:00
0022094: EDF GEOM 2438 : Pipe T-Shape publish the group of internal surfaces
This commit is contained in:
parent
af323ccd1d
commit
18129b41a4
@ -4907,6 +4907,10 @@ Ignoring units will cause model scaling (as dimensions are supposed to be specif
|
|||||||
<source>JUNCTION_FACE_3</source>
|
<source>JUNCTION_FACE_3</source>
|
||||||
<translation>Junction 3</translation>
|
<translation>Junction 3</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>INTERNAL_FACES</source>
|
||||||
|
<translation>Internal faces</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>GEOM_PLUGINS_OTHER</source>
|
<source>GEOM_PLUGINS_OTHER</source>
|
||||||
<translation>Other</translation>
|
<translation>Other</translation>
|
||||||
|
@ -31,6 +31,7 @@
|
|||||||
#include "GEOM_PythonDump.hxx"
|
#include "GEOM_PythonDump.hxx"
|
||||||
#include "GEOMUtils.hxx"
|
#include "GEOMUtils.hxx"
|
||||||
#include "GEOMAlgo_Splitter.hxx"
|
#include "GEOMAlgo_Splitter.hxx"
|
||||||
|
#include "GEOMAlgo_FinderShapeOn1.hxx"
|
||||||
|
|
||||||
#include "GEOMImpl_Gen.hxx"
|
#include "GEOMImpl_Gen.hxx"
|
||||||
#include "GEOMImpl_Types.hxx"
|
#include "GEOMImpl_Types.hxx"
|
||||||
@ -43,6 +44,7 @@
|
|||||||
#include "GEOMImpl_I3DPrimOperations.hxx"
|
#include "GEOMImpl_I3DPrimOperations.hxx"
|
||||||
#include "GEOMImpl_ILocalOperations.hxx"
|
#include "GEOMImpl_ILocalOperations.hxx"
|
||||||
#include "GEOMImpl_IHealingOperations.hxx"
|
#include "GEOMImpl_IHealingOperations.hxx"
|
||||||
|
#include "GEOMImpl_IGroupOperations.hxx"
|
||||||
|
|
||||||
#include "GEOMImpl_GlueDriver.hxx"
|
#include "GEOMImpl_GlueDriver.hxx"
|
||||||
#include "GEOMImpl_PipeTShapeDriver.hxx"
|
#include "GEOMImpl_PipeTShapeDriver.hxx"
|
||||||
@ -70,6 +72,7 @@
|
|||||||
#include <BRep_Builder.hxx>
|
#include <BRep_Builder.hxx>
|
||||||
#include <BRep_Tool.hxx>
|
#include <BRep_Tool.hxx>
|
||||||
|
|
||||||
|
#include <BRepAdaptor_Surface.hxx>
|
||||||
#include <BRepAlgoAPI_Cut.hxx>
|
#include <BRepAlgoAPI_Cut.hxx>
|
||||||
#include <BRepAlgoAPI_Fuse.hxx>
|
#include <BRepAlgoAPI_Fuse.hxx>
|
||||||
#include <BRepBuilderAPI_MakeFace.hxx>
|
#include <BRepBuilderAPI_MakeFace.hxx>
|
||||||
@ -82,6 +85,8 @@
|
|||||||
#include <gp_Pln.hxx>
|
#include <gp_Pln.hxx>
|
||||||
#include <gp_Pnt.hxx>
|
#include <gp_Pnt.hxx>
|
||||||
#include <gp_Vec.hxx>
|
#include <gp_Vec.hxx>
|
||||||
|
#include <GC_MakeConicalSurface.hxx>
|
||||||
|
#include <Geom_CylindricalSurface.hxx>
|
||||||
|
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
|
|
||||||
@ -119,6 +124,7 @@ GEOMImpl_IAdvancedOperations::GEOMImpl_IAdvancedOperations(GEOM_Engine* theEngin
|
|||||||
my3DPrimOperations = new GEOMImpl_I3DPrimOperations(GetEngine(), GetDocID());
|
my3DPrimOperations = new GEOMImpl_I3DPrimOperations(GetEngine(), GetDocID());
|
||||||
myLocalOperations = new GEOMImpl_ILocalOperations(GetEngine(), GetDocID());
|
myLocalOperations = new GEOMImpl_ILocalOperations(GetEngine(), GetDocID());
|
||||||
myHealingOperations = new GEOMImpl_IHealingOperations(GetEngine(), GetDocID());
|
myHealingOperations = new GEOMImpl_IHealingOperations(GetEngine(), GetDocID());
|
||||||
|
myGroupOperations = new GEOMImpl_IGroupOperations(GetEngine(), GetDocID());
|
||||||
}
|
}
|
||||||
|
|
||||||
//=============================================================================
|
//=============================================================================
|
||||||
@ -137,6 +143,7 @@ GEOMImpl_IAdvancedOperations::~GEOMImpl_IAdvancedOperations()
|
|||||||
delete my3DPrimOperations;
|
delete my3DPrimOperations;
|
||||||
delete myLocalOperations;
|
delete myLocalOperations;
|
||||||
delete myHealingOperations;
|
delete myHealingOperations;
|
||||||
|
delete myGroupOperations;
|
||||||
}
|
}
|
||||||
|
|
||||||
//=============================================================================
|
//=============================================================================
|
||||||
@ -790,6 +797,337 @@ bool GEOMImpl_IAdvancedOperations::MakeGroups(Handle(GEOM_Object) theShape, int
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//=============================================================================
|
||||||
|
/*!
|
||||||
|
* Return faces that are laying on surface.
|
||||||
|
*/
|
||||||
|
//=============================================================================
|
||||||
|
bool GEOMImpl_IAdvancedOperations::GetFacesOnSurf
|
||||||
|
(const TopoDS_Shape &theShape,
|
||||||
|
const Handle_Geom_Surface& theSurface,
|
||||||
|
const Standard_Real theTolerance,
|
||||||
|
TopTools_ListOfShape &theFaces)
|
||||||
|
{
|
||||||
|
GEOMAlgo_FinderShapeOn1 aFinder;
|
||||||
|
|
||||||
|
aFinder.SetShape(theShape);
|
||||||
|
aFinder.SetTolerance(theTolerance);
|
||||||
|
aFinder.SetSurface(theSurface);
|
||||||
|
aFinder.SetShapeType(TopAbs_FACE);
|
||||||
|
aFinder.SetState(GEOMAlgo_ST_ON);
|
||||||
|
|
||||||
|
// Sets the minimal number of inner points for the faces that do not have own
|
||||||
|
// inner points at all (for e.g. rectangular planar faces have just 2 triangles).
|
||||||
|
// Default value=3
|
||||||
|
aFinder.SetNbPntsMin(3);
|
||||||
|
// Sets the maximal number of inner points for edges or faces.
|
||||||
|
// It is usefull for the cases when this number is very big (e.g =2000) to improve
|
||||||
|
// the performance. If this value =0, all inner points will be taken into account.
|
||||||
|
// Default value=0
|
||||||
|
aFinder.SetNbPntsMax(100);
|
||||||
|
aFinder.Perform();
|
||||||
|
|
||||||
|
// Interprete results
|
||||||
|
Standard_Integer iErr = aFinder.ErrorStatus();
|
||||||
|
// the detailed description of error codes is in GEOMAlgo_FinderShapeOn1.cxx
|
||||||
|
if (iErr) {
|
||||||
|
MESSAGE(" iErr : " << iErr);
|
||||||
|
TCollection_AsciiString aMsg (" iErr : ");
|
||||||
|
aMsg += TCollection_AsciiString(iErr);
|
||||||
|
SetErrorCode(aMsg);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
Standard_Integer iWrn = aFinder.WarningStatus();
|
||||||
|
// the detailed description of warning codes is in GEOMAlgo_FinderShapeOn1.cxx
|
||||||
|
if (iWrn) {
|
||||||
|
MESSAGE(" *** iWrn : " << iWrn);
|
||||||
|
}
|
||||||
|
|
||||||
|
const TopTools_ListOfShape &aListRes = aFinder.Shapes(); // the result
|
||||||
|
TopTools_ListIteratorOfListOfShape anIter (aListRes);
|
||||||
|
|
||||||
|
for (; anIter.More(); anIter.Next()) {
|
||||||
|
theFaces.Append(anIter.Value());
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
//=============================================================================
|
||||||
|
/*!
|
||||||
|
* Creates and returns conical face.
|
||||||
|
*/
|
||||||
|
//=============================================================================
|
||||||
|
TopoDS_Shape GEOMImpl_IAdvancedOperations::MakeConicalFace
|
||||||
|
(const gp_Ax2 &theAxis,
|
||||||
|
const double theRadius,
|
||||||
|
const double theRadiusThin,
|
||||||
|
const double theHeight,
|
||||||
|
const gp_Trsf &theTrsf)
|
||||||
|
{
|
||||||
|
BRepPrimAPI_MakeCone aMkCone (theAxis, theRadius, theRadiusThin, theHeight);
|
||||||
|
TopoDS_Shape aResult;
|
||||||
|
|
||||||
|
aMkCone.Build();
|
||||||
|
if (aMkCone.IsDone()) {
|
||||||
|
TopExp_Explorer anExp(aMkCone.Shape(), TopAbs_FACE);
|
||||||
|
|
||||||
|
for (; anExp.More(); anExp.Next()) {
|
||||||
|
TopoDS_Face aFace = TopoDS::Face(anExp.Current());
|
||||||
|
|
||||||
|
if (aFace.IsNull() == Standard_False) {
|
||||||
|
BRepAdaptor_Surface anAdaptor(aFace, Standard_False);
|
||||||
|
|
||||||
|
if (anAdaptor.GetType() == GeomAbs_Cone) {
|
||||||
|
// This is a conical face. Transform and return it.
|
||||||
|
BRepBuilderAPI_Transform aTransf(aFace, theTrsf, Standard_False);
|
||||||
|
|
||||||
|
aResult = aTransf.Shape();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return aResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
//=============================================================================
|
||||||
|
/*!
|
||||||
|
* Generate the internal group of a Pipe T-Shape
|
||||||
|
*/
|
||||||
|
//=============================================================================
|
||||||
|
bool GEOMImpl_IAdvancedOperations::MakeInternalGroup
|
||||||
|
(const Handle(GEOM_Object) &theShape,
|
||||||
|
const double theR1, const double theLen1,
|
||||||
|
const double theR2, const double theLen2,
|
||||||
|
const double theRL, double theTransLenL,
|
||||||
|
const double theRR, double theTransLenR,
|
||||||
|
const double theRI, double theTransLenI,
|
||||||
|
const Handle(TColStd_HSequenceOfTransient) &theSeq,
|
||||||
|
const gp_Trsf &theTrsf)
|
||||||
|
{
|
||||||
|
SetErrorCode(KO);
|
||||||
|
|
||||||
|
if (theShape.IsNull()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
TopoDS_Shape aShape = theShape->GetValue();
|
||||||
|
|
||||||
|
if (aShape.IsNull()) {
|
||||||
|
SetErrorCode("Shape is not defined");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Compute tolerance
|
||||||
|
Standard_Real aMaxTol = -RealLast();
|
||||||
|
TopExp_Explorer anExp(aShape, TopAbs_VERTEX);
|
||||||
|
|
||||||
|
for (; anExp.More(); anExp.Next()) {
|
||||||
|
TopoDS_Vertex aVertex = TopoDS::Vertex(anExp.Current());
|
||||||
|
|
||||||
|
if (aVertex.IsNull() == Standard_False) {
|
||||||
|
const Standard_Real aTol = BRep_Tool::Tolerance(aVertex);
|
||||||
|
|
||||||
|
if (aTol > aMaxTol) {
|
||||||
|
aMaxTol = aTol;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Construct internal surfaces.
|
||||||
|
Standard_Integer i = 0;
|
||||||
|
const Standard_Integer aMaxNbSurf = 5;
|
||||||
|
Handle(Geom_Surface) aSurface[aMaxNbSurf];
|
||||||
|
TopTools_ListOfShape aConicalFaces;
|
||||||
|
Standard_Real aTolConf = Precision::Confusion();
|
||||||
|
|
||||||
|
// 1. Construct the internal surface of main pipe.
|
||||||
|
gp_Ax2 anAxis1 (gp::Origin(), gp::DX(), gp::DZ());
|
||||||
|
gp_Ax2 anAxis2 (gp::Origin(), gp::DZ(), gp::DX());
|
||||||
|
|
||||||
|
aSurface[i++] = new Geom_CylindricalSurface(anAxis1, theR1);
|
||||||
|
|
||||||
|
// 2. Construct the internal surface of incident pipe.
|
||||||
|
aSurface[i++] = new Geom_CylindricalSurface(anAxis2, theR2);
|
||||||
|
|
||||||
|
// 3. Construct the internal surface of left reduction pipe.
|
||||||
|
if (theRL > aTolConf) {
|
||||||
|
aSurface[i++] = new Geom_CylindricalSurface(anAxis1, theRL);
|
||||||
|
|
||||||
|
if (theTransLenL > aTolConf) {
|
||||||
|
// 3.1. Construct the internal surface of left transition pipe.
|
||||||
|
gp_Pnt aPLeft (-theLen1, 0., 0.);
|
||||||
|
gp_Ax2 anAxisLeft (aPLeft, -gp::DX(), gp::DZ());
|
||||||
|
TopoDS_Shape aConeLeft =
|
||||||
|
MakeConicalFace(anAxisLeft, theR1, theRL, theTransLenL, theTrsf);
|
||||||
|
|
||||||
|
if (aConeLeft.IsNull() == Standard_False) {
|
||||||
|
aConicalFaces.Append(aConeLeft);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 4. Construct the internal surface of right reduction pipe.
|
||||||
|
if (theRR > aTolConf) {
|
||||||
|
// There is no need to construct another cylinder of the same radius. Skip it.
|
||||||
|
if (Abs(theRR - theRL) > aTolConf) {
|
||||||
|
aSurface[i++] = new Geom_CylindricalSurface(anAxis1, theRR);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (theTransLenL > aTolConf) {
|
||||||
|
// 4.1. Construct the internal surface of right transition pipe.
|
||||||
|
gp_Pnt aPRight (theLen1, 0., 0.);
|
||||||
|
gp_Ax2 anAxisRight (aPRight, gp::DX(), gp::DZ());
|
||||||
|
TopoDS_Shape aConeRight =
|
||||||
|
MakeConicalFace(anAxisRight, theR1, theRR, theTransLenR, theTrsf);
|
||||||
|
|
||||||
|
if (aConeRight.IsNull() == Standard_False) {
|
||||||
|
aConicalFaces.Append(aConeRight);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 5. Construct the internal surface of incident reduction pipe.
|
||||||
|
if (theRI > aTolConf) {
|
||||||
|
aSurface[i++] = new Geom_CylindricalSurface(anAxis2, theRI);
|
||||||
|
|
||||||
|
if (theTransLenI > aTolConf) {
|
||||||
|
// 5.1. Construct the internal surface of incident transition pipe.
|
||||||
|
gp_Pnt aPInci (0., 0., theLen2);
|
||||||
|
gp_Ax2 anAxisInci (aPInci, gp::DZ(), gp::DX());
|
||||||
|
TopoDS_Shape aConeInci =
|
||||||
|
MakeConicalFace(anAxisInci, theR2, theRI, theTransLenI, theTrsf);
|
||||||
|
|
||||||
|
if (aConeInci.IsNull() == Standard_False) {
|
||||||
|
aConicalFaces.Append(aConeInci);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get faces that are laying on cylindrical surfaces.
|
||||||
|
TopTools_ListOfShape aFaces;
|
||||||
|
gp_Trsf anInvTrsf = theTrsf.Inverted();
|
||||||
|
|
||||||
|
for (i = 0; i < aMaxNbSurf; i++) {
|
||||||
|
if (aSurface[i].IsNull()) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
aSurface[i]->Transform(theTrsf);
|
||||||
|
|
||||||
|
TopTools_ListOfShape aLocalFaces;
|
||||||
|
|
||||||
|
if (!GetFacesOnSurf(aShape, aSurface[i], aMaxTol, aLocalFaces)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (i < 2) {
|
||||||
|
// Check if the result contains outer cylinders.
|
||||||
|
// It is required for main and incident pipes.
|
||||||
|
TopTools_ListIteratorOfListOfShape anIter(aLocalFaces);
|
||||||
|
|
||||||
|
while (anIter.More()) {
|
||||||
|
TopExp_Explorer anExp(anIter.Value(), TopAbs_VERTEX);
|
||||||
|
Standard_Boolean isInside = Standard_False;
|
||||||
|
|
||||||
|
// Get a vertex from this shape
|
||||||
|
if (anExp.More()) {
|
||||||
|
TopoDS_Vertex aVtx = TopoDS::Vertex(anExp.Current());
|
||||||
|
|
||||||
|
if (aVtx.IsNull() == Standard_False) {
|
||||||
|
gp_Pnt aPnt = BRep_Tool::Pnt(aVtx);
|
||||||
|
|
||||||
|
aPnt.Transform(anInvTrsf);
|
||||||
|
|
||||||
|
if (i == 0) {
|
||||||
|
// Check if the point is inside the main pipe.
|
||||||
|
isInside = (Abs(aPnt.X()) <= theLen1);
|
||||||
|
} else { // i == 1
|
||||||
|
// Check if the point is inside the incident pipe.
|
||||||
|
isInside = (aPnt.Z() <= theLen2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isInside) {
|
||||||
|
// Keep this face.
|
||||||
|
anIter.Next();
|
||||||
|
} else {
|
||||||
|
// Remove this face.
|
||||||
|
aLocalFaces.Remove(anIter);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
aFaces.Append(aLocalFaces);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get faces that are laying on conical faces.
|
||||||
|
if (aConicalFaces.IsEmpty() == Standard_False) {
|
||||||
|
Handle(GEOM_Object) aCone =
|
||||||
|
GetEngine()->AddObject(GetDocID(), GEOM_TSHAPE);
|
||||||
|
Handle(GEOM_Function) aFunction =
|
||||||
|
aCone->AddFunction(GEOMImpl_PipeTShapeDriver::GetID(), TSHAPE_BASIC);
|
||||||
|
TopTools_ListIteratorOfListOfShape aFIter(aConicalFaces);
|
||||||
|
Handle(GEOM_Object) aConeFromShape;
|
||||||
|
|
||||||
|
for (; aFIter.More(); aFIter.Next()) {
|
||||||
|
aFunction->SetValue(aFIter.Value());
|
||||||
|
aConeFromShape = myShapesOperations->GetInPlace(theShape, aCone);
|
||||||
|
|
||||||
|
if (aConeFromShape.IsNull() == Standard_False) {
|
||||||
|
aConeFromShape->GetLastFunction()->SetDescription("");
|
||||||
|
TopoDS_Shape aConeFaces = aConeFromShape->GetValue();
|
||||||
|
TopExp_Explorer anExp(aConeFaces, TopAbs_FACE);
|
||||||
|
|
||||||
|
for (; anExp.More(); anExp.Next()) {
|
||||||
|
TopoDS_Face aConeFace = TopoDS::Face(anExp.Current());
|
||||||
|
|
||||||
|
if (aConeFace.IsNull() == Standard_False) {
|
||||||
|
aFaces.Append(aConeFace);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create a group of internal faces.
|
||||||
|
if (aFaces.IsEmpty() == Standard_False) {
|
||||||
|
Handle(GEOM_Object) aGroup = myGroupOperations->CreateGroup(theShape, TopAbs_FACE);
|
||||||
|
|
||||||
|
if (aGroup.IsNull() == Standard_False) {
|
||||||
|
aGroup->GetLastFunction()->SetDescription("");
|
||||||
|
aGroup->SetName("INTERNAL_FACES");
|
||||||
|
|
||||||
|
TopTools_IndexedMapOfShape anIndices;
|
||||||
|
Handle(TColStd_HSequenceOfInteger) aSeqIDs = new TColStd_HSequenceOfInteger;
|
||||||
|
|
||||||
|
TopExp::MapShapes(aShape, anIndices);
|
||||||
|
|
||||||
|
TopTools_ListIteratorOfListOfShape anIter(aFaces);
|
||||||
|
|
||||||
|
for (; anIter.More(); anIter.Next()) {
|
||||||
|
const TopoDS_Shape &aFace = anIter.Value();
|
||||||
|
const Standard_Integer anIndex = anIndices.FindIndex(aFace);
|
||||||
|
|
||||||
|
if (anIndex > 0) {
|
||||||
|
aSeqIDs->Append(anIndex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
myGroupOperations->UnionIDs(aGroup, aSeqIDs);
|
||||||
|
aGroup->GetLastFunction()->SetDescription("");
|
||||||
|
theSeq->Append(aGroup);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
SetErrorCode(OK);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
bool GEOMImpl_IAdvancedOperations::MakePipeTShapePartition(Handle(GEOM_Object) theShape,
|
bool GEOMImpl_IAdvancedOperations::MakePipeTShapePartition(Handle(GEOM_Object) theShape,
|
||||||
double theR1, double theW1, double theL1,
|
double theR1, double theW1, double theL1,
|
||||||
double theR2, double theW2, double theL2,
|
double theR2, double theW2, double theL2,
|
||||||
@ -1663,19 +2001,26 @@ Handle(TColStd_HSequenceOfTransient)
|
|||||||
Handle(TColStd_HSequenceOfTransient) aSeq = new TColStd_HSequenceOfTransient;
|
Handle(TColStd_HSequenceOfTransient) aSeq = new TColStd_HSequenceOfTransient;
|
||||||
aSeq->Append(aShape);
|
aSeq->Append(aShape);
|
||||||
|
|
||||||
if (theHexMesh) {
|
try {
|
||||||
// Get the groups
|
if (theHexMesh) {
|
||||||
try {
|
// Get the groups
|
||||||
if (!MakeGroups(aShape, TSHAPE_BASIC, theR1, theW1, theL1, theR2, theW2, theL2,
|
if (!MakeGroups(aShape, TSHAPE_BASIC, theR1, theW1, theL1, theR2, theW2, theL2,
|
||||||
0., 0., 0., aSeq, gp_Trsf()))
|
0., 0., 0., aSeq, gp_Trsf()))
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
catch (Standard_Failure) {
|
|
||||||
Handle(Standard_Failure) aFail = Standard_Failure::Caught();
|
// Get internal group.
|
||||||
SetErrorCode(aFail->GetMessageString());
|
if (!MakeInternalGroup(aShape, theR1, theL1, theR2, theL2, theRL, theLtransL,
|
||||||
|
theRR, theLtransR, theRI, theLtransI,
|
||||||
|
aSeq, gp_Trsf())) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
catch (Standard_Failure) {
|
||||||
|
Handle(Standard_Failure) aFail = Standard_Failure::Caught();
|
||||||
|
SetErrorCode(aFail->GetMessageString());
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
//Make a Python command
|
//Make a Python command
|
||||||
TCollection_AsciiString anEntry, aListRes("[");
|
TCollection_AsciiString anEntry, aListRes("[");
|
||||||
@ -1828,20 +2173,27 @@ GEOMImpl_IAdvancedOperations::MakePipeTShapeWithPosition
|
|||||||
Handle(TColStd_HSequenceOfTransient) aSeq = new TColStd_HSequenceOfTransient;
|
Handle(TColStd_HSequenceOfTransient) aSeq = new TColStd_HSequenceOfTransient;
|
||||||
aSeq->Append(aShape);
|
aSeq->Append(aShape);
|
||||||
|
|
||||||
if (theHexMesh) {
|
try {
|
||||||
// Get the groups
|
if (theHexMesh) {
|
||||||
try {
|
// Get the groups
|
||||||
if (!MakeGroups(aShape,TSHAPE_BASIC, theR1, theW1, theL1, theR2, theW2, theL2,
|
if (!MakeGroups(aShape,TSHAPE_BASIC, theR1, theW1, theL1, theR2, theW2, theL2,
|
||||||
0., 0., 0., aSeq, aTrsf)) {
|
0., 0., 0., aSeq, aTrsf)) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Standard_Failure) {
|
|
||||||
Handle(Standard_Failure) aFail = Standard_Failure::Caught();
|
// Get internal group.
|
||||||
SetErrorCode(aFail->GetMessageString());
|
if (!MakeInternalGroup(aShape, theR1, theL1, theR2, theL2, theRL, theLtransL,
|
||||||
|
theRR, theLtransR, theRI, theLtransI,
|
||||||
|
aSeq, aTrsf)) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
catch (Standard_Failure) {
|
||||||
|
Handle(Standard_Failure) aFail = Standard_Failure::Caught();
|
||||||
|
SetErrorCode(aFail->GetMessageString());
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
//Make a Python command
|
//Make a Python command
|
||||||
TCollection_AsciiString anEntry, aListRes("[");
|
TCollection_AsciiString anEntry, aListRes("[");
|
||||||
@ -2049,19 +2401,26 @@ GEOMImpl_IAdvancedOperations::MakePipeTShapeChamfer
|
|||||||
Handle(TColStd_HSequenceOfTransient) aSeq = new TColStd_HSequenceOfTransient;
|
Handle(TColStd_HSequenceOfTransient) aSeq = new TColStd_HSequenceOfTransient;
|
||||||
aSeq->Append(aShape);
|
aSeq->Append(aShape);
|
||||||
|
|
||||||
if (theHexMesh) {
|
try {
|
||||||
// Get the groups
|
if (theHexMesh) {
|
||||||
try {
|
// Get the groups
|
||||||
if (!MakeGroups(aShape, TSHAPE_CHAMFER, theR1, theW1, theL1, theR2, theW2, theL2,
|
if (!MakeGroups(aShape, TSHAPE_CHAMFER, theR1, theW1, theL1, theR2, theW2, theL2,
|
||||||
theH, theW, 0., aSeq, gp_Trsf()))
|
theH, theW, 0., aSeq, gp_Trsf()))
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
catch (Standard_Failure) {
|
|
||||||
Handle(Standard_Failure) aFail = Standard_Failure::Caught();
|
// Get internal group.
|
||||||
SetErrorCode(aFail->GetMessageString());
|
if (!MakeInternalGroup(aShape, theR1, theL1, theR2, theL2, theRL, theLtransL,
|
||||||
|
theRR, theLtransR, theRI, theLtransI,
|
||||||
|
aSeq, gp_Trsf())) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
catch (Standard_Failure) {
|
||||||
|
Handle(Standard_Failure) aFail = Standard_Failure::Caught();
|
||||||
|
SetErrorCode(aFail->GetMessageString());
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
//Make a Python command
|
//Make a Python command
|
||||||
TCollection_AsciiString anEntry, aListRes("[");
|
TCollection_AsciiString anEntry, aListRes("[");
|
||||||
@ -2285,19 +2644,26 @@ GEOMImpl_IAdvancedOperations::MakePipeTShapeChamferWithPosition
|
|||||||
Handle(TColStd_HSequenceOfTransient) aSeq = new TColStd_HSequenceOfTransient;
|
Handle(TColStd_HSequenceOfTransient) aSeq = new TColStd_HSequenceOfTransient;
|
||||||
aSeq->Append(aShape);
|
aSeq->Append(aShape);
|
||||||
|
|
||||||
if (theHexMesh) {
|
try {
|
||||||
// Get the groups
|
if (theHexMesh) {
|
||||||
try {
|
// Get the groups
|
||||||
if (!MakeGroups(aShape, TSHAPE_CHAMFER, theR1, theW1, theL1, theR2, theW2, theL2,
|
if (!MakeGroups(aShape, TSHAPE_CHAMFER, theR1, theW1, theL1, theR2, theW2, theL2,
|
||||||
theH, theW, 0., aSeq, aTrsf))
|
theH, theW, 0., aSeq, aTrsf))
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
catch (Standard_Failure) {
|
|
||||||
Handle(Standard_Failure) aFail = Standard_Failure::Caught();
|
// Get internal group.
|
||||||
SetErrorCode(aFail->GetMessageString());
|
if (!MakeInternalGroup(aShape, theR1, theL1, theR2, theL2, theRL, theLtransL,
|
||||||
|
theRR, theLtransR, theRI, theLtransI,
|
||||||
|
aSeq, aTrsf)) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
catch (Standard_Failure) {
|
||||||
|
Handle(Standard_Failure) aFail = Standard_Failure::Caught();
|
||||||
|
SetErrorCode(aFail->GetMessageString());
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
//Make a Python command
|
//Make a Python command
|
||||||
TCollection_AsciiString anEntry, aListRes("[");
|
TCollection_AsciiString anEntry, aListRes("[");
|
||||||
@ -2517,19 +2883,26 @@ GEOMImpl_IAdvancedOperations::MakePipeTShapeFillet
|
|||||||
Handle(TColStd_HSequenceOfTransient) aSeq = new TColStd_HSequenceOfTransient;
|
Handle(TColStd_HSequenceOfTransient) aSeq = new TColStd_HSequenceOfTransient;
|
||||||
aSeq->Append(aShape);
|
aSeq->Append(aShape);
|
||||||
|
|
||||||
if (theHexMesh) {
|
try {
|
||||||
// Get the groups
|
if (theHexMesh) {
|
||||||
try {
|
// Get the groups
|
||||||
if (!MakeGroups(aShape, TSHAPE_FILLET, theR1, theW1, theL1, theR2, theW2, theL2,
|
if (!MakeGroups(aShape, TSHAPE_FILLET, theR1, theW1, theL1, theR2, theW2, theL2,
|
||||||
0., 0., theRF, aSeq, gp_Trsf()))
|
0., 0., theRF, aSeq, gp_Trsf()))
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
catch (Standard_Failure) {
|
|
||||||
Handle(Standard_Failure) aFail = Standard_Failure::Caught();
|
// Get internal group.
|
||||||
SetErrorCode(aFail->GetMessageString());
|
if (!MakeInternalGroup(aShape, theR1, theL1, theR2, theL2, theRL, theLtransL,
|
||||||
|
theRR, theLtransR, theRI, theLtransI,
|
||||||
|
aSeq, gp_Trsf())) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
catch (Standard_Failure) {
|
||||||
|
Handle(Standard_Failure) aFail = Standard_Failure::Caught();
|
||||||
|
SetErrorCode(aFail->GetMessageString());
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
//Make a Python command
|
//Make a Python command
|
||||||
TCollection_AsciiString anEntry, aListRes("[");
|
TCollection_AsciiString anEntry, aListRes("[");
|
||||||
@ -2765,19 +3138,26 @@ GEOMImpl_IAdvancedOperations::MakePipeTShapeFilletWithPosition
|
|||||||
Handle(TColStd_HSequenceOfTransient) aSeq = new TColStd_HSequenceOfTransient;
|
Handle(TColStd_HSequenceOfTransient) aSeq = new TColStd_HSequenceOfTransient;
|
||||||
aSeq->Append(aShape);
|
aSeq->Append(aShape);
|
||||||
|
|
||||||
if (theHexMesh) {
|
try {
|
||||||
// Get the groups
|
if (theHexMesh) {
|
||||||
try {
|
// Get the groups
|
||||||
if (!MakeGroups(aShape, TSHAPE_FILLET, theR1, theW1, theL1, theR2, theW2, theL2,
|
if (!MakeGroups(aShape, TSHAPE_FILLET, theR1, theW1, theL1, theR2, theW2, theL2,
|
||||||
0., 0., theRF, aSeq, aTrsf))
|
0., 0., theRF, aSeq, aTrsf))
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
catch (Standard_Failure) {
|
|
||||||
Handle(Standard_Failure) aFail = Standard_Failure::Caught();
|
// Get internal group.
|
||||||
SetErrorCode(aFail->GetMessageString());
|
if (!MakeInternalGroup(aShape, theR1, theL1, theR2, theL2, theRL, theLtransL,
|
||||||
|
theRR, theLtransR, theRI, theLtransI,
|
||||||
|
aSeq, aTrsf)) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
catch (Standard_Failure) {
|
||||||
|
Handle(Standard_Failure) aFail = Standard_Failure::Caught();
|
||||||
|
SetErrorCode(aFail->GetMessageString());
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
//Make a Python command
|
//Make a Python command
|
||||||
TCollection_AsciiString anEntry, aListRes("[");
|
TCollection_AsciiString anEntry, aListRes("[");
|
||||||
|
@ -37,6 +37,9 @@ class GEOMImpl_IBlocksOperations;
|
|||||||
class GEOMImpl_I3DPrimOperations;
|
class GEOMImpl_I3DPrimOperations;
|
||||||
class GEOMImpl_ILocalOperations;
|
class GEOMImpl_ILocalOperations;
|
||||||
class GEOMImpl_IHealingOperations;
|
class GEOMImpl_IHealingOperations;
|
||||||
|
class GEOMImpl_IGroupOperations;
|
||||||
|
class Handle_Geom_Surface;
|
||||||
|
class TopTools_ListOfShape;
|
||||||
|
|
||||||
class GEOMImpl_IAdvancedOperations: public GEOM_IOperations {
|
class GEOMImpl_IAdvancedOperations: public GEOM_IOperations {
|
||||||
private:
|
private:
|
||||||
@ -64,6 +67,26 @@ private:
|
|||||||
Handle(TColStd_HSequenceOfTransient) theSeq,
|
Handle(TColStd_HSequenceOfTransient) theSeq,
|
||||||
gp_Trsf aTrsf);
|
gp_Trsf aTrsf);
|
||||||
|
|
||||||
|
bool GetFacesOnSurf(const TopoDS_Shape &theShape,
|
||||||
|
const Handle_Geom_Surface& theSurface,
|
||||||
|
const Standard_Real theTolerance,
|
||||||
|
TopTools_ListOfShape &theFaces);
|
||||||
|
|
||||||
|
TopoDS_Shape MakeConicalFace(const gp_Ax2 &theAxis,
|
||||||
|
const double theRadius,
|
||||||
|
const double theRadiusThin,
|
||||||
|
const double theHeight,
|
||||||
|
const gp_Trsf &theTrsf);
|
||||||
|
|
||||||
|
bool MakeInternalGroup(const Handle(GEOM_Object) &theShape,
|
||||||
|
const double theR1, const double theLen1,
|
||||||
|
const double theR2, const double theLen2,
|
||||||
|
const double theRL, const double theTransLenL,
|
||||||
|
const double theRR, const double theTransLenR,
|
||||||
|
const double theRI, const double theTransLenI,
|
||||||
|
const Handle(TColStd_HSequenceOfTransient) &theSeq,
|
||||||
|
const gp_Trsf &theTrsf);
|
||||||
|
|
||||||
gp_Trsf GetPositionTrsf(double theL1, double theL2,
|
gp_Trsf GetPositionTrsf(double theL1, double theL2,
|
||||||
Handle(GEOM_Object) P1 = 0,
|
Handle(GEOM_Object) P1 = 0,
|
||||||
Handle(GEOM_Object) P2 = 0,
|
Handle(GEOM_Object) P2 = 0,
|
||||||
@ -84,6 +107,7 @@ private:
|
|||||||
GEOMImpl_I3DPrimOperations* my3DPrimOperations;
|
GEOMImpl_I3DPrimOperations* my3DPrimOperations;
|
||||||
GEOMImpl_ILocalOperations* myLocalOperations;
|
GEOMImpl_ILocalOperations* myLocalOperations;
|
||||||
GEOMImpl_IHealingOperations* myHealingOperations;
|
GEOMImpl_IHealingOperations* myHealingOperations;
|
||||||
|
GEOMImpl_IGroupOperations* myGroupOperations;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user