Point fixes and asymmetry tests
This commit is contained in:
parent
cdb081a377
commit
afdc467daf
4 changed files with 44 additions and 22 deletions
|
@ -39,18 +39,27 @@ zones:
|
|||
- name: thumb
|
||||
angle: -20
|
||||
mirror:
|
||||
ref: pinky_bottom
|
||||
ref: pinky_home
|
||||
# The mk1's origin was the bottom left corner of the bottom pinky key.
|
||||
# But it later got rotated by the bottom *right* corner as the pinky angle
|
||||
# and then rotated again for the inter-half angle so [0, 0] was nowhere on
|
||||
# the actual result.
|
||||
#
|
||||
# Since the new origin is the center of the pinky bottom, we have to convert
|
||||
# Since the new origin is the center of the pinky home, we have to convert
|
||||
# the old, round 250 width to this new coordinate system if we want backward
|
||||
# compatibility. The following snippet was used to arrive at 233.5881016.
|
||||
# compatibility. The following snippet was used to arrive at this distance.
|
||||
#
|
||||
# old_origin = new Point(7, 7)
|
||||
# old_origin = new Point(7, 7 + 19)
|
||||
# old_origin.rotate(5, [14, 0])
|
||||
# old_origin.rotate(-20, [0, 0])
|
||||
# new_width = 250 - (2 * old_origin.x)
|
||||
distance: 233.5881016
|
||||
distance: 223.7529778
|
||||
outline:
|
||||
top:
|
||||
left: inner_top
|
||||
right: mirror_inner_top
|
||||
bottom:
|
||||
left: far_thumb
|
||||
right: mirror_far_thumb
|
||||
hole: 14
|
||||
expansion: 5
|
|
@ -5,7 +5,7 @@ zones:
|
|||
columns:
|
||||
- name: pinky
|
||||
rotate: -5
|
||||
origin: [7, -7]
|
||||
origin: [7, -10]
|
||||
- name: ring
|
||||
stagger: 12
|
||||
- name: middle
|
||||
|
@ -51,29 +51,22 @@ zones:
|
|||
- name: near
|
||||
padding: 16
|
||||
column_wire: ring
|
||||
# TODO: this is just a test for Dan
|
||||
- name: nearer
|
||||
column_wire: pinky
|
||||
rows:
|
||||
- name: thumb
|
||||
angle: -20
|
||||
mirror:
|
||||
ref: pinky_bottom
|
||||
ref: pinky_home
|
||||
# The mk1's origin was the bottom left corner of the bottom pinky key.
|
||||
# But it later got rotated by the bottom *right* corner as the pinky angle
|
||||
# and then rotated again for the inter-half angle so [0, 0] was nowhere on
|
||||
# the actual result.
|
||||
#
|
||||
# Since the new origin is the center of the pinky bottom, we have to convert
|
||||
# Since the new origin is the center of the pinky home, we have to convert
|
||||
# the old, round 250 width to this new coordinate system if we want backward
|
||||
# compatibility. The following snippet was used to arrive at 233.5881016.
|
||||
# compatibility. The following snippet was used to arrive at this distance.
|
||||
#
|
||||
# old_origin = new Point(7, 7)
|
||||
# old_origin = new Point(7, 7 + 19)
|
||||
# old_origin.rotate(5, [14, 0])
|
||||
# old_origin.rotate(-20, [0, 0])
|
||||
# new_width = 250 - (2 * old_origin.x)
|
||||
#
|
||||
# TODO: Hahaaa, the squishing fails, because the width reference points are
|
||||
# NOT stationary! gotta move to distances between some other points
|
||||
# (definitely something from among the HOME positions!!!)
|
||||
distance: 233.5881016
|
||||
distance: 223.7529778
|
|
@ -1,6 +1,8 @@
|
|||
const m = require('makerjs')
|
||||
const fs = require('fs-extra')
|
||||
|
||||
const u = require('./utils')
|
||||
|
||||
const Point = exports.Point = class Point {
|
||||
constructor(x=0, y=0, r=0, meta={}) {
|
||||
if (Array.isArray(x)) {
|
||||
|
@ -54,7 +56,7 @@ const Point = exports.Point = class Point {
|
|||
this.x,
|
||||
this.y,
|
||||
this.r,
|
||||
this.meta
|
||||
u.deepcopy(this.meta)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
@ -186,14 +188,18 @@ exports.parse = (config) => {
|
|||
x += (config.mirror.distance || 0) / 2
|
||||
const mirrored_points = {}
|
||||
for (const [name, p] of Object.entries(points)) {
|
||||
if (p.meta.col.asym == 'left' || p.meta.row.asym == 'left') continue
|
||||
const mp = p.clone().mirror(x)
|
||||
mp.meta.mirrored = true
|
||||
const mname = `mirror_${name}`
|
||||
mirrored_points[mname] = mp
|
||||
delete mp.meta.asym
|
||||
mirrored_points[`mirror_${name}`] = mp
|
||||
if (p.meta.col.asym == 'right' || p.meta.row.asym == 'right') {
|
||||
p.meta.col.skip = true
|
||||
}
|
||||
}
|
||||
Object.assign(points, mirrored_points)
|
||||
}
|
||||
|
||||
|
||||
const filtered = {}
|
||||
for (const [k, p] of Object.entries(points)) {
|
||||
if (p.meta.col.skip || p.meta.row.skip) continue
|
||||
|
|
14
helpers/utils.js
Normal file
14
helpers/utils.js
Normal file
|
@ -0,0 +1,14 @@
|
|||
const m = require('makerjs')
|
||||
const fs = require('fs-extra')
|
||||
|
||||
exports.deepcopy = (value) => JSON.parse(JSON.stringify(value))
|
||||
|
||||
exports.dump_model = (model, file='model', json=false) => {
|
||||
const assembly = m.model.originate({
|
||||
model,
|
||||
units: 'mm'
|
||||
})
|
||||
|
||||
fs.writeFileSync(`${file}.dxf`, m.exporter.toDXF(assembly))
|
||||
if (json) fs.writeFileSync(`${file}.json`, JSON.stringify(assembly, null, ' '))
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue