Skip to content

Instantly share code, notes, and snippets.

@thehans
thehans / rounded_poly_disk.scad
Last active December 30, 2020 21:40
OpenSCAD Rounded poly disk example. Different radii for xy vs z
n = 8;
height = 40;
width = 50; // distance across flats of polygon (when n is even)
rxy = 8;
rz = 3;
width2 = 30;
rxy2 = rxy*width2/width;
rz2 = 0.1; // small but nonzero
@thehans
thehans / chamfer_extrude.scad
Created July 18, 2020 20:25
OpenSCAD example of one way to chamfer when extruding a 2D profile
$fs=0.5;
$fa=1;
// example usage
chamfer_extrude(height=10,ch1=-3,ch2=3) {
hull() {
translate([-10,0]) circle(5, $fn=64);
translate([10,0]) circle(5, $fn=64);
}
square([10,30],center=true);
@thehans
thehans / complex_transform.scad
Created June 22, 2020 12:40
OpenSCAD demo of transformation using complex numbers
// Demo of using complex numbers to map one 2D point to another.
// Performs rotate and/or scale transform in one operation, without any
// transcendental (trigonometric) functions nor irrational numbers*.
// *please ignore the circular input data
// Enable animation for demo!
// multiply complex numbers
function cmul(c1,c2) = let(a=c1[0],b=c1[1],c=c2[0],d=c2[1])
[a*c-b*d, a*d+b*c];
# If the design does not create a "sync" clock domain, it is created by the nMigen build system
# using the platform default clock (and default reset, if any).
from nmigen import *
from nmigen_boards.de10_nano import *
class Blinky(Elaboratable):
def elaborate(self, platform):
leds = Array(platform.request("led", i) for i in range(0,8))
@thehans
thehans / rotate_extrude3D.scad
Created November 23, 2019 18:58
Example of creating a cutout for a 3D object which is pivoting around the origin.
module rotate_extrude3D(clearance, bounds=[1000,1000]) {
rotate_extrude()
intersection() { // clip to positive x axis before rotate_extrude
translate([0,-bounds[1]/2]) square(bounds);
offset(delta=clearance) // add clearance to profile
union() for(a=[-90:$fa:90]) // union projections from multiple angles
projection() rotate([-90,a]) children();
}
}
@thehans
thehans / duct.scad
Created November 18, 2019 18:39
Basic duct transition using hull in OpenSCAD
fan=120;
ductl=110;
ductw=40;
h=150;
wallTh = 2;
module transition(h,l1,w1,l2,w2,eps=0.01) {
hull() {
cube([l1,w1,eps], center=true);
translate([0,0,h-eps]) cube([w2,l2,eps], center=true);
@thehans
thehans / perf.scad
Created November 6, 2019 20:15
Performance test of complex object unioned with many simple objects
$fn = 100;
module rounded_cube(size,r,center=false)
{
s = is_list(size) ? size : [size,size,size];
translate(center ? -s/2 : [0,0,0])
hull() {
translate([ r, r, r]) sphere(r=r);
translate([ r, r,s.z-r]) sphere(r=r);
translate([ r,s.y-r, r]) sphere(r=r);
@thehans
thehans / rotate_extrude2.scad
Created November 5, 2019 21:49
Backwards compatible rotate_extrude for OpenSCAD with angle parameter
// older versions of OpenSCAD do not support "angle" parameter for rotate_extrude
// this module provides that capability even when using older versions (such as thingiverse customizer)
module rotate_extrude2(angle = 360, convexity = 2, size = 1000) {
module angle_cut(angle = 90, size = 1000) {
x = size*cos((angle / 2));
y = size*sin((angle / 2));
translate([0, 0, -size]) linear_extrude((2 * size)) polygon([[0, 0], [x, y], [x, size], [-size, size], [-size, -size], [x, -size], [x, -y]]);
}
// support for angle parameter in rotate_extrude was added after release 2015.03
// Thingiverse customizer is still on 2015.03
@thehans
thehans / rounded_cube.scad
Last active November 3, 2019 20:50
Rounded cube implementation
use <functional.scad>
$fa = 0.1;
$fs = 0.1;
module rounded_cube(size, r=0, center=false) {
s = is_array(size) ? size : [size,size,size];
c = is_array(center) ?
[center.x ? 0 : s.x, center.y ? 0: s.y, center.z ? 0 : s.z]/2 :
(center ? 0 : s/2);
@thehans
thehans / segmented_bit_sieve.cpp
Last active August 29, 2019 15:34
POC "PunchWheel" tweak to Kim Walisch's Segmented Sieve example. (First revision is Kim's unedited for comparison)
/// @file segmented_bit_sieve.cpp
/// @author Kim Walisch, <kim.walisch@gmail.com>
/// @brief This is an implementation of the segmented sieve of
/// Eratosthenes which uses a bit array with 16 numbers per
/// byte. It generates the primes below 10^10 in 7.25 seconds
/// on an Intel Core i7-6700 3.4 GHz CPU.
/// @license Public domain.
#include <iostream>
#include <algorithm>