@jscad/regl-renderer 2.1.2 → 2.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/CHANGELOG.md +41 -0
  2. package/demo-cli.js +4 -3
  3. package/demo-web.js +5 -4
  4. package/demo.html +90 -7
  5. package/dist/jscad-regl-renderer.min.js +17 -11
  6. package/package.json +6 -4
  7. package/src/geometry-utils-V2/entitiesFromSolids.js +1 -1
  8. package/src/geometry-utils-V2/entitiesFromSolids.test.js +4 -4
  9. package/src/geometry-utils-V2/path2ToGeometries.js +1 -1
  10. package/src/index.js +2 -1
  11. package/src/rendering/commands/{drawAxis.js → drawAxis/index.js} +0 -0
  12. package/src/rendering/commands/drawLines/colorOnlyShaders.js +9 -0
  13. package/src/rendering/commands/drawLines/index.js +44 -0
  14. package/src/rendering/commands/drawLines/meshShaders.js +54 -0
  15. package/src/rendering/commands/drawMesh/index.js +19 -28
  16. package/src/rendering/commands/drawMesh/vColorShaders.js +2 -2
  17. package/types/bound-utils/boundingBox.d.ts +2 -0
  18. package/types/bound-utils/boundingSphere.d.ts +2 -0
  19. package/types/bound-utils/computeBounds.d.ts +10 -0
  20. package/types/cameras/camera.d.ts +4 -0
  21. package/types/cameras/index.d.ts +3 -0
  22. package/types/cameras/orthographicCamera.d.ts +18 -0
  23. package/types/cameras/perspectiveCamera.d.ts +19 -0
  24. package/types/controls/orbitControls.d.ts +125 -0
  25. package/types/geometry-utils-V2/entitiesFromSolids.d.ts +13 -0
  26. package/types/geometry-utils-V2/geom2ToGeometries.d.ts +4 -0
  27. package/types/geometry-utils-V2/geom3ToGeometries.d.ts +4 -0
  28. package/types/geometry-utils-V2/path2ToGeometries.d.ts +4 -0
  29. package/types/index.d.ts +16 -0
  30. package/types/rendering/commands/drawAxis/index.d.ts +4 -0
  31. package/types/rendering/commands/drawExps/drawConnector/arcGeo.d.ts +6 -0
  32. package/types/rendering/commands/drawExps/drawConnector/index.d.ts +2 -0
  33. package/types/rendering/commands/drawExps/drawMesh.d.ts +2 -0
  34. package/types/rendering/commands/drawExps/drawMeshNoNormals.d.ts +2 -0
  35. package/types/rendering/commands/drawExps/drawNormals.d.ts +2 -0
  36. package/types/rendering/commands/drawExps/drawNormals2.d.ts +2 -0
  37. package/types/rendering/commands/drawGrid/index.d.ts +4 -0
  38. package/types/rendering/commands/drawGrid/multi.d.ts +2 -0
  39. package/types/rendering/commands/drawLines/index.d.ts +4 -0
  40. package/types/rendering/commands/drawMesh/index.d.ts +4 -0
  41. package/types/rendering/render.d.ts +4 -0
  42. package/types/rendering/renderContext.d.ts +7 -0
  43. package/types/rendering/renderDefaults.d.ts +9 -0
  44. package/types/utils.d.ts +8 -0
package/CHANGELOG.md CHANGED
@@ -3,6 +3,47 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # [2.4.0](https://github.com/jscad/OpenJSCAD.org/compare/@jscad/regl-renderer@2.3.0...@jscad/regl-renderer@2.4.0) (2021-09-27)
7
+
8
+
9
+ ### Features
10
+
11
+ * **regl-renderer:** enhanced rendering to use the matrix as provided with the geometry ([#871](https://github.com/jscad/OpenJSCAD.org/issues/871)) ([40802af](https://github.com/jscad/OpenJSCAD.org/commit/40802afeb9a2a45cf3eb4f1b9dc774b8670d8259))
12
+
13
+
14
+
15
+
16
+
17
+ # [2.3.0](https://github.com/jscad/OpenJSCAD.org/compare/@jscad/regl-renderer@2.2.0...@jscad/regl-renderer@2.3.0) (2021-09-09)
18
+
19
+
20
+ ### Features
21
+
22
+ * **regl-renderer:** typescript definitions and generator. ([#801](https://github.com/jscad/OpenJSCAD.org/issues/801)) ([1616876](https://github.com/jscad/OpenJSCAD.org/commit/16168761c53bbb6ffb604aa69c9c80dcc13eaad3))
23
+
24
+
25
+
26
+
27
+
28
+ # [2.2.0](https://github.com/jscad/OpenJSCAD.org/compare/@jscad/regl-renderer@2.1.3...@jscad/regl-renderer@2.2.0) (2021-06-20)
29
+
30
+
31
+ ### Features
32
+
33
+ * **regl-renderer:** added new command drawLines, and adjusted demos ([#863](https://github.com/jscad/OpenJSCAD.org/issues/863)) ([02b5247](https://github.com/jscad/OpenJSCAD.org/commit/02b524775165f743b1f0bcecce92a0f7784bb89b))
34
+
35
+
36
+
37
+
38
+
39
+ ## [2.1.3](https://github.com/jscad/OpenJSCAD.org/compare/@jscad/regl-renderer@2.1.2...@jscad/regl-renderer@2.1.3) (2021-06-11)
40
+
41
+ **Note:** Version bump only for package @jscad/regl-renderer
42
+
43
+
44
+
45
+
46
+
6
47
  ## [2.1.2](https://github.com/jscad/OpenJSCAD.org/compare/@jscad/regl-renderer@2.1.1...@jscad/regl-renderer@2.1.2) (2021-06-01)
7
48
 
8
49
  **Note:** Version bump only for package @jscad/regl-renderer
package/demo-cli.js CHANGED
@@ -50,9 +50,10 @@ const options = {
50
50
  camera,
51
51
  drawCommands: {
52
52
  // draw commands bootstrap themselves the first time they are run
53
- drawGrid: drawCommands.drawGrid, // require('./src/rendering/drawGrid/index.js'),
54
- drawAxis: drawCommands.drawAxis, // require('./src/rendering/drawAxis'),
55
- drawMesh: drawCommands.drawMesh // require('./src/rendering/drawMesh/index.js')
53
+ drawAxis: drawCommands.drawAxis,
54
+ drawGrid: drawCommands.drawGrid,
55
+ drawLines: drawCommands.drawLines,
56
+ drawMesh: drawCommands.drawMesh
56
57
  },
57
58
  rendering: {
58
59
  background: [1, 1, 1, 1],
package/demo-web.js CHANGED
@@ -1,4 +1,4 @@
1
- const { prepareRender, drawCommands, cameras, entitiesFromSolids } = require('./src') // replace this with the correct import
1
+ const { prepareRender, drawCommands, cameras, entitiesFromSolids } = require('./src')
2
2
 
3
3
  // setup demo solids data
4
4
  const demoSolids = (parameters) => {
@@ -41,9 +41,10 @@ const options = {
41
41
  camera,
42
42
  drawCommands: {
43
43
  // draw commands bootstrap themselves the first time they are run
44
- drawGrid: drawCommands.drawGrid, // require('./src/rendering/drawGrid/index.js'),
45
- drawAxis: drawCommands.drawAxis, // require('./src/rendering/drawAxis'),
46
- drawMesh: drawCommands.drawMesh // require('./src/rendering/drawMesh/index.js')
44
+ drawAxis: drawCommands.drawAxis,
45
+ drawGrid: drawCommands.drawGrid,
46
+ drawLines: drawCommands.drawLines,
47
+ drawMesh: drawCommands.drawMesh
47
48
  },
48
49
  // data
49
50
  entities: [
package/demo.html CHANGED
@@ -56,8 +56,6 @@ const { prepareRender, drawCommands, cameras, controls, entitiesFromSolids } = j
56
56
  const perspectiveCamera = cameras.perspective
57
57
  const orbitControls = controls.orbit
58
58
 
59
- const renderRate = 10 // number of renders per second
60
-
61
59
  const containerElement = document.getElementById("jscad")
62
60
 
63
61
  const width = containerElement.clientWidth
@@ -108,8 +106,9 @@ const entities = entitiesFromSolids({}, demo({ scale: 1 }))
108
106
  const renderOptions = {
109
107
  camera: state.camera,
110
108
  drawCommands: {
111
- drawGrid: drawCommands.drawGrid,
112
109
  drawAxis: drawCommands.drawAxis,
110
+ drawGrid: drawCommands.drawGrid,
111
+ drawLines: drawCommands.drawLines,
113
112
  drawMesh: drawCommands.drawMesh
114
113
  },
115
114
  // define the visual content
@@ -121,14 +120,42 @@ const renderOptions = {
121
120
  }
122
121
 
123
122
  // the heart of rendering, as themes, controls, etc change
124
- prevTimestamp = 0
123
+ let updateView = true
124
+
125
+ const doRotatePanZoom = () => {
126
+
127
+ if (rotateDelta[0] || rotateDelta[1]) {
128
+ const updated = orbitControls.rotate({ controls: state.controls, camera: state.camera, speed: rotateSpeed }, rotateDelta)
129
+ state.controls = { ...state.controls, ...updated.controls }
130
+ updateView = true
131
+ rotateDelta = [0, 0]
132
+ }
133
+
134
+ if (panDelta[0] || panDelta[1]) {
135
+ const updated = orbitControls.pan({ controls:state.controls, camera:state.camera, speed: panSpeed }, panDelta)
136
+ state.controls = { ...state.controls, ...updated.controls }
137
+ panDelta = [0, 0]
138
+ state.camera.position = updated.camera.position
139
+ state.camera.target = updated.camera.target
140
+ updateView = true
141
+ }
142
+
143
+ if (zoomDelta) {
144
+ const updated = orbitControls.zoom({ controls:state.controls, camera:state.camera, speed: zoomSpeed }, zoomDelta)
145
+ state.controls = { ...state.controls, ...updated.controls }
146
+ zoomDelta = 0
147
+ updateView = true
148
+ }
149
+ }
150
+
125
151
  const updateAndRender = (timestamp) => {
126
- const elaspe = timestamp - prevTimestamp
127
- if (elaspe > (1000 / renderRate)) {
128
- prevTimestamp = timestamp
152
+ doRotatePanZoom()
129
153
 
154
+ if (updateView) {
130
155
  const updates = orbitControls.update({ controls: state.controls, camera: state.camera })
131
156
  state.controls = { ...state.controls, ...updates.controls }
157
+ updateView = state.controls.changed // for elasticity in rotate / zoom
158
+
132
159
  state.camera.position = updates.camera.position
133
160
  perspectiveCamera.update(state.camera)
134
161
 
@@ -137,6 +164,62 @@ const updateAndRender = (timestamp) => {
137
164
  window.requestAnimationFrame(updateAndRender)
138
165
  }
139
166
  window.requestAnimationFrame(updateAndRender)
167
+
168
+ // convert HTML events (mouse movement) to viewer changes
169
+ let lastX = 0
170
+ let lastY = 0
171
+
172
+ const rotateSpeed = 0.002
173
+ const panSpeed = 1
174
+ const zoomSpeed = 0.08
175
+ let rotateDelta = [0, 0]
176
+ let panDelta = [0, 0]
177
+ let zoomDelta = 0
178
+ let pointerDown = false
179
+
180
+ const moveHandler = (ev) => {
181
+ if(!pointerDown) return
182
+ const dx = lastX - ev.pageX
183
+ const dy = ev.pageY - lastY
184
+
185
+ const shiftKey = (ev.shiftKey === true) || (ev.touches && ev.touches.length > 2)
186
+ if (shiftKey) {
187
+ panDelta[0] += dx
188
+ panDelta[1] += dy
189
+ } else {
190
+ rotateDelta[0] -= dx
191
+ rotateDelta[1] -= dy
192
+ }
193
+
194
+ lastX = ev.pageX
195
+ lastY = ev.pageY
196
+
197
+ ev.preventDefault()
198
+ }
199
+ const downHandler = (ev) => {
200
+ pointerDown = true
201
+ lastX = ev.pageX
202
+ lastY = ev.pageY
203
+ containerElement.setPointerCapture(ev.pointerId)
204
+ ev.preventDefault()
205
+ }
206
+
207
+ const upHandler = (ev) => {
208
+ pointerDown = false
209
+ containerElement.releasePointerCapture(ev.pointerId)
210
+ ev.preventDefault()
211
+ }
212
+
213
+ const wheelHandler = (ev) => {
214
+ zoomDelta += ev.deltaY
215
+ ev.preventDefault()
216
+ }
217
+
218
+ containerElement.onpointermove = moveHandler
219
+ containerElement.onpointerdown = downHandler
220
+ containerElement.onpointerup = upHandler
221
+ containerElement.onwheel = wheelHandler
222
+
140
223
  </script>
141
224
  </body>
142
225
  </html>