Implement engine and TUI

This commit is contained in:
skv 2014-10-22 14:33:19 +04:00
parent 7933d72800
commit e20a386aa8
15 changed files with 719 additions and 0 deletions

View File

@ -114,6 +114,7 @@ SET(GOOD_TESTS
transformation_operations_ex11.py
transformation_operations_ex12.py
transformation_operations_ex13.py
transformation_operations_ex14.py
viewing_geom_objs_ex01.py
viewing_geom_objs_ex02.py
viewing_geom_objs_ex03.py

View File

@ -0,0 +1,75 @@
# Extend Edge and Face
import salome
salome.salome_init()
import GEOM
from salome.geom import geomBuilder
geompy = geomBuilder.New(salome.myStudy)
gg = salome.ImportComponentGUI("GEOM")
# create vertices
p1 = geompy.MakeVertex( 0., 0., 0.)
p2 = geompy.MakeVertex(100., 100., 0.)
p3 = geompy.MakeVertex( 0., 100., 0.)
# create edges
edge1 = geompy.MakeEdge(p1, p2)
edge2 = geompy.MakeCircleR(100)
# create faces
face1 = geompy.MakePlaneThreePnt(p1, p2, p3, 200)
sphere1 = geompy.MakeSpherePntR(p1, 100)
faces2 = geompy.SubShapeAllSorted(sphere1, GEOM.FACE)
face2 = faces2[0]
# perform edge extention
resEdge1 = geompy.ExtendEdge(edge1, 0.2, 0.8)
resEdge2 = geompy.ExtendEdge(edge1, -0.3, 1.3)
resEdge3 = geompy.ExtendEdge(edge2, 0.5, 1)
resEdge4 = geompy.ExtendEdge(edge2, 0.2, 0.5)
# perform face extention
resFace1 = geompy.ExtendFace(face1, 0.2, 0.8, -0.3, 1.3)
resFace2 = geompy.ExtendFace(face1, 0, 0.5, 1, 2)
resFace3 = geompy.ExtendFace(face2, 0.2, 0.8, 0.3, 0.7)
resFace4 = geompy.ExtendFace(face2, 0.5, 1, 0.5, 1)
# add objects in the study
id_edge1 = geompy.addToStudy(edge1, "Edge 1")
id_edge2 = geompy.addToStudy(edge2, "Edge 2")
id_face1 = geompy.addToStudy(face1, "Face 1")
id_face2 = geompy.addToStudy(face2, "Face 2")
id_resEdge1 = geompy.addToStudy(resEdge1, "Extended Edge 1")
id_resEdge2 = geompy.addToStudy(resEdge2, "Extended Edge 1")
id_resEdge3 = geompy.addToStudy(resEdge3, "Extended Edge 2")
id_resEdge4 = geompy.addToStudy(resEdge4, "Extended Edge 3")
id_resFace1 = geompy.addToStudy(resFace1, "Extended Face 1")
id_resFace2 = geompy.addToStudy(resFace2, "Extended Face 2")
id_resFace3 = geompy.addToStudy(resFace3, "Extended Face 3")
id_resFace4 = geompy.addToStudy(resFace4, "Extended Face 4")
# display the prism and the results of chamfer operation
gg.createAndDisplayGO(id_edge1)
gg.setDisplayMode(id_edge1, 1)
gg.createAndDisplayGO(id_edge2)
gg.setDisplayMode(id_edge2, 1)
gg.createAndDisplayGO(id_face1)
gg.setDisplayMode(id_face1, 1)
gg.createAndDisplayGO(id_face2)
gg.setDisplayMode(id_face2, 1)
gg.createAndDisplayGO(id_resEdge1)
gg.setDisplayMode(id_resEdge1, 1)
gg.createAndDisplayGO(id_resEdge2)
gg.setDisplayMode(id_resEdge2, 1)
gg.createAndDisplayGO(id_resEdge3)
gg.setDisplayMode(id_resEdge3, 1)
gg.createAndDisplayGO(id_resEdge4)
gg.setDisplayMode(id_resEdge4, 1)
gg.createAndDisplayGO(id_resFace1)
gg.setDisplayMode(id_resFace1, 1)
gg.createAndDisplayGO(id_resFace2)
gg.setDisplayMode(id_resFace2, 1)
gg.createAndDisplayGO(id_resFace3)
gg.setDisplayMode(id_resFace3, 1)
gg.createAndDisplayGO(id_resFace4)
gg.setDisplayMode(id_resFace4, 1)

View File

@ -54,4 +54,8 @@
<br><h2>Chamfer</h2>
\tui_script{transformation_operations_ex13.py}
\anchor tui_extend
<br><h2>Extend Edge and Face</h2>
\tui_script{transformation_operations_ex14.py}
*/

View File

@ -2537,6 +2537,42 @@ module GEOM
ListOfLong GetSameIDs (in GEOM_Object theShapeWhere,
in GEOM_Object theShapeWhat);
/*!
* \brief Resize the input edge with the new Min and Max parameters.
* The input edge parameters range is [0, 1]. If theMin parameter is
* negative, the input edge is extended, otherwise it is shrinked by
* theMin parameter. If theMax is greater than 1, the edge is extended,
* otherwise it is shrinked by theMax parameter.
* \param theEdge the input edge to be resized.
* \param theMin the minimal parameter value.
* \param theMax the maximal parameter value.
* \return a newly created edge.
*/
GEOM_Object ExtendEdge(in GEOM_Object theEdge,
in double theMin,
in double theMax);
/*!
* \brief Resize the input face with the new UMin, UMax, VMin and VMax
* parameters. The input face U and V parameters range is [0, 1]. If
* theUMin parameter is negative, the input face is extended, otherwise
* it is shrinked along U direction by theUMin parameter. If theUMax is
* greater than 1, the face is extended, otherwise it is shrinked along
* U direction by theUMax parameter. So as for theVMin, theVMax and
* V direction of the input face.
* \param theFace the input face to be resized.
* \param theUMin the minimal U parameter value.
* \param theUMax the maximal U parameter value.
* \param theVMin the minimal V parameter value.
* \param theVMax the maximal V parameter value.
* \return a newly created face.
*/
GEOM_Object ExtendFace(in GEOM_Object theFace,
in double theUMin,
in double theUMax,
in double theVMin,
in double theVMax);
};
// # GEOM_IBlocksOperations:

View File

@ -3104,6 +3104,14 @@ Please, select face, shell or solid and try again</translation>
<source>MEN_POP_PREDEF_MATER_CUSTOM</source>
<translation>Custom...</translation>
</message>
<message>
<source>MEN_EDGE_EXTEND</source>
<translation>Extended Edge</translation>
</message>
<message>
<source>MEN_FACE_EXTEND</source>
<translation>Extended Face</translation>
</message>
<message>
<source>NAME_LBL</source>
<translation>Name: </translation>

View File

@ -115,6 +115,7 @@ SET(GEOMImpl_HEADERS
GEOMImpl_IRevolution.hxx
GEOMImpl_IMeasure.hxx
GEOMImpl_IShapes.hxx
GEOMImpl_IShapeExtend.hxx
GEOMImpl_IFilling.hxx
GEOMImpl_IThruSections.hxx
GEOMImpl_IPartition.hxx

View File

@ -0,0 +1,72 @@
// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE
//
// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
//
//NOTE: This is an intreface to a function for the extended shape creation.
//
#include "GEOM_Function.hxx"
#define SHAPE_EXTEND_SHAPE 1
#define SHAPE_EXTEND_UMIN 2
#define SHAPE_EXTEND_UMAX 3
#define SHAPE_EXTEND_VMIN 4
#define SHAPE_EXTEND_VMAX 5
class GEOMImpl_IShapeExtend
{
public:
GEOMImpl_IShapeExtend(Handle(GEOM_Function) theFunction): _func(theFunction) {}
void SetShape(Handle(GEOM_Function) theShape)
{ _func->SetReference(SHAPE_EXTEND_SHAPE, theShape); }
Handle(GEOM_Function) GetShape()
{ return _func->GetReference(SHAPE_EXTEND_SHAPE); }
void SetUMin(const Standard_Real theUMin)
{ _func->SetReal(SHAPE_EXTEND_UMIN, theUMin); }
double GetUMin()
{ return _func->GetReal(SHAPE_EXTEND_UMIN); }
void SetUMax(const Standard_Real theUMax)
{ _func->SetReal(SHAPE_EXTEND_UMAX, theUMax); }
double GetUMax()
{ return _func->GetReal(SHAPE_EXTEND_UMAX); }
void SetVMin(const Standard_Real theVMin)
{ _func->SetReal(SHAPE_EXTEND_VMIN, theVMin); }
double GetVMin()
{ return _func->GetReal(SHAPE_EXTEND_VMIN); }
void SetVMax(const Standard_Real theVMax)
{ _func->SetReal(SHAPE_EXTEND_VMAX, theVMax); }
double GetVMax()
{ return _func->GetReal(SHAPE_EXTEND_VMAX); }
private:
Handle(GEOM_Function) _func;
};

View File

@ -37,6 +37,7 @@
#include "GEOMImpl_IVector.hxx"
#include "GEOMImpl_IShapes.hxx"
#include "GEOMImpl_IShapeExtend.hxx"
#include "GEOMImpl_IGlue.hxx"
#include "GEOMImpl_Block6Explorer.hxx"
@ -4832,3 +4833,138 @@ Handle(TColStd_HSequenceOfInteger) GEOMImpl_IShapesOperations::GetSameIDs
return NULL;
}
}
//=======================================================================
//function : ExtendEdge
//purpose :
//=======================================================================
Handle(GEOM_Object) GEOMImpl_IShapesOperations::ExtendEdge
(const Handle(GEOM_Object) &theEdge,
const Standard_Real theMin,
const Standard_Real theMax)
{
SetErrorCode(KO);
if (theEdge.IsNull()) {
return NULL;
}
//Add a new Edge object
Handle(GEOM_Object) aResEdge = GetEngine()->AddObject(GetDocID(), GEOM_EDGE);
//Add a new Vector function
Handle(GEOM_Function) aFunction =
aResEdge->AddFunction(GEOMImpl_ShapeDriver::GetID(), EDGE_UV);
//Check if the function is set correctly
if (aFunction->GetDriverGUID() != GEOMImpl_ShapeDriver::GetID()) {
return NULL;
}
GEOMImpl_IShapeExtend aCI (aFunction);
Handle(GEOM_Function) anEdge = theEdge->GetLastFunction();
if (anEdge.IsNull()) {
return NULL;
}
aCI.SetShape(anEdge);
aCI.SetUMin(theMin);
aCI.SetUMax(theMax);
//Compute the Edge value
try {
OCC_CATCH_SIGNALS;
if (!GetSolver()->ComputeFunction(aFunction)) {
SetErrorCode("Shape driver failed");
return NULL;
}
}
catch (Standard_Failure) {
Handle(Standard_Failure) aFail = Standard_Failure::Caught();
SetErrorCode(aFail->GetMessageString());
return NULL;
}
//Make a Python command
GEOM::TPythonDump(aFunction)
<< aResEdge << " = geompy.ExtendEdge("
<< theEdge << ", " << theMin << ", " << theMax << ")";
SetErrorCode(OK);
return aResEdge;
}
//=======================================================================
//function : ExtendFace
//purpose :
//=======================================================================
Handle(GEOM_Object) GEOMImpl_IShapesOperations::ExtendFace
(const Handle(GEOM_Object) &theFace,
const Standard_Real theUMin,
const Standard_Real theUMax,
const Standard_Real theVMin,
const Standard_Real theVMax)
{
SetErrorCode(KO);
if (theFace.IsNull()) {
return NULL;
}
//Add a new Face object
Handle(GEOM_Object) aResFace = GetEngine()->AddObject(GetDocID(), GEOM_FACE);
//Add a new Vector function
Handle(GEOM_Function) aFunction =
aResFace->AddFunction(GEOMImpl_ShapeDriver::GetID(), FACE_UV);
//Check if the function is set correctly
if (aFunction->GetDriverGUID() != GEOMImpl_ShapeDriver::GetID()) {
return NULL;
}
GEOMImpl_IShapeExtend aCI (aFunction);
Handle(GEOM_Function) aFace = theFace->GetLastFunction();
if (aFace.IsNull()) {
return NULL;
}
aCI.SetShape(aFace);
aCI.SetUMin(theUMin);
aCI.SetUMax(theUMax);
aCI.SetVMin(theVMin);
aCI.SetVMax(theVMax);
//Compute the Face value
try {
OCC_CATCH_SIGNALS;
if (!GetSolver()->ComputeFunction(aFunction)) {
SetErrorCode("Shape driver failed");
return NULL;
}
}
catch (Standard_Failure) {
Handle(Standard_Failure) aFail = Standard_Failure::Caught();
SetErrorCode(aFail->GetMessageString());
return NULL;
}
//Make a Python command
GEOM::TPythonDump(aFunction)
<< aResFace << " = geompy.ExtendFace("
<< theFace << ", " << theUMin << ", " << theUMax << ", "
<< theVMin << ", " << theVMax << ")";
SetErrorCode(OK);
return aResFace;
}

View File

@ -384,6 +384,18 @@ class GEOMImpl_IShapesOperations : public GEOM_IOperations
const Standard_Integer theShapeType,
GEOMAlgo_State theState);
Standard_EXPORT Handle(GEOM_Object)
ExtendEdge(const Handle(GEOM_Object) &theEdge,
const Standard_Real theMin,
const Standard_Real theMax);
Standard_EXPORT Handle(GEOM_Object)
ExtendFace(const Handle(GEOM_Object) &theFace,
const Standard_Real theUMin,
const Standard_Real theUMax,
const Standard_Real theVMin,
const Standard_Real theVMax);
private:
Handle(GEOM_Object) MakeShape (std::list<Handle(GEOM_Object)> theShapes,
const Standard_Integer theObjectType,

View File

@ -24,6 +24,7 @@
#include <GEOMImpl_IIsoline.hxx>
#include <GEOMImpl_IShapes.hxx>
#include <GEOMImpl_IShapeExtend.hxx>
#include <GEOMImpl_IVector.hxx>
#include <GEOMImpl_Types.hxx>
#include <GEOMImpl_Block6Explorer.hxx>
@ -77,6 +78,7 @@
#include <GCPnts_AbscissaPoint.hxx>
#include <Geom_TrimmedCurve.hxx>
#include <Geom_RectangularTrimmedSurface.hxx>
#include <Geom_Surface.hxx>
#include <GeomAbs_CurveType.hxx>
#include <GeomConvert_CompCurveToBSplineCurve.hxx>
@ -650,6 +652,35 @@ Standard_Integer GEOMImpl_ShapeDriver::Execute(TFunction_Logbook& log) const
Standard_NullObject::Raise
("Shape for isoline construction is not a face");
}
} else if (aType == EDGE_UV) {
#ifdef RESULT_TYPE_CHECK
anExpectedType = TopAbs_EDGE;
#endif
GEOMImpl_IShapeExtend aSE (aFunction);
Handle(GEOM_Function) aRefEdge = aSE.GetShape();
TopoDS_Shape aShapeEdge = aRefEdge->GetValue();
if (aShapeEdge.ShapeType() == TopAbs_EDGE) {
TopoDS_Edge anEdge = TopoDS::Edge(aShapeEdge);
aShape = ExtendEdge(anEdge, aSE.GetUMin(), aSE.GetUMax());
}
} else if (aType == FACE_UV) {
#ifdef RESULT_TYPE_CHECK
anExpectedType = TopAbs_FACE;
#endif
GEOMImpl_IShapeExtend aSE (aFunction);
Handle(GEOM_Function) aRefFace = aSE.GetShape();
TopoDS_Shape aShapeFace = aRefFace->GetValue();
if (aShapeFace.ShapeType() == TopAbs_FACE) {
TopoDS_Face aFace = TopoDS::Face(aShapeFace);
aFace.Orientation(TopAbs_FORWARD);
aShape = ExtendFace(aFace, aSE.GetUMin(), aSE.GetUMax(),
aSE.GetVMin(), aSE.GetVMax());
}
}
else {
}
@ -1275,6 +1306,150 @@ TopoDS_Shape GEOMImpl_ShapeDriver::MakeIsoline
return aResult;
}
//=============================================================================
/*!
* \brief Returns an extended edge.
*/
//=============================================================================
TopoDS_Shape GEOMImpl_ShapeDriver::ExtendEdge
(const TopoDS_Edge &theEdge,
const Standard_Real theMin,
const Standard_Real theMax) const
{
TopoDS_Shape aResult;
Standard_Real aF;
Standard_Real aL;
Handle(Geom_Curve) aCurve = BRep_Tool::Curve(theEdge, aF, aL);
const Standard_Real aTol = BRep_Tool::Tolerance(theEdge);
Standard_Real aRange2d = aL - aF;
if (aCurve.IsNull() == Standard_False && aRange2d > aTol) {
Standard_Real aMin = aF + aRange2d*theMin;
Standard_Real aMax = aF + aRange2d*theMax;
Handle(Standard_Type) aType = aCurve->DynamicType();
// Get the curve of original type
while (aType == STANDARD_TYPE(Geom_TrimmedCurve)) {
Handle(Geom_TrimmedCurve) aTrCurve =
Handle(Geom_TrimmedCurve)::DownCast(aCurve);
aCurve = aTrCurve->BasisCurve();
aType = aCurve->DynamicType();
}
if (aCurve->IsPeriodic()) {
// The curve is periodic. Check if a new range is less then a period.
if (aMax - aMin > aCurve->Period()) {
aMax = aMin + aCurve->Period();
}
} else {
// The curve is not periodic. Check if aMin and aMax within bounds.
aMin = Max(aMin, aCurve->FirstParameter());
aMax = Min(aMax, aCurve->LastParameter());
}
if (aMax - aMin > aTol) {
// Create a new edge.
BRepBuilderAPI_MakeEdge aME (aCurve, aMin, aMax);
if (aME.IsDone()) {
aResult = aME.Shape();
}
}
}
return aResult;
}
//=============================================================================
/*!
* \brief Returns an extended face.
*/
//=============================================================================
TopoDS_Shape GEOMImpl_ShapeDriver::ExtendFace
(const TopoDS_Face &theFace,
const Standard_Real theUMin,
const Standard_Real theUMax,
const Standard_Real theVMin,
const Standard_Real theVMax) const
{
TopoDS_Shape aResult;
Handle(Geom_Surface) aSurface = BRep_Tool::Surface(theFace);
const Standard_Real aTol = BRep_Tool::Tolerance(theFace);
Standard_Real aU1;
Standard_Real aU2;
Standard_Real aV1;
Standard_Real aV2;
// Get U, V bounds of the face.
ShapeAnalysis::GetFaceUVBounds(theFace, aU1, aU2, aV1, aV2);
const Standard_Real aURange = aU2 - aU1;
const Standard_Real aVRange = aV2 - aV1;
if (aSurface.IsNull() == Standard_False &&
aURange > aTol && aURange > aTol) {
Handle(Standard_Type) aType = aSurface->DynamicType();
// Get the surface of original type
while (aType == STANDARD_TYPE(Geom_RectangularTrimmedSurface)) {
Handle(Geom_RectangularTrimmedSurface) aTrSurface =
Handle(Geom_RectangularTrimmedSurface)::DownCast(aSurface);
aSurface = aTrSurface->BasisSurface();
aType = aSurface->DynamicType();
}
Standard_Real aUMin = aU1 + aURange*theUMin;
Standard_Real aUMax = aU1 + aURange*theUMax;
Standard_Real aVMin = aV1 + aVRange*theVMin;
Standard_Real aVMax = aV1 + aVRange*theVMax;
aSurface->Bounds(aU1, aU2, aV1, aV2);
if (aSurface->IsUPeriodic()) {
// The surface is U-periodic. Check if a new U range is less
// then a period.
if (aUMax - aUMin > aSurface->UPeriod()) {
aUMax = aUMin + aSurface->UPeriod();
}
} else {
// The surface is not V-periodic. Check if aUMin and aUMax
// within bounds.
aUMin = Max(aUMin, aU1);
aUMax = Min(aUMax, aU2);
}
if (aSurface->IsVPeriodic()) {
// The surface is V-periodic. Check if a new V range is less
// then a period.
if (aVMax - aVMin > aSurface->VPeriod()) {
aVMax = aVMin + aSurface->VPeriod();
}
} else {
// The surface is not V-periodic. Check if aVMin and aVMax
// within bounds.
aVMin = Max(aVMin, aV1);
aVMax = Min(aVMax, aV2);
}
if (aUMax - aUMin > aTol && aVMax - aVMin > aTol) {
// Create a new edge.
BRepBuilderAPI_MakeFace aMF
(aSurface, aUMin, aUMax, aVMin, aVMax, aTol);
if (aMF.IsDone()) {
aResult = aMF.Shape();
}
}
}
return aResult;
}
//================================================================================
/*!
* \brief Returns a name of creation operation and names and values of creation parameters
@ -1376,6 +1551,28 @@ GetCreationInformation(std::string& theOperationName,
AddParam(theParams, "Parameter", aII.GetParameter());
break;
}
case EDGE_UV:
{
GEOMImpl_IShapeExtend aSE (function);
theOperationName = "EDGE_EXTEND";
AddParam(theParams, "Edge", aSE.GetShape());
AddParam(theParams, "Min", aSE.GetUMin());
AddParam(theParams, "Max", aSE.GetUMax());
break;
}
case FACE_UV:
{
GEOMImpl_IShapeExtend aSE (function);
theOperationName = "FACE_EXTEND";
AddParam(theParams, "Face", aSE.GetShape());
AddParam(theParams, "UMin", aSE.GetUMin());
AddParam(theParams, "UMax", aSE.GetUMax());
AddParam(theParams, "VMin", aSE.GetVMin());
AddParam(theParams, "VMax", aSE.GetVMax());
break;
}
default:
return false;
}

View File

@ -105,6 +105,16 @@ private:
const bool IsUIso,
const double theParameter) const;
TopoDS_Shape ExtendEdge(const TopoDS_Edge &theEdge,
const Standard_Real theMin,
const Standard_Real theMax) const;
TopoDS_Shape ExtendFace(const TopoDS_Face &theFace,
const Standard_Real theUMin,
const Standard_Real theUMax,
const Standard_Real theVMin,
const Standard_Real theVMax) const;
};
#endif

View File

@ -300,6 +300,8 @@
#define SHAPES_ON_SHAPE 13
#define SHAPE_ISOLINE 14
#define FACE_FROM_SURFACE 15
#define EDGE_UV 16
#define FACE_UV 17
#define ARCHIMEDE_TYPE 1

View File

@ -1932,3 +1932,71 @@ GEOM::ListOfLong* GEOM_IShapesOperations_i::GetSameIDs
return aSeq._retn();
}
//=============================================================================
/*!
* ExtendEdge
*/
//=============================================================================
GEOM::GEOM_Object_ptr GEOM_IShapesOperations_i::ExtendEdge
(GEOM::GEOM_Object_ptr theEdge,
CORBA::Double theMin,
CORBA::Double theMax)
{
GEOM::GEOM_Object_var aGEOMObject;
//Set a not done flag
GetOperations()->SetNotDone();
//Get the reference objects
Handle(GEOM_Object) anEdge = GetObjectImpl(theEdge);
if (anEdge.IsNull()) {
return aGEOMObject._retn();
}
//Get Shapes in place of aShapeWhat
Handle(GEOM_Object) aNewEdge =
GetOperations()->ExtendEdge(anEdge, theMin, theMax);
if (!GetOperations()->IsDone() || aNewEdge.IsNull()) {
return aGEOMObject._retn();
}
return GetObject(aNewEdge);
}
//=============================================================================
/*!
* ExtendFace
*/
//=============================================================================
GEOM::GEOM_Object_ptr GEOM_IShapesOperations_i::ExtendFace
(GEOM::GEOM_Object_ptr theFace,
CORBA::Double theUMin,
CORBA::Double theUMax,
CORBA::Double theVMin,
CORBA::Double theVMax)
{
GEOM::GEOM_Object_var aGEOMObject;
//Set a not done flag
GetOperations()->SetNotDone();
//Get the reference objects
Handle(GEOM_Object) aFace = GetObjectImpl(theFace);
if (aFace.IsNull()) {
return aGEOMObject._retn();
}
//Get Shapes in place of aShapeWhat
Handle(GEOM_Object) aNewFace =
GetOperations()->ExtendFace(aFace, theUMin, theUMax, theVMin, theVMax);
if (!GetOperations()->IsDone() || aNewFace.IsNull()) {
return aGEOMObject._retn();
}
return GetObject(aNewFace);
}

View File

@ -274,6 +274,16 @@ class GEOM_I_EXPORT GEOM_IShapesOperations_i :
GEOM::ListOfLong* GetSameIDs (GEOM::GEOM_Object_ptr theShapeWhere,
GEOM::GEOM_Object_ptr theShapeWhat);
GEOM::GEOM_Object_ptr ExtendEdge(GEOM::GEOM_Object_ptr theEdge,
CORBA::Double theMin,
CORBA::Double theMax);
GEOM::GEOM_Object_ptr ExtendFace(GEOM::GEOM_Object_ptr theFace,
CORBA::Double theUMin,
CORBA::Double theUMax,
CORBA::Double theVMin,
CORBA::Double theVMax);
::GEOMImpl_IShapesOperations* GetOperations()
{ return (::GEOMImpl_IShapesOperations*)GetImpl(); }
};

View File

@ -5667,6 +5667,93 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen):
RaiseIfFailed("GetSameIDs", self.ShapesOp)
return anObj
## Resize the input edge with the new Min and Max parameters.
# The input edge parameters range is [0, 1]. If theMin parameter is
# negative, the input edge is extended, otherwise it is shrinked by
# theMin parameter. If theMax is greater than 1, the edge is extended,
# otherwise it is shrinked by theMax parameter.
# @param theEdge the input edge to be resized.
# @param theMin the minimal parameter value.
# @param theMax the maximal parameter value.
# @param theName Object name; when specified, this parameter is used
# for result publication in the study. Otherwise, if automatic
# publication is switched on, default value is used for result name.
# @return New GEOM.GEOM_Object, containing the created edge.
#
# @ref tui_extend "Example"
@ManageTransactions("ShapesOp")
def ExtendEdge(self, theEdge, theMin, theMax, theName=None):
"""
Resize the input edge with the new Min and Max parameters.
The input edge parameters range is [0, 1]. If theMin parameter is
negative, the input edge is extended, otherwise it is shrinked by
theMin parameter. If theMax is greater than 1, the edge is extended,
otherwise it is shrinked by theMax parameter.
Parameters:
theEdge the input edge to be resized.
theMin the minimal parameter value.
theMax the maximal parameter value.
theName Object name; when specified, this parameter is used
for result publication in the study. Otherwise, if automatic
publication is switched on, default value is used for result name.
Returns:
New GEOM.GEOM_Object, containing the created edge.
"""
anObj = self.ShapesOp.ExtendEdge(theEdge, theMin, theMax)
RaiseIfFailed("ExtendEdge", self.ShapesOp)
self._autoPublish(anObj, theName, "edge")
return anObj
## Resize the input face with the new UMin, UMax, VMin and VMax
# parameters. The input face U and V parameters range is [0, 1]. If
# theUMin parameter is negative, the input face is extended, otherwise
# it is shrinked along U direction by theUMin parameter. If theUMax is
# greater than 1, the face is extended, otherwise it is shrinked along
# U direction by theUMax parameter. So as for theVMin, theVMax and
# V direction of the input face.
# @param theFace the input face to be resized.
# @param theUMin the minimal U parameter value.
# @param theUMax the maximal U parameter value.
# @param theVMin the minimal V parameter value.
# @param theVMax the maximal V parameter value.
# @param theName Object name; when specified, this parameter is used
# for result publication in the study. Otherwise, if automatic
# publication is switched on, default value is used for result name.
# @return New GEOM.GEOM_Object, containing the created face.
#
# @ref tui_extend "Example"
@ManageTransactions("ShapesOp")
def ExtendFace(self, theFace, theUMin, theUMax,
theVMin, theVMax, theName=None):
"""
Resize the input face with the new UMin, UMax, VMin and VMax
parameters. The input face U and V parameters range is [0, 1]. If
theUMin parameter is negative, the input face is extended, otherwise
it is shrinked along U direction by theUMin parameter. If theUMax is
greater than 1, the face is extended, otherwise it is shrinked along
U direction by theUMax parameter. So as for theVMin, theVMax and
V direction of the input face.
Parameters:
theFace the input face to be resized.
theUMin the minimal U parameter value.
theUMax the maximal U parameter value.
theVMin the minimal V parameter value.
theVMax the maximal V parameter value.
theName Object name; when specified, this parameter is used
for result publication in the study. Otherwise, if automatic
publication is switched on, default value is used for result name.
Returns:
New GEOM.GEOM_Object, containing the created face.
"""
anObj = self.ShapesOp.ExtendFace(theFace, theUMin, theUMax,
theVMin, theVMax)
RaiseIfFailed("ExtendFace", self.ShapesOp)
self._autoPublish(anObj, theName, "face")
return anObj
# end of l4_obtain
## @}