A dynamic multi-STL, multi-process OpenSCAD build system with autoplating support

Overview

scad-build

This is a multi-STL OpenSCAD build system based around GNU make. It supports dynamic build targets, intelligent previews with user-defined part layouts, and autoplating to efficiently send the maximum number of objects that will fit your 3D printer build plate to your slicer, reducing the amount of work that goes into printing complex projects.

Requirements

  • OpenSCAD 2021.01 or newer
  • GNU make
  • Python 3.9.x or newer and the command line version of prusa-slicer (only for autoplating)

Using scad-build

This repository is intended to be a template to base new projects off of; existing projects without a build system can be adapted to use scad-build too. The files in this repository expect to be copied into the root of your OpenSCAD project.

Importing

Once you have installed scad-build into the root of your project, import it into any SCAD file you want to export multiple STLs from with import <./build.scad>. Modify the path if build.scad is not in the same directory as your SCAD file.

Using build(id)

build() is a module that designates its children as a separate build unit; this will cause make to output an STL at out/scad_file/build_id.stl containing only the children in scope for the build(build_id) module in the file scad_file.scad. build modules exist at runtime, so they can be nested under other modules if desired, or generated dynamically. Note that for scad-build to work properly, everything that renders during a build should be scoped under a build() module. See the section on previewing below for information on how to render multiple items while designing.

While scad-build is running under make, the function building() will return true, and building(build_id) will return true if the current build unit for the openscad process has been called to handle build(build_id).

Children of build() can access the current build ID via the $build_id variable. If there is no build() parent, $build_id is the empty string.

scad-build only pays attention to the first build() module in a render tree; any instances of build() inside of build() will not be picked up by the build system.

Previewing

scad-build has three distinctive modes for the OpenSCAD runtime. The first is build() module discovery, which is an implementation detail. The second is build mode, where make calls openscad with a single build_id selected. The third mode is preview mode, the default mode when scad-build projects are accessed outside of make -- most relevantly, in OpenSCAD's UI for preview.

While previewing, the function previewing() returns true. This can be used to define modules that will render all of your STLs in the same view while you are designing them without interfering with building. See the preview_row() and preview_column() modules in build.scad for ready-to-go preview layout utilites that demonstrate how to use previewing() to generate your own layout.

Note that preview modules disable layouts and call children() when not previewing, because they expect to only render children wrapped in build(), and only the child matching the build_id will be rendered when not previewing.

Building (rendering)

Type make to start a build. Your STLs will end up in the out directory, in subdirectories named after the SCAD file used to build the STL. Each STL is named after the argument to its parent build() module.

Multi-process rendering

scad-build supports the standard make mechanism for multi-process/multi-core builds: specify -j# as an argument to make, where # is the number of processes (build units) you want to render simultaneously.

Autoplating

Ideal for complex 3D printing projects with many discrete parts, autoplating tries to pack the maximum number of STL files into your build volume. It requires Python 3.9.x and the command line version of prusa-slicer to be accessible.

Configuring

Autoplating requires you to create a .plateconfig file in your project root; this file should be added to your .gitignore, since it is specific to your 3D printer. Its contents should look like:

[plate]
size_x = 
   
    
size_y = 
    
     
spacing = 
     

     
    
   

Running the autoplater

Type make autoplate. If you have written a .plateconfig and have all of the necessary dependencies, this should build your STL files if necessary, then populate out/autoplate with subdirectories representing each prepared build plate. Each subdirectory contains the STLs on that plate (more specifically, symbolic links to already built STLs to save space).

To slice a whole plate based off of the autoplater's suggestion, call your slicer like: prusa-slicer out/autoplater/plate0/*.stl, changing this command as needed if slicing other plate numbers or using Cura or another slicer.

Owner
Jordan Mulcahey
Jordan Mulcahey
This collection of tools that makes it easy to secure and/or obfuscate messages, files, and data.

Scrambler App This collection of tools that makes it easy to secure and/or obfuscate messages, files, and data. It leverages encryption tools such as

Mystic 2 Aug 31, 2022
A Python Tool that uses Shodan API's to perform quick recon for vulnerabilities

Shodan Quick Recon A Python Tool that uses Shodan API's to perform quick recon for vulnerabilities Configuration You must edit the python code, and in

Black Hat Ethical Hacking 5 Aug 09, 2022
A tool to brute force a gmail account. Use this tool to crack multiple accounts

A tool to brute force a gmail account. Use this tool to crack multiple accounts. This tool is developed to crack multiple accounts

Saad 12 Dec 30, 2022
This repo is about steps to create a effective custom wordlist in a few clicks/

Custom Wordlist This repo is about steps to take in order to create a effective custom wordlist in a few clicks. this comes handing in pentesting enga

2 Oct 08, 2022
Confluence Server Webwork OGNL injection

CVE-2021-26084 - Confluence Server Webwork OGNL injection An OGNL injection vulnerability exists that would allow an authenticated user and in some in

Fellipe Oliveira 295 Jan 06, 2023
Android Malware Behavior Deleter

Android Malware Behavior Deleter UDcide UDcide is a tool that provides alternative way to deal with Android malware. We help you to detect and remove

27 Sep 23, 2022
a cool, easily usable and customisable subdomains scanner

Subdah 🔎 another subdomains scanner. Installation ⚠️ Python 3.10 required ⚠️ $ git clone https://github.com/traumatism/subdah $ cd subdah $ pip3 inst

toast 14 Oct 18, 2022
Mips script decompiles MIPS assembly instructions & bot functionality

mips mips is a python-based script that decodes MIPS instructions. Usage cd into mips and run python decode.py command or open decode.py to run the sc

Anthony Tedja 0 Mar 30, 2022
Make your own huge Wordlist with advanced options

#It's my first tool i hope to be useful for everyone, Make your own huge Wordlist with advanced options, You need python3 to run this tool, If you hav

0.1Arafa 6 Dec 08, 2022
🔎 Most Advanced Open Source Intelligence (OSINT) Framework for scanning IP Address, Emails, Websites, Organizations.

🔎 Most Advanced Open Source Intelligence (OSINT) Framework for scanning IP Address, Emails, Websites, Organizations.

BhavKaran 1.5k Dec 28, 2022
CVE-2021-41773 Path Traversal for Apache 2.4.49

CVE-2021-41773 Path Traversal for Apache 2.4.49

ac1d 3 Oct 20, 2021
Remote control your Greenbone Vulnerability Manager (GVM)

Greenbone Vulnerability Management Tools The Greenbone Vulnerability Management Tools gvm-tools are a collection of tools that help with remote contro

Greenbone 130 Dec 17, 2022
OMIGOD! OM I GOOD? A free scanner to detect VMs vulnerable to one of the

omigood (OM I GOOD?) This repository contains a free scanner to detect VMs vulnerable to one of the "OMIGOD" vulnerabilities discovered by Wiz's threa

Marco Simioni 13 Jul 13, 2022
This is a multi-password‌ cracking tool that can help you hack facebook accounts very quickly

Pro_Crack Facebook Fast Cracking Tool This is a multi-password‌ cracking tool that can help you hack facebook accounts very quickly Installation On Te

•JINN• 1 Jan 16, 2022
I hacked my own webcam from a Kali Linux VM in my local network, using Ettercap to do the MiTM ARP poisoning attack, sniffing with Wireshark, and using metasploit

plan I - Linux Fundamentals Les utilisateurs et les droits Installer des programmes avec apt-get Surveiller l'activitÊ du système ExÊcuter des program

148 Dec 22, 2022
CVE-2021-26855 SSRF Exchange Server

CVE-2021-26855 Brute Force EMail Exchange Server Timeline: Monday, March 8, 2021: Update Dumping content...(I'm not done, can u guy help me done this

lulz 117 Nov 28, 2022
A Python r2pipe script to automatically create a Frida hook to intercept TLS traffic for Flutter based apps

boring-flutter A Python r2pipe script to automatically create a Frida hook to intercept TLS traffic for Flutter based apps. Currently only supporting

Hamza 64 Oct 18, 2022
Kunyu, more efficient corporate asset collection

Kunyu(坤舆) - More efficient corporate asset collection English | 中文文档 0x00 Introduce Tool introduction Kunyu (kunyu), whose name is taken from , is act

Knownsec, Inc. 772 Jan 05, 2023
A quick script to spot the usage of Unicode Bidi (bidirectional) characters that could lead to an Invisible Backdoor

Invisible Backdoor Detector is a little Python script that allows you to spot and remove Bidi characters that could lead to an invisible backdoor. If you don't know what that is you should check the

SecSI 28 Dec 29, 2022
A simple tool to audit Unix/*BSD/Linux system libraries to find public security vulnerabilities

master_librarian A simple tool to audit Unix/*BSD/Linux system libraries to find public security vulnerabilities. To install requirements: $ sudo pyth

CoolerVoid 167 Dec 19, 2022