All cores projects merged into a single script. Layout of all cores fore rendering, will need changes.

This commit is contained in:
Matt McWilliams 2025-02-09 09:23:37 -05:00
commit 38e6045fde
32 changed files with 343896 additions and 0 deletions

3
.gitmodules vendored Normal file
View File

@ -0,0 +1,3 @@
[submodule "scad/common"]
path = scad/common
url = https://git.sixteenmillimeter.com/modules/common.git

19
LICENSE Normal file
View File

@ -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.

49
README.md Normal file
View File

@ -0,0 +1,49 @@
# Film Cores
![Film Core for 16mm with 2 inch diameter](./img/film_core_16mm_2in.stl)
Film cores are used wind film for storage, handling, editing or projection.
This project contains a script for generating cores of abitrary diameter, and the standards of 2 inch cores for camera usage and 3 inch cores for projection are included as printable STL files.
This script will generate cores for 16mm, 8mm or 35mm gauge films.
These can be used with the [split_reel](../split_reel) module.
8mm cores are not common or standard but these seem to work for storage, editing and projection.
This script will generate film cores with or without a center partition making them possible to print with no overhangs.
Keep in mind cores *without* that center partition this makes for a weaker part and may buckle under the tension of longer films depending on how it is printed.
Download the source and create an OpenSCAD file in the directory to generate arbitrary size cores as follows.
```scad
use <scad/film_core.scad>;
film_core(16, 4 * 25.4, true);
```
This will generate a 4 inch core for 16mm gauge film with a center partition.
```scad
use <scad/film_core.scad>;
film_core(8, 2.5 * 25.4, true);
```
This will generate a 2.5 inch core for 8mm gauge film without a center partition.
The script can even be used to generate cores for more uncommon gauges, such as Pathé 9.5mm.
```scad
use <scad/film_core.scad>;
film_core(9.5, 3 * 25.4, true);
```
# 35mm Cores
-----
## 35mm Cores
-----

BIN
img/film_core_16mm_2in.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

BIN
img/film_core_16mm_3in.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

BIN
img/film_core_35mm_2in.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

BIN
img/film_core_35mm_3in.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

BIN
img/film_core_8mm_2in.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

BIN
img/film_core_8mm_3in.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

41
layout.js Normal file
View File

@ -0,0 +1,41 @@
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 obj = [
"16mm_2in",
"16mm_2in_np",
"16mm_3in",
"16mm_3in_np",
"8mm_2in",
"8mm_2in_np",
"8mm_3in",
"8mm_3in_np",
"35mm_2in",
"35mm_2in_np",
"35mm_3in",
"35mm_3in_np"
];
let meta = {
objects : []
}
for (let i = 0; i < 12; i++) {
meta.objects.push ({
name : obj[i],
material : "white_plastic",
position : rotatePoint(0, 0, 160, i * (360 / 12)),
rotation : {
x : 0,
y : 90,
z : i * (360 / 12)
}
});
}
console.log(JSON.stringify(meta, null, '\t'))

186
meta.json Normal file
View File

@ -0,0 +1,186 @@
{
"camera" : {
"x" : 0,
"y" : 0,
"z" : 0
},
"objects": [
{
"name": "16mm_2in",
"material": "white_plastic",
"position": {
"x": 160,
"y": 0,
"z": 0
},
"rotation": {
"x": 0,
"y": 90,
"z": 0
}
},
{
"name": "16mm_2in_np",
"material": "white_plastic",
"position": {
"x": 138.5640646055102,
"y": 79.99999999999999,
"z": 0
},
"rotation": {
"x": 0,
"y": 90,
"z": 30
}
},
{
"name": "16mm_3in",
"material": "white_plastic",
"position": {
"x": 80.00000000000001,
"y": 138.56406460551017,
"z": 0
},
"rotation": {
"x": 0,
"y": 90,
"z": 60
}
},
{
"name": "16mm_3in_np",
"material": "white_plastic",
"position": {
"x": 9.797174393178826e-15,
"y": 160,
"z": 0
},
"rotation": {
"x": 0,
"y": 90,
"z": 90
}
},
{
"name": "8mm_2in",
"material": "white_plastic",
"position": {
"x": -79.99999999999997,
"y": 138.5640646055102,
"z": 0
},
"rotation": {
"x": 0,
"y": 90,
"z": 120
}
},
{
"name": "8mm_2in_np",
"material": "white_plastic",
"position": {
"x": -138.5640646055102,
"y": 79.99999999999999,
"z": 0
},
"rotation": {
"x": 0,
"y": 90,
"z": 150
}
},
{
"name": "8mm_3in",
"material": "white_plastic",
"position": {
"x": -160,
"y": 1.9594348786357652e-14,
"z": 0
},
"rotation": {
"x": 0,
"y": 90,
"z": 180
}
},
{
"name": "8mm_3in_np",
"material": "white_plastic",
"position": {
"x": -138.56406460551017,
"y": -80.00000000000001,
"z": 0
},
"rotation": {
"x": 0,
"y": 90,
"z": 210
}
},
{
"name": "35mm_2in",
"material": "white_plastic",
"position": {
"x": -80.00000000000007,
"y": -138.56406460551017,
"z": 0
},
"rotation": {
"x": 0,
"y": 90,
"z": 240
}
},
{
"name": "35mm_2in_np",
"material": "white_plastic",
"position": {
"x": -2.9391523179536473e-14,
"y": -160,
"z": 0
},
"rotation": {
"x": 0,
"y": 90,
"z": 270
}
},
{
"name": "35mm_3in",
"material": "white_plastic",
"position": {
"x": 80.00000000000001,
"y": -138.56406460551017,
"z": 0
},
"rotation": {
"x": 0,
"y": 90,
"z": 300
}
},
{
"name": "35mm_3in_np",
"material": "white_plastic",
"position": {
"x": 138.56406460551014,
"y": -80.00000000000007,
"z": 0
},
"rotation": {
"x": 0,
"y": 90,
"z": 330
}
}
],
"src" : [
"README.md",
"LICENSE",
"scad.sh",
"scad/film_core.scad",
"scad/common/common.scad",
"scad/common/c14n_stl.py",
"scad/common/scad.sh"
]
}

3
scad.sh Normal file
View File

@ -0,0 +1,3 @@
#!/bin/bash
bash scad/common/scad.sh scad/film_core.scad "${@}"

1
scad/common Submodule

@ -0,0 +1 @@
Subproject commit e2eeb27f173d739a174c0d147bcb62a16859e2d9

108
scad/film_core.scad Normal file
View File

@ -0,0 +1,108 @@
use <./common/common.scad>;
$fn = 200;
IN = 25.4;
InnerD = 30.6;
module supports (Gauge = 16, Count = 8, OuterD = 50.8) {
rotate([0, 0, -13]) for (i = [0 : Count - 1]) {
rotate ([0, 0, i * (360 / Count)]) {
translate ([(InnerD / 2) + ((OuterD - InnerD) / 4) - 1, 0, 0]) {
cube([((OuterD - InnerD - 1) / 2), 2, Gauge], center = true);
}
}
}
}
module inner_core_shape (Gauge = 16, D, X, CubeW, CubeL, Pad = 0) {
union () {
cylinder(r = R(D), h = Gauge + Pad, center = true);
translate([X, 0, 0]) {
cube([CubeW, CubeL, Gauge + Pad], center = true);
}
}
}
module inner_core (Gauge = 16) {
difference () {
inner_core_shape(Gauge, InnerD, (InnerD / 2) + 0.5, 6, 7);
inner_core_shape(Gauge, InnerD - 4, (InnerD / 2) - 0.5, 4, 4, 1);
}
}
module clip (Gauge = 16, OuterD = 50.8) {
translate([(OuterD - 3.5) / 2, 0, 0]) {
rotate(45, [0, 0, 1]){
cube([7, 1, Gauge + 1], center = true);
}
}
}
module outer_clip (Gauge = 16, OuterD = 50.8) {
translate([(OuterD - 3.75) / 2, 0, 0]) {
difference() {
rotate(45, [0, 0, 1]){
cube([9, 4, Gauge], center = true);
}
translate([3.9, 0, 0]) {
cube([6, 10, Gauge + 1], center = true);
}
}
}
}
module outer_core (Gauge = 16, OuterD = 50.8) {
difference () {
union () {
difference () {
cylinder(r = R(OuterD), h = Gauge, center = true);
cylinder(r = R(OuterD) - 2, h = Gauge + 1, center = true);
}
outer_clip(Gauge, OuterD);
}
clip(Gauge, OuterD);
}
}
module film_core (Gauge = 16, OuterD = 50.8, Partition = true) {
supports(Gauge, 8, OuterD);
inner_core(Gauge);
outer_core(Gauge, OuterD);
if (Partition) {
difference () {
cylinder(r = R(OuterD - 1), h = 2, center = true);
outer_clip(Gauge, OuterD);
clip(Gauge, OuterD);
inner_core_shape(Gauge, InnerD - 3, (InnerD / 2) - 0.5, 4, 4, 1);
}
}
}
PART = "16mm_2in";
if (PART == "16mm_2in") {
film_core(16, 2 * IN, true);
} else if (PART == "16mm_3in") {
film_core(16, 3 * IN, true);
} else if (PART == "16mm_2in_np") {
film_core(16, 2 * IN, false);
} else if (PART == "16mm_3in_np") {
film_core(16, 3 * IN, false);
} else if (PART == "8mm_2in") {
film_core(8, 2 * IN, true);
} else if (PART == "8mm_3in") {
film_core(8, 3 * IN, true);
} else if (PART == "8mm_2in_np") {
film_core(8, 2 * IN, false);
} else if (PART == "8mm_3in_np") {
film_core(8, 3 * IN, false);
} else if (PART == "35mm_2in") {
film_core(35, 2 * IN, true);
} else if (PART == "35mm_3in") {
film_core(35, 3 * IN, true);
} else if (PART == "35mm_2in_np") {
film_core(35, 2 * IN, false);
} else if (PART == "35mm_3in_np") {
film_core(35, 3 * IN, false);
}

33672
stl/film_core_16mm_2in.stl Normal file

File diff suppressed because it is too large Load Diff

23480
stl/film_core_16mm_2in_np.stl Normal file

File diff suppressed because it is too large Load Diff

33910
stl/film_core_16mm_3in.stl Normal file

File diff suppressed because it is too large Load Diff

23438
stl/film_core_16mm_3in_np.stl Normal file

File diff suppressed because it is too large Load Diff

33658
stl/film_core_35mm_2in.stl Normal file

File diff suppressed because it is too large Load Diff

23480
stl/film_core_35mm_2in_np.stl Normal file

File diff suppressed because it is too large Load Diff

33910
stl/film_core_35mm_3in.stl Normal file

File diff suppressed because it is too large Load Diff

23438
stl/film_core_35mm_3in_np.stl Normal file

File diff suppressed because it is too large Load Diff

33672
stl/film_core_8mm_2in.stl Normal file

File diff suppressed because it is too large Load Diff

23480
stl/film_core_8mm_2in_np.stl Normal file

File diff suppressed because it is too large Load Diff

33910
stl/film_core_8mm_3in.stl Normal file

File diff suppressed because it is too large Load Diff

23438
stl/film_core_8mm_3in_np.stl Normal file

File diff suppressed because it is too large Load Diff