Alan Colon před 7 roky
rodič
revize
884e6cb736
3 změnil soubory, kde provedl 43 přidání a 13 odebrání
  1. 18 11
      DiceTower.scad
  2. 3 2
      config.scad
  3. 22 0
      pinch.scad

+ 18 - 11
DiceTower.scad

@@ -1,6 +1,7 @@
 include <config.scad>;
 include <pie_slice.scad>;
 include <tower.scad>;
+include <pinch.scad>;
 
   module step(radius, angle, height, overhang = 2, underslope = 45) {
     step_depth = (PI * radius) * (angle / 360);
@@ -176,7 +177,7 @@ module dungeon_bars() {
       loop(n - 1);
     }
   }
-  rotate([0,0,exit]) loop(max);
+  rotate([0,0,exit + dungeon_angle]) loop(max);
 }
 
 module front_door_neg() {
@@ -200,10 +201,10 @@ module front_door_rim() {
 }
 
 module dungeon_window_neg() {
-  rotate([90,0,0]) translate([0,0,tower_radius]) cylinder(r=tower_radius, h=42, center=true);
+  rotate([0,0,dungeon_angle]) rotate([90,0,0]) translate([0,0,tower_radius]) cylinder(r=tower_radius, h=42, center=true);
 }
 module dungeon_window_rim() {
-  intersection() {
+  rotate([0,0,dungeon_angle]) intersection() {
     //cyl(tower_radius + 10, 50, center=false);
     union() {
       intersection() {
@@ -213,17 +214,23 @@ module dungeon_window_rim() {
         }
         difference() {
           rotate([90,0,0]) translate([0,0,tower_radius]) cylinder(r=tower_radius + 5, h=42, center=true);
-          scale([1,0.9,1]) dungeon_window_neg();
+          difference() {
+            rotate([0,0,-dungeon_angle]) scale([1,0.9,1]) dungeon_window_neg();
+            linear_extrude(height=50, center=false) {
+              pie_slice(tower_radius + 10, 180 + 90 - 59.5, 180 + 90 - 59.5 + 360 * (3 / (tower_radius * PI)));
+              pie_slice(tower_radius + 10, 180 + 90 + 59.5, 180 + 90 + 59.5 - 360 * (3 / (tower_radius * PI)));
+            }
+          }
         }
       }
-      intersection() {
-        linear_extrude(height=50, center=false) {
-          pie_slice(tower_radius + 10, 180 + 90 - 59.5, 180 + 90 - 59.5 + 360 * (3 / (tower_radius * PI)));
-          pie_slice(tower_radius + 10, 180 + 90 + 59.5, 180 + 90 + 59.5 - 360 * (3 / (tower_radius * PI)));
-        }
-        rotate([90,0,0]) translate([0,0,tower_radius]) cylinder(r=tower_radius + 5, h=42, center=true);
+      // intersection() {
+      //   linear_extrude(height=50, center=false) {
+      //     pie_slice(tower_radius + 10, 180 + 90 - 59.5, 180 + 90 - 59.5 + 360 * (3 / (tower_radius * PI)));
+      //     pie_slice(tower_radius + 10, 180 + 90 + 59.5, 180 + 90 + 59.5 - 360 * (3 / (tower_radius * PI)));
+      //   }
+      //   rotate([90,0,0]) translate([0,0,tower_radius]) cylinder(r=tower_radius + 5, h=42, center=true);
 
-      }
+      // }
     }
   }
 }

+ 3 - 2
config.scad

@@ -1,4 +1,4 @@
-draft=false;
+draft=true;
 
 tower_radius = 85 / 2;
 tower_height = 135;
@@ -18,4 +18,5 @@ pin_diameter=6;
 pin_height=10;
 outer_pin_distance=37.2;
 outer_pin_diameter=4;
-outer_pin_angle=180;
+outer_pin_angle=180;
+dungeon_angle=55;

+ 22 - 0
pinch.scad

@@ -0,0 +1,22 @@
+
+module pinch(pinchRadius, circleRadius, centerWidth=0, round=false, center=true) {
+
+    zero = 0.0001;
+    height=circleRadius*2;
+    width = max(zero, centerWidth);
+    cube(1,1,1,center=true);
+
+    hull() {
+        translate([0,0,center ? -circleRadius : 0]) {
+            intersection() {
+                translate([pinchRadius,0,circleRadius]) sphere(circleRadius);
+                difference() {
+                    cylinder(height, r=pinchRadius);
+                    translate([0,0,-1]) cylinder(height + 2, r=pinchRadius - zero);
+                }
+            }
+            translate([0,-.5*width,0]) cube([zero,1*width,height]);
+        }
+    }
+
+}