jscadRenderer = (container) => {
const perspectiveCamera = jscadReglRenderer.cameras.perspective;
const orbitControls = jscadReglRenderer.controls.orbit;
const gestures = Gestures(container);
const state = {
camera: { ...perspectiveCamera.defaults, position: [150, -180, 233] },
controls: { ...orbitControls.defaults },
entities: []
};
perspectiveCamera.setProjection(state.camera, state.camera, dims(container));
const drawCommands = jscadReglRenderer.drawCommands;
const render = jscadReglRenderer.prepareRender({ glOptions: { container } });
const staticEntities = axesAndGrid();
(function updateAndRender() {
const updateView = gestures.updateState(orbitControls, state);
if (updateView) {
const updated = orbitControls.update(state);
Object.assign(state.controls, updated.controls);
Object.assign(state.camera, updated.camera);
const entities = [...staticEntities, ...state.entities];
render({ drawCommands, camera: state.camera, entities });
}
requestAnimationFrame(updateAndRender);
})();
container.updateModel = (solids) => {
const solidArray = Array.isArray(solids) ? solids : [solids];
state.entities = jscadReglRenderer.entitiesFromSolids({}, solidArray);
return container;
};
container.zoomToFit = () => {
gestures.triggerZoomToFit();
return container;
};
return container;
}