Put all adapters in a single project. Render the three existing adapters
This commit is contained in:
commit
769a149a4d
|
@ -0,0 +1,3 @@
|
|||
[submodule "scad/common"]
|
||||
path = scad/common
|
||||
url = https://git.sixteenmillimeter.com/modules/common.git
|
|
@ -0,0 +1,19 @@
|
|||
Copyright (c) 2025 M McWilliams
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
|
@ -0,0 +1,40 @@
|
|||
# Film Adapters
|
||||
|
||||
This module contains various adapters for film reels and cores to allow for interoperability between tools designed for differnt formats.
|
||||
|
||||
Whats included:
|
||||
|
||||
* [16mm Core Adapter](#16mm_core)
|
||||
* [Super8 to 16mm Core Adapter](#super8_16mm_core)
|
||||
* [16mm to Super8 Reel Adapter](#16mm_super8_reel)
|
||||
|
||||
-----
|
||||
|
||||
<a name="16mm_core"></a>
|
||||
|
||||
## 16mm Core Adapter
|
||||
|
||||
This adapts the square spindles typically used for 16mm daylight spools to hold a 16mm film core.
|
||||
It can be used in cameras, rewinds and other gear that will hold a daylight spool.
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
<a name="super8_16mm_core"></a>
|
||||
|
||||
## Super8 to 16mm Core Adapter
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
<a name="16mm_super8_reel"></a>
|
||||
|
||||
## 16mm to Super8 Reel Adapter
|
||||
|
||||
This adapts the square spindles
|
||||
|
||||

|
||||
|
||||

|
Binary file not shown.
After Width: | Height: | Size: 12 KiB |
Binary file not shown.
After Width: | Height: | Size: 13 KiB |
Binary file not shown.
After Width: | Height: | Size: 14 KiB |
|
@ -0,0 +1,36 @@
|
|||
function rotatePoint(centerX, centerY, distance, angleInDegrees) {
|
||||
const angleInRadians = angleInDegrees * (Math.PI / 180);
|
||||
|
||||
const x = centerX + (distance * Math.cos(angleInRadians));
|
||||
const y = centerY + (distance * Math.sin(angleInRadians));
|
||||
|
||||
return { x, y, z : 0 };
|
||||
}
|
||||
let plastic = [
|
||||
'gray_plastic2',
|
||||
'yellow_plastic',
|
||||
'neonblue_plastic'
|
||||
]
|
||||
let obj = [
|
||||
'adapter_16mm_core',
|
||||
'adapter_16mm_to_super8_reel',
|
||||
'adapter_super8_to_16mm_core'
|
||||
];
|
||||
let meta = {
|
||||
objects : []
|
||||
}
|
||||
let starting = 33/2; //(360 / (obj.length * 2));
|
||||
for (let i = 0; i < obj.length; i++) {
|
||||
meta.objects.push ({
|
||||
name : obj[i],
|
||||
material : plastic[i],
|
||||
position : rotatePoint(0, 0, 40, starting + (i * (360 / obj.length))),
|
||||
rotation : {
|
||||
x : 0,
|
||||
y : 90,
|
||||
z : starting + (i * (360 / obj.length))
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
console.log(JSON.stringify(meta, null, '\t'))
|
|
@ -0,0 +1,62 @@
|
|||
{
|
||||
"camera" : {
|
||||
"x" : 60,
|
||||
"y" : -60,
|
||||
"z" : 0,
|
||||
"focus_x" : 30,
|
||||
"focus_y" : -30
|
||||
},
|
||||
"objects": [
|
||||
{
|
||||
"name": "adapter_16mm_core",
|
||||
"material": "gray_plastic2",
|
||||
"position": {
|
||||
"x": 38.35278939472772,
|
||||
"y": 11.360613788156906,
|
||||
"z": 0
|
||||
},
|
||||
"rotation": {
|
||||
"x": 0,
|
||||
"y": 90,
|
||||
"z": 16.5
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "adapter_16mm_to_super8_reel",
|
||||
"material": "yellow_plastic",
|
||||
"position": {
|
||||
"x": -29.014974840491504,
|
||||
"y": 27.534183027750156,
|
||||
"z": 0
|
||||
},
|
||||
"rotation": {
|
||||
"x": 0,
|
||||
"y": 90,
|
||||
"z": 136.5
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "adapter_super8_to_16mm_core",
|
||||
"material": "neonblue_plastic",
|
||||
"position": {
|
||||
"x": -9.337814554236205,
|
||||
"y": -38.894796815907064,
|
||||
"z": 0
|
||||
},
|
||||
"rotation": {
|
||||
"x": 0,
|
||||
"y": 90,
|
||||
"z": 256.5
|
||||
}
|
||||
}
|
||||
],
|
||||
"src" : [
|
||||
"README.md",
|
||||
"LICENSE",
|
||||
"scad.sh",
|
||||
"scad/film_adapter.scad",
|
||||
"scad/common/common.scad",
|
||||
"scad/common/c14n_stl.py",
|
||||
"scad/common/scad.sh"
|
||||
]
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
#!/bin/bash
|
||||
|
||||
bash scad/common/scad.sh scad/adapter.scad "${@}"
|
|
@ -0,0 +1,119 @@
|
|||
use <./common/common.scad>;
|
||||
|
||||
$fn = 80;
|
||||
|
||||
module square_spindle_reference () {
|
||||
SQUARE = 7.95;
|
||||
translate([0, 0, 12.3 - 1]) {
|
||||
difference() {
|
||||
union() {
|
||||
translate([0, 0, -(12.3 / 2)]) cube([SQUARE, SQUARE, 12.3], center = true);
|
||||
rotate([0, 90, 0]) cylinder(r = SQUARE / 2, h =8, center = true);
|
||||
rotate([0, 90, 90]) cylinder(r = SQUARE / 2, h =8, center = true);
|
||||
}
|
||||
for (i = [0 : 4]) {
|
||||
rotate([0, 0, i * 90]) translate([0, 4.9, 1]) rotate([12, 0, 0]) cube([SQUARE, 2, 10], center = true);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
translate([0, 0, (39 / 2)]) cylinder(r = 6.57 / 2, h = 39, center = true, $fn = 60);
|
||||
}
|
||||
|
||||
|
||||
module square_spindle_reference_alternate () {
|
||||
$fn = 60;
|
||||
difference(){
|
||||
translate([0, 0, -1.5]) cube([7.5, 7.5, 21.5], center = true);
|
||||
for (i = [0:4]) {
|
||||
rotate([0, 0, (i * 90)]){
|
||||
translate([(7.5 / 2) + .4, (7.5 / 2) + .4, 18.5 / 2]) rotate([0, -15, 45]) cube([2.5, 7.5, 7.5], center = true);
|
||||
}
|
||||
}
|
||||
}
|
||||
difference () {
|
||||
union() {
|
||||
translate([0, 0, (18.5 / 2) + (3.5 / 2)]) cylinder(r = R(7.5), h = 3.5, center = true);
|
||||
translate([0, 0, (18.5 / 2) + (7.5 / 2)]) sphere(r =(7.5));
|
||||
}
|
||||
translate ([0, 0, (18.5 / 2) + 7.5]) cube([10, 10, 2], center = true);
|
||||
}
|
||||
|
||||
translate([0, 0, -(18.5/ 2) - (3 / 2) - 3]) cylinder(r = R(16), h = 3, center = true);
|
||||
}
|
||||
|
||||
module super8_void (Height = 50) {
|
||||
fin_w = 2;
|
||||
center_d = 13.5;
|
||||
fin_l = (center_d / 2) + 4;
|
||||
for (i = [0:2]) {
|
||||
rotate([0, 0, (i * (360/3))]){
|
||||
translate([0, fin_l/2, 0]) cube([fin_w, fin_l, Height], center = true);
|
||||
}
|
||||
}
|
||||
cylinder(r = R(center_d), h = Height, center = true);
|
||||
}
|
||||
|
||||
module 16mm_square_spindle_void (Height = 21.5) {
|
||||
cube([8.3, 8.3, Height], center = true);
|
||||
}
|
||||
|
||||
module 16mm_core_adapter_body () {
|
||||
$fn = 100;
|
||||
difference () {
|
||||
union () {
|
||||
cylinder(r1 = 13.2, r2 = 12.8, h = 16.6, center = true);
|
||||
translate([0, 0, -8.8]) cylinder(r = 15, h = 1, center = true);
|
||||
translate([14.5, 0, -.5]) cube([3.6, 3.6, 17.6], center = true);
|
||||
}
|
||||
children();
|
||||
}
|
||||
}
|
||||
|
||||
module 16mm_core_adapter () {
|
||||
16mm_core_adapter_body() 16mm_square_spindle_void();
|
||||
}
|
||||
|
||||
module super8_to_16mm_core_adapter () {
|
||||
16mm_core_adapter_body() super8_void();
|
||||
}
|
||||
|
||||
module 16mm_to_super8_reel_adapter () {
|
||||
BOTTOM_D = 21.53;
|
||||
BOTTOM_H = 1.5;
|
||||
D = 12.72;
|
||||
H = 10;
|
||||
SQUARE = 8.2;
|
||||
TAPER = 1.4;
|
||||
PEG_H = 9;
|
||||
PEG_L = 3.18;
|
||||
PEG_W = 2;
|
||||
|
||||
$fn = 200;
|
||||
|
||||
difference () {
|
||||
union () {
|
||||
cylinder(r = R(BOTTOM_D), h = BOTTOM_H, center = true);
|
||||
translate([0, 0, (BOTTOM_H / 2) + H / 2]) cylinder(r = R(D), h = H, center = true);
|
||||
translate([0, 0, (BOTTOM_H / 2) + H + (TAPER / 2)]) cylinder(r1 = R(D), r2 = R(D) - TAPER, h = TAPER, center = true);
|
||||
}
|
||||
rotate([0, 0, 45]) cube([SQUARE, SQUARE, 60], center = true);
|
||||
translate([0, 10, 0]) cube([3, 20, 60], center = true);
|
||||
}
|
||||
for (i = [1 : 2]) {
|
||||
rotate([0, 0, i * 120]) translate([0, (D / 2) + (PEG_L / 2) - (PEG_W / 2), (BOTTOM_H / 2) + (PEG_H / 2)]) cube([PEG_W, PEG_L, PEG_H], center = true);
|
||||
rotate([0, 0, i * 120]) translate([0, (D / 2) + (PEG_L / 2) + (PEG_W / 3), (BOTTOM_H / 2) + (PEG_H / 2)]) cylinder(r = R(PEG_W), h = PEG_H, center = true, $fn = 40);
|
||||
}
|
||||
}
|
||||
|
||||
PART = "16mm_core";
|
||||
|
||||
if (PART == "16mm_core") {
|
||||
16mm_core_adapter();
|
||||
} else if (PART == "super8_to_16mm_core") {
|
||||
super8_to_16mm_core_adapter();
|
||||
} else if (PART == "16mm_to_super8_reel") {
|
||||
16mm_to_super8_reel_adapter();
|
||||
} else {
|
||||
//square_spindle_reference_alternate();
|
||||
}
|
|
@ -0,0 +1 @@
|
|||
Subproject commit e2eeb27f173d739a174c0d147bcb62a16859e2d9
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue