2011/11/30 Thomas Paviot <tpav...@gmail.com> > 2011/11/30 Jayesh Salvi <jayeshsa...@gmail.com> > >> Thomas, >> >> Is there a way to do this other way around? i.e. if I have mesh >> information how do I convert it to Solid. >> > > I think we should have a look at the STL Importer implemented in OCC. They > actually convert mesh information into solids. > > >> I think that's what Chris was asking too. I've tried to do it >> (here<https://gist.github.com/1351019>), >> but the solids I create do not behave correctly in subsequent boolean >> operations on them. >> >> Any hint will be appreciated. Thanks. >> -- >> Jayesh >> >> > Thomas > > Attached below a snippet of the OCC code from STL_Reader.cxx. The algorithm for mesh to TopoDS_Shape conversion can be ported to python.
Thomas === void StlAPI_Reader::Read(TopoDS_Shape& aShape, const Standard_CString aFileName) { OSD_Path aFile(aFileName); Handle(StlMesh_Mesh) aSTLMesh = RWStl::ReadFile(aFile); Standard_Integer NumberDomains = aSTLMesh->NbDomains(); Standard_Integer iND; gp_XYZ p1, p2, p3; TopoDS_Vertex Vertex1, Vertex2, Vertex3; TopoDS_Face AktFace; TopoDS_Wire AktWire; BRepBuilderAPI_Sewing aSewingTool; Standard_Real x1, y1, z1; Standard_Real x2, y2, z2; Standard_Real x3, y3, z3; aSewingTool.Init(1.0e-06,Standard_True); TopoDS_Compound aComp; BRep_Builder BuildTool; BuildTool.MakeCompound( aComp ); StlMesh_MeshExplorer aMExp (aSTLMesh); for (iND=1;iND<=NumberDomains;iND++) { for (aMExp.InitTriangle (iND); aMExp.MoreTriangle (); aMExp.NextTriangle ()) { aMExp.TriangleVertices (x1,y1,z1,x2,y2,z2,x3,y3,z3); p1.SetCoord(x1,y1,z1); p2.SetCoord(x2,y2,z2); p3.SetCoord(x3,y3,z3); if ((!(p1.IsEqual(p2,0.0))) && (!(p1.IsEqual(p3,0.0)))) { Vertex1 = BRepBuilderAPI_MakeVertex(p1); Vertex2 = BRepBuilderAPI_MakeVertex(p2); Vertex3 = BRepBuilderAPI_MakeVertex(p3); AktWire = BRepBuilderAPI_MakePolygon( Vertex1, Vertex2, Vertex3, Standard_True); if( !AktWire.IsNull()) { AktFace = BRepBuilderAPI_MakeFace( AktWire); if(!AktFace.IsNull()) BuildTool.Add( aComp, AktFace ); } } } } aSTLMesh->Clear(); aSewingTool.Load( aComp ); aSewingTool.Perform(); aShape = aSewingTool.SewedShape(); if ( aShape.IsNull() ) aShape = aComp; }
_______________________________________________ Pythonocc-users mailing list Pythonocc-users@gna.org https://mail.gna.org/listinfo/pythonocc-users