Thomas, I had the same idea, so I tried a shortcut method. I converted the mesh data of a simple cube into STL and tried to load it using STLReader API (of PythonOCC). I got NotDone failure, if I recall correctly. I will try to port the code snippet to python and see if that helps. -- Jayesh
On Wed, Nov 30, 2011 at 3:10 PM, Thomas Paviot <tpav...@gmail.com> wrote: > 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 > >
_______________________________________________ Pythonocc-users mailing list Pythonocc-users@gna.org https://mail.gna.org/listinfo/pythonocc-users