Create and deploy simple openscad api
A minimal frontend integration has been added to as a POC resolves #219 and #222
This commit is contained in:
@@ -3,6 +3,10 @@ import { IdeContext } from 'src/components/IdeToolbarNew'
|
||||
|
||||
const IdeViewer = () => {
|
||||
const { state } = useContext(IdeContext)
|
||||
const image =
|
||||
state.objectData?.type === 'png' &&
|
||||
state.objectData?.data &&
|
||||
window.URL.createObjectURL(state.objectData?.data)
|
||||
return (
|
||||
<div className="p-8 border-2 m-2">
|
||||
<div className="pb-4">hi I'm viewer</div>
|
||||
@@ -10,8 +14,12 @@ const IdeViewer = () => {
|
||||
I should be showing an{' '}
|
||||
<span className="font-mono uppercase">{state.objectData?.type}</span>{' '}
|
||||
right now with the data{' '}
|
||||
<span className="font-mono uppercase">{state.objectData?.data}</span>{' '}
|
||||
</div>
|
||||
{image && (
|
||||
<div>
|
||||
<img src={image} className="" />
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
@@ -1,34 +1,50 @@
|
||||
export const render = async ({ code, settings }) => {
|
||||
return new Promise((resolve, reject) => {
|
||||
setTimeout(() => {
|
||||
const shouldReject = Math.random() < 0.7
|
||||
if (shouldReject) {
|
||||
resolve({
|
||||
objectData: {
|
||||
type: 'jpg',
|
||||
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 openScadBaseURL =
|
||||
'https://x2wvhihk56.execute-api.us-east-1.amazonaws.com/dev'
|
||||
|
||||
export const render = async ({ code, settings }) => {
|
||||
const response = await fetch(openScadBaseURL + '/render', {
|
||||
method: 'POST',
|
||||
headers: new Headers().append('Content-Type', 'application/json'),
|
||||
body: JSON.stringify({
|
||||
settings: {
|
||||
size: {
|
||||
x: 700,
|
||||
y: 300,
|
||||
},
|
||||
},
|
||||
file: code,
|
||||
}),
|
||||
})
|
||||
if (response.status === 400) {
|
||||
const { error } = await response.json()
|
||||
const cleanedErrorMessage = error.replace(
|
||||
/["|']\/tmp\/.+\/main.scad["|']/g,
|
||||
"'main.scad'"
|
||||
)
|
||||
return {
|
||||
isError: true,
|
||||
message: {
|
||||
type: 'error',
|
||||
message: cleanedErrorMessage,
|
||||
},
|
||||
}
|
||||
}
|
||||
const data = await response.blob()
|
||||
return {
|
||||
objectData: {
|
||||
type: 'png',
|
||||
data,
|
||||
},
|
||||
message: {
|
||||
type: 'message',
|
||||
message: 'successful render',
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
const openScad = {
|
||||
render,
|
||||
// more functions to come
|
||||
}
|
||||
|
||||
export default openScad
|
||||
export default openScad
|
||||
|
||||
@@ -8,7 +8,7 @@ export const useIdeState = () => {
|
||||
{ type: 'error', message: 'line 15 is being very naughty' },
|
||||
{ type: 'message', message: '5 bodies produced' },
|
||||
],
|
||||
code: 'cubie(60);',
|
||||
code: 'cube(60);sphere(25);',
|
||||
objectData: {
|
||||
type: 'stl',
|
||||
data: 'some binary',
|
||||
@@ -48,19 +48,21 @@ export const useIdeState = () => {
|
||||
return ({ type, payload }) => {
|
||||
switch (type) {
|
||||
case 'render':
|
||||
cadPackages[state.ideType].render({ code: payload.code })
|
||||
.then(({ objectData, message }) =>
|
||||
dispatch({
|
||||
type: 'healthyRender',
|
||||
payload: { objectData, message },
|
||||
})
|
||||
)
|
||||
.catch(({ message }) =>
|
||||
dispatch({
|
||||
type: 'errorRender',
|
||||
payload: { message },
|
||||
})
|
||||
)
|
||||
cadPackages[state.ideType]
|
||||
.render({ code: payload.code })
|
||||
.then(({ objectData, message, isError }) => {
|
||||
if (isError) {
|
||||
dispatch({
|
||||
type: 'errorRender',
|
||||
payload: { message },
|
||||
})
|
||||
} else {
|
||||
dispatch({
|
||||
type: 'healthyRender',
|
||||
payload: { objectData, message },
|
||||
})
|
||||
}
|
||||
})
|
||||
break
|
||||
|
||||
default:
|
||||
|
||||
Reference in New Issue
Block a user