diff --git a/src/components/Dashboard/common/GCodePreview.jsx b/src/components/Dashboard/common/GCodePreview.jsx index 3eeb5b02..baa58f53 100644 --- a/src/components/Dashboard/common/GCodePreview.jsx +++ b/src/components/Dashboard/common/GCodePreview.jsx @@ -1,6 +1,6 @@ import * as GCodePreview from 'gcode-preview' import PropTypes from 'prop-types' -import { Button, Card, Flex, Slider } from 'antd' +import { Button, Card, Flex, Select, Slider } from 'antd' import { useCallback, useEffect, useRef, useState } from 'react' import * as THREE from 'three' import PlusIcon from '../../Icons/PlusIcon.jsx' @@ -84,6 +84,12 @@ function GCodePreviewUI(props) { const [previewScale, setPreviewScale] = useState(1) const [panMode, setPanMode] = useState(false) const [isDragging, setIsDragging] = useState(false) + const [renderMode, setRenderMode] = useState('lines') + const [travelVisibility, setTravelVisibility] = useState('hide') + const renderModeRef = useRef(renderMode) + const travelVisibilityRef = useRef(travelVisibility) + renderModeRef.current = renderMode + travelVisibilityRef.current = travelVisibility const resizePreview = useCallback(() => { previewRef.current?.resize() @@ -117,6 +123,8 @@ function GCodePreviewUI(props) { initialCameraPosition: [0, 400, 450], allowDragNDrop: false }) + instance.renderTubes = renderModeRef.current === 'pipes' + instance.renderTravel = travelVisibilityRef.current === 'show' previewRef.current = instance const { camera, controls } = instance @@ -188,6 +196,21 @@ function GCodePreviewUI(props) { applyingScaleRef.current = false }, [preview, previewScale]) + useEffect(() => { + if (!preview) return + const renderTubes = renderMode === 'pipes' + const renderTravel = travelVisibility === 'show' + if ( + preview.renderTubes === renderTubes && + preview.renderTravel === renderTravel + ) { + return + } + preview.renderTubes = renderTubes + preview.renderTravel = renderTravel + preview.render() + }, [preview, renderMode, travelVisibility]) + useEffect(() => { if (!preview) return preview.controls.mouseButtons = { @@ -253,7 +276,7 @@ function GCodePreviewUI(props) { gap={'middle'} style={{ width: '100%', height: '100%', minHeight: 0, ...style }} > - + clampPreviewScale(prev - 0.05)) }} /> +