4 changed files with 249 additions and 1 deletions
@ -0,0 +1,110 @@ |
|||||
|
from cadquery import exporters |
||||
|
from cq_warehouse.extensions import Workplane |
||||
|
from cq_warehouse.fastener import * |
||||
|
from cq_warehouse.thread import * |
||||
|
from cqmore.curve import archimedeanSpiral, circle |
||||
|
from cqmore.polygon import regularPolygon, star |
||||
|
from cqmore.polyhedron import polarZonohedra, Polyhedron, superellipsoid |
||||
|
from svg_path import addSvgPath |
||||
|
from svgpathtools import svg2paths |
||||
|
import cadquery as cq |
||||
|
import cqmore |
||||
|
from math import ceil, floor |
||||
|
|
||||
|
Workplane = cqmore.extend(Workplane) |
||||
|
Workplane.addSvgPath = addSvgPath |
||||
|
|
||||
|
screw_simple = False # Controls whether to not actually make the screw threads, saves time running it for testing |
||||
|
|
||||
|
screw_length = 10 |
||||
|
top_screw = ButtonHeadScrew( |
||||
|
size="M3-0.5", |
||||
|
fastener_type="iso7380_1", |
||||
|
length=screw_length * MM, |
||||
|
simple=screw_simple, |
||||
|
) |
||||
|
|
||||
|
x_board_size = 36.07 |
||||
|
y_board_size = 28.75 |
||||
|
|
||||
|
hole_dist_x = 22.76 |
||||
|
hole_dist_y = 31.29 |
||||
|
|
||||
|
hole_diameter = 3.44 |
||||
|
hole_radius = hole_diameter / 2.0 |
||||
|
|
||||
|
box_width = 65.0 |
||||
|
box_height = 30.0 |
||||
|
box_length = 100.0 |
||||
|
wall_thickness = 2.0 |
||||
|
|
||||
|
battery_holder_width = 62.67 |
||||
|
battery_holder_length = 57.36 |
||||
|
battery_holder_height = 15.83 |
||||
|
battery_holder_hole_dist = ( |
||||
|
14.76 # distance between the centers of the countersunk holes |
||||
|
) |
||||
|
battery_holer_hole_dist_from_side = ( |
||||
|
8.39 # distance from side to middle of the first hole |
||||
|
) |
||||
|
|
||||
|
result = ( |
||||
|
Workplane() |
||||
|
.box(box_length, box_width, box_height) |
||||
|
.box( |
||||
|
box_length - wall_thickness, |
||||
|
box_width - wall_thickness, |
||||
|
box_height - wall_thickness, |
||||
|
combine="cut", |
||||
|
) |
||||
|
) |
||||
|
|
||||
|
top = result.workplane(offset=(box_height / 2) - 2).split(keepTop=True) |
||||
|
|
||||
|
top = top.workplane(offset=-1.5).box( |
||||
|
box_length + wall_thickness, box_width + wall_thickness, 2, combine="cut" |
||||
|
) |
||||
|
|
||||
|
top = top.workplane(offset=-0.8).box( |
||||
|
box_length - wall_thickness - 0.05, box_width - wall_thickness - 0.05, 1 |
||||
|
) |
||||
|
|
||||
|
top = ( |
||||
|
top.faces(">Z[3]") |
||||
|
.rect( |
||||
|
box_length - 5.5, |
||||
|
box_width - 5.5, |
||||
|
forConstruction=True, |
||||
|
) |
||||
|
.vertices() |
||||
|
.cboreHole(2.0, 3.0, 1.1) |
||||
|
) |
||||
|
|
||||
|
|
||||
|
bottom = result.workplane(offset=(box_height / 2) - 2).split(keepBottom=True) |
||||
|
|
||||
|
bottom = bottom.workplane(offset=box_height + 5).box( |
||||
|
box_length - 1, box_width - 1, box_height, combine="cut" |
||||
|
) |
||||
|
|
||||
|
bottom = ( |
||||
|
bottom.workplane(offset=(box_height / 2) - 10) |
||||
|
.rect(box_length - 5.5, box_width - 5.5) |
||||
|
.vertices() |
||||
|
.cylinder(box_height - wall_thickness * 1.5, 2.5) |
||||
|
) |
||||
|
|
||||
|
bottom = ( |
||||
|
bottom.workplane(offset=(box_height / 2) + 3.0) |
||||
|
.rect(box_length - 5.5, box_width - 5.5) |
||||
|
.vertices() |
||||
|
.threadedHole(top_screw, 10, simple=screw_simple, fit="Close", counterSunk=False) |
||||
|
) |
||||
|
|
||||
|
cq.exporters.export(bottom, "/home/deck/model_files/carlon_probe_amp_enclosure_box.stl") |
||||
|
cq.exporters.export(top, "/home/deck/model_files/carlon_probe_amp_enclosure_lid.stl") |
||||
|
|
||||
|
try: |
||||
|
show_object(bottom) |
||||
|
except NameError: |
||||
|
pass |
@ -0,0 +1,85 @@ |
|||||
|
from cadquery import exporters |
||||
|
from cq_warehouse.extensions import Workplane |
||||
|
from cq_warehouse.fastener import * |
||||
|
from cq_warehouse.thread import * |
||||
|
from svg_path import addSvgPath |
||||
|
from svgpathtools import svg2paths |
||||
|
from cqmore.polygon import regularPolygon |
||||
|
import cadquery as cq |
||||
|
import cqmore |
||||
|
|
||||
|
Workplane = cqmore.extend(Workplane) |
||||
|
Workplane.addSvgPath = addSvgPath |
||||
|
|
||||
|
probe_diameter = 22.15 # OD of the main probe housing |
||||
|
probe_radius = probe_diameter / 2.0 |
||||
|
probe_length = 100.0 # length of the probe housing |
||||
|
coax_diameter = 7.5 # OD diameter of the coax with insulation |
||||
|
coax_radius = coax_diameter / 2.0 |
||||
|
|
||||
|
ground_cable_diameter = 3.0 |
||||
|
ground_cable_radius = ground_cable_diameter / 2.0 |
||||
|
wall_width = 2.0 |
||||
|
|
||||
|
gland_od = 22.0 |
||||
|
gland_or = gland_od / 2.0 |
||||
|
gland_id = 16 |
||||
|
gland_ir = gland_id / 2.0 |
||||
|
|
||||
|
probe_middle = Workplane() |
||||
|
probe_middle = probe_middle.cylinder(probe_length, probe_radius + wall_width) |
||||
|
probe_middle = probe_middle.cylinder(probe_length - 2, probe_radius, combine="cut") |
||||
|
probe_middle = probe_middle.workplane(offset=probe_length / 2.0).cylinder( |
||||
|
2, coax_radius, combine="cut" |
||||
|
) |
||||
|
probe_middle = ( |
||||
|
probe_middle.workplane(offset=probe_length / 2.0) |
||||
|
.move(3, 8) |
||||
|
.cylinder(2, ground_cable_radius, combine="cut") |
||||
|
) |
||||
|
probe_middle = probe_middle.workplane(offset=-(probe_length / 2.0) + 2).cylinder( |
||||
|
2, probe_radius |
||||
|
) |
||||
|
probe_middle = probe_middle.workplane(offset=-(probe_length / 2.0)).cylinder( |
||||
|
11, gland_ir, combine="cut" |
||||
|
) |
||||
|
|
||||
|
cable_end_cap = probe_middle.workplane(offset=(-probe_length / 2.0) + 26).split( |
||||
|
keepBottom=True |
||||
|
) |
||||
|
cable_end_cap = ( |
||||
|
cable_end_cap.workplane(offset=(-probe_length / 2.0) + 57) |
||||
|
.move(12, 0) |
||||
|
.sphere(2.5, combine="cut") |
||||
|
) |
||||
|
probe_middle = probe_middle.workplane(offset=(-probe_length / 2.0) + 15).split( |
||||
|
keepTop=True |
||||
|
) |
||||
|
|
||||
|
probe_end_cap = probe_middle.workplane(offset=15).split(keepTop=True) |
||||
|
probe_middle = ( |
||||
|
Workplane() |
||||
|
.makePolygon( |
||||
|
regularPolygon( |
||||
|
nSides=6, |
||||
|
radius=probe_radius * 1.3, |
||||
|
thetaStart=0, |
||||
|
thetaEnd=360, |
||||
|
) |
||||
|
) |
||||
|
.extrude(57.438) |
||||
|
) # Difference between probe length and end caps lengths |
||||
|
probe_middle = probe_middle.cylinder(probe_length, probe_radius + 0.12, combine="cut") |
||||
|
|
||||
|
cq.exporters.export(probe_middle, "/home/deck/model_files/carlson_probe_middle.stl") |
||||
|
cq.exporters.export( |
||||
|
cable_end_cap, "/home/deck/model_files/carlson_probe_cable_end_cap.stl" |
||||
|
) |
||||
|
cq.exporters.export( |
||||
|
probe_end_cap, "/home/deck/model_files/carlson_probe_probe_end_cap.stl" |
||||
|
) |
||||
|
|
||||
|
try: |
||||
|
show_object(probe_middle) |
||||
|
except NameError: |
||||
|
pass |
@ -0,0 +1,53 @@ |
|||||
|
from cadquery import exporters |
||||
|
from cq_warehouse.extensions import Workplane |
||||
|
from cq_warehouse.fastener import * |
||||
|
from cq_warehouse.thread import * |
||||
|
from cqmore.curve import archimedeanSpiral, circle |
||||
|
from cqmore.polygon import regularPolygon, star |
||||
|
from cqmore.polyhedron import polarZonohedra, Polyhedron, superellipsoid |
||||
|
from svg_path import addSvgPath |
||||
|
from svgpathtools import svg2paths |
||||
|
import cadquery as cq |
||||
|
import cqmore |
||||
|
|
||||
|
Workplane = cqmore.extend(Workplane) |
||||
|
Workplane.addSvgPath = addSvgPath |
||||
|
|
||||
|
simple = False |
||||
|
|
||||
|
width = 120 |
||||
|
length = 120 |
||||
|
height = 30 |
||||
|
|
||||
|
screw = ButtonHeadScrew( |
||||
|
size="M16-2", fastener_type="iso7380_1", length=(height - 2) * MM, simple=simple |
||||
|
) |
||||
|
|
||||
|
stand_base = Workplane().box(width, length, height) |
||||
|
|
||||
|
stand_base = stand_base.workplane(offset=23.8).threadedHole( |
||||
|
screw, height - 2, simple=simple, fit="Loose" |
||||
|
) |
||||
|
|
||||
|
stand_base = ( |
||||
|
stand_base.workplane(offset=-(height / 2.0)) |
||||
|
.rect(width - 15, length - 15, forConstruction=True) |
||||
|
.vertices() |
||||
|
.cylinder(0.6, 6 / 2.0, combine="cut") |
||||
|
) |
||||
|
|
||||
|
stand_top = Workplane().union(screw).workplane(offset=11).cylinder(10.0, 60.0) |
||||
|
stand_top = ( |
||||
|
stand_top.workplane(offset=3.2389) |
||||
|
.rect(width - 30, length - 30, forConstruction=True) |
||||
|
.vertices() |
||||
|
.cylinder(5.0, 10.0) |
||||
|
) |
||||
|
|
||||
|
cq.exporters.export(stand_base, "/home/deck/model_files/microscope_platform_base.stl") |
||||
|
cq.exporters.export(stand_top, "/home/deck/model_files/microscope_platform_top.stl") |
||||
|
|
||||
|
try: |
||||
|
show_object(stand_top) |
||||
|
except NameError: |
||||
|
pass |
Loading…
Reference in new issue