Non-Looped Contour/Edge Cutting?

Here's the place for discussion related to CAM/CNC and the development of the Path module.
User avatar
Posts: 450
Joined: Thu Oct 05, 2017 5:34 pm
Location: New Hampshire

Non-Looped Contour/Edge Cutting?

Postby JoshM » Tue Oct 10, 2017 6:57 pm

If I want to mill a complete contour, I can accomplish this in multiple ways in Path. I'm unable to figure out how to cut edges that are not in a loop though, and this is very limiting for practical CNC GCode generation. For example, if I wanted to mount a rectangular piece of stock and cut the ends to a given length, but I don't want to cut the edges because I'm using them to clamp the stock, the Profile-Edges/Faces options won't achieve my goal.

Also, I can't find any explanation for what the "From Shape" icon does. I did figure out the "From Area" icon was helpful for saving iterative/construction steps, allowing me to perform milling operations on them after further 3D modelling had altered them.

Posts: 1978
Joined: Mon Nov 03, 2014 3:45 pm
Location: Windsbach, Bavarya (Germany)

Re: Non-Looped Contour/Edge Cutting?

Postby herbk » Tue Oct 10, 2017 8:09 pm

Hi Josh,

In FC 0.16 (and early 0.17) it workd by selecting the side of the workpeace and click on "Profile based on face".
And i'm with you, - it would be good to have it back. :(
Gruß Herbert
Posts: 12
Joined: Wed Oct 04, 2017 12:06 pm

Re: Non-Looped Contour/Edge Cutting?

Postby JohnForeman » Tue Dec 19, 2017 9:27 pm

Were you able to find a solution to this issue?
I'm trying to do the same thing and I cannot get the profile on an open edge to work. The path profile for edge works fine if the edge is closed.

Here's what i'm getting from the Report View

Traceback (most recent call last):
File "E:\Downloads\FreeCad .17PRe\FreeCAD_0.17.12847_x64_dev_win\FreeCAD_0.17.12847_x64_dev_win\Mod\Path\PathScripts\", line 60, in new_function
res = function(*args, **kwargs)
File "E:\Downloads\FreeCad .17PRe\FreeCAD_0.17.12847_x64_dev_win\FreeCAD_0.17.12847_x64_dev_win\Mod\Path\PathScripts\", line 417, in execute
result = self.opExecute(obj)
File "E:\Downloads\FreeCad .17PRe\FreeCAD_0.17.12847_x64_dev_win\FreeCAD_0.17.12847_x64_dev_win\Mod\Path\PathScripts\", line 240, in opExecute
shapes = self.areaOpShapes(obj)
File "E:\Downloads\FreeCad .17PRe\FreeCAD_0.17.12847_x64_dev_win\FreeCAD_0.17.12847_x64_dev_win\Mod\Path\PathScripts\", line 92, in areaOpShapes
f = Part.makeFace(wire, 'Part::FaceMakerSimple')
<class 'Part.OCCError'>: BRep_API: command not done

My Build Info
OS: Windows 7
Word size of OS: 64-bit
Word size of FreeCAD: 64-bit
Version: 0.17.12847 (Git)
Build type: Release
Branch: master
Hash: 4034851a5d2ed5c93a8ebedbf0ef40dab8700d94
Python version: 2.7.8
Qt version: 4.8.7
Coin version: 4.0.0a
OCC version: 7.1.0
Locale: English/UnitedStates (en_US)
User avatar
Posts: 450
Joined: Thu Oct 05, 2017 5:34 pm
Location: New Hampshire

Re: Non-Looped Contour/Edge Cutting?

Postby JoshM » Wed Dec 20, 2017 5:22 pm

Hi John,
Short answer is no, from what I can tell, there is no existing way to perform a cut with Path that isn't a loop. I've been able to work around this for the Jobs I've done so far, but it does make things a bit more challenging. I've found that Custom-GCode is helpful and since Path-WB displays the paths you create with Custom-GCode, it's at least not a "Blind" job... In other cases, I've found looped paths that are non-ideal, but workable. In some cases, I have copied OPs that almost are correct, into Custom-GCode then modified the GCode to be more efficient.

Best Of Luck,
Posts: 1773
Joined: Sat Mar 19, 2016 3:36 pm
Location: Punta Gorda, FL

Re: Non-Looped Contour/Edge Cutting?

Postby GeneFC » Wed Dec 20, 2017 6:23 pm

JohnForeman wrote:
Tue Dec 19, 2017 9:27 pm
Were you able to find a solution to this issue?
This operation is not implemented, so the error messages merely state that fact in complex language.

This sort of path is often desirable; however, the definition and implementation might not be an straightforward as seems at first.

No path is ever "non-looped". Sooner or later the tool needs to return to the starting area. Otherwise it eventually runs off the end of the earth. :D

* Do you want the return path to be a zig-zag down the vertical face that is being processed, actively working in both directions?
* Do you want the tool to lift to the clearance height and then start another active pass?
* Do you want the tool to offset in the working plane and then return to the starting point for another pass?
* How far should the offset be?
* What about clamp clearance?
* Does the model "box" indicate full clearance from all obstructions.
* Do we need a horizontal clearance distance in addition to a vertical clearance distance?

All of these questions are solvable, of course, but the overall solution is probably more complex than a simple contour around a solid object.


Posts: 12
Joined: Wed Oct 04, 2017 12:06 pm

Re: Non-Looped Contour/Edge Cutting?

Postby JohnForeman » Wed Dec 20, 2017 6:51 pm

Josh and Gene,
thanks for the replies.
Gene, as for what i was looking for is something that i do with ease in a VERY old copy of BobCad. It's pretty simple with that software. I select the edges i want to profile, establish the approach method, set the depth of cut and the amount of passes to make. The gcode generated adds the clearance moves from the end of the pass back to the start of the path stepping down to the next level. Since my mill is small and i usually cant cut a complete profile, i use this method often. BobCad is still working for me, but one of these days that old WinXP desktop is not gonna boot up so i was looking for an alternative.
I may dig into the python code and see if i can hack something together to get me what i want. I'm not a python programmer but these days the languages seem to all work the same way..
If you have any tips that can get me pointed in the right direction i'm all ears.
User avatar
Posts: 450
Joined: Thu Oct 05, 2017 5:34 pm
Location: New Hampshire

Re: Non-Looped Contour/Edge Cutting?

Postby JoshM » Wed Dec 20, 2017 8:51 pm

At least for now, FreeCAD Path-WB has areas that are open to further development. That said, it sure is exciting to me seeing how quickly improvements roll out. One example of many is how Shai's Path-Simulation went from a discussion to an integrated reality in less than a month I think... At the moment, there is momentum towards releasing v17, and so there's a lot of tidying up and things do change in use as well at times, so the each time you upgrade, things may behave a bit differently.

For myself, I have had success in working around the few things that otherwise are difficult by adopting some strategies. One is to think about the limits of Path-WB from the ground up when developing my 3D model. There are often multiple otherwise equivalent ways to implement the 3D design, but--for example--in some cases, you leave useful edge-loops where in another implementation, this isn't true because the contour you need took a Z-change that isn't helpful.

There are also cases where slightly counter-intuitive approaches allow me to achieve results I wasn't otherwise able to implement. For example, in cases where I want to use a tool to face the top of material I am leaving--the top of a small cylinder or square, or such--but where the diameter of the Tool is too greater to fit inside the material being top-faced, I can define a Contour-OP based on the Face, with defined the Cut Side = OUTSIDE, but then adjust the Extra Offset Field to equal -r, where r=radius of your tool causes a cut along the edge of the Face, etc...

Also, don't get too caught up in precise equalities as FreeCAD is weak there. Specifically, what I mean is that modeling a PAD on top of another PAD where one or two of the edges are intended to be exactly touching the bottom PAD will often benefit by leaving a 0.001mm gap or such--practically, your machine won't know the difference, but it will often make Path-WB easier to work with. Same thing with defining exact diameter and allowances on your model relative to your Tool definition. In some cases defining a 6.35mm Diameter tool as 6.3499mm may fix things that should work but don't seem to.

Another thing I've found is to try different approaches--even when I wasn't aware it's allowed. Recently I selected the external Faces and found it allowed me to use these to define a contour cut. I think that used to be true, then wasn't, and now is again :D . It's in development, so give things a try.
Posts: 1842
Joined: Tue Jan 03, 2017 10:55 am

Re: Non-Looped Contour/Edge Cutting?

Postby realthunder » Thu Dec 21, 2017 12:37 am

This may give you some idea. You can think of FeatureArea as a mini-Part workbench, but mostly for doing boolean operation in 2D. The final generated the path is not optimal, because sorting with open path is kind of weak at the moment. It breaks the wire into edges before sorting. I probably should add an option to not break open wire. You can play around with ResumeThreshold property in the path feature to reduce rapid moves.

Script for the above operation, with one difference, that is, the script generates offset one at a time, so that you can maybe perform more customization.

Code: Select all

import Path
# offsetEdge is the edge/wire to be offseted
# cutFace is the face/wire to intersect the offset wires
# offset is the distance to offset
def genOffset(offsetEdge,cutFace,offset):
	offsetWire = Path.Area(Offset=offset, Fill=0).add(offsetEdge).getShape()
	# op=2 means Intersection, you can use other operations if you want
	return Path.Area(Coplanar=False,Explode=True).add(offsetWire).add(cutFace,op=2).getShape()

wires = []
for offset in [20,15,10,5]:

Update: I just found out a bug thanks to this post. It only affects open wire operation. I have submitted a PR for this. With this fix, the above steps or script shall give you an optimal path show as below
Screenshot from 2017-12-21 11-24-01.png
Screenshot from 2017-12-21 11-24-01.png (4.72 KiB) Viewed 1837 times
Try Assembly3 (latest version 0.11) along with my custom build of FreeCAD at here.
And if you'd like to show your support, you can donate through patreon, liberapay, or paypal
User avatar
Posts: 2073
Joined: Tue Oct 25, 2011 10:46 pm
Location: Columbia, Missouri

Re: Non-Looped Contour/Edge Cutting?

Postby sliptonic » Thu Dec 21, 2017 2:40 pm

This is a very cool technique. Thanks realthunder!

Besides the application described above, I think this is also applicable to the lathe operations I've been playing with (when I can find the time).

It might even be possible to pull off 4th axis stuff like this: Path wouldn't be able to correctly render a 4th axis path on the screen and I'm sure shais's simulation would have some trouble but it would still be very cool.

Fame and glory awaits the first person who generates a workable 4th axis surface operation in Path. ;)
User avatar
Posts: 1363
Joined: Tue Nov 27, 2018 10:30 pm

Re: Non-Looped Contour/Edge Cutting?

Postby freman » Wed Jun 19, 2019 6:50 am

I'm trying to do the same basic operation as Josh describes, end-facing a rectangular block of stock. I thought I was missing something but it seems not. Has there been any progress on a way to do this since the last post in 2017?

I did find a work around by "engraving" down the side of the block. Maybe I could also extend the model and put a 2mm pocket op. on the end of the part but it would be good to have a tool which can deal with a vertical face.

Maybe I'm missing a trick.
(17.34 KiB) Downloaded 24 times