Gridfinity Bin Labels Hexagon socket head cap screws ISO 4762 former DIN 912 M2.5, M3, M4, M5, M6, M8, M10, M12, M14, M16, M18, M20
by Eistee · via Printables
| Format | STL |
| Category | Organisation |
| License | CC BY-NC |
| Triangles | 11.8k |
| Uploaded | Nov 13, 2024 |
⬇ 2.5k downloads
❤ 750 likes
👁 14.4k views
Description
The labels are for these gridfinity boxes: https://www.printables.com/model/592545-gridfinity-bin-with-printable-label-by-pred-parame The bolts are to scale as far as possible. When the screws get too long for the label, the bolt figure is broken. Print it at 0.2 mm layer height and make a filament change in layer 3. -------------------------------------- I was asked multiple times how i generated these, so here is a short How-To using Fusion360: You need two steps: Parametrize your model Write a Script that loops through all your variants, saves them by a usefull name and zips them on its own. Additionally take a screenshot for a nice .gif. 1.) The tricky part is the parametric text, as Fusion does not (yet) support this. There is a “ ParametricText ” App in the Appstore, however this does NOT work with scripts. Go to the GitHub page and get the ext-trigger fork . Once you got this installed by placing it inside "%appdata%\Autodesk\Autodesk Fusion 360\API\AddIns" you can use it in Autodesk. See the Appstore page for help. Hint: After saving and loading, sometimes the app messes up and the format of the text is all over the place. Simply assign the sketch/text again to your parametric setup if you have trouble. 2.) in Fusion360, under Utilities/ADD-INS/Scripts and Add-Ins you can create yourself a python script that basically controlls Fusion360. It will open Visual Studio where you can create your script. You can take a look at mine and take it as a starting point. I am not programmer nor is this by any stretch an ideal script, but it works. The script below looks terrible here on printables, copy&paste it into Visual Studio for propper formatting and highlighting. I added some comments, I think it is easy to adapt. Use ChatGPT for help if necessary ;) Once you got it set up you can lean back and watch your script run. Fusion runs quiet slow, my script took a couple hours for all variants, so better start with a small batch to make sure everything works fine. #Author- #@Eistee_158202 import adsk.core, adsk.fusion, adsk.cam, traceback import os import shutil def run(context): ui = None try: app = adsk.core.Application.get() ui = app.userInterface design = adsk.fusion.Design.cast(app.activeProduct) # Get the root component of the active design rootComp = design.rootComponent # Specify the folder to write out the results. folder = 'C:/Temp/' # Get the parameters named "bolt_length_l" and "Box_width" which are defined in my parametric Fusion360 model and change them. MParam = design.allParameters.itemByName('M') bolt_lengthParam = design.allParameters.itemByName('bolt_length_l') # Parameter in Fusion360 Box_widthParam = design.allParameters.itemByName('Box_width') # Parameter in Fusion360 cnt=1 # counter for figures M = 3 # Modul of bolt Box_width = 1 # width of the label for M in (3, 4, 5, 6, 8, 10, 12, 14, 16, 18, 20): # list of Moduls to be looped through for Box_width in (1, 2): # make the labels in different width for length in range(4,200): # loop over length of bolt from 4 to 200 if length % 2 == 0 or length % 5 == 0: # only do bolt length if it is dividable by 2 or 5 Box_widthParam.expression = str(Box_width) # make this a string MParam.expression = str(M) # make this a string bolt_lengthParam.expression = str(length) # make this a string app.fireCustomEvent('thomasa88_ParametricText_Ext_Update') adsk.doEvents() adsk.doEvents() # Don't know why, but it works only stable if you call it twice # Construct the output filename. newfolder_M = folder + "/" + "M" + str(M) newfolder_width = newfolder_M + '/' + str(Box_width) + '_width' os.makedirs(newfolder_M, exist_ok=True) # make a new folder os.makedirs(newfolder_width, exist_ok=True) # make a new folder variantname = str(Box_width) + 'width_M'+ str(M) + 'x' + str(length) filename = newfolder_width + '/' + variantname +'.stl' # Save the file as STL. exportMgr = adsk.fusion.ExportManager.cast(design.exportManager) stlOptions = exportMgr.createSTLExportOptions(rootComp) stlOptions.meshRefinement = adsk.fusion.MeshRefinementSettings.MeshRefinementMedium stlOptions.filename = filename # Screenshot the variant and save to file screenshotfilename= folder + '/' + str(f"{cnt:02d}") + "_" + variantname +'.jpg' app.activeViewport.saveAsImageFile(screenshotfilename, 1600, 1000); cnt=cnt+1 exportMgr.execute(stlOptions) zip_file_path = folder + '/' + str(Box_width) + 'width_M'+ str(M) # zip folder to archive shutil.make_archive(zip_file_path, 'zip', newfolder_width) ui.messageBox('Finished.') except: if ui: ui.messageBox('Failed:\n{}'.format(traceback.format_exc()))
Originally published on Printables