Barrel position solver

This commit is contained in:
Leni Aniva 2025-05-15 21:20:22 -07:00
parent 0fb88a97d3
commit 63c2c74e02
Signed by: aniva
GPG Key ID: D5F96287843E8DFB
1 changed files with 75 additions and 10 deletions

View File

@ -160,11 +160,22 @@ class Onbashira(Model):
.circle(self.rotor_bind_bolt_diam/2, mode="s")
)
def bearing_stator(self) -> Cq.Workplane:
return (
result = (
Cq.Workplane()
.placeSketch(self.profile_bearing_stator())
.extrude(self.bearing_disk_thickness)
)
for i in range(self.n_side):
angle = (i+0.5) * math.radians(360 / self.n_side)
result.faces(">Z").moveTo(
self.stator_bind_radius * math.cos(angle),
self.stator_bind_radius * math.sin(angle),
).tagPlane(f"holeF{i}")
result.faces("<Z").moveTo(
self.stator_bind_radius * math.cos(-angle),
self.stator_bind_radius * math.sin(-angle),
).tagPlane(f"holeB{i}", direction="-Z")
return result
@target(name="bearing-rotor", kind=TargetKind.DXF)
def profile_bearing_rotor(self) -> Cq.Sketch:
bolt_angle = 180 / self.n_side
@ -236,7 +247,7 @@ class Onbashira(Model):
)
return outer - inner
def assembly_rotor(self) -> Cq.Assembly:
def assembly_barrel(self) -> Cq.Assembly:
z_lower = -self.bearing_disk_gap/2 - self.bearing_disk_thickness
a = (
Cq.Assembly()
@ -665,6 +676,32 @@ class Onbashira(Model):
result.tagAbsolute(f"holeRPO{i}", (dr, x, -py), direction="+X")
#result.tagAbsolute(f"holeLSO{i}", locrot * Cq.Location(dr, -x, py), direction="+X")
result.tagAbsolute(f"holeRSO{i}", locrot * Cq.Location(dr, -x, -py), direction="+X")
th = math.pi / self.n_side
r = self.bulk_radius
flange = (
Cq.Workplane()
.sketch()
.push([
(r, r * math.tan(th))
])
.circle(self.angle_joint_flange_radius)
.reset()
.regularPolygon(self.side_width_inner, self.n_side, mode="i")
.finalize()
.extrude(self.angle_joint_flange_thickness)
.translate((0, 0, -self.angle_joint_flange_thickness/2))
)
ri = self.stator_bind_radius
h = self.angle_joint_flange_thickness
cyl = Cq.Solid.makeCylinder(
radius=self.rotor_bind_bolt_diam/2,
height=h,
pnt=(ri * math.cos(th), ri * math.sin(th), -h/2),
)
result = result + flange - cyl
result.tagAbsolute("holeStatorL", (ri * math.cos(th), ri * math.sin(th), h/2), direction="+Z")
result.tagAbsolute("holeStatorR", (ri * math.cos(th), ri * math.sin(th), -h/2), direction="-Z")
return result
@target(name="angle-joint-chamber-back")
@ -737,7 +774,6 @@ class Onbashira(Model):
.extrude(self.angle_joint_depth)
.translate((0, 0, -self.angle_joint_depth/2))
.cut(slot.translate((0, 0, self.angle_joint_gap/2)))
.cut(slot.translate((0, 0, -self.angle_joint_depth-self.angle_joint_gap/2)))
.intersect(intersector)
.cut(chamber_intersector)
.cut(mating1n)
@ -777,6 +813,33 @@ class Onbashira(Model):
result.tagAbsolute(f"holeLPO{i}", (dr, x, py), direction="+X")
#result.tagAbsolute(f"holeLSO{i}", locrot * Cq.Location(dr, -x, py), direction="+X")
result.tagAbsolute(f"holeLSO{i}", locrot * Cq.Location(dr, -x, py), direction="+X")
th = math.pi / self.n_side
r = self.bulk_radius
flange_z = self.angle_joint_depth / 2 - self.side_thickness
flange = (
Cq.Workplane()
.sketch()
.push([
(r, r * math.tan(th))
])
.circle(self.angle_joint_flange_radius)
.reset()
.regularPolygon(self.side_width_inner, self.n_side, mode="i")
.finalize()
.extrude(self.angle_joint_flange_thickness)
.translate((0, 0, -flange_z))
)
ri = self.stator_bind_radius
h = self.angle_joint_flange_thickness
cyl = Cq.Solid.makeCylinder(
radius=self.rotor_bind_bolt_diam/2,
height=h,
pnt=(ri * math.cos(th), ri * math.sin(th), -flange_z),
)
result = result + flange - cyl
result.tagAbsolute("holeStatorL", (ri * math.cos(th), ri * math.sin(th), -flange_z+h/2), direction="+Z")
result.tagAbsolute("holeStatorR", (ri * math.cos(th), ri * math.sin(th), -flange_z-h/2), direction="-Z")
return result
@target(name="angle-joint")
@ -903,17 +966,15 @@ class Onbashira(Model):
th = math.pi / self.n_side
r = self.bulk_radius
flange = (
Cq.Sketch()
Cq.Workplane()
.sketch()
.push([
(r, r * math.tan(th))
])
.circle(self.angle_joint_flange_radius)
.reset()
.regularPolygon(self.side_width_inner, self.n_side, mode="i")
)
flange = (
Cq.Workplane()
.placeSketch(flange)
.finalize()
.extrude(self.angle_joint_flange_thickness)
.translate((0, 0, -self.angle_joint_flange_thickness/2))
)
@ -979,6 +1040,7 @@ class Onbashira(Model):
self.assembly_ring(self.angle_joint_chamber_back()),
name="chamber_back",
)
.add(self.assembly_barrel(), name="barrel")
)
for i in range(self.n_side):
j = (i + 1) % self.n_side
@ -993,6 +1055,11 @@ class Onbashira(Model):
f"chamber_back/side{i}?holeLSO{ih}",
"Plane",
)
a = a.constrain(
f"barrel/stator2?holeB{i}",
f"ring1/side{i}?holeStatorR",
"Plane",
)
for (nl, nc, nr) in [
("section1", "ring1", "section2"),
("section2", "ring2", "section3"),
@ -1010,6 +1077,4 @@ class Onbashira(Model):
"Plane",
)
a = a.add(self.assembly_rotor(), name="rotor")
return a.solve()