-
Notifications
You must be signed in to change notification settings - Fork 0
/
desmos.js
80 lines (71 loc) · 2.14 KB
/
desmos.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
let element = document.getElementById('calculator')
console.log(Desmos)
let calc = Desmos.Private.GeometryBeta(element, {
pasteGraphLink: true,
showResetButtonOnGraphpaper: true,
})
let embed = document.getElementById('embed')
console.log(embed)
let defaultState = await fetch('./defaultState.json').then(r => r.text())
calc.setDefaultState(defaultState)
let state = JSON.parse(window.localStorage.getItem('state') || defaultState)// || defaultState;
if (state) {
calc.setState(state)
}
let svg;
let el = document.createElement("null");
document.body.appendChild(el)
let onChangeEvent = (n, e) => {
console.log(n, e)
window.localStorage.setItem('state', JSON.stringify(calc.getState()))
// calc.setMathBounds({
// top: 10,
// bottom: -10,
// left: -10,
// right: 10,
// })
// console.log(calc.getState(), calc.expressionAnalysis)
let configOptions = {
LineResolution: 1,
LightIntensity: 100,
RayCount: 100000,
BeamWidth: 100,
Absorbtion: .1,
GlassAbsorbtion: 0,
}
let expressions = calc.getExpressions()
expressions.map(expression => {
return expression?.latex?.match(new RegExp(`V_{(${Object.keys(configOptions).join('|')})}=(.+)`))
}).filter(a => a).forEach(expression => {
console.log(expression)
let key = expression[1]
let value = expression[2]
if (!isNaN(parseFloat(value))) {
configOptions[key] = parseFloat(value)
}
})
localStorage.setItem('configOptions', JSON.stringify(configOptions))
calc.asyncScreenshot({
format: 'svg',
width: 1000,
height: 1000,
// height: calc.graphpaperBounds.mathCoordinates.width,
mathBounds: {
top: 10,
bottom: -10,
left: -10,
right: 10,
},
mode: 'contain'
}, s => {
// svg = s;
// console.log(s)
localStorage.setItem('svg', s)
embed.src = embed.src
// el.innerHTML = s;
// console.log(e)
// console.log(element)
})
}
calc.observeEvent('change', onChangeEvent)
onChangeEvent()