# create faces from two wires
face2 = geompy.MakeFaceWires([wire, sketcher1],isPlanarFace)
face3 = geompy.MakeFaces([sketcher2, sketcher3],isPlanarFace)
+face4 = geompy.MakeFaceFromSurface(face1, sketcher1)
# add objects in the study
id_face1 = geompy.addToStudy(face1,"Face1")
id_face2 = geompy.addToStudy(face2,"Face2")
id_face3 = geompy.addToStudy(face3,"Face3")
+id_face4 = geompy.addToStudy(face4,"Face4")
# display the faces
gg.createAndDisplayGO(id_face1)
gg.createAndDisplayGO(id_face3)
gg.setDisplayMode(id_face3,1)
gg.setTransparency(id_face3,0.2)
+gg.createAndDisplayGO(id_face4)
+gg.setDisplayMode(id_face4,1)
+gg.setTransparency(id_face4,0.2)
*/
GEOM_Object MakeFaceWires (in ListOfGO theWires, in boolean isPlanarWanted);
+ /**
+ * \brief Create a face based on surface of theFace limited by theWire.
+ * \param theFace the face whose surface is used to create a new face.
+ * \param theWire closed Wire build the face.
+ * \return New GEOM_Object, containing the created face.
+ */
+ GEOM_Object MakeFaceFromSurface(in GEOM_Object theFace,
+ in GEOM_Object theWire);
+
/*!
* \brief Create a shell from the set of faces and shells.
* \param theFacesAndShells List of faces and/or shells.
return aShape;
}
+//=============================================================================
+/*!
+ * MakeFaceFromSurface
+ */
+//=============================================================================
+Handle(GEOM_Object) GEOMImpl_IShapesOperations::MakeFaceFromSurface
+ (Handle(GEOM_Object) theFace,
+ Handle(GEOM_Object) theWire)
+{
+ SetErrorCode(KO);
+
+ //Add a new object
+ Handle(GEOM_Object) aShape = GetEngine()->AddObject(GetDocID(), GEOM_FACE);
+
+ //Add a new function
+ Handle(GEOM_Function) aFunction =
+ aShape->AddFunction(GEOMImpl_ShapeDriver::GetID(), FACE_FROM_SURFACE);
+
+ if (aFunction.IsNull()) {
+ return NULL;
+ }
+
+ //Check if the function is set correctly
+ if (aFunction->GetDriverGUID() != GEOMImpl_ShapeDriver::GetID()) {
+ return NULL;
+ }
+
+ GEOMImpl_IShapes aCI (aFunction);
+ Handle(TColStd_HSequenceOfTransient) aShapesSeq =
+ new TColStd_HSequenceOfTransient;
+ Handle(GEOM_Function) aRefFace = theFace->GetLastFunction();
+ Handle(GEOM_Function) aRefWire = theWire->GetLastFunction();
+
+ if (aRefFace.IsNull()) {
+ SetErrorCode("NULL argument face for the face construction");
+ return NULL;
+ }
+
+ if (aRefWire.IsNull()) {
+ SetErrorCode("NULL argument wire for the face construction");
+ return NULL;
+ }
+
+ aShapesSeq->Append(aRefFace);
+ aShapesSeq->Append(aRefWire);
+
+ aCI.SetShapes(aShapesSeq);
+
+ //Compute the face
+ 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) << aShape
+ << " = geompy.MakeFaceFromSurface(" << theFace << ", " << theWire << ")";
+
+ SetErrorCode(OK);
+
+ return aShape;
+}
+
//=============================================================================
/*!
* MakeShell
Standard_EXPORT Handle(GEOM_Object) MakeFaceWires (std::list<Handle(GEOM_Object)> theWires,
const bool isPlanarWanted);
+ Standard_EXPORT Handle(GEOM_Object) MakeFaceFromSurface
+ (Handle(GEOM_Object) theFace,
+ Handle(GEOM_Object) theWire);
+
Standard_EXPORT Handle(GEOM_Object) MakeShell (std::list<Handle(GEOM_Object)> theShapes);
Standard_EXPORT Handle(GEOM_Object) MakeSolidShells (std::list<Handle(GEOM_Object)> theShells);
#include <BRepAlgo_FaceRestrictor.hxx>
#include <BRepBuilderAPI_Copy.hxx>
#include <BRepBuilderAPI_Sewing.hxx>
+#include <BRepBuilderAPI_MakeFace.hxx>
#include <BRepBuilderAPI_MakeWire.hxx>
#include <BRepBuilderAPI_MakeEdge.hxx>
#include <BRepBuilderAPI_MakeSolid.hxx>
aShape = C;
}
}
+ else if (aType == FACE_FROM_SURFACE) {
+#ifdef RESULT_TYPE_CHECK
+ anExpectedType = TopAbs_FACE;
+#endif
+
+ Handle(TColStd_HSequenceOfTransient) aShapes = aCI.GetShapes();
+
+ if (aShapes.IsNull() == Standard_False) {
+ Standard_Integer aNbShapes = aShapes->Length();
+
+ if (aNbShapes == 2) {
+ Handle(GEOM_Function) aRefFace =
+ Handle(GEOM_Function)::DownCast(aShapes->Value(1));
+ Handle(GEOM_Function) aRefWire =
+ Handle(GEOM_Function)::DownCast(aShapes->Value(2));
+
+ if (aRefFace.IsNull() == Standard_False &&
+ aRefWire.IsNull() == Standard_False) {
+ TopoDS_Shape aShFace = aRefFace->GetValue();
+ TopoDS_Shape aShWire = aRefWire->GetValue();
+
+ if (aShFace.IsNull() == Standard_False &&
+ aShFace.ShapeType() == TopAbs_FACE &&
+ aShWire.IsNull() == Standard_False &&
+ aShWire.ShapeType() == TopAbs_WIRE) {
+ TopoDS_Face aFace = TopoDS::Face(aShFace);
+ TopoDS_Wire aWire = TopoDS::Wire(aShWire);
+ Handle(Geom_Surface) aSurf = BRep_Tool::Surface(aFace);
+ BRepBuilderAPI_MakeFace aMkFace(aSurf, aWire);
+
+ if (aMkFace.IsDone()) {
+ aShape = aMkFace.Shape();
+ }
+ }
+ }
+ }
+ }
+ }
else if (aType == SHELL_FACES) {
#ifdef RESULT_TYPE_CHECK
anExpectedType = TopAbs_SHELL;
AddParam( theParams, "Wires/edges", aCI.GetShapes() );
AddParam( theParams, "Is planar wanted", aCI.GetIsPlanar() );
break;
+ case FACE_FROM_SURFACE:
+ {
+ theOperationName = "FACE";
+
+ Handle(TColStd_HSequenceOfTransient) shapes = aCI.GetShapes();
+
+ if (shapes.IsNull() == Standard_False) {
+ Standard_Integer aNbShapes = shapes->Length();
+
+ if (aNbShapes > 0) {
+ AddParam(theParams, "Face", shapes->Value(1));
+
+ if (aNbShapes > 1) {
+ AddParam(theParams, "Wire", shapes->Value(2));
+ }
+ }
+ }
+ break;
+ }
case SHELL_FACES:
theOperationName = "SHELL";
AddParam( theParams, "Objects", aCI.GetShapes() );
#define EDGE_CURVE_LENGTH 12
#define SHAPES_ON_SHAPE 13
#define SHAPE_ISOLINE 14
+#define FACE_FROM_SURFACE 15
#define ARCHIMEDE_TYPE 1
return GetObject(anObject);
}
+//=============================================================================
+/*!
+ * MakeFaceFromSurface
+ */
+//=============================================================================
+GEOM::GEOM_Object_ptr GEOM_IShapesOperations_i::MakeFaceFromSurface
+ (GEOM::GEOM_Object_ptr theFace,
+ GEOM::GEOM_Object_ptr theWire)
+{
+ GEOM::GEOM_Object_var aGEOMObject;
+
+ //Set a not done flag
+ GetOperations()->SetNotDone();
+
+ //Get the reference face and wire
+ Handle(GEOM_Object) aFace = GetObjectImpl(theFace);
+ Handle(GEOM_Object) aWire = GetObjectImpl(theWire);
+
+ if (aFace.IsNull() || aWire.IsNull()) {
+ return aGEOMObject._retn();
+ }
+
+ //Create the Face
+ Handle(GEOM_Object) anObject =
+ GetOperations()->MakeFaceFromSurface(aFace, aWire);
+
+ if (anObject.IsNull()) {
+ return aGEOMObject._retn();
+ }
+
+ return GetObject(anObject);
+}
+
//=============================================================================
/*!
* MakeShell
GEOM::GEOM_Object_ptr MakeFaceWires (const GEOM::ListOfGO& theWires,
CORBA::Boolean isPlanarWanted);
+ GEOM::GEOM_Object_ptr MakeFaceFromSurface(GEOM::GEOM_Object_ptr theFace,
+ GEOM::GEOM_Object_ptr theWire);
+
GEOM::GEOM_Object_ptr MakeShell (const GEOM::ListOfGO& theFacesAndShells);
GEOM::GEOM_Object_ptr MakeSolidShell (GEOM::GEOM_Object_ptr theShell);
Face2 = geompy.MakeFace(Sketcher, WantPlanarFace)
Face3 = geompy.MakeFaceHW (100., 200., 1) #(2 Doubles, 1 Int)->GEOM_Object
Face4 = geompy.MakeFaceObjHW (vz, 200., 100.) #(1 GEOM_Object, 2 Doubles)->GEOM_Object
+ Face5 = geompy.MakeFaceFromSurface(Face, Sketcher) #(2 GEOM_Objects)->GEOM_Object
Disk = geompy.MakeDiskPntVecR (p0, vz, radius) #(2 GEOM_Object, 1 Double)->GEOM_Object
Disk2 = geompy.MakeDiskThreePnt(p0, p200, pz) #(3 GEOM_Object)->GEOM_Object
Disk3 = geompy.MakeDiskR(100., 1) #(1 Doubles, 1 Int)->GEOM_Object
id_Face2 = geompy.addToStudy(Face2, "Face from Sketcher")
id_Face3 = geompy.addToStudy(Face3, "Face Height Width")
id_Face4 = geompy.addToStudy(Face4, "Face Plane_HW")
+ id_Face5 = geompy.addToStudy(Face5, "Face from surface and wire")
id_Disk = geompy.addToStudy(Disk, "Disk PntVecR")
id_Disk2 = geompy.addToStudy(Disk2, "Disk Three Points")
id_Disk3 = geompy.addToStudy(Disk3, "Disk OXY Radius")
anObj = self.MakeFaceWires(theWires, isPlanarWanted, theName)
return anObj
+ ## Create a face based on a surface from given face bounded
+ # by given wire.
+ # @param theFace the face whose surface is used to create a new face.
+ # @param theWire the wire that will bound a new face.
+ # @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_creation_face "Example"
+ @ManageTransactions("ShapesOp")
+ def MakeFaceFromSurface(self, theFace, theWire, theName=None):
+ """
+ Create a face based on a surface from given face bounded
+ by given wire.
+
+ Parameters:
+ theFace the face whose surface is used to create a new face.
+ theWire the wire that will bound a new face.
+ 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.
+ """
+ # Example: see GEOM_TestAll.py
+ anObj = self.ShapesOp.MakeFaceFromSurface(theFace, theWire)
+ RaiseIfFailed("MakeFaceFromSurface", self.ShapesOp)
+ self._autoPublish(anObj, theName, "face")
+ return anObj
+
## Create a shell from the set of faces and shells.
# @param theFacesAndShells List of faces and/or shells.
# @param theName Object name; when specified, this parameter is used