initial commit with full-size image, but broken OpenSCAD image source size.
This commit is contained in:
@@ -1,4 +1,4 @@
|
|||||||
import { useContext } from 'react'
|
import { useContext, useRef, useEffect } from 'react'
|
||||||
import { Mosaic, MosaicWindow } from 'react-mosaic-component'
|
import { Mosaic, MosaicWindow } from 'react-mosaic-component'
|
||||||
import { IdeContext } from 'src/components/IdeToolbarNew'
|
import { IdeContext } from 'src/components/IdeToolbarNew'
|
||||||
import IdeEditor from 'src/components/IdeEditor'
|
import IdeEditor from 'src/components/IdeEditor'
|
||||||
@@ -14,16 +14,31 @@ const ELEMENT_MAP = {
|
|||||||
|
|
||||||
const IdeContainer = () => {
|
const IdeContainer = () => {
|
||||||
const { state, dispatch } = useContext(IdeContext)
|
const { state, dispatch } = useContext(IdeContext)
|
||||||
|
const viewerDOM = useRef(null)
|
||||||
|
|
||||||
|
useEffect(handleViewerSizeUpdate, [viewerDOM])
|
||||||
|
|
||||||
|
function handleViewerSizeUpdate() {
|
||||||
|
if (viewerDOM !== null && viewerDOM.current) {
|
||||||
|
const { width, height } = viewerDOM.current.getBoundingClientRect()
|
||||||
|
console.log({width, height})
|
||||||
|
dispatch({ type: 'setViewerSize', payload: { message: { width, height } }})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return (<div id='cadhub-ide' className='h-screen'>
|
return (<div id='cadhub-ide' className='h-screen'>
|
||||||
<Mosaic
|
<Mosaic
|
||||||
renderTile={ (id, path) => (
|
renderTile={ (id, path) => (
|
||||||
<MosaicWindow path={path} title={id} className={id.toLowerCase()}>
|
<MosaicWindow path={path} title={id} className={id.toLowerCase()}>
|
||||||
{ ELEMENT_MAP[id] }
|
{(id === 'Viewer')
|
||||||
|
? <div id='view-wrapper'className='h-full' ref={viewerDOM}>{ ELEMENT_MAP[id] }</div>
|
||||||
|
: ELEMENT_MAP[id]
|
||||||
|
}
|
||||||
</MosaicWindow>
|
</MosaicWindow>
|
||||||
)}
|
)}
|
||||||
value={state.layout}
|
value={state.layout}
|
||||||
onChange={newLayout => dispatch({ type: 'updateLayout', payload: { message: newLayout } })}
|
onChange={newLayout => dispatch({ type: 'setLayout', payload: { message: newLayout } })}
|
||||||
|
onRelease={handleViewerSizeUpdate}
|
||||||
/>
|
/>
|
||||||
</div>)
|
</div>)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -137,22 +137,20 @@ const IdeViewer = () => {
|
|||||||
const indigo300 = '#A5B4FC'
|
const indigo300 = '#A5B4FC'
|
||||||
const indigo900 = '#312E81'
|
const indigo900 = '#312E81'
|
||||||
return (
|
return (
|
||||||
<div className="p-8 border-2 m-2">
|
<div>
|
||||||
<div
|
<div className="relative" className="h-full">
|
||||||
className="relative"
|
{state.isLoading && (
|
||||||
style={{
|
<div className="inset-0 absolute flex items-center justify-center">
|
||||||
height: '500px',
|
<div className="h-16 w-16 bg-pink-600 rounded-full animate-ping"></div>
|
||||||
width: '500px',
|
</div>
|
||||||
backgroundColor: openSCADDeepOceanThemeBackground,
|
)}
|
||||||
}}
|
|
||||||
>
|
|
||||||
{image && (
|
{image && (
|
||||||
<div
|
<div
|
||||||
className={`absolute inset-0 transition-opacity duration-500 ${
|
className={`absolute inset-0 transition-opacity duration-500 ${
|
||||||
isDragging ? 'opacity-25' : 'opacity-100'
|
isDragging ? 'opacity-25' : 'opacity-100'
|
||||||
}`}
|
}`}
|
||||||
>
|
>
|
||||||
<img src={image} className="" />
|
<img src={image} style={{width: state.viewerSize.width+'px' || '500px', height: state.viewerSize.height+'px' || '500px'}} />
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
{state.isLoading && (
|
{state.isLoading && (
|
||||||
|
|||||||
@@ -17,11 +17,12 @@ let lastCameraSettings = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export const render = async ({ code, settings }) => {
|
export const render = async ({ code, settings }) => {
|
||||||
|
console.log('from render', settings)
|
||||||
const body = JSON.stringify({
|
const body = JSON.stringify({
|
||||||
settings: {
|
settings: {
|
||||||
size: {
|
size: {
|
||||||
x: 500,
|
x: settings.viewerSize?.width,
|
||||||
y: 500,
|
y: settings.viewerSize?.height,
|
||||||
},
|
},
|
||||||
camera: settings.camera || lastCameraSettings,
|
camera: settings.camera || lastCameraSettings,
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -66,11 +66,16 @@ export const useIdeState = () => {
|
|||||||
...state,
|
...state,
|
||||||
ideType: payload.message,
|
ideType: payload.message,
|
||||||
}
|
}
|
||||||
case 'updateLayout':
|
case 'setLayout':
|
||||||
return {
|
return {
|
||||||
...state,
|
...state,
|
||||||
layout: payload.message,
|
layout: payload.message,
|
||||||
}
|
}
|
||||||
|
case 'setViewerSize':
|
||||||
|
return {
|
||||||
|
...state,
|
||||||
|
viewerSize: payload.message,
|
||||||
|
}
|
||||||
case 'setLoading':
|
case 'setLoading':
|
||||||
return {
|
return {
|
||||||
...state,
|
...state,
|
||||||
@@ -88,7 +93,10 @@ export const useIdeState = () => {
|
|||||||
cadPackages[state.ideType]
|
cadPackages[state.ideType]
|
||||||
.render({
|
.render({
|
||||||
code: payload.code,
|
code: payload.code,
|
||||||
settings: { camera: payload.camera },
|
settings: {
|
||||||
|
camera: payload.camera,
|
||||||
|
viewerSize: state.viewerSize,
|
||||||
|
},
|
||||||
})
|
})
|
||||||
.then(({ objectData, message, isError }) => {
|
.then(({ objectData, message, isError }) => {
|
||||||
if (isError) {
|
if (isError) {
|
||||||
|
|||||||
Reference in New Issue
Block a user