diff --git a/web/src/components/IdeToolbarNew/IdeToolbarNew.js b/web/src/components/IdeToolbarNew/IdeToolbarNew.js
index 9aee054..6289117 100644
--- a/web/src/components/IdeToolbarNew/IdeToolbarNew.js
+++ b/web/src/components/IdeToolbarNew/IdeToolbarNew.js
@@ -6,10 +6,16 @@ export const IdeContext = createContext()
const IdeToolbarNew = () => {
const [state, dispatch] = useIdeState()
+ function setIdeType(ide) { dispatch({ type: 'setIdeType', payload: { message: ide } }) }
+
return (
hi I'm the toolbar
+
diff --git a/web/src/components/IdeViewer/IdeViewer.js b/web/src/components/IdeViewer/IdeViewer.js
index ae0cb3c..b4d912e 100644
--- a/web/src/components/IdeViewer/IdeViewer.js
+++ b/web/src/components/IdeViewer/IdeViewer.js
@@ -9,7 +9,8 @@ const IdeViewer = () => {
I should be showing an{' '}
{state.objectData?.type}{' '}
- right now
+ right now with the data{' '}
+ {state.objectData?.data}{' '}
)
diff --git a/web/src/helpers/cadPackages/index.js b/web/src/helpers/cadPackages/index.js
new file mode 100644
index 0000000..ab938ae
--- /dev/null
+++ b/web/src/helpers/cadPackages/index.js
@@ -0,0 +1,7 @@
+import openScad from './openScadController'
+import openCascade from './newCascadeController'
+
+export const cadPackages = {
+ openScad,
+ openCascade,
+}
\ No newline at end of file
diff --git a/web/src/helpers/cadPackages/newCascadeController.js b/web/src/helpers/cadPackages/newCascadeController.js
new file mode 100644
index 0000000..5367fc3
--- /dev/null
+++ b/web/src/helpers/cadPackages/newCascadeController.js
@@ -0,0 +1,35 @@
+// Rename this file to remove "new" once Cascade integration is complete
+
+export const render = async ({ code, settings }) => {
+ return new Promise((resolve, reject) => {
+ setTimeout(() => {
+ const shouldReject = Math.random() < 0.7
+ if (shouldReject) {
+ resolve({
+ objectData: {
+ type: 'stl',
+ data: ((Math.random() * 256 + 1) >>> 0).toString(2), // Randomized 8-bit numbers for funzies
+ },
+ message: {
+ type: 'message',
+ message: `bodies rendered by: ${code}`,
+ },
+ })
+ } else {
+ reject({
+ message: {
+ type: 'error',
+ message: 'unable to parse line: x',
+ },
+ })
+ }
+ }, 700)
+ })
+}
+
+const openCascade = {
+ render,
+ // More functions to come
+}
+
+export default openCascade
\ No newline at end of file
diff --git a/web/src/helpers/openScadController.js b/web/src/helpers/cadPackages/openScadController.js
similarity index 65%
rename from web/src/helpers/openScadController.js
rename to web/src/helpers/cadPackages/openScadController.js
index 3727a1c..b685069 100644
--- a/web/src/helpers/openScadController.js
+++ b/web/src/helpers/cadPackages/openScadController.js
@@ -1,12 +1,12 @@
-export const renderOpenScad = async ({ code, settings }) => {
+export const render = async ({ code, settings }) => {
return new Promise((resolve, reject) => {
setTimeout(() => {
const shouldReject = Math.random() < 0.7
if (shouldReject) {
resolve({
objectData: {
- type: Math.random() > 0.6 ? 'stl' : 'jpg',
- data: 'some binary',
+ type: 'jpg',
+ data: ((Math.random() * 256 + 1) >>> 0).toString(2), // Randomized 8-bit numbers for funzies
},
message: {
type: 'message',
@@ -24,3 +24,11 @@ export const renderOpenScad = async ({ code, settings }) => {
}, 700)
})
}
+
+
+const openScad = {
+ render,
+ // more functions to come
+}
+
+export default openScad
\ No newline at end of file
diff --git a/web/src/helpers/hooks/useIdeState.js b/web/src/helpers/hooks/useIdeState.js
index 8a34956..21e2728 100644
--- a/web/src/helpers/hooks/useIdeState.js
+++ b/web/src/helpers/hooks/useIdeState.js
@@ -1,9 +1,9 @@
import { useReducer } from 'react'
-import { renderOpenScad } from 'src/helpers/openScadController'
+import { cadPackages } from 'src/helpers/cadPackages'
export const useIdeState = () => {
const initialState = {
- ideType: 'openscad',
+ ideType: 'openScad',
consoleMessages: [
{ type: 'error', message: 'line 15 is being very naughty' },
{ type: 'message', message: '5 bodies produced' },
@@ -36,14 +36,19 @@ export const useIdeState = () => {
? [...state.consoleMessages, payload.message]
: payload.message,
}
+ case 'setIdeType':
+ return {
+ ...state,
+ ideType: payload.message,
+ }
}
}
- function dispatchMiddleware(dispatch) {
+ function dispatchMiddleware(dispatch, state) {
return ({ type, payload }) => {
switch (type) {
case 'render':
- renderOpenScad({ code: payload.code })
+ cadPackages[state.ideType].render({ code: payload.code })
.then(({ objectData, message }) =>
dispatch({
type: 'healthyRender',
@@ -65,5 +70,5 @@ export const useIdeState = () => {
}
const [state, dispatch] = useReducer(reducer, initialState)
- return [state, dispatchMiddleware(dispatch)]
+ return [state, dispatchMiddleware(dispatch, state)]
}