Mon, 08/27/2007 - 11:58
Hello,
I try to fuse 2 faces (2 square in the same plane) with the help of BRepAlgo_Fuse.
Squares are 10x10 and the second on is translated of D with respect to the first one along the x axis.
The result of this fusion amazingly depends on the value of D.
- With D = 5, the fusion is ok (image of the result at "http://steve.bourgeois.free.fr/Vrac/OCC/Fuse_Tran_5_Scucess.jpg".
- With D = 9, the fusion fail and if I display the corresponding wire, a hole appear (cf. picture "http://steve.bourgeois.free.fr/Vrac/OCC/Fuse_Trans9_Fail.jpg".
The code used to create theses faces and fuse them :
//Vertices of the first square
gp_Pnt E(0,10,0.0);
gp_Pnt F(0,0,0.0);
gp_Pnt G(10,0,0.0);
gp_Pnt H(10,10,0.0);
//Vertices of the second square
gp_Pnt I(9,10,0.0);
gp_Pnt J(9,0,0.0);
gp_Pnt K(19,0,0.0);
gp_Pnt L(19,10,0.0);
//Construction of the fist square
BRepBuilderAPI_MakeWire wireMakerb;
wireMakerb.Add(BRepBuilderAPI_MakeEdge(E, F).Edge());
wireMakerb.Add(BRepBuilderAPI_MakeEdge (F, G).Edge());
wireMakerb.Add(BRepBuilderAPI_MakeEdge(G, H).Edge());
BRepBuilderAPI_MakeEdge ME2b(F, G);
wireMakerb.Add(BRepBuilderAPI_MakeEdge(H, E).Edge());
BRepBuilderAPI_MakeFace faceMakerb (wireMakerb.Wire());
TopoDS_Shape B = faceMakerb.Face();
//Construction of the second square
BRepBuilderAPI_MakeWire wireMakerc;
wireMakerc.Add(BRepBuilderAPI_MakeEdge(I, J).Edge());
wireMakerc.Add(BRepBuilderAPI_MakeEdge (J, K).Edge());
wireMakerc.Add(BRepBuilderAPI_MakeEdge (K, L).Edge());
wireMakerc.Add(BRepBuilderAPI_MakeEdge(L, I).Edge());
BRepBuilderAPI_MakeFace faceMakerc (wireMakerc.Wire());
TopoDS_Shape C = faceMakerc.Face();
//Fusion of the 2 squares
TopoDS_Shape faceFuse = BRepAlgo_Fuse(B,C);
If someone know how to solve this problem...
Thank
Steve
Tue, 08/28/2007 - 16:28
Hi,
My understanding of the fuse operation is, that is only robust for primitive shapes.
You could try to use a sewing method instead:
BRepOffsetAPI_Sewing sewingMethod(1e-5);
sewingMethod.Add(B);
sewingMethod.Add(C);
sewingMethod.Perform();
TopoDS_Shape sewedShape = sewingMethod.SewedShape();
BRepTools::Write(sewedShape,"C:\\sewedShape.brep");
Hope that helps,
Udo
Tue, 08/28/2007 - 18:35
Thank you for your help Udo.
But, in fact, I want to obtain the boudaries of the union of two faces. When I "Sew", it keeps edges which are inside the union of the two faces.
Is it possible know which of theses edges belong to the shape boundary?
Steve
Fri, 08/31/2007 - 12:59
Would it be possible to build a very slim Box from you face first?
If you do so, and tthe apply the fuse operation it should work.
Afterwards, you can use a wire explorer to obtain the outline of the face you are interested in.