MAGiC  V5.0
Mailleurs Automatiques de Géometries intégrés à la Cao
rec_solide_opt.cpp
Aller à la documentation de ce fichier.
1 //####//------------------------------------------------------------
2 //####//------------------------------------------------------------
3 //####// MAGiC
4 //####// Jean Christophe Cuilliere et Vincent FRANCOIS
5 //####// Departement de Genie Mecanique - UQTR
6 //####//------------------------------------------------------------
7 //####// MAGIC est un projet de recherche de l equipe ERICCA
8 //####// du departement de genie mecanique de l Universite du Quebec a Trois Rivieres
9 //####// http://www.uqtr.ca/ericca
10 //####// http://www.uqtr.ca/
11 //####//------------------------------------------------------------
12 //####//------------------------------------------------------------
13 //####//
14 //####// rec_solide_opt.cpp
15 //####//
16 //####//------------------------------------------------------------
17 //####//------------------------------------------------------------
18 //####// COPYRIGHT 2000-2024
19 //####// jeu 13 jun 2024 11:58:56 EDT
20 //####//------------------------------------------------------------
21 //####//------------------------------------------------------------
22 #include "rec_solide_opt.h"
23 
25 {
26  LstBranches=sq_opt->getLstBranches();
27  LstJonctions=sq_opt->getLstJonctions();
28  Builder.MakeCompound(Res);
29 }
30 
31 
32 
34 {
35 }
36 
37 
38 
40 {
41  double tol=1e-6;
42  //1) Reconstruction des interfaces
43  for(int i=0;i<LstJonctions.size();i++)
44  for(int j=0;j<LstJonctions[i]->get_nb_interfaces();j++)
45  {
46  SQ_INTERFACE* interf=LstJonctions[i]->get_interface(j);
47  for(int k=0;k<interf->get_nb_sections();k++)
48  {
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(),
53  section[l]->get_y(),
54  section[l]->get_z()));
55  GeomAPI_Interpolate InterpSec(PtsSec,Standard_False,tol);
56  //Calcul des tangentes
57  int kPrec;
58  int kSuiv;
59  if(k==0)
60  {
61  kPrec=interf->get_nb_sections()-1;
62  kSuiv=1;
63  }
64  else
65  if(k==interf->get_nb_sections()-1)
66  {
67  kPrec=k-1;
68  kSuiv=0;
69  }
70  else
71  {
72  kPrec=k-1;
73  kSuiv=k+1;
74  }
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());
79  V1.norme();
80  V2.norme();
81  gp_Vec T1(gp_XYZ(V1.get_x(),V1.get_y(),V1.get_z()));
82  gp_Vec T2(gp_XYZ(V2.get_x(),V2.get_y(),V2.get_z()));
83  InterpSec.Load(T1,T2,Standard_False);
84 
85  InterpSec.Perform();
86  Handle(Geom_BSplineCurve) SecCurve=InterpSec.Curve();
87  //Affichage des propriétés des courbes B-splines générées
88  /*int deg=SecCurve->Degree();
89  int num_poles=SecCurve->NbPoles();
90  TColStd_Array1OfReal KnotSequence=SecCurve->KnotSequence();
91  int num_knots=KnotSequence.Size(); //SecCurve->NbKnots();
92  cout<<"interf: ("<<"D="<<deg<<",P="<<num_poles<<",K="<<num_knots<<")"<<endl;*/
93  TopoDS_Edge SecEdge=BRepBuilderAPI_MakeEdge(SecCurve);
94  interf->ajouter_arete(SecEdge);
95  //Affectaction de l'arrête au raccord correspondant
96  for(int l=0;l<LstJonctions[i]->get_nb_raccords();l++)
97  {
98  SQ_RACCORD* raccord=LstJonctions[i]->get_raccord(l);
99  if(((raccord->get_interface1()==interf)&&(raccord->get_indice1()==k))||((raccord->get_interface2()==interf)&&(raccord->get_indice2()==k)))
100  {
101  TopoDS_Wire SecWire=BRepBuilderAPI_MakeWire(SecEdge);
102  raccord->ajouter_arete(SecWire);
103  //Builder.Add(Res,SecWire);
104  }
105  }
106  }
107  }
108 
109  //2) Reconstruction des raccords
110  for(int i=0;i<LstJonctions.size();i++)
112 
113  //3) Remplissage des creux
114  for(int i=0;i<LstJonctions.size();i++)
116 
117  //4) Reconstruction des jonctions
118  for(int i=0;i<LstJonctions.size();i++)
119  jonction_solide(i);
120 }
121 
122 
123 
125 {
126  double tol=1.0e-6;
127  for(int i=0;i<LstJonctions[NumJonc]->get_nb_raccords();i++)
128  {
129  SQ_RACCORD* raccord=LstJonctions[NumJonc]->get_raccord(i);
130  //a. Interpolation de la section intermédaire
131  std::vector<MG_NOEUD*> section=raccord->get_section_intermediaire();
132  TopoDS_Edge SecEdge=TopoDS::Edge(interpolation_points(&section,false,tol));
133  TopoDS_Wire SecWire=BRepBuilderAPI_MakeWire(SecEdge);
134 
135  //b. Génération de la surface de raccordement
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)));
141  //Builder.Add(Res,raccord->get_arete(0));
142  pipeBuilder.AddWire(SecWire);
143  //Builder.Add(Res,SecWire);
144  pipeBuilder.AddWire(TopoDS::Wire(raccord->get_arete(1)));
145  //Builder.Add(Res,raccord->get_arete(1));
146  pipeBuilder.SetSmoothing(Standard_True);
147  raccord->ajouter_surface_raccord(pipeBuilder.Shape());
148  }
149 }
150 
151 
152 
154 {
155 SQ_JONCTION* Jonc=LstJonctions[NumJonc];
156  //a) Fusion des raccords
157  TopoDS_Shape S=Jonc->get_raccord(0)->get_surface_raccord();
158  for(int i=1;i<Jonc->get_nb_raccords();i++)
159  S=BRepAlgoAPI_Fuse(S,Jonc->get_raccord(i)->get_surface_raccord());
160 
161  //c) Sélection des arêtes
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++)
167  {
168  double precision=1.0e-6;
169  TopoDS_Edge Arrete=TopoDS::Edge(MapArretes.FindKey(i));
170  TopoDS_Vertex S1,S2;
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()};
176  for(int k=0;k<Jonc->get_nb_interfaces();k++)
177  {
178  SQ_NOEUD* no=Jonc->get_interface(k)->get_no_central();
179  double dist1=Abs(algo.Dist3D_Point_Plan(no->get_normal_section().get_xyz(),no->get_coord(),P1Coord));
180  double dist2=Abs(algo.Dist3D_Point_Plan(no->get_normal_section().get_xyz(),no->get_coord(),P2Coord));
181  if(((dist1<precision)&&(dist2>precision))||((dist1>precision)&&(dist2<precision)))
182  {
183  LstArretes.push_back(Arrete);
184  break;
185  }
186  }
187  }
188 
189  //d) Formation des contours
190  std::vector<TopoDS_Wire> LstContours;
191  do
192  {
193  TopoDS_Edge Arrete=LstArretes.front();
194  BRepBuilderAPI_MakeWire ContourConst(Arrete);
195  LstArretes.erase(LstArretes.begin());
196  TopoDS_Vertex Sommet;
197  bool complete=false;
198  do
199  {
200  int i;
201  for(i=0;i<LstArretes.size();i++)
202 
203  if(TopExp::CommonVertex(LstArretes[i],Arrete,Sommet))
204  {
205  Arrete=LstArretes[i];
206  ContourConst.Add(Arrete);
207  LstArretes.erase(LstArretes.begin()+i);
208  break;
209  }
210  if((i==LstArretes.size())||LstArretes.size()==0)
211  {
212  LstContours.push_back(ContourConst.Wire());
213  complete=true;
214  }
215  }
216  while(!complete);
217  }
218  while(LstArretes.size()!=0);
219 
220  //e) Remplissage des contours
221  TopTools_IndexedDataMapOfShapeListOfShape anEFsMap;
222  TopExp::MapShapesAndAncestors(S,TopAbs_EDGE,TopAbs_FACE,anEFsMap);
223  for(int i=0;i<LstContours.size();i++)
224  {
225  BRepOffsetAPI_MakeFilling Remplir;
226  for(TopExp_Explorer anEdgeExplorer(LstContours[i],TopAbs_EDGE);anEdgeExplorer.More();anEdgeExplorer.Next())
227  {
228  TopoDS_Edge Arete=TopoDS::Edge(anEdgeExplorer.Current());
229  Remplir.Add(Arete,TopoDS::Face((anEFsMap.FindFromKey(Arete)).First()),GeomAbs_C0,Standard_True);
230  }
231  Remplir.Build();
232  TopoDS_Face Face=TopoDS::Face(Remplir.Shape());
233  Jonc->ajouter_remplissage(Face);
234  //Affichage des propriétés des surface B-splines générées
235  /*for(TopExp_Explorer aFaceExplorer(Remplir.Shape(),TopAbs_FACE);aFaceExplorer.More();aFaceExplorer.Next())
236  {
237  TopoDS_Face aFace=TopoDS::Face(aFaceExplorer.Current());
238  Handle(Geom_Surface) aSurface=BRep_Tool::Surface(aFace);
239  Handle(Geom_BSplineSurface) BSSurface=Handle(Geom_BSplineSurface)::DownCast(aSurface);
240  cout<<"Racc: {"<<"D=("<<BSSurface->UDegree()<<","<<BSSurface->VDegree()<<
241  "), P=("<<BSSurface->NbUPoles()<<","<<BSSurface->NbVPoles()<<
242  "), K=("<<BSSurface->NbUKnots()<<","<<BSSurface->NbUKnots()<<")}"<<endl;
243  break;
244  }*/
245  //Builder.Add(Res,Face);
246  }
247 
248 
249  //avec contrainte de tangence
250  /*Standard_Integer Degree=4;
251  Standard_Integer NbPtsOnCur=15;
252  Standard_Integer NbIter=2;
253  Standard_Boolean Anisotropie=Standard_False;
254  Standard_Real Tol2d=0.00001;
255  Standard_Real Tol3d=0.0001;
256  Standard_Real TolAng=0.01;
257  Standard_Real TolCurv=0.01;
258  Standard_Integer MaxDeg=8;
259  Standard_Integer MaxSegments=9;
260 
261  TopTools_IndexedDataMapOfShapeListOfShape anEFsMap;
262  TopExp::MapShapesAndAncestors(S,TopAbs_EDGE,TopAbs_FACE,anEFsMap);
263  for(int i=0;i<LstContours.size();i++)
264  {
265  BRepOffsetAPI_MakeFilling Remplir(Degree,NbPtsOnCur,NbIter,Anisotropie,Tol2d,Tol3d,TolAng,TolCurv,MaxDeg,MaxSegments);
266  for(TopExp_Explorer anEdgeExplorer(LstContours[i],TopAbs_EDGE);anEdgeExplorer.More();anEdgeExplorer.Next())
267  {
268  TopoDS_Edge Arete=TopoDS::Edge(anEdgeExplorer.Current());
269  Remplir.Add(Arete,TopoDS::Face((anEFsMap.FindFromKey(Arete)).First()),GeomAbs_C1,Standard_True);
270  }
271  Remplir.Build();
272  TopoDS_Face Face=TopoDS::Face(Remplir.Shape());
273  Jonc->ajouter_remplissage(Face);
274  }*/
275 }
276 
277 
278 
280 {
281  BRepBuilderAPI_Sewing ShellMaker;
282  SQ_JONCTION* Jonc=LstJonctions[NumJonc];
283  for(int j=0;j<Jonc->get_nb_raccords();j++)
284  ShellMaker.Add(Jonc->get_raccord(j)->get_surface_raccord());
285  for(int j=0;j<Jonc->get_nb_remplissages();j++)
286  ShellMaker.Add(Jonc->get_remplissage(j));
287  ShellMaker.Perform();
288  Jonc->change_joncsolid(ShellMaker.SewedShape());
289  //Builder.Add(Res,Jonc->get_joncsolid());
290 }
291 
292 
293 
295 {
296  double tol=1.0e-6;
297  for(int i=0;i<LstBranches.size();i++)
298  {
299  BRepOffsetAPI_ThruSections BranBuilder(Standard_False,Standard_False,tol);
300  BranBuilder.CheckCompatibility(Standard_True);
301  BranBuilder.SetSmoothing(Standard_False);
302  BranBuilder.SetContinuity(GeomAbs_C2);
303  SQ_JONCTION* Jonc1=LstBranches[i]->get_jonction1();
304  for(int j=0;j<Jonc1->get_nb_interfaces();j++)
305  {
306  SQ_INTERFACE* Interf1=Jonc1->get_interface(j);
307  if(Interf1->get_branche()==LstBranches[i])
308  {
309  BRepBuilderAPI_MakeWire ContourConst;
310  for(int k=0;k<Interf1->get_nb_aretes();k++)
311  ContourConst.Add(TopoDS::Edge(Interf1->get_arete(k)));
312  BranBuilder.AddWire(ContourConst.Wire());
313  //Builder.Add(Res,ContourConst.Wire());
314  break;
315  }
316  }
317 
318  for(int j=1;j<LstBranches[i]->get_nb_sections2()-1;j++)
319  {
320  std::vector<MG_NOEUD*> section=LstBranches[i]->get_section2(j);
321  TopoDS_Edge SecEdge=TopoDS::Edge(interpolation_points(&section,true,tol));
322  TopoDS_Wire SecWire=BRepBuilderAPI_MakeWire(SecEdge);
323  BranBuilder.AddWire(SecWire);
324  //Builder.Add(Res,SecWire);
325  }
326 
327  if(LstBranches[i]->get_branche().back()->get_nb_reference()==1)
328  {
329  int j=LstBranches[i]->get_nb_sections2()-1;
330  std::vector<MG_NOEUD*> section=LstBranches[i]->get_section2(j);
331  TopoDS_Edge SecEdge=TopoDS::Edge(interpolation_points(&section,true,tol));
332  TopoDS_Wire SecWire=BRepBuilderAPI_MakeWire(SecEdge);
333  BranBuilder.AddWire(SecWire);
334  //Builder.Add(Res,SecWire);
335  TopoDS_Shape BranSolid=BranBuilder.Shape();
336 
337  TopoDS_Compound Comp;
338  Builder.MakeCompound(Comp);
339  Builder.Add(Comp,BranSolid);
340  //fermeture de la branche
341  TopoDS_Face Face=BRepBuilderAPI_MakeFace(SecWire);
342  Builder.Add(Comp,Face);
343  LstBranches[i]->change_branche_solide(Comp);
344  }
345  else
346  {
347  SQ_JONCTION* Jonc2=LstBranches[i]->get_jonction2();
348  for(int j=0;j<Jonc2->get_nb_interfaces();j++)
349  {
350  SQ_INTERFACE* Interf2=Jonc2->get_interface(j);
351  if(Interf2->get_branche()==LstBranches[i])
352  {
353  BRepBuilderAPI_MakeWire ContourConst;
354  for(int k=0;k<Interf2->get_nb_aretes();k++)
355  ContourConst.Add(TopoDS::Edge(Interf2->get_arete(k)));
356  BranBuilder.AddWire(ContourConst.Wire());
357  //Builder.Add(Res,ContourConst.Wire());
358  break;
359  }
360  }
361  TopoDS_Shape BranSolid=BranBuilder.Shape();
362  LstBranches[i]->change_branche_solide(BranSolid);
363  }
364  //Affichage des propriétés des surface B-splines générées
365  /*for(TopExp_Explorer aFaceExplorer(LstBranches[i]->get_branche_solide(),TopAbs_FACE);aFaceExplorer.More();aFaceExplorer.Next())
366  {
367  TopoDS_Face aFace=TopoDS::Face(aFaceExplorer.Current());
368  Handle(Geom_Surface) aSurface=BRep_Tool::Surface(aFace);
369  Handle(Geom_BSplineSurface) BSSurface=Handle(Geom_BSplineSurface)::DownCast(aSurface);
370  cout<<"Bran: {"<<"D=("<<BSSurface->UDegree()<<","<<BSSurface->VDegree()<<
371  "), P=("<<BSSurface->NbUPoles()<<","<<BSSurface->NbVPoles()<<
372  "), K=("<<BSSurface->NbUKnots()<<","<<BSSurface->NbUKnots()<<")}"<<endl;
373  break;
374  }*/
375  //Builder.Add(Res,LstBranches[i]->get_branche_solide());
376  }
377 }
378 
379 
380 
381 TopoDS_Shape REC_SOLIDE_OPT::interpolation_points(std::vector<MG_NOEUD*>* section,bool CourbeFermee,double tol)
382 {
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);
389  InterpSec.Perform();
390  Handle(Geom_BSplineCurve) SecCurve=InterpSec.Curve();
391  TopoDS_Edge SecEdge=BRepBuilderAPI_MakeEdge(SecCurve);
392  return SecEdge;
393 }
394 
395 
396 
397 std::vector<MG_NOEUD*> REC_SOLIDE_OPT::get_pts_interp(std::vector<SQ_NOEUD*> Guide,int NbPts)
398 {
399  std::vector<MG_NOEUD*> PtsRef;
400  PtsRef.push_back(Guide.front());
401  if(NbPts<3) PtsRef.push_back(Guide.back());
402  else
403  {
404  double Longueur=0.;
405  for(int i=0;i<Guide.size()-1;i++)
406  {
407  OT_VECTEUR_3D V(Guide[i]->get_coord(),Guide[i+1]->get_coord());
408  Longueur+=V.get_longueur();
409  }
410  int j=0;
411  for(int i=0;i<NbPts-2;i++)
412  {
413  double dist=0.;
414  do
415  {
416  OT_VECTEUR_3D V(Guide[j]->get_coord(),Guide[j+1]->get_coord());
417  dist+=V.get_longueur();
418  j++;
419  }
420  while(dist<Longueur/(NbPts-1));
421  PtsRef.push_back(Guide[j]);
422  }
423  PtsRef.push_back(Guide.back());
424  }
425  return PtsRef;
426 }
427 
428 
429 
431 {
432  BRepBuilderAPI_Sewing ShellMaker;
433  for(int i=0;i<LstJonctions.size();i++)
434  {
435  TopoDS_Shape JoncSolid=LstJonctions[i]->get_joncsolid();
436  for(TopExp_Explorer aFaceExplorer(JoncSolid,TopAbs_FACE);aFaceExplorer.More();aFaceExplorer.Next())
437  {
438  TopoDS_Face aFace=TopoDS::Face(aFaceExplorer.Current());
439  ShellMaker.Add(aFace);
440  }
441  }
442  for(int i=0;i<LstBranches.size();i++)
443  {
444  TopoDS_Shape BranSolid=LstBranches[i]->get_branche_solide();
445  for(TopExp_Explorer aFaceExplorer(BranSolid,TopAbs_FACE);aFaceExplorer.More();aFaceExplorer.Next())
446  {
447  TopoDS_Face aFace=TopoDS::Face(aFaceExplorer.Current());
448  ShellMaker.Add(aFace);
449  }
450  }
451 
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)
456  {
457  TopoDS_Shell aShell=TopoDS::Shell(aShellExplorer.Current());
458  BRepBuilderAPI_MakeSolid solidmaker;
459  solidmaker.Add(aShell);
460  Builder.Add(Res,solidmaker.Solid());
461  }
462 }
463 
464 
465 
467 {
468  /*for(int i=0;i<LstBranches.size();i++)
469  Builder.Add(Res,LstBranches[i]->get_branche_solide());
470 
471  for(int i=0;i<LstJonctions.size();i++)
472  Builder.Add(Res,LstJonctions[i]->get_joncsolid());
473 
474  /*for(int i=0;i<LstJonctions.size();i++)
475  for(int j=0;j<LstJonctions[i]->get_nb_raccords();j++)
476  //if(j==2)
477  for(int k=0;k<LstJonctions[i]->get_raccord(j)->get_nb_aretes();k++)
478  Builder.Add(Res,LstJonctions[i]->get_raccord(j)->get_arete(k));*/
479 
480 
481  BRepTools::Write(Res,"solide.brep");
482 
483  /*STEPControl_Writer writer;
484  writer.Transfer(Res,STEPControl_ManifoldSolidBrep);
485  writer.Write("solide.stp");*/
486 }
REC_SOLIDE_OPT::LstJonctions
std::vector< SQ_JONCTION * > LstJonctions
Definition: rec_solide_opt.h:72
SQ_RACCORD::get_indice2
int get_indice2()
Definition: sq_raccord.cpp:79
REC_SOLIDE_OPT::REC_SOLIDE_OPT
REC_SOLIDE_OPT(REC_SQUELETTE_OPT *sq_opt)
Definition: rec_solide_opt.cpp:24
rec_solide_opt.h
SQ_NOEUD::get_normal_section
OT_VECTEUR_3D get_normal_section()
Definition: sq_noeud.cpp:57
REC_SOLIDE_OPT::enregistrement_resultat
void enregistrement_resultat()
Definition: rec_solide_opt.cpp:466
REC_SOLIDE_OPT::Res
TopoDS_Compound Res
Definition: rec_solide_opt.h:73
SQ_RACCORD::ajouter_arete
void ajouter_arete(TopoDS_Shape Arete)
Definition: sq_raccord.cpp:135
REC_SOLIDE_OPT::reconstruction_jonctions
void reconstruction_jonctions()
Definition: rec_solide_opt.cpp:39
REC_SOLIDE_OPT::fusion_solid
void fusion_solid()
Definition: rec_solide_opt.cpp:430
SQ_INTERFACE
Definition: sq_interface.h:27
SQ_RACCORD::get_surface_raccord
TopoDS_Shape get_surface_raccord()
Definition: sq_raccord.cpp:107
REC_SQUELETTE_OPT::getLstBranches
std::vector< SQ_BRANCHE * > getLstBranches()
Definition: rec_squelette_opt.cpp:1811
SQ_RACCORD
Definition: sq_raccord.h:27
SQ_INTERFACE::get_nb_aretes
int get_nb_aretes()
Definition: sq_interface.cpp:115
OT_VECTEUR_3D::get_x
virtual double get_x(void) const
Definition: ot_mathematique.cpp:417
SQ_RACCORD::get_interface1
SQ_INTERFACE * get_interface1()
Definition: sq_raccord.cpp:58
SQ_NOEUD
Definition: sq_noeud.h:28
SQ_RACCORD::get_interface2
SQ_INTERFACE * get_interface2()
Definition: sq_raccord.cpp:65
V2
bool V2(MCBody *_mcBody, MG_ELEMENT_TOPOLOGIQUE *topo)
Definition: CAD4FE_MCBody.cpp:804
SQ_JONCTION::get_nb_interfaces
int get_nb_interfaces()
Definition: sq_jonction.cpp:74
REC_SOLIDE_OPT::reconstruction_branches
void reconstruction_branches()
Definition: rec_solide_opt.cpp:294
REC_SOLIDE_OPT::jonction_solide
void jonction_solide(int NumJonc)
Definition: rec_solide_opt.cpp:279
SQ_JONCTION::get_nb_raccords
int get_nb_raccords()
Definition: sq_jonction.cpp:88
REC_SQUELETTE_OPT::getLstJonctions
std::vector< SQ_JONCTION * > getLstJonctions()
Definition: rec_squelette_opt.cpp:1818
SQ_INTERFACE::get_arete
TopoDS_Shape get_arete(int i)
Definition: sq_interface.cpp:108
SQ_JONCTION::ajouter_remplissage
void ajouter_remplissage(TopoDS_Shape remplissage)
Definition: sq_jonction.cpp:144
SQ_JONCTION::get_raccord
SQ_RACCORD * get_raccord(int i)
Definition: sq_jonction.cpp:81
SQ_JONCTION::get_nb_remplissages
int get_nb_remplissages()
Definition: sq_jonction.cpp:102
SQ_INTERFACE::get_no_central
SQ_NOEUD * get_no_central()
Definition: sq_interface.cpp:73
SQ_INTERFACE::get_nb_sections
int get_nb_sections()
Definition: sq_interface.cpp:101
SQ_RACCORD::ajouter_surface_raccord
void ajouter_surface_raccord(TopoDS_Shape SurfRacc)
Definition: sq_raccord.cpp:142
OT_VECTEUR_3D::get_xyz
virtual double * get_xyz(void)
Definition: ot_mathematique.cpp:449
REC_SOLIDE_OPT::get_pts_interp
std::vector< MG_NOEUD * > get_pts_interp(std::vector< SQ_NOEUD * > Guide, int NbPts)
Definition: rec_solide_opt.cpp:397
V
void V(MCAA *mcaa)
Definition: CAD4FE_MCAA.cpp:1794
MG_NOEUD::get_coord
virtual double * get_coord(void)
Definition: mg_noeud.cpp:92
REC_SOLIDE_OPT::interpolation_points
TopoDS_Shape interpolation_points(std::vector< MG_NOEUD * > *section, bool CourbeFermee, double tol)
Definition: rec_solide_opt.cpp:381
SQ_INTERFACE::get_section
std::vector< MG_NOEUD * > get_section(int i)
Definition: sq_interface.cpp:94
REC_SQUELETTE_OPT
Definition: rec_squelette_opt.h:32
OT_ALGORITHME_GEOMETRIQUE
Definition: ot_algorithme_geometrique.h:32
SQ_INTERFACE::ajouter_arete
void ajouter_arete(TopoDS_Shape Arete)
Definition: sq_interface.cpp:164
OT_VECTEUR_3D::norme
virtual void norme(void)
Definition: ot_mathematique.cpp:494
SQ_RACCORD::get_indice1
int get_indice1()
Definition: sq_raccord.cpp:72
OT_VECTEUR_3D::get_y
virtual double get_y(void) const
Definition: ot_mathematique.cpp:423
REC_SOLIDE_OPT::reconstruction_raccords
void reconstruction_raccords(int NumJonc)
Definition: rec_solide_opt.cpp:124
SQ_RACCORD::get_arete
TopoDS_Shape get_arete(int i)
Definition: sq_raccord.cpp:93
OT_VECTEUR_3D
Definition: ot_mathematique.h:94
SQ_JONCTION::get_interface
SQ_INTERFACE * get_interface(int i)
Definition: sq_jonction.cpp:67
SQ_JONCTION
Definition: sq_jonction.h:30
REC_SOLIDE_OPT::Builder
BRep_Builder Builder
Definition: rec_solide_opt.h:74
OT_VECTEUR_3D::get_z
virtual double get_z(void) const
Definition: ot_mathematique.cpp:429
OT_ALGORITHME_GEOMETRIQUE::Dist3D_Point_Plan
static double Dist3D_Point_Plan(double *norm, double *root, double *pnt)
Definition: ot_algorithme_geometrique.cpp:156
SQ_JONCTION::change_joncsolid
void change_joncsolid(TopoDS_Shape JoncSolid)
Definition: sq_jonction.cpp:151
REC_SOLIDE_OPT::LstBranches
std::vector< SQ_BRANCHE * > LstBranches
Definition: rec_solide_opt.h:71
SQ_RACCORD::get_section_intermediaire
std::vector< MG_NOEUD * > get_section_intermediaire()
Definition: sq_raccord.cpp:86
REC_SOLIDE_OPT::remplissage_creux
void remplissage_creux(int NumJonc)
Definition: rec_solide_opt.cpp:153
REC_SOLIDE_OPT::~REC_SOLIDE_OPT
~REC_SOLIDE_OPT()
Definition: rec_solide_opt.cpp:33
SQ_INTERFACE::get_branche
SQ_BRANCHE * get_branche()
Definition: sq_interface.cpp:65
SQ_JONCTION::get_remplissage
TopoDS_Shape get_remplissage(int i)
Definition: sq_jonction.cpp:95