move the bevel gear to the center

This commit is contained in:
numzero 2026-10-19 02:04:10 +03:00
parent f5d578ccf3
commit bde8936ad0
2 changed files with 13 additions and 12 deletions

View File

@ -67,8 +67,8 @@ pub enum BevelGearCap {
#[derive(Debug, Clone, Copy)] #[derive(Debug, Clone, Copy)]
pub struct BevelGearVisual { pub struct BevelGearVisual {
pub inner_distance: f32, pub pad_in: f32,
pub outer_distance: f32, pub pad_out: f32,
} }
pub fn make_mesh( pub fn make_mesh(
@ -76,22 +76,23 @@ pub fn make_mesh(
visual: &BevelGearVisual, visual: &BevelGearVisual,
shape: &BevelGearShape, shape: &BevelGearShape,
) -> MeshIndexed<Vec3> { ) -> MeshIndexed<Vec3> {
let inner_scale = visual.inner_distance / desc.pitch_distance(); let inner_scale = (desc.pitch_distance() - visual.pad_in) / desc.pitch_distance();
let outer_scale = visual.outer_distance / desc.pitch_distance(); let outer_scale = (desc.pitch_distance() + visual.pad_out) / desc.pitch_distance();
let sides = shape.points.len(); let sides = shape.points.len();
let mut mesh = MeshIndexed::new(); let mut mesh = MeshIndexed::new();
mesh.vertices.reserve_exact(2 * sides + 2); mesh.vertices.reserve_exact(2 * sides + 2);
mesh.faces.reserve_exact(4 * sides); mesh.faces.reserve_exact(4 * sides);
for pt in shape.to_points() { for pt in shape.to_points() {
let pt = vec3(pt.x, pt.y, desc.pitch_distance()); let pt = vec3(pt.x, pt.y, 0.);
mesh.vertices.extend([inner_scale * pt, outer_scale * pt]); mesh.vertices.extend([
outer_scale * pt - visual.pad_out * Vec3::Z,
inner_scale * pt + visual.pad_in * Vec3::Z,
]);
} }
let caps = mesh.vertices.len(); let caps = mesh.vertices.len();
mesh.vertices.extend([ mesh.vertices
vec3(0., 0., visual.inner_distance), .extend([vec3(0., 0., -visual.pad_out), vec3(0., 0., visual.pad_in)]);
vec3(0., 0., visual.outer_distance),
]);
for k in 0..sides { for k in 0..sides {
let base1 = 2 * k; let base1 = 2 * k;
let base2 = 2 * ((k + 1) % sides); let base2 = 2 * ((k + 1) % sides);

View File

@ -122,8 +122,8 @@ impl Core {
let bevel_gear_mesh = bevel_gear::make_mesh( let bevel_gear_mesh = bevel_gear::make_mesh(
&bevel_gear_desc, &bevel_gear_desc,
&bevel_gear::BevelGearVisual { &bevel_gear::BevelGearVisual {
inner_distance: bevel_gear_desc.pitch_distance() - 4.0, pad_in: 4.,
outer_distance: bevel_gear_desc.pitch_distance(), pad_out: 0.,
}, },
&bevel_gear::BevelGearShape::new_blank(&bevel_gear_desc, 60), &bevel_gear::BevelGearShape::new_blank(&bevel_gear_desc, 60),
) )