Close
0%
0%

Boxes.py

Cut out boxes and other stuff with a laser cutter

Similar projects worth following
An (Online) Box Generator for laser cutters.

  • Boxespy is an online box generator
  • Boxespy is an Inkscape plug-in
  • Boxespy is library to write your own
  • Boxespy is free software licensed under GPL v3+
  • Boxespy is written in Python 3

    Boxespy comes with a growing set of ready-to-use, fully parametrized generators. See https://florianfesti.github.io/boxes/html/generators.html for the full list.

    Features

    Of course the library and the generators allow selecting the "thickness"
    of the material used and automatically adjusts lengths and width of
    joining fingers and other elements.

    The "burn" parameter compensates for the material removed by the laser. This
    allows fine tuning the gaps between joins up to the point where plywood
    can be press fitted even without any glue.


    Finger Joints are the work horse of the library. They allow edges
    and T connections. Their size is scaled up with the material
    "thickness" to maintain the same appearance. The library also allows
    putting holes and slots for screws (bed bolts) into finger joints,
    although this is currently not supported for the available generators.

    Dovetail joints can be used to join pieces in the same plane.

    Flex allows bending and stretching the material in one direction. This
    is used for rounded edges and living hinges.

    Documentation

    https://florianfesti.github.io/boxes/html/index.html

    • New Server!

      Florian Festi05/13/2024 at 20:25 0 comments

      As people surely have noticed the web instance was pretty slow at times. The issue was not really too much load but some weird latency or time out problem. As my hackerspace has setup a new server I asked if they would host Boxes.py. So now a new instance is available at https://boxes.hackerspace-bamberg.de. I added a redirect to the old location so you end up there no matter what. For now this is still in testing. Please report any issues you have here or on the GitHub project. If everything works out fine I will change all the links to the new instance.

      Update: Looks like everything is working fine. I switched over the URL in all places I could think of. So the web instance is now officially move to its new home. Please enjoy the much quicker response times!

    • Personal Backlog

      Florian Festi03/08/2023 at 23:13 1 comment

      Being able to put more time into the project have I looked into my local repository and it is full of half finished projects - most of them new "box" generators. I have been working on getting some of them in shape for inclusion. Additionally there where a few needs that popped up that also needed instant addressing. Funny enough a lot of these new generators come in pairs.

      So I did a roll holder for the kitchen after the old, 3D printed one broke:

      Well, it is mounted to the wall... so a "Wall" variant was needed:

      After finishing both I found another 20% finished holder in my working dir. It is more ambitious with 3 layers on each side that allow locking in the axle by rotating the middle layer. No idea why that didn't get finished. May be one day the two above get a fancy sibling...

      For another project I need to 3D print a small part (yes, I know, heresy) but the filament didn't come with it's own spool. So, I did a spool that can be separated into two parts using the BayonetBox as a basis: 

      And as I was at it it was just too easy not the strip it down to a one piece spool (and then add some fancy reinforcements):


      One generator I started a long time ago was one for generating Tetris blocks. At the time this wasn't that easy and quite a bit of work. Nowadays this is much easier as we have the polygonWall method that gets a list of lengths and angles and handles the rest. There also is a companion method to create all the side walls from the same list. So the only tricky part was getting the lengths right as we do want the walls to be within the perimeter of the block structure. I am optimistic they fit, but I have not yet cut them out. So if you feel adventurous and "need some Tetris blocks in your life" please donate a few good pictures.

      Another "thing" that I started long ago and started over with more than once is my Seven Segments feature. The idea is to use a LED stripe on its side and wind it through the seven segments. So you can create a seven segment display without much soldering or special circuit boards and from semi small to quite big. The obvious use case is a seven segment clock. Both of them are still flagged "unstable". But I am not sure if I get to build one any time soon. So if one brave soul is looking an LED stripe fueled clock project let me know.


      So far my backlog is all but empty and I still have more ideas. I just started with a wire straightener holding two rows of v-groove ball bearings. I have a cryptic font that is mostly finished with each letter is just a few shapes that are only legible when surrounded by a border. I wanted to create a calendar with them, preferably perpetual or even some clever mechanical one. I saw a cube box at the Fablab of the University of Oulu that is cut directly between pieces without creating gaps. And I have a half working one for arbitrary sizes.  I have toyed a bit with flexures and thought about doing a laser cut microscope like the OpenFlexure Microscope although with very different kinematic. And I have a dozen more that are not much more than the first few lines of code and I am not confident enough to publicly admit here.

    • Old News and New News

      Florian Festi02/17/2023 at 10:43 0 comments

      It's been a while since the last proper log entry...

      The last few years were not that great for many things - including Boxes.py. But even with things going slow or not moving anywhere for months a lot of changes have piled up over this long time. Also it looks like this year is a lot better and things have actually already picked up speed in December of last year. Not only have I been able to do more but several old and new contributors have shown up and gave the project a very notable boost. To deal with the long backlog of new features and box generators while there is so much new stuff coming in I decide to mix in the old with the new.

      Wall Mounted Boxes and Tool Holders

      After a brief discussion here in the comments in early 2022 I factored and renamed the SlatWall group to WallMounted. While slat walls are fancy not many people have them. The whole group is only there because a few panels fell into the hands of our hacker space. Now the generators can have different styles of hooks and also work with DIN rails or French Cleats. It is relatively easy to add new ways of hooking the boxes and tool holders to different things. So it you have ideas open a ticket on GitHub - or start a discussion in the comments below.

      There are also few new generators in this group:

      • SlatWallPinRow allows you to hang stuff on the wall.
      • WallStairs allows you to design your own tool holders.

      and I recently added a few more sample images.

      On the search for the right box generator

      Caleb Crome is one of our new and very prolific contributors. One theme of his work is making finding the right box generator easier. He wrote a Gallery page that shows all sample images side by side for a quick overview.

      The second, complementary new feature is a search field on the menu page. It shows all matching box generators and matches the English name but also the translated name and short description. This is all done with some - not even too complicated - Java Script magic directly in the browser.

      A third feature is not merged yet. It will allow getting or adding QR codes with a link and settings of a generated box. That way it is easier to pass the settings around with a mobile phone or to figure out how to get the drawing from an already laser cut piece.

      These new features are not all Caleb has done so far. Prepare to hear more from him as soon as we get into new generators.

    • Server Health Improvements

      Florian Festi01/09/2023 at 15:35 0 comments

      The last few months complaints about poor performance and an increasing number of 502 errors have been piling up. The later were especially puzzling as it means there is a problem in the communication between the web server and uwsgi instance in the container. While there was some load on the machine everything looked fine at the first glance and there was nothing in the logs that hinted at a bug.

      At the same time there were similar complaints for the web2py application that runs on the same machine. Well, actually this thing is a VM that runs on a server of a friend of a friend that does a few other things and is only maintained to the bare necessity. When I put Boxes.py there the question I asked myself was not "How do I host the greatest box generator on the internet?" but "Now that I hacked argparse to produce web pages how can I show this to a few people?"

      Over the holidays I had time to look a bit deeper. Turns out the web2py app offers the data with different sorting and filtering and a horde of web crawlers eating it all up. Adding a robots.txt got rid of them and dropped the load from 0.7 to below 0.1. I may loosening this up a bit in the future but for now I just banned bots completely - including from Boxes.py.

      Looking at the logs from Boxes.py it was very apparent that there are even more connections coming in. Most of them of course are these nice pop-up images in the menu. While I still didn't have access the the main machine it dawned on me that the Boxes.py instance probably gets throttled down due to too many request. This would create timeouts and though the 502 errors. To fix that I moved all the pictures to the GH (documentation) pages and adjusted the links to point there. As this would be very annoying for people that run Boxes.py locally (me) this change affects the wsgi mode only. Yes, the boxesserver should grow a config file for things like that but I just couldn't be bothered.

      So performance has notably improved and I hope you all can now create your boxes without seeing 502 error messages. Looking into the access log it turns out there are quite  a lot of you. There are tens of thousands of request per day - even with the pictures moved elsewhere. This is kinda cool but also kinda scary...

    • It's all Fun and Games...

      Florian Festi10/23/2020 at 17:29 0 comments

      ...until someone makes an insert for Agricola - then it is even more fun ... and even more games:

      Kudos to Guillaume Collic who wrote this master piece. I especially like how he made use of already existing code and pieces and combines them with new edges types and new ideas. It re-uses the Divider Tray and regular boxes but combines them with new solutions like cutouts to make gripping the tiles easier. A very neat idea (but a bit difficult to see in the picture) are the sliding dividers in the trays for the wooden pieces. They are prevented from tumbling around by small triangular feet but are otherwise free to move left and right depending on how much space is needed in the compartments.

      The two box types holding the tiles clearly deserve to get a generator on their own. Guillaume already has ticket opened to make it easier to re-use complete generators by others. Splitting these boxes out might be a good exercise to create the infrastructure still missing.

      If you are on your way to your laser cutter you should probably stick to the default material thickness of 3mm or something close. While not stated in the generator description I have the suspicion that adding too much width with thicker material might end up with an insert that cannot be - well - inserted into the box.

      Inserts and organizers for board games is a very welcome new topic in the Boxes.py. I hope at some point we can make this a category in the UI and rescue this gem from the "Misc" section. I have the hope that Guillaume may contribute some more. But may his works also inspires others. The more pieces and features there already are the easier such task becomes. 

    • New Boxes For Your Electronics Projects

      Florian Festi05/21/2020 at 12:32 0 comments

      Often just a generic box is just not enough, but you need something that can house the electronics of your project. The ElectronicsBox was the first variant with this in mind. But in the end it is just a box meant to be bolted down and screwed shut:

      QuitButton needed something else: A housing with a slanted front to mount a LCDisplay and a few buttons.

      As a first stop gap solution (other than just turning a pentagon box on it's side) I implemented Console using the relatively new polygonWall() code that turns a list of lengths and angles into a side wall. The actual win here is that there is a .polygonWalls() method that is rendering all the walls between the sides. The result is still a bit simple, but  at least has the right shape:

      But as with a lot of other boxes there is a severe lack of lockable doors or hatches. And while non rectangular finger joints are cool they are rather distracting around the front panel.

      So here is an improved Console2:

      There are a few variants. You can choose with or without removable back wall, with or without removable front panel and the front panel - as seen here -  clean and glued or attached with finger joints on the sides.

      The panel is held in place by spring loaded tabs:

      The two tabs per side and both springs being one single, laser cut piece.

      The back wall is hooked in at the bottom and has two flush latches at the top:

      The latches are made small enough that they cannot be opened or closed by hand but need a small tool like a screwdriver. This is on purpose to avoid people accidentally sticking their fingers into the electric parts inside. To prevent the latches from opening they have an integral leaf spring and a very small recess that locks them in place when closed. This way they can only be re-opened when pressed in a little bit against the spring.

    • Boxes.py on heise.de

      Florian Festi05/20/2020 at 19:48 2 comments

      Heise.de is the German speaking IT news site. The Heise publishing house also issues the Make magazine. So via the Make news feed this article in German (translated by Google) made it to get global feed at heise.de.

      There is nothing in the article regular readers of this project log don't already know about. But getting this level of exposure is quite nice and made my day.

      Herzlich Willkommen an alle Heise-Leser!

    • New Back End

      Florian Festi05/20/2020 at 08:23 0 comments

      So the new back end is finally merged into the master branch. If you update your own installation you need to install the affine Python module which is available both via pip but also in most distributions. Cairo is no longer needed. This should make installation on Windows much easier.

      The SVG produce by the new back end is also much better than the old one. Artifacts like repeated moves are filtered out and the outline of parts is much more continuous. The weird inverted arcs in inner corners are - for the most part - replaced with smooth Bezier loops. This should reduce acceleration in the corners and allow for faster cutting.

      I am still pondering whether it is worth adding a native DXF back end. While there is only very few commands needed by Boxes.py the format does not look like fun. I am also scared that it won't support the text the way we might need. For now the output still uses pstoedit for converting to DXF.

    • Test new Python backend!

      Florian Festi04/06/2020 at 10:06 0 comments

      Boxes.py is using the Cairo graphics library to generate SVG and PostScript (which is then converted to more formats with pstoedit). This has always been a pain. There is little control over the actual output. Getting the library to run on Windows is a real pain and creates a continuous stream of tickets, questions and complaints.

      So there has always been the thought of replacing Cairo with something else. But thoka finally put in the work to put together a native Python backend. After me not finding the time to take care of the PR for much too long it is now ready to be tested. Please check out https://www.festi.info/boxes.nocairo/

      Beside not needing Cairo it has the following improvements:

      • Continues outlines for most parts
      • Better grouping within the SVG file
      • Improved burn correction with inner corners now being a loop instead of changing direction twice

      Other changes

      • Text rendered as text not as glyphs
      • <deleted>No use of hlines and vlines (yet)</deleted>

      Please test with you tool chain and report issue back. Either here as comments or in the GitHub PR or a new ticket.

      If you want to test locally there is a nocairo branch in the main repository.

      Thank you!

      Update:

      Turns out I had to redo the text "rendering". The text was never that well thought out as Boxes.py is not a word processor. I now do know much more about PostScript and it's font system than I ever wanted...

      To give the code more exposure I now moved the main instance (https://www.festi.info/boxes.py/) to the nocairo branch. The Cairo back end is still available at https://www.festi.info/boxes.cairo/ . But I expect to call the new back end final and ditch Cairo completely soon - if there are no major issues popping up. 

    • A Boxes.py story

      Florian Festi03/01/2020 at 12:06 0 comments

      Looking at tickets on GitHub is not always fun. They are full of bugs and missing features people stumbled across and ideas that are not bad enough to ignore but not good enough to work on right away.

      But from time to time there are stories that unfold in there that are too good to be forgotten in a closed ticket. So I am putting this one here:

      In the beginning there is a need for a box - a cash box. And there is an idea how it should look like:

      And there even are some plans - although not quite in the right size:

      So the question arises if there is a generator that can already do this. Well, sort of. There is the RoundedBox and it probably can be extended to get similar results.

      But as so often that's a bit too involved for a mere mortal. So Inkscape is called to the rescue instead:

      with green being from boxes.py, the red added to get the results in blue.

      And the final box is looking gorgeous:

      That's just to good be stay a one-off. Actually extending the RoundedBox wasn't that hard. Half of the patch is just increasing the opening on top/front for the new style. Of course the real work is done in the parts (RoundedPlate and SurroundingWall) that make up the box and need to learn about the new feature. So this could have been a nice show case how easy it is to extend the library. Unfortunately these parts are both pretty old and only used at few places. So there is a bit of refactoring and a few tweaks and bug fixes needed to make this all work eventually:

      The keen observer may have noticed that the edge type of the SurroundingWall has changed from "F" to "f" making the top and bottom a bit more sturdy as the corner holes don't continue into the sides. Otherwise this is very close to the Inkscape version.

      Thanks to bwente for the work and inspiration to finally do this!

    View all 56 project logs

    Enjoy this project?

    Share

    Discussions

    michael wrote 02/10/2019 at 08:40 point

    Hi Florian, 

    the Boxes.py is awesome! I have found - maybe only on my machine - a bug which I thought is easy solvable (but I was not able) - so I tell you about:

    When selecting as Top Edge L Edge for slide on lid - both on the universal box and the Type-Tray there is an error on the server:

    Traceback (most recent call last):
      File "/usr/lib/python3.6/wsgiref/handlers.py", line 137, in run
        self.result = application(self.environ, self.start_response)
      File "./boxesserver", line 399, in serve
        box.render()
      File "./../boxes/generators/universalbox.py", line 60, in render
        t1, t2, t3, t4 = self.topEdges(self.top_edge)
      File "./../boxes/lids.py", line 118, in topEdges
        if t1.char == "t":
    AttributeError: 'str' object has no attribute 'char'

    All other Top Edges work perfectly. I just did not find the mistake (even if it was mine...) - I think I did not search enough...

    And again: GREAT WORK!!!

    Thanks

    Michi

      Are you sure? yes | no

    Florian Festi wrote 02/10/2019 at 18:58 point

    Thanks for the bug report! Fixed in https://github.com/florianfesti/boxes/commit/e3ba617f22f6321d662f6ee359e79ffc05f5e871

    Will update the web instance the next days.

      Are you sure? yes | no

    michael wrote 02/10/2019 at 19:02 point

    Many thanks! Works like a charm!

    lg

    Michi

      Are you sure? yes | no

    sven.wagner wrote 01/06/2019 at 22:52 point

    Hi Florian. Boxes.py is realy great. Thanks for sharing it! I try to use a gernerated universal-box on my cnc machine, but I the inner edges of the finger joints where generated with a "over routing" of the edges. Example see: https://www.lieblos.de/wp-content/uploads/2019/01/boxfertigung-7-900x675.jpg. I can't find an option to deactivate this "over routing" - is it possible to deactivate it with an option? It would be very great to try more of the boxes.py designs on my cnc router. Regards. Sven.

      Are you sure? yes | no

    Florian Festi wrote 01/11/2019 at 22:18 point

    Yes, you can set burn to zero. But then you have to do the kerf correction on your own. Probably with some CAM software.

    As the kerf correction is done by doing these overruns Boxes.py cannot do kerf corrections without them.

      Are you sure? yes | no

    Scott wrote 12/30/2018 at 17:21 point

    This tool is wonderful. I am really enjoying it. I do have a question about the TypeTray function. There is an option to make a stackable bottom but it doesn't seem to make the top stackable. Am I missing something. I can fix this in post but I figure there is an easier way.

      Are you sure? yes | no

    Florian Festi wrote 01/01/2019 at 21:53 point

    There currently isn't. But I am currently working on the type tray generator anyway. So i should be able to add this feature the next few days.

    Update: Created a ticket at https://github.com/florianfesti/boxes/issues/107

      Are you sure? yes | no

    Florian Festi wrote 01/11/2019 at 22:22 point

    This is fixed now. TypeTray can not have the same selection of top edges as UniversalBox - including the stackable edge.

      Are you sure? yes | no

    Mohab Fawzy wrote 10/24/2018 at 01:39 point

    HI Florian , love your project , and can help you with the visuals or logo if you like , since i'm really dumb when it comes to coding XD
    I wanted to ask you about running it in windows , but scrolled down and found that it doesnt have an obvious solution , i messed with it but im dumb XD so i think i'll run it on my linux laptop for now .

      Are you sure? yes | no

    Florian Festi wrote 10/24/2018 at 07:30 point

    Sure, I am not much of a web or graphics person. So help is welcome in this area.

     Yeah, Boxes.py on Windows is still a sad story. There is still the bounty up for working installation instructions.

      Are you sure? yes | no

    Mohab Fawzy wrote 10/24/2018 at 16:09 point

    cool , see what i can help with and i'm up for it =)

      Are you sure? yes | no

    Andrew Bills wrote 10/18/2018 at 05:00 point

    FYI - Took me a little bit to figure out what I was doing wrong, but if you generate a flexbox4 too small (i tried 25x25x40) the sold curve wall part doesn't get added to the model. Took me a bit to realise (after I broke the pieces trying different things to make it go together)

      Are you sure? yes | no

    Florian Festi wrote 10/19/2018 at 09:40 point

    There are two issues here. The generator reduces the radius of the flex if there is not enough space. But there is a bug where this reduced radius is not used for the length of the flex.

    The second issue is that there is just not enough room for the flex in this dimensions. One could make the latch configurable to allow making more space or just some heuristics for small values.

    On the larger picture there is the question of using unsuitable parameters. So far I have avoided to add checks for the most part and left the checking to the user. This has obviously fail here - to some extend due to the bug above.

    I hope I can get the bug fixed today or tomorrow. But this may still not make the box work with this small dimensions.

      Are you sure? yes | no

    Florian Festi wrote 10/24/2018 at 07:49 point

    Ok, so the issue with FlexBox4 not calculating the length of flex correctly is fixed. I also added a latchsize param to FlexBox, FlexBox2 and FlexBox4 and updated the code of the flex boxes to a more recent code style.

    Try https://festi.info/boxes.py/FlexBox4?FingerJoint_angle=90.0&FingerJoint_surroundingspaces=2.0&FingerJoint_edge_width=1.0&FingerJoint_finger=2.0&FingerJoint_play=0.0&FingerJoint_space=2.0&FingerJoint_width=1.0&Flex_stretch=1.05&Flex_connection=1.0&Flex_distance=0.5&Flex_width=5.0&x=25&y=25&h=40&outside=0&radius=15&latchsize=2&thickness=3.0&format=svg&tabs=0.0&debug=0&reference=100&burn=0.1&render=1

    Remove the &render=1 at the end of the URL to get to the parameter form.

      Are you sure? yes | no

    megajas wrote 10/17/2018 at 03:45 point

    Hi Florian, first of all, stumbling onto your project is really an eye-opener for me and I'm sure for many others! Great job!

    I've only played around with the online box generator for a few minutes and I will spend much more time later. Is there a way to set the number of 'fingers' and have them evenly spaced along an edge of a wall?

      Are you sure? yes | no

    Florian Festi wrote 10/19/2018 at 10:17 point

    You can adjust the style of the fingers in the Settings for Finger Joint section that can be opened on most generators. Right now there is no way to evenly space them as the fingers have a fixed size. But you can change the size of the fingers and the amount of space required towards the corners. 

      Are you sure? yes | no

    Thomas Pearce wrote 08/14/2018 at 15:46 point

    What would be the feasibility of adding a grayscale based dovetail joint to this generator? I made them a while ago, but it didn't go anywhere because it was too tedious to make the joints. This is an awesome project, I'll have to play with it when I get the chance. the old link to the dovetails, I probably should rewrite it and move it somewhere better at some point. https://www.thingiverse.com/thing:1300977

      Are you sure? yes | no

    Florian Festi wrote 09/11/2018 at 21:18 point

    It should be possible to add something like this to Boxes.py. The question is what parameters are needed, to make things fit. One would also need some test piece to read the parameters from.

      Are you sure? yes | no

    ornery shard wrote 08/06/2018 at 14:44 point

    This tool is really great.

    @Florian Festi Do you have pics and/or instructions how to  assemble the "rotary attachment for a laser cutter"

    What kind of raw materials would I need for this?

      Are you sure? yes | no

    Florian Festi wrote 08/07/2018 at 12:28 point

    I don't. I am currently travelling so it may take a while until I can take pictures. The rotary attachment consist of two parts that slide on a metal bar. One side houses a NEMA 23 stepper that drives two rollers. The other part is a scissor lift with two free rollers.

    You will need to adjust the bottom hole for the metal bar you are using.

    Overall I am not 100% satisfied with the rotary attachment. The scissor lift is not as smooth and rigid as I'd want. But IIRC I made it from 5 or 6mm poppler. You want to use birch ply for that. I am still thinking about making a version without scissor lift that can be tilted as a whole.

    You need a stepper motor that is electrically compatible with your Y axis of your laser cutter. Mine has 3 phase steppers which make getting one a bit more difficult. Your laser cutter needs to have a outlet for plugging the rotary device in. Or you need to do the wiring yourself.

    The attachment also is still missing some accessories like rollers to limit left to right movement and pressing the inside of glasses against the driven rollers.

    Beside these short coming it works reasonably well and we have engraved several glasses and bottles with it.

      Are you sure? yes | no

    Jan wrote 08/03/2018 at 11:50 point

    Love this tool. One can spend so much time optimizing stuff like that but you "just" write a script for it and automate it for everyone to use for free. NICE!
    But I wonder: don't use wood laser-cutters DXF files like the whole sheet metal industry?

      Are you sure? yes | no

    Florian Festi wrote 08/03/2018 at 17:00 point

    Yes, they do. Boxes.py can generate DXF using ps2edit. Edit: That's now available in the online generator, too.

      Are you sure? yes | no

    paul wrote 08/02/2018 at 12:00 point

    this tool is great but it outputs the svg into the browser, how do I download it?

      Are you sure? yes | no

    Florian Festi wrote 08/02/2018 at 16:01 point

    Just right click and "save as"

      Are you sure? yes | no

    dejan.k wrote 06/26/2018 at 08:13 point

    Hello, absolutly fenomenal work, thank you very much, you shoud think about adding a feature to universal box top_edge edge with hinges and click on, on other side so it closes :) 

      Are you sure? yes | no

    Florian Festi wrote 08/03/2018 at 11:32 point

    The click-on edge probably deserves some more love before that becomes really feasible. But adding lock and latches to the lids is on my todo list. To my shame I have to admit that I hand drew a pair of latches for the box I recently build...

      Are you sure? yes | no

    Cristian wrote 06/04/2018 at 16:44 point

    Hello people... Mr. Florian, your application it is of great help, thank you very much!!! if you are interested i have a kinda new project for you. Letter shaped boxes with and without lid. Those are used for led lighting lettes and so. 

      Are you sure? yes | no

    Chris Jones wrote 02/06/2018 at 05:39 point

    I really appreciate this project! It has helped me make card boxes and trays to help me organise board game components better inside their boxes.

    This evening I have been having trouble, though. When I use traylayout to generate a tray from a layout file, the walls of the layout have gaps in them, and they are overlapping. I don't think there is anything different that I am doing, and I have screenshots to show you my input and the svg that is output. I can send them to you if you like. 

    Thank you again for an incredibly useful tool!

      Are you sure? yes | no

    Ian Hubbertz wrote 12/31/2017 at 13:03 point

    What's the easiest way to split a large part into two (or more) parts with dovetail joints? 

    I want to build a large "RoundedBox", so that the flexible part around the box is too long for the  laser cutter. It would be nice to split this part into two or even more parts?

      Are you sure? yes | no

    Florian Festi wrote 01/14/2018 at 21:32 point

    Oh, sorry! I missed your comment over the holidays.

    The canonical way of doing this would be extending the roundedPlate() and surroundingWall() methods in boxes/__init__.py to take a param on how many splits should be used (one to four - may be without three) and then adding a param to the RoundedBox generator that set them. 

    As an alternative you can provide a instructions to get Boxes.py running on Windows and I'll do the coding for you (see https://hackaday.io/project/10649/log/71764-boxespy-on-windows ). 

      Are you sure? yes | no

    Ian Hubbertz wrote 01/20/2018 at 11:18 point

    Ha.. :-) thanks for the offer, but I have absolutely no experience with development (or deployment) on Windows.

    When I find some free time (I have two other projects right now with higher priority), I will have a look to see how to enhance the surroundingWall() method.

      Are you sure? yes | no

    Florian Festi wrote 08/06/2018 at 17:53 point

    OK, I finally did just that. Instead of offering full control over where exactly to split the wall I just used a param allowing values from 1 to 4. This allows to split:

    * front only

    * front and back

    * front and right and back

    * all four sides

    The new code is already online. Please double check before laser cutting. The change isn't entirely trivial.

      Are you sure? yes | no

    Chris wrote 11/17/2017 at 19:27 point

    Thanks for sharing this project with the world, it looks fantastic. Do you do any further post-processing of the generated SVGs prior to cutting, and if so what is your preferred application? Also what software do you use to generate gcode/control your laser? I'm using LaserWeb 4, and I can't figure out what I need to do to the boxes.py SVG output to make it work properly in LaserWeb 4. If I open the SVG in Adobe Illustrator and save it, that only seems to increase the number of errors. Any hints or tips would be greatly appreciated.

      Are you sure? yes | no

    Florian Festi wrote 11/17/2017 at 19:45 point

    Our Chinese laser cutter comes with some proprietorial front end program that allows arranging the pieces. For other stuff I often use Inkscape. But this also is a mixed bag as it is not really a CAD program and adds the line widths to all measurements.

    There are a few pitfalls:

    Boxes.py creates a lot of very short segments. If you have some auto connect feature that tries to connect single line segments to a continuous polygon make sure if has only 0.01mm range. The common default of 0.1mm is too big.

    Both SVG and also DXF do not really come with units. So all lengths are just a numbers that can mean different things to different programs under different circumstances.

    If you need DXF you might want to install Boxes.py locally and also install ps2edit. Then Boxes.py can create DXF directly (among some other formats).

    Update: The web instance now supports generating dxf and other formats

      Are you sure? yes | no

    Chris wrote 11/20/2017 at 19:11 point

    Thanks for your quick reply. Based on https://darklylabs.zendesk.com/hc/en-us/community/posts/206123108/comments/115000442212, I've had some success with the following Illustrator workflow:

    1) Save boxes.py output as SVG from browser.
    2) Open in Illustrator.
    3) One-by-one, select each path…
    4) Right-click > Release Compound Path
    5) Right-Click > Join
    6) For each enclosed shape, select all edges, Right Click > Join
    7) For circles, Right Click > Join
    8) Save As > SVG 1.1, Style Attributes

    9) Import into LaserWeb

      Are you sure? yes | no

    Florian Festi wrote 11/21/2017 at 09:18 point

    Wow! This still sounds really painful. Have you tried DXF as a format? IIRC it is even more primitive so may be the importer can deal with the non connected line segments better.

      Are you sure? yes | no

    Yash Gupta wrote 10/21/2017 at 20:56 point

    Great project. I wonder if there is a way to automate splitting of the files across pages of a specific size to laser cur larger projects on laser cutters with limited real estate?

      Are you sure? yes | no

    Florian Festi wrote 10/21/2017 at 23:22 point

    No, this is not possible right now and I am not planning to add this. It turns out that the parts need to be rearranged by hand most of the time anyway. Even if they fit in the laser cutter they do not fit on the leftover sheets which at least I often use for one ofs.

    In case you want to do a larger run with one size you'll want to optimize by hand anyway to make sure you make the best use of the your sheets.

      Are you sure? yes | no

    Jarrett wrote 10/02/2017 at 16:12 point

    I just want you to know that I really appreciate this project! Especially the web interface. It has saved me so much time in CAD stuff to just be able to directly generate profiles.

      Are you sure? yes | no

    Similar Projects

    Does this project spark your interest?

    Become a member to follow this project and never miss any updates