29 #include <TopoDS_Shape.hxx>
31 #include <BRepPrimAPI_MakeBox.hxx>
32 #include <BRepAlgoAPI_BuilderAlgo.hxx>
33 #include <STEPCAFControl_Writer.hxx>
34 #include <BRepTools.hxx>
35 #include <BRepBuilderAPI_MakeVertex.hxx>
36 #include <BRepBuilderAPI_MakeEdge.hxx>
37 #include <BRepBuilderAPI_MakeWire.hxx>
38 #include <BRepBuilderAPI_MakeFace.hxx>
39 #include <BRepBuilderAPI_Sewing.hxx>
40 #include <BRepBuilderAPI_MakeSolid.hxx>
42 #include <TopTools_IndexedMapOfShape.hxx>
44 #include <BRep_Builder.hxx>
45 #include <BRepGProp.hxx>
46 #include <GProp_GProps.hxx>
47 #include <STEPControl_Writer.hxx>
56 TopTools_ListOfShape list_shell;
63 TopoDS_Shape boite = BRepPrimAPI_MakeBox(coin_min,coin_max).Shape();
65 BRepGProp::VolumeProperties(boite,vprops);
66 double volumeboite=vprops.Mass();
67 list_shell.Append(boite);
72 BRepBuilderAPI_Sewing sewing;
76 std::vector< TopoDS_Vertex > cell_vertex;
82 double x = noeud->
get_x();
83 double y = noeud->
get_y();
84 double z = noeud->
get_z();
86 TopoDS_Vertex vtx = BRepBuilderAPI_MakeVertex(pnt);
87 cell_vertex.push_back(vtx);
95 BRepBuilderAPI_MakeWire brep_wire;
115 TopoDS_Edge edge = BRepBuilderAPI_MakeEdge(vtx1,vtx2);
129 TopoDS_Edge lastedge = BRepBuilderAPI_MakeEdge(vtx1,vtx2);
130 brep_wire.Add(lastedge); passe=
true;
135 TopoDS_Wire Wire_face = brep_wire.Wire();
136 BRepBuilderAPI_MakeFace facemaker(Wire_face);
137 if (facemaker.IsDone())
139 const TopoDS_Face newFace = facemaker.Face();
145 else passeface=
false;
151 TopoDS_Shell shell = TopoDS::Shell(sewing.SewedShape());
152 BRepBuilderAPI_MakeSolid solidmaker(shell);
153 TopoDS_Solid solid = solidmaker.Solid();
155 list_shell.Append(shell);
159 sprintf(message,
" Nombre de cristaux OCC construits = %d",list_shell.Size()-1);
192 BRepAlgoAPI_BuilderAlgo fragments;
195 fragments.SetArguments(list_shell);
197 TopoDS_Shape resultat = fragments.Shape();
199 TopTools_IndexedMapOfShape map_TopoDS_Solid;
201 TopExp::MapShapes(resultat, TopAbs_SOLID,map_TopoDS_Solid);
207 BRep_Builder brep_builder;
208 TopoDS_Compound Compound;
209 brep_builder.MakeCompound(Compound);
210 double volumetotal=0.;
211 for(TopTools_IndexedMapOfShape::Iterator it_solid(map_TopoDS_Solid);it_solid.More();it_solid.Next())
214 BRepGProp::VolumeProperties(it_solid.Value(),vprops);
215 double volume=vprops.Mass();
216 if (volume<0.95*volumeboite)
219 brep_builder.Add(Compound,it_solid.Value());
220 volumetotal=volumetotal+volume;
223 sprintf(message,
" Volume des cristaux OCC assemblés = %lf",volumetotal);
226 BRepTools::Write(Compound,(
char*)
nomfichier.c_str());
230 STEPControl_Writer stepwriter;
231 stepwriter.Transfer(Compound,STEPControl_ManifoldSolidBrep);
233 stepwriter.Write(nomstep.c_str());