Maybe the libarea code could be a good inspiration for a pythonOCC version. It might also be good to just show folks how it could be set up as is, until that version is ready.

One thing that I found with using the pure python Pycam code was that it became almost unusable from the standpoint of time. 20 to 30 minutes waiting for it to generate code was not a good thing. I usually run back and forth from my computer and the milling machine doing revisions.

Thanks,
Dan

On 2/12/10 8:40 AM, Dave Cowden wrote:
I understand and agree about porting to pure python. I think we'd probably want to avoid another library dependency, though. Thomas/Jelle what do you guys think? My assumption is that we want to avoid external dependencies, especially when OCC already has something similar.

I guess my hope/thought was that the algorithm itself could be ported, but that most of the heavy lifting it does is already available in OCC functions. For example offsetting curves, finding intersections, etc etc are already available, we might just have to make the algo more intelligent.

I'm also needing a bit more flexibilty because the toolpaths i need to create are not for a tool, they are for a rapid prototyping (additive ) machine. So for example, I dont actually want to do the entire pocket, i need to offset a few cuves and then create a sparse cross-hatching kind of thing....

My experience is in line with yours about pure python. There is already a tool called skeinforge that is pure python and converts STL files to gcode. It runs on the order of 1/2 hour on my laptop, and using pyOCC I can perform the same operation in under 1 minute.

But i love python for the glue code. That's probably why i'm here. OCC is a great library that's fast and expansive, but the python binding is perfect for custom tools and addins.

On Fri, Feb 12, 2010 at 11:31 AM, Dan Falck <dfa...@verizon.net <mailto:dfa...@verizon.net>> wrote:

    Hi Dave,

    I don't know what it would take to integrate it with pythonOCC,
    but it already has python bindings that are pretty
    straightforward. Somehow, I don't think you would want to convert
    the whole thing to python, since it would slow things down.  I
    have used it from HeeksCNC (it's intended application) and as a
    stand alone module on my Mac. I have done some CNC programming in
    which I just used the modules that Heeks came up with from the
    terminal and created some useful machining code. I think Dan Heeks
    did a good thing in making all the separate machining modules into
    individual projects. He has kurve -which is for simple profiling,
    libactp- adaptive roughing, libarea- pocketing, and then he
    adapted Pycam for surfacing. Pycam, being written in pure python
    is pretty slow at generating gcode.

    I think there is a test script included with the project that
should be pretty helpful in showing what input format it needs. You could probably just do something like 'import libarea' and use
    it from your application.

    Dan



    On 2/12/10 8:04 AM, Dave Cowden wrote:
    Hi Dan,

    Yes that logo looks like a fairly good test case. It has some
    very sharp small portions.

    What do you think the possibility would be to "pyOCC-size" that
    algorithm so that we can use it convieniently in conjunction with
    the OCC objects?

    IE, how difficult would it be to make a python version of the
    library that would operation on a wire object?  That'd save me
    some work.

    Last night i spent some time on a routine to convert an edge,
    wire, and gp_Pnt into code-- these were fairly easy, because I
    copped out and handled only edges that have lines as the curve.
     But with another few hours i should be able to handle curves of
    type circle and ellipse and convert them to G2/G3 ( which, by the
    way, is something very very few cam packages out there do today).

    After that, my next step would be the last one i need for my
    slicer-- to add 'convert a face to gcode'.  Doing this part would
    need the offset algorithm available...



    On Fri, Feb 12, 2010 at 10:10 AM, Dan Falck <dfa...@verizon.net
    <mailto:dfa...@verizon.net>> wrote:

        Hi Dave,

        I will try and attach a screenshot. I think that this lib
        does pretty well. I used it for pocketing this logo and was
        pretty pleased with the results. I haven't used it
        extensively, but so far so good.

        Thanks,
        Dan



        On 2/12/10 4:14 AM, Dave Cowden wrote:
        Hey, Dan:

        How well does this routine handle geometries for which
        offset curves self or boundary intersect?  pyOCC actually
        has a very easy to use tool to do the offsets, but it runs
        into trouble when the curves self-intersect-- essentially it
        just punts and throws an error.

        So, with pyOCC i think i'd have to manually offset each
        curve and then find the intersections, so that I can deal
        with what happens when the geometry is odd....

        On Thu, Feb 11, 2010 at 10:48 PM, Dan Falck
        <dfa...@verizon.net <mailto:dfa...@verizon.net>> wrote:

            Hi guys. Would a 'pocketing' routine like this help?:

            http://code.google.com/p/libarea/

            I use routines like this to mill away material, but you
            could also use it for filling.

            Dan


            On 2/11/10 8:34 AM, Dave Cowden wrote:
            Hi, Thomas, thanks!

            The target machine is a rapid prototyping (RP)
            machine-- RepRap.  Thus, the infill for a slice is not
            necessarily a 'machine all material away' path.
             Ultimately it still uses Gcode, but it is additive
            rather than subtractive. I use EMC for machine control.

            The ideal is actually to offset all of the wires on the
            face inwards to create a user-configured number of
            'shells' around the exterior boundaries, but then
            inside fill with a hatch pattern. For the offset I can
            use BRepOffsetAPI of course.

            The unusual variation that an RP machine has is that
            the interior hatching is ideally not uniform or 100%
            coverage.  Sometimes a honeycomb is desired, and other
            times, a 'sparse' hatch is desired to save material.

            I thought about looping over the surface parameters,
            but then again realized it would not create points
            along a uniform grid.

            Is there a function that will test whether a point is
            on the surface? Maybe it would be easiest to make my
            own discrete x-y- grid, and then simply test each point
            for membership on the surface.

            I'm quite excited about this project.  The main reason
            is that nearly the entire RP community ( including
            commercial ) still relies on STL files for production.
             This is a pain because it results in all toolpaths
            being little line segments. So for curves there end up
            being a billion little G01 moves.

            Using OCC represents the only way i know of to use STEP
            representations of solids, which when sliced still
            preserve the ability to generate Gcode arcs ( G02/G03
            ), which result in much smaller Gcode and much smoother
            motion than having all arcs represented by tiny line
            segments.  This would be the first tool that can
            prevent a triangulated approximation during the
            fabrication process.

            Thanks for the help!

            On Thu, Feb 11, 2010 at 11:16 AM, Jelle Feringa
            <jelleferi...@gmail.com
            <mailto:jelleferi...@gmail.com>> wrote:

                > I'm getting back to using pyOCC after a while.

                Welcome back Dave, we've missed you!

                > I am hoping someone can point me the right
                direction. After reading documentation and samples
                for a few hours, I'm still not sure where to start.
                >
                > Previously, I have written a slicing application
                ( samples--> slicer ), and I would like to continue
                that work.
                >
                > The next step is to create toolpaths that fill in
                the faces created from the slicing operation.

                Wow, so a g-code export?
                Have you seen pycam?

                >  There are a number of general approaches that
                could be used:  One is to use BRepOffset to offset
                the wires inwards.
                >
                > However, the approach I would rather take is to
                use a 'grid' approach, in which I first compute a
                grid of points on the face, and the fill them all
                in afterwards.  I feel like this approach will be
                more tolerant to degenerate geometry.

                Yes, dekskproto of delft spline systems has that
                algorithm for instance.

                > So, to my question:  I think looking at the SMESH
                sample, I could use smesh to generate a set of
                points on my surface that are spaced evenly.

                Or just loop through the U,V domain of a face?
                And than offset via the normal of the face?

                >  Looking at the sample I can see how to create
                the mesh, but I cannot see how to extract the
                points from the mesh.

                You could do something similar ( if you decide
                polysoup is the way to go ) to just look up the
                triangles that represent a surface ( we always look
                at triangles in OpenGL, you don't get to see the
                actual nurbs but just an approximation )

                > I am also unsure how to instruct the mesher to
                generate a grid that has a fixed space between the
                points in a particular plane.

                No way a mesher will generate equidistant points uh
                uh...

                >  In my case the face will always be a planar face
                in the x-y plane: what I want is an array of points
                at a fixed spacing that cover the surface.

                Right, abscissa points…
                So, what about dividing up the contours of your
                slicer by n-points or a distance?

                For what machine are you writing the slicer exactly?
                Do you need an offset ( like we need when milling )
                to the surface?

                Happy to see you back on this list ;')

                -jelle
                _______________________________________________
                Pythonocc-users mailing list
                Pythonocc-users@gna.org
                <mailto:Pythonocc-users@gna.org>
                https://mail.gna.org/listinfo/pythonocc-users



            _______________________________________________
            Pythonocc-users mailing list
            Pythonocc-users@gna.org  <mailto:Pythonocc-users@gna.org>
            https://mail.gna.org/listinfo/pythonocc-users

            _______________________________________________
            Pythonocc-users mailing list
            Pythonocc-users@gna.org <mailto:Pythonocc-users@gna.org>
            https://mail.gna.org/listinfo/pythonocc-users



        _______________________________________________
        Pythonocc-users mailing list
        Pythonocc-users@gna.org  <mailto:Pythonocc-users@gna.org>
        https://mail.gna.org/listinfo/pythonocc-users

        _______________________________________________
        Pythonocc-users mailing list
        Pythonocc-users@gna.org <mailto:Pythonocc-users@gna.org>
        https://mail.gna.org/listinfo/pythonocc-users



    _______________________________________________
    Pythonocc-users mailing list
    Pythonocc-users@gna.org  <mailto:Pythonocc-users@gna.org>
    https://mail.gna.org/listinfo/pythonocc-users

    _______________________________________________
    Pythonocc-users mailing list
    Pythonocc-users@gna.org <mailto: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

_______________________________________________
Pythonocc-users mailing list
Pythonocc-users@gna.org
https://mail.gna.org/listinfo/pythonocc-users

Reply via email to