MoI discussion forum
MoI discussion forum

Full Version: ArcCAM

Show messages:  1-20  21-40  41-60  61-73

From: probotix
18 Sep   [#1]
I have started a new project for gcode generation out of Moi3D. Right now I can export simple paths that work on my Haas machining centers. Every CAM software I have ever used spits out dirty gcode. My goal is to create a plug-in that exports clean simple code that makes use of the machines advanced g-code functions, for example exporting G2 and G3 arcs instead of a bunch of tiny line segments, letting the machine manage tool diameters, and using the built-in pocketing operations.

https://github.com/probotix/ArcCAM/

Let me know if anyone is interested in contributing.
From: probotix
19 Sep   [#2] In reply to [#1]
Hoping you can help. I keep running into arcs that do not report as arcs. See the image and file attached here.


Attachments:
x.3dm

Image Attachments:
no_arc.jpg 


From: Michael Gibson
19 Sep   [#3] In reply to [#2]
Hi probotix, it's not reporting as an arc because it isn't an exact arc.

It's a general curve that is shaped similar to an arc but is about 0.02 units off from being an exact arc.

If you draw an arc from 3 points over top of it you can zoom in a little and see where they aren't matching.

How was it created?

- Michael
From: probotix
19 Sep   [#4] In reply to [#3]
I created it by drawing a circle and trimming it with some temporary construction lines.

BTW - I now have Moi working on LinuxCNC 2.9.2 using Wine.
From: Michael Gibson
19 Sep   [#5] In reply to [#4]
Do you have an older version with the circle before trimming?

Are you sure it didn't come from a PDF import perhaps?

- Michael
From: probotix
19 Sep   [#6] In reply to [#3]
I fixed the first arc, but there are two more that are giving me problems. Attached again. I drew circles over them to confirm they were arcs.

Thanks!


Attachments:
x2.3dm

Image Attachments:
no_arc2.jpg 


From: Michael Gibson
19 Sep   [#7] In reply to [#6]
Hi probotix, what version of MoI are you using?

The one on the left is registering as an arc:


The one on top is similar to the first one, it's a general curve that is about 0.001 units off from an exact arc. So it's pretty close but not quite enough for MoI to consider it an arc.

- Michael

Image Attachments:
arc1.png 


From: stefano (LIGHTWAVE)
19 Sep   [#8] In reply to [#7]

Sounds like an interesting project maybe for specific use cases - I always liked cutting out software in the cad to CNC mix - example I really like the laser driver I have for my pretty high end / decent co2 American laser which goes straight from Coreldraw…

I also have two industrial engraving machines but don’t use them much or almost never - I could maybe contribute by trying to get my head round how they operate some day and seeing if your script output could eventually be pasted from moi or a text file straight into Mach 3…

My process for running one of those machines was coreldraw (.eps) or (.dxf) > Vectric VCarve > Mach 3

My other machine was not retrofitted has a legacy controller box and uses “engrave lab” software / dongle.

You should have a look at Vectric if you don’t already know it - does tool paths - has a visualiser and works pretty intuitively. I doubt that gives bad gcode because you can help or tweak it with your own post processor tweaks I think.

Some Vectric forum posts and HAAS arcs mentioned on one of them I believe…

https://www.google.com/search?q=vectric%20haas%20post%20processor&ie=utf-8&oe=utf-8&client=firefox-b-m

Vectric website:
https://www.vectric.com/


From: probotix
19 Sep   [#9] In reply to [#7]
I'm using the latest beta July 30 2024.

I have noticed some issues in the past where snapping seems to accumulate rounding errors, or so it seems.

I've gotten my test curve mostly straightened out. One thing I had to do that took me a couple of days to figure out was how to identify whether can arc was clockwise or counterclockwise. I figured out how to do it by calculating the arc angle. Here is my logic:


function find_angle2(p0,p1,c) {
return Math.atan2(p0.y - c.y, p0.x - c.x) - Math.atan2(p1.y - c.y, p1.x - c.x);
}

function isClockwise( angle )
{
var pi = Math.PI;
if ( angle == 0 || angle == pi )
return 0;
else if ( angle > 0 && angle < pi )
return 1;
else if ( angle> pi )
return -1;
else if ( angle < 0 && angle> (pi * -1))
return -1;
else if ( angle < (pi * -1))
return 1;
}

var arcAngle2 = round(find_angle2( segment.getStartPt(), segment.getEndPt(), segment.conicFrame.origin),1);

Problem is that when I have an exact half circle, the arc angle is 1pi and I havent figured out how to identify clockwise or counterclockwise. Any ideas?

Also, is there a way (I could not find a script) to explicitly set the start point of a curve?

>Len
From: probotix
19 Sep   [#10] In reply to [#8]
Thanks for your feedback, stefano. I guess I should have given a little more background. My business is building CNC machines. We use LinuxCNC software, and I have modified it extensively to suit our needs. We are about to release a LinuxCNC touchscreen that runs on an embedded Raspberry Pi5. And BTW Mach3 uses the open source core gcode processor from the LinuxCNC project, so anything that runs on Mach3 would also run on LinuxCNC.

I am a Vectric dealer, and while I ackowledge that their software is by far the easiest to use CAM software out there, the gcode it spits out is bloated to say it nicely. For example, it will break any arc that is not a multiple of 90 degrees into segments. It also does not do canned cycles, so just doing a peck drill operation it generates a line for every plunge, and every retract, when you can do that in a single line of code with a canned cycle.

I am also a Fusion360 partner and its probably the best CAM software out there, but it still has its issues and it requires you to either import a mesh, or build your model in their parametric modeler. I can model so much faster in Moi. And parametric modelers stifle creativity with its bloat. So I am eager to keep my workflow inside of Moi as much as possible.

The purpose of this project is to make use of the simple arcs that most mechanical parts are designed with, canned cycles, and built-in pocketing operations that controls like the Haas can do. Anything beyond that is extra. It looks like Michael has done a good job of building an API that will require this to sit outside of the core of Moi.

>Len
From: probotix
19 Sep   [#11] In reply to [#5]
>> Do you have an older version with the circle before trimming?

I dont think I do. I do import EPS files from Corel sometimes, but I almost always redraw everything in Moi. But I also cant say for sure that is what happened here. Now that I know what to look for, I'll be more careful in the future. I am a purist and dont like things out of order even if I am the only who can see them. ;-)

Also, the main reason I ever have to work in Corel is to create 2D dimensioned drawings to hand code my gcode off of, which hopefully this project will eliminate.

>Len
From: stefano (LIGHTWAVE)
19 Sep   [#12] In reply to [#10]
Hi Len, frankly I sense your probably onto a total winner - lots of machines with totally naff controllers and dubious software thrown into the workflow mix.

Part of reason I don’t use the two engraving machines is because there is too much friction to get output and I’m typically too busy to sit there trying to remember “how”.

also most of my jobs are bit specialist so I goto suppliers who are more like ‘associates” they have serious machines. Like 3kw fibre lasers and very expensive CNC stone and marble machines and waterjets.

It’s hilarious to see how some of these factories with expensive machines are still using retro cad-cam software and a few “operators” have issues reading dxfs unless a certain type of flavour. I guess us moi users can just walk in with a USB key and show them ;0)

Where are you based ?

UK (currently) here…
From: probotix
19 Sep   [#13] In reply to [#12]
>> Where are you based ?

We are in Fort Walton Beach, Florida... the good part of Florida. ;-)

>Len
From: stefano (LIGHTWAVE)
19 Sep   [#14] In reply to [#13]
Wasn’t aware of that side of Florida Looks like a nice place to build machines and go surfing sometimes.

Curious what version of coreldraw you use ?

From: Michael Gibson
19 Sep   [#15] In reply to [#9]
Hi probotix,

re:
> One thing I had to do that took me a couple of days to figure out was how to
> identify whether can arc was clockwise or counterclockwise.

If you get 3 distinct points on the arc (on a circle don't get start/mid/end because start and end are the same), you can then calculate the signed area of the 2D triangle which will be negative for clockwise order, positive for counter-clockwise.

Script code for calculating this is here:
http://moi3d.com/forum/index.php?webtag=MOI&msg=11521.42


re:
> Also, is there a way (I could not find a script) to explicitly set the start point of a curve?

Do you mean only moving just the start control point which will mutate the shape of the curve?

Or do you mean moving the whole curve keeping its shape but positioning it so that it's start point is at the given point?

- Michael
From: probotix
19 Sep   [#16] In reply to [#15]
I mean on a closed curve (polyline, poly-line-arc), being able to set the start point to any point I pick. I can already use OrderCurves to change the direction, but I want to be able to set the start point as well.

>Len
From: Michael Gibson
19 Sep   [#17] In reply to [#16]
Hi Len,

re:
> I mean on a closed curve (polyline, poly-line-arc), being able to set
> the start point to any point I pick.

Do you mean like this ChangeClosedCurveSeam script:
http://moi3d.com/forum/index.php?webtag=MOI&msg=10125.8

- Michael
From: probotix
19 Sep   [#18] In reply to [#17]
Looks like that does what I need. Thanks!

>Len
From: probotix
19 Sep   [#19] In reply to [#17]
Couple of other questions...

How can I access object user text? Can it be set for individual segments?

Is there a moi.filesystem.setSavePath to choose directory to save files in if I want to have the user enter the file name in a text dialog? This would enable creating multiple files from multiple curves in a single operation, and it would make it easier for the user to specify the filenames that get embedded into the text of the gcode files of certain controls systems, ie Haas.

>Len
From: Michael Gibson
19 Sep   [#20] In reply to [#19]
Hi Len,

re:
> How can I access object user text?

From the UI it's under Details... > Object user text.

From script:

.setUserText( Key, Value ); - Set text value for given key.
.getUserText( Key ); - Returns text value for given key, or undefined if not present.
.removeUserText( Key ); - Remove user text value for given key.
.getAllUserText(); - Return list of all user text, each object has .key and .value properties.
.clearAllUserText(); - Clear all object user text.


> Can it be set for individual segments?

No, not really. You can set it on a segment but it won't show up in the UI and it won't get persisted. It's meant to go on the curve.


> Is there a moi.filesystem.setSavePath to choose directory to save files in if I want to have
> the user enter the file name in a text dialog?

There's moi.filesystem.getSaveFileName() if you want to get a file name from the user, like this:
var filename = moi.filesystem.getSaveFileName( 'Text file name', 'Text files (*.txt)|*.txt' );

If you want to get a directory name from the user instead of a file name, in v5 there is moi.filesystem.getDirName(),like this:
var dir = moi.filesystem.getDirName( 'Dialog caption', 'c:\\initpath' );
returns empty string if canceled.

- Michael

Show messages:  1-20  21-40  41-60  61-73