diff --git a/src/adapptlet.civet b/src/adapptlet.civet index edec023..bfa902d 100644 --- a/src/adapptlet.civet +++ b/src/adapptlet.civet @@ -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 := - 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 := 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 := 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 := '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 := 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 := '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