Nesting tool platform independent

More
15 Jul 2020 18:59 - 15 Jul 2020 19:25 #174766 by Grotius
Hi,

I have made a nesting interface in Java Netbeans :woohoo: based on textfile input and textfile output.
It can be implemented into Linuxcnc programs quite easy. But is also suitable for excel, python, c++, Inkscape, etc.
It depends on a java install. It works on every platform.

This is so far i can see the best opensource nesting algoritme. It can handle concave polygons. Recognize inner contours.
It's more advanged then the prusa nester wich can handle only convex polygons.

It's source algoritme : github.com/grotius-cnc/Nest4J (a deepnest.io clone with more interfacing).

How it works :

1. You have to provide a text input file, named "nest_in.txt".

- The file has a few setting parameters on top and contains contour points.
- The parameters can be placed at different places in the text file.

2. After input file is ready, you have to execute : "java -jar grotius_nest_interface.jar".

- This can be done easy by a script.

3. Output file is "nest.out.txt" + "ready.txt"
- The file ready is a trigger for linuxcnc when the nesting is completed and can be deleted by linuxcnc after nesting is loaded with succes.

4. On request i can provide a expanded interface providing the nesting contour coordinates.

Github source:
github.com/grotius-cnc/Nest4J

Terminal output:


Nest example:


User settings of file "nest_in":

binwidth 3050 //nest area x
binheight 2030
rotation 4 //0=no rotation, 4=full rotation
use_hole true //or false
population_size 10
mutation_rate 10
spacing 5 //part spacing
bid 0 //contour id nr.

If you have any questions, no problem.

Attached the zip file, containing :
grotius_nest_interface.jar
lib folder
nest_in.txt
nest_out.txt
ready.txt -> delete this one.
Attachments:
Last edit: 15 Jul 2020 19:25 by Grotius.
The following user(s) said Thank You: phillc54, Clive S, meister, elovalvo

Please Log in or Create an account to join the conversation.

More
15 Jul 2020 19:05 #174767 by Clive S
Just a quick question from a novice . Can it nest with spaces between the items?
The following user(s) said Thank You: Grotius

Please Log in or Create an account to join the conversation.

More
15 Jul 2020 19:14 - 15 Jul 2020 19:20 #174769 by Grotius
Yes Yes of course !!!

In the input file "nest_in.txt" you see :
binwidth 3050
binheight 2030
rotation 0
use_hole true
population_size 10
mutation_rate 10
spacing 5
bid 0
0.0 0.0
0.0 100.0
100.0 100.0
100.0 0.0
0.0 0.0
end

Here the spacing between parts is 5mm.
Rotation 0 is that parts may not rotate. Rotation 4 is full rotation parameter, see documentation at the above github link.

The java code is part of CadCam nesting.
Last edit: 15 Jul 2020 19:20 by Grotius.
The following user(s) said Thank You: tommylight, Clive S

Please Log in or Create an account to join the conversation.

More
16 Jul 2020 19:32 - 16 Jul 2020 19:51 #174883 by Grotius
Today did some test with the java nesting tool.
I am impressed. The calculation time was about 10-15 seconds.

Nesting input :


In the nesting output the plate is 3050x2030mm. See cyan colered line.
Items that not fit, are left untouched. This is a startpoint for a new plate nest routine.

Nesting output :


For the rotation parameter output, this is how to calculate the new contour coordinates, on github the information is giving wrong.
Its not rotating around the contour center, but rotating around 0,0.
//for every xy coordinate, translate + rotate :
//datas[i][3]=rotation angle from nest_out.txt
//it2->start.x=orginal input x
//it2->start.y=orginal input y
//xnew and ynew are rotated + translated, tested oke, see picture output.

double fangle=datas[i][3]*(M_PI/180); //std::cout<<"fangle: "<<fangle<<std::endl; //ok
double xnew=it2->start.x*cos(fangle)-it2->start.y*sin(fangle); //std::cout<<"xnew: "<<xnew<<std::endl;
double ynew=it2->start.x*sin(fangle)+it2->start.y*cos(fangle); //std::cout<<"ynew: "<<ynew<<std::endl;
xnew+=datas[i][1]; //std::cout<<"xnew + transx: "<<xnew<<std::endl;
ynew+=datas[i][2]; //std::cout<<"ynew + transy: "<<ynew<<std::endl;
it2->start.x=xnew;
it2->start.y=ynew;

For above example the nesting parameters in the file nest_in.txt are :
myfile << "binwidth 3050" <<std::endl; 
    myfile << "binheight 2050" <<std::endl;
    myfile << "rotation 4" <<std::endl;
    myfile << "use_hole false" <<std::endl;
    myfile << "population_size 10" <<std::endl;
    myfile << "mutation_rate 10" <<std::endl;
    myfile << "spacing 10" <<std::endl;

File input + file output included.
Attachments:
Last edit: 16 Jul 2020 19:51 by Grotius.
The following user(s) said Thank You: tommylight, v22884

Please Log in or Create an account to join the conversation.

More
02 May 2024 12:19 #299544 by v22884
VERY VERY GOOD TOOL!!
A lot of thanks. It work perfectly.

1) is it possible to set another coner?
2) is it possible to set number of iterrations or limit time to nest(for better nesting)?
3) is it possible to set "Optimization type" like in DeepNest?

Please Log in or Create an account to join the conversation.

More
02 May 2024 14:52 #299561 by elovalvo

Hi,

I have made a nesting interface in Java Netbeans :woohoo: based on textfile input and textfile output.
It can be implemented into Linuxcnc programs quite easy. But is also suitable for excel, python, c++, Inkscape, etc.
It depends on a java install. It works on every platform.

This is so far i can see the best opensource nesting algoritme. It can handle concave polygons. Recognize inner contours.
It's more advanged then the prusa nester wich can handle only convex polygons.

.......

Bravo!


what a surprise! I found myself in some topics I studied about 20 years ago

www.semanticscholar.org/paper/A-More-Eff...81d26ae4fae403151b74

Back then the tools were much less advanced than now and the available sources were few and far between.

I'm retired now, but the topic still interests me...

Please Log in or Create an account to join the conversation.

Moderators: Skullworks
Time to create page: 0.237 seconds
Powered by Kunena Forum