haplokuon / netDxf

.net dxf Reader-Writer
MIT License
966 stars 392 forks source link

How to implement automatic layout algorithm? #469

Open jim-jiang-github opened 11 months ago

jim-jiang-github commented 11 months ago

I want to implement autolayout of multiple elements in dxf, does anyone know how to implement this algorithm? ?

DavidWishengrad commented 11 months ago

I did write something that found numbers in modelspace and found the closest rectangles on a no print layer to the numbers, and then made a list and then copied an existing layout, renamed it and open the copied viewport in paperspace in each new layout and automatically zoomed to the area using the pick option with the zoom command in acad to put the right no print rectangle in the center of the viewport (derived from the points I had already extracted), and zoom the viewport to scale based on its size and a hard coded list I had in the code for reference.

A. I am not at all sure if this is what you are asking about. Yeah, it's pretty nifty to run a piece of code on and have 100 new layouts get created and every single one of them set up correct, but that was acad coding in vba. Doing all of that in netDXF would be a stretch for me, but it would probably be a few magnitudes faster in netDXF. It took several minutes for acad to do the job.

B. You will probably get better answers if you take the time to make sure what you are asking is backed up with clearly defined questions and with examples of some kind.

jim-jiang-github commented 11 months ago

What I want is a typography like the one on the image, which can automatically arrange as many figures as possible on a canvas

d8b472e0b034f115fc4c7e74504c16e

Also, do you have an example or code for the'automatically zoomed to the area 'you mentioned? I just need this function too.

DavidWishengrad commented 11 months ago

Your image is called nesting and it is using a Boost c++ code implication of Minkowski's math.

I believe that program you are showing is code of one of the many csharp ports that use a wrapper to that Boost library. If you have that, then you should already have its source code.

I do not have any personal code to do that. I personally use Deepnest.io from time to time.

That code I have that does the layouts is VBA for acad and not c# and I already explained how it does it. If you want me to post that code anyway I will, but I don't think it will help you much.

jim-jiang-github commented 11 months ago

Your image is called nesting and it is using a Boost c++ code implication of Minkowski's math.

I believe that program you are showing is code of one of the many csharp ports that use a wrapper to that Boost library. If you have that, then you should already have its source code.

I do not have any personal code to do that. I personally use Deepnest.io from time to time.

That code I have that does the layouts is VBA for acad and not c# and I already explained how it does it. If you want me to post that code anyway I will, but I don't think it will help you much.

Thank you very much.