feat: Complete operation through Book Twelve #58
@ -30,6 +30,7 @@ type Description
|
||||
usesCaptions: JoyceName[]
|
||||
klass: JoyceClass
|
||||
ends?: [GeoName, GeoName]
|
||||
parts?: string[][]
|
||||
|
||||
// We put both JoyceNames and GeoNames in here, pointing to each other
|
||||
// with the otherName property:
|
||||
@ -188,7 +189,8 @@ type ClassHandler = (
|
||||
args: JoyceArguments,
|
||||
index: number,
|
||||
cdata: ConstructionData,
|
||||
colors: string[]) => Commander
|
||||
colors: string[],
|
||||
jname: string) => Commander
|
||||
type RGB = [number, number, number]
|
||||
type XYZ = RGB
|
||||
|
||||
@ -274,7 +276,7 @@ function jToG(
|
||||
(args.subpoints ?= []).push depGeo
|
||||
else if depKlass is 'line'
|
||||
(args.subpoints ?= []).push ...ends ?? []
|
||||
cmdr = classHandler[klass] name, method, args, index, cdata, colors
|
||||
cmdr = classHandler[klass] name, method, args, index, cdata, colors, jname
|
||||
unless name is jname then cmdr.callbacks.push (api: AppletObject) =>
|
||||
api.setCaption name, jname
|
||||
api.setLabelStyle name, 3 // style CAPTION = 3
|
||||
@ -428,8 +430,10 @@ function jToG(
|
||||
console.log 'Setting label vis of', name, 'to', show if traceC
|
||||
api.setLabelVisible name, show
|
||||
|
||||
cdata.elements[jname] = {otherName: name, usesCaptions, klass, cmdr.ends}
|
||||
cdata.elements[name] = {otherName: jname, usesCaptions, klass, cmdr.ends}
|
||||
cdata.elements[jname] =
|
||||
{otherName: name, usesCaptions, klass, cmdr.ends, cmdr.parts}
|
||||
cdata.elements[name] =
|
||||
{otherName: jname, usesCaptions, klass, cmdr.ends, cmdr.parts}
|
||||
cmdr
|
||||
|
||||
function pivotListener(slider: string)
|
||||
@ -574,7 +578,7 @@ function proportionSimilar(
|
||||
// All of the detailed semantics of each available command lies in this
|
||||
// function.
|
||||
classHandler: Record<JoyceClass, ClassHandler> :=
|
||||
point: (name, method, args, index, cdata, colors): Commander =>
|
||||
point: (name, method, args, index, cdata, colors, jname): Commander =>
|
||||
return := freshCommander()
|
||||
{commands, callbacks, parts, auxiliaries} := return.value
|
||||
zeroVector := cdata.is3d ? 'Vector((0,0,0))' : 'Vector((0,0))'
|
||||
@ -582,7 +586,7 @@ classHandler: Record<JoyceClass, ClassHandler> :=
|
||||
aux := name + 'aUx'
|
||||
pivotable := cdata.pivot and name !== pivotData[cdata.pivot].pivot
|
||||
parts[0].push name
|
||||
// HACK: Special-case corrections for Joyce Elements Bk XI
|
||||
// HACK: Special-case corrections for Joyce Elements Bk XI & XII
|
||||
if cdata.title is 'XI.4'
|
||||
if name is 'Z' and method is 'fixed' and args.scalar?.length is 3
|
||||
method = 'perpendicular'
|
||||
@ -598,6 +602,18 @@ classHandler: Record<JoyceClass, ClassHandler> :=
|
||||
args.subpoints = ['B','P1','P3']
|
||||
args.plane = ['xOyPlane']
|
||||
commands.push 'B=(80,140)'
|
||||
if cdata.title is 'XII.7'
|
||||
if (name is 'E' and method is 'lineSlider'
|
||||
and args.subpoints?[1] is cdata.elements['1Y'].otherName)
|
||||
args.subpoints[1] = cdata.elements['1Z'].otherName
|
||||
if cdata.title is 'XII.8'
|
||||
if (name is 'M' and method is 'lineSlider'
|
||||
and args.subpoints?[1] is cdata.elements['1Y'].otherName)
|
||||
args.subpoints[1] = cdata.elements['1Z'].otherName
|
||||
if cdata.title is 'XII.9'
|
||||
if (jname is 'a' and method is 'lineSlider'
|
||||
and args.subpoints?[1] is cdata.elements['1Y'].otherName)
|
||||
args.subpoints[1] = cdata.elements['1Z'].otherName
|
||||
switch method
|
||||
/angle(?:Bisector|Divider)/
|
||||
{center, foot} :=
|
||||
@ -976,6 +992,11 @@ classHandler: Record<JoyceClass, ClassHandler> :=
|
||||
'point'
|
||||
moreParts[0].push newObj
|
||||
api.setVisible newObj, false
|
||||
'face'
|
||||
unless args.polyhedron?.length is 1 then return
|
||||
unless args.scalar?.length is 1 then return
|
||||
element := cdata.elements[args.polyhedron[0]]
|
||||
commands.push `${name} = ${element.parts?[2][args.scalar[0]-1]}`
|
||||
///triangle|similar|parallelogram|application|quadrilateral
|
||||
|octagon|pentagon|hexagon///
|
||||
unless args.subpoints then return
|
||||
@ -1058,7 +1079,7 @@ classHandler: Record<JoyceClass, ClassHandler> :=
|
||||
auxiliaries.push aux + 1
|
||||
makeLinesInvisible callbacks, name
|
||||
|
||||
plane: (name, method, args) =>
|
||||
plane: (name, method, args, index, cdata) =>
|
||||
return := freshCommander()
|
||||
{commands, callbacks, parts, auxiliaries} := return.value
|
||||
parts[2].push name
|
||||
@ -1166,7 +1187,7 @@ classHandler: Record<JoyceClass, ClassHandler> :=
|
||||
'segment'
|
||||
moreParts[1].push newObj
|
||||
else
|
||||
moreParts[2].push newObj
|
||||
moreParts[2].splice 1,0,newObj
|
||||
/pyramid|tetrahedron/
|
||||
base .= args.polygon?[0]
|
||||
ends[0] = base or aux + 1
|
||||
|
Loading…
Reference in New Issue
Block a user