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
An interactive TLS-capable intercepting HTTP proxy for penetration testers and software developers.

mitmproxy mitmproxy is an interactive, SSL/TLS-capable intercepting proxy with a console interface for HTTP/1, HTTP/2, and WebSockets. mitmdump is the

mitmproxy 29.7k Jan 04, 2023
Learning to compose soft prompts for compositional zero-shot learning.

Compositional Soft Prompting (CSP) Compositional soft prompting (CSP), a parameter-efficient learning technique to improve the zero-shot compositional

Bats Research 32 Jan 02, 2023
Discord-email-spammer-exploit - A discord email spammer exploit with python

Discord-email-spammer-exploit was made by Love ❌ code ✅ 🎈 ・Description First it

Rdimo 25 Aug 13, 2022
CVE-2021-36798 Exp: Cobalt Strike < 4.4 Dos

A denial of service (DoS) vulnerability (CVE-2021-36798) was found in Cobalt Strike. The vulnerability was fixed in the scope of the 4.4 release. More

104 Nov 09, 2022
Detection tool of malware(s) by checksum (useful for forensic)

🐍 malware_checker.py Detection tool of malware(s) by checksum (useful for forensic) 📦 Dependencies installation $ pip3 install -r requirements.txt

Fayred 1 Jan 30, 2022
client attack remotely , this script was written for educational purposes only

client attack remotely , this script was written for educational purposes only, do not use against to any victim, which you do not have permission for it

9 Jun 05, 2022
Holehe OSINT - Email to Registered Accounts

holehe allows you to check if the mail is used on different sites like twitter, instagram and will retrieve information on sites with the forgotten password function.

Palenath 3.8k Jan 06, 2023
A python script to brute-force guess the passwords to Instagram accounts

Instagram-Brute-Force The purpose of this script is to brute-force guess the passwords to Instagram accounts. Specifics: Comes with 2 separate modes i

Moondog 2 Nov 16, 2021
Spring Cloud Gateway < 3.0.7 & < 3.1.1 Code Injection (RCE)

Spring Cloud Gateway 3.0.7 & 3.1.1 Code Injection (RCE) CVE: CVE-2022-22947 CVSS: 10.0 (Vmware - https://tanzu.vmware.com/security/cve-2022-22947)

Carlos Vieira 35 Dec 28, 2022
Buff A simple BOF library I wrote under an hour to help me automate with BOF attack

What is Buff? A simple BOF library I wrote under an hour to help me automate with BOF attack. It comes with fuzzer and a generic method to generate ex

0x00 3 Nov 21, 2022
A proxy for asyncio.AbstractEventLoop for testing purposes

aioloop-proxy A proxy for asyncio.AbstractEventLoop for testing purposes. When tests writing for asyncio based code, there are controversial requireme

aio-libs 12 Dec 12, 2022
Complet and easy to run Port Scanner with Python

Port_Scanner Complet and easy to run Port Scanner with Python Installation 1- git clone https://github.com/s120000/Port_Scanner 2- cd Port_Scanner 3-

1 May 19, 2022
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
Automated tool to exploit basic buffer overflow remotely and locally & x32 and x64

Automated tool to exploit basic buffer overflow (remotely or locally) & (x32 or x64)

5 Oct 09, 2022
An forensics tool to help aid in the investigation of spoofed emails based off the email headers.

A forensic tool to make analysis of email headers easy to aid in the quick discovery of the attacker. Table of Contents About mailMeta Installation Us

Syed Modassir Ali 59 Nov 26, 2022
Make files with as many random bytes as you want

Lots o' Bytes 🔣 Make files with as many random bytes as you want! Use case Can be used to package malware that is normally small by making the downlo

Addi 1 Jan 13, 2022
You can manage your password with this program.

You must have Python compilers in order to run this program. First of all, download the compiler in the link.

Mustafa Bahadır Doğrusöz 6 Aug 07, 2021
A fully automated, accurate, and extensive scanner for finding vulnerable log4j hosts

log4j-scan A fully automated, accurate, and extensive scanner for finding vulnerable log4j hosts Features Support for lists of URLs. Fuzzing for more

Duc Linh Nguyen 4 Aug 08, 2022
A collection of over 5.1 million sub-domains and assets belonging to public bug bounty programs, compiled into a repo, for performing bulk operations.

📂 Public Bug Bounty Targets Data By BugBountyResources A collection of over 5.1M sub-domains and assets belonging to bug bounty targets, all put in a

Bug Bounty Resources 87 Dec 13, 2022
This project is all about building an amazing application that will help users manage their passwords and even generate new passwords for them

An amazing application that will help us manage our passwords and even generate new passwords for us.

1 Jan 23, 2022