49 std::vector<MG_NOEUD*> section=interf->
get_section(k);
50 Handle(TColgp_HArray1OfPnt) PtsSec=
new TColgp_HArray1OfPnt(1,section.size());
51 for(
int l=0;l<section.size();l++)
52 PtsSec->SetValue(l+1,gp_Pnt(section[l]->get_x(),
54 section[l]->get_z()));
55 GeomAPI_Interpolate InterpSec(PtsSec,Standard_False,tol);
75 std::vector<MG_NOEUD*> SecPrec=interf->
get_section(kPrec);
76 std::vector<MG_NOEUD*> SecSuiv=interf->
get_section(kSuiv);
77 OT_VECTEUR_3D V1(SecPrec[SecPrec.size()-2]->get_coord(),section[1]->get_coord());
78 OT_VECTEUR_3D V2(section[section.size()-2]->get_coord(),SecSuiv[1]->get_coord());
82 gp_Vec T2(gp_XYZ(
V2.get_x(),
V2.get_y(),
V2.get_z()));
83 InterpSec.Load(T1,T2,Standard_False);
86 Handle(Geom_BSplineCurve) SecCurve=InterpSec.Curve();
93 TopoDS_Edge SecEdge=BRepBuilderAPI_MakeEdge(SecCurve);
101 TopoDS_Wire SecWire=BRepBuilderAPI_MakeWire(SecEdge);
127 for(
int i=0;i<
LstJonctions[NumJonc]->get_nb_raccords();i++)
133 TopoDS_Wire SecWire=BRepBuilderAPI_MakeWire(SecEdge);
136 BRepOffsetAPI_ThruSections pipeBuilder;
137 pipeBuilder.CheckCompatibility(Standard_True);
138 pipeBuilder.SetSmoothing(Standard_False);
139 pipeBuilder.SetContinuity(GeomAbs_C2);
140 pipeBuilder.AddWire(TopoDS::Wire(raccord->
get_arete(0)));
142 pipeBuilder.AddWire(SecWire);
144 pipeBuilder.AddWire(TopoDS::Wire(raccord->
get_arete(1)));
146 pipeBuilder.SetSmoothing(Standard_True);
162 TopTools_IndexedMapOfShape MapArretes;
163 TopExp::MapShapes(S,TopAbs_EDGE,MapArretes);
164 std::vector<TopoDS_Edge> LstArretes;
166 for(
int i=1;i<=MapArretes.Size();i++)
168 double precision=1.0e-6;
169 TopoDS_Edge Arrete=TopoDS::Edge(MapArretes.FindKey(i));
171 TopExp::Vertices(Arrete,S1,S2);
172 gp_Pnt P1=BRep_Tool::Pnt(S1);
173 gp_Pnt P2=BRep_Tool::Pnt(S2);
174 double P1Coord[3]={P1.X(),P1.Y(),P1.Z()};
175 double P2Coord[3]={P2.X(),P2.Y(),P2.Z()};
181 if(((dist1<precision)&&(dist2>precision))||((dist1>precision)&&(dist2<precision)))
183 LstArretes.push_back(Arrete);
190 std::vector<TopoDS_Wire> LstContours;
193 TopoDS_Edge Arrete=LstArretes.front();
194 BRepBuilderAPI_MakeWire ContourConst(Arrete);
195 LstArretes.erase(LstArretes.begin());
196 TopoDS_Vertex Sommet;
201 for(i=0;i<LstArretes.size();i++)
203 if(TopExp::CommonVertex(LstArretes[i],Arrete,Sommet))
205 Arrete=LstArretes[i];
206 ContourConst.Add(Arrete);
207 LstArretes.erase(LstArretes.begin()+i);
210 if((i==LstArretes.size())||LstArretes.size()==0)
212 LstContours.push_back(ContourConst.Wire());
218 while(LstArretes.size()!=0);
221 TopTools_IndexedDataMapOfShapeListOfShape anEFsMap;
222 TopExp::MapShapesAndAncestors(S,TopAbs_EDGE,TopAbs_FACE,anEFsMap);
223 for(
int i=0;i<LstContours.size();i++)
225 BRepOffsetAPI_MakeFilling Remplir;
226 for(TopExp_Explorer anEdgeExplorer(LstContours[i],TopAbs_EDGE);anEdgeExplorer.More();anEdgeExplorer.Next())
228 TopoDS_Edge Arete=TopoDS::Edge(anEdgeExplorer.Current());
229 Remplir.Add(Arete,TopoDS::Face((anEFsMap.FindFromKey(Arete)).First()),GeomAbs_C0,Standard_True);
232 TopoDS_Face Face=TopoDS::Face(Remplir.Shape());
281 BRepBuilderAPI_Sewing ShellMaker;
287 ShellMaker.Perform();
299 BRepOffsetAPI_ThruSections BranBuilder(Standard_False,Standard_False,tol);
300 BranBuilder.CheckCompatibility(Standard_True);
301 BranBuilder.SetSmoothing(Standard_False);
302 BranBuilder.SetContinuity(GeomAbs_C2);
309 BRepBuilderAPI_MakeWire ContourConst;
311 ContourConst.Add(TopoDS::Edge(Interf1->
get_arete(k)));
312 BranBuilder.AddWire(ContourConst.Wire());
318 for(
int j=1;j<
LstBranches[i]->get_nb_sections2()-1;j++)
320 std::vector<MG_NOEUD*> section=
LstBranches[i]->get_section2(j);
322 TopoDS_Wire SecWire=BRepBuilderAPI_MakeWire(SecEdge);
323 BranBuilder.AddWire(SecWire);
327 if(
LstBranches[i]->get_branche().back()->get_nb_reference()==1)
330 std::vector<MG_NOEUD*> section=
LstBranches[i]->get_section2(j);
332 TopoDS_Wire SecWire=BRepBuilderAPI_MakeWire(SecEdge);
333 BranBuilder.AddWire(SecWire);
335 TopoDS_Shape BranSolid=BranBuilder.Shape();
337 TopoDS_Compound Comp;
341 TopoDS_Face Face=BRepBuilderAPI_MakeFace(SecWire);
353 BRepBuilderAPI_MakeWire ContourConst;
355 ContourConst.Add(TopoDS::Edge(Interf2->
get_arete(k)));
356 BranBuilder.AddWire(ContourConst.Wire());
361 TopoDS_Shape BranSolid=BranBuilder.Shape();
383 Handle(TColgp_HArray1OfPnt) PtsSec=
new TColgp_HArray1OfPnt(1,section->size());
384 for(
int j=0;j<section->size();j++)
385 PtsSec->SetValue(j+1,gp_Pnt((*section)[j]->get_x(),
386 (*section)[j]->get_y(),
387 (*section)[j]->get_z()));
388 GeomAPI_Interpolate InterpSec(PtsSec,CourbeFermee,tol);
390 Handle(Geom_BSplineCurve) SecCurve=InterpSec.Curve();
391 TopoDS_Edge SecEdge=BRepBuilderAPI_MakeEdge(SecCurve);
399 std::vector<MG_NOEUD*> PtsRef;
400 PtsRef.push_back(Guide.front());
401 if(NbPts<3) PtsRef.push_back(Guide.back());
405 for(
int i=0;i<Guide.size()-1;i++)
408 Longueur+=
V.get_longueur();
411 for(
int i=0;i<NbPts-2;i++)
417 dist+=
V.get_longueur();
420 while(dist<Longueur/(NbPts-1));
421 PtsRef.push_back(Guide[j]);
423 PtsRef.push_back(Guide.back());
432 BRepBuilderAPI_Sewing ShellMaker;
435 TopoDS_Shape JoncSolid=
LstJonctions[i]->get_joncsolid();
436 for(TopExp_Explorer aFaceExplorer(JoncSolid,TopAbs_FACE);aFaceExplorer.More();aFaceExplorer.Next())
438 TopoDS_Face aFace=TopoDS::Face(aFaceExplorer.Current());
439 ShellMaker.Add(aFace);
444 TopoDS_Shape BranSolid=
LstBranches[i]->get_branche_solide();
445 for(TopExp_Explorer aFaceExplorer(BranSolid,TopAbs_FACE);aFaceExplorer.More();aFaceExplorer.Next())
447 TopoDS_Face aFace=TopoDS::Face(aFaceExplorer.Current());
448 ShellMaker.Add(aFace);
452 ShellMaker.Perform();
453 TopoDS_Shape Shells=ShellMaker.SewedShape();
454 for(TopExp_Explorer aShellExplorer(Shells,TopAbs_SHELL);aShellExplorer.More();aShellExplorer.Next())
455 if(aShellExplorer.Current().ShapeType()==TopAbs_SHELL)
457 TopoDS_Shell aShell=TopoDS::Shell(aShellExplorer.Current());
458 BRepBuilderAPI_MakeSolid solidmaker;
459 solidmaker.Add(aShell);
481 BRepTools::Write(
Res,
"solide.brep");