Sweet! -----Original Message----- From: Thomas Paviot [mailto:[EMAIL PROTECTED] Sent: Sunday, October 12, 2008 7:38 AM To: Dave Cowden Cc: minerva-pythonocc@gna.org Subject: Re: [Minerva-pythonocc] pythonOCC Slicer Source...
Hello Dave, hello all, My plan for the next days is: - focus on fixing modeling issues identified by Dave (it's a "user need" development approach), - develop a set of customized class (i.e. not implemented in OCC) allowing 2D and 3D visualization from python (display with Tkinter and wxPython). Next release will then be able to "slice" a STEP or STL input file and show the result in a Tk or wx based app. Regards, Thomas Dave Cowden a écrit : > Hi, I figured I would post some source code that gives a feel for what > i'm working on: it is working C++ code , but demonstrates a bit more > of my approach thusfar. > > The code below loads a solid from a STEP file, prints out the > boundaries of the solid, and then sections the solid at a particular > zlevel. > It uses built-in OCC libraries to dump the shapes at various stages so > that I can use the Draw harness that coes with OCC to visualize the > results. > > The source below should compile against OCC v 6.3.0 > > >>>BEGIN SOURCE > // testOCC_console.cpp : Defines the entry point for the console > application. > // > > #include "stdafx.h" > #include "stdio.h" > #include "STEPControl_Reader.hxx" > #include <iostream> > #include <fstream> > #include <map> > #include "TopoDS_Shape.hxx" > #include "TopAbs_ShapeEnum.hxx" > #include "TopTools.hxx" > #include "Standard_OStream.hxx" > #include "StlAPI.hxx" > #include "StlAPI_Reader.hxx" > #include "BRepTools.hxx" > #include "gp.hxx" > #include "gp_Pln.hxx" > #include "gp_Pnt.hxx" > #include "gp_Ax1.hxx" > #include "gp_Ax2.hxx" > #include "gp_Ax3.hxx" > #include "BRepAlgo_Section.hxx" > #include "BRepAlgoAPI_Section.hxx" > #include "BRepAlgo_Cut.hxx" > #include "BRepAlgoAPI_Cut.hxx" > #include "BRepBndLib.hxx" > #include "BRepBuilderAPI_MakeFace.hxx" > #include "Bnd_Box.hxx" > #include "ShapeAnalysis_FreeBounds.hxx" > #include "TopTools_ListOfShape.hxx" > #include "BRepPrimAPI_MakeHalfSpace.hxx" > #include "TopoDS.hxx" > #include "TopoDS_Face.hxx" > #include "BRepBuilderAPI_Copy.hxx" > > using namespace std; > > int _tmain(int argc, _TCHAR* argv[]) > { > STEPControl_Reader r; > StlAPI_Reader stlReader; > > BRepTools bTools; > BRepBndLib bndLib; > Bnd_Box boundaries; > > > r.ReadFile("Test.STEP"); > int numItems= r.NbRootsForTransfer(); > int numTranslated = r.TransferRoots(); > > //TopoDS_Shape stlShape; > > //stlReader.Read(stlShape ,"Test.stl"); > TopoDS_Shape sh = r.OneShape(); > BRepBuilderAPI_Copy copier; > //find out the boundaries of the shapes > bndLib.Add(sh,boundaries); > > double xmin,xmax,ymin,ymax,zmin,zmax; > boundaries.Get(xmin,ymin,zmin,xmax,ymax,zmax); > > > cout << "Woo! " << numTranslated << " Shapes Read." << endl; > > printf("Boundaries: min[ %0.3f,%0.3f,%0.3f ] max [ > %0.3f,%0.3f,%0.3f ]", > xmin,ymin,zmin,xmax,ymax,zmax); > > > bTools.Write(sh,"Test.out"); > //bTools.Write(stlShape,"TestStl.out"); > > //make a cutting plane > gp_Pnt pnt (1,1,-12); > gp_Pnt pnt2 (0,0,0); > gp_Ax3 csys (pnt,gp().DZ() ); > gp_Pln cuttingPlane (csys ); > > //make a halfspace from the plane > > BRepBuilderAPI_MakeFace bff(cuttingPlane ); > > TopoDS_Face face = bff.Face(); > > BRepPrimAPI_MakeHalfSpace hs (face,pnt2); > hs.Build(); > > //calling halfSpace.Shape() does not work! > TopoDS_Shape halfSpace = hs.Solid(); > bTools.Write(face,"face.out"); > bTools.Write(sh,"original.out"); > bTools.Write(halfSpace,"halfspace.out"); > cout << "Made Cutting Face."; > > BRepAlgoAPI_Cut cut (sh,halfSpace); > cout << "Cut Completed" << endl; > cut.Build(); > TopoDS_Shape theCut = cut.Shape(); > //TopoDS_Shape section = cut.Shape(); > bTools.Write(theCut,"Section.out"); > > cout << "Write Completed" << endl; > //now try to join the sections into a wire > > return 0; > > } > >>>>>>END SOURCE > > On Fri, Oct 10, 2008 at 1:13 PM, Cowdens <[EMAIL PROTECTED] > <mailto:[EMAIL PROTECTED]>> wrote: > > Hi, yes its more like a STL slicer. In practice, though, I'm part of a > "splinter group" of repstrap folks, who are using conventional > 3-axis mills > and a RepRap extruder to make a rapid proto machine. > > In my case, I'm interested in creating G-code for the toolpaths, > because I > already have a 3-axis machine available that I'm converting to a > "RepStrap" > by adding an extruder in place of the spindle. > > I am happy to share my code-- I can believe anyone would do > otherwise, whos > using other people's OS code :) > > A RepStrap guy by the name of Enirque has built a python based > slicer for > STL, and my hope is to be able to integrate abililty to read step > and STL by > using pythonocc. His tool is fantastic-- but, it is (a) a bit > slow, and (b) > cannot handle bad STL, (c) cannot handle STEP, so I'm hoping to > fix that... > > > > -----Original Message----- > From: Jelle Feringa [mailto:[EMAIL PROTECTED] > <mailto:[EMAIL PROTECTED]>] > Sent: Friday, October 10, 2008 7:33 AM > To: Cowdens > Cc: minerva-pythonocc@gna.org <mailto:minerva-pythonocc@gna.org> > Subject: Re: [Minerva-pythonocc] pythonOCC 0.96 and STEP import > bug > > Dave, > > Let me thank you for sharing your code too, this is really a wonderful > contribution to this list. > I didnt get the notion of toolpath though, I thought you're builing > something closer related to a Stereolithography model slicer, than > NC / > G-code generation for CNC milling? > > Btw., the RepRap project rules ;') > > -jelle > > > ---------------------------------------------------------------------- > -- > > _______________________________________________ > Minerva-pythonocc mailing list > Minerva-pythonocc@gna.org > https://mail.gna.org/listinfo/minerva-pythonocc > _______________________________________________ Minerva-pythonocc mailing list Minerva-pythonocc@gna.org https://mail.gna.org/listinfo/minerva-pythonocc