import CadViewer from "../CadViewer"; import DxfViewer from "../DxfViewer"; import { Alert, AlertDescription, AlertTitle } from "../ui/alert"; import { Button } from "../ui/button"; import { RENDER_FORMAT } from "../../lib/workbench/constants"; import { LOOK_FLOOR_MODES } from "../../lib/lookSettings"; import { VIEWER_SCENE_SCALE } from "../../lib/viewer/sceneScale"; import { VIEWER_PICK_MODE } from "../../lib/viewer/constants"; const EMPTY_LIST = Object.freeze([]); export default function CadRenderPane({ viewerRef, renderFormat, renderPartsIndividually = false, selectedMeshData, selectedDxfData, selectedDxfMeshData, selectedKey, selectedDxfKey, viewerPerspective, viewerPerspectiveRef, lookSettings, previewMode, isDesktop, viewportFrameInsets, viewerLoading, viewerAlert, stepUpdateInProgress, viewPlaneOffsetRight = 16, viewerMode, assemblyParts, hiddenPartIds, selectedPartIds, hoveredPartId, hoveredReferenceId, selectedReferenceIds, selectorRuntime, pickableFaces, pickableEdges, pickableVertices, inspectedAssemblyPartId, drawToolActive, drawingTool, drawingStrokes, handleDrawingStrokesChange, handlePerspectiveChange, handleModelHoverChange, handleModelReferenceActivate, handleModelReferenceDoubleActivate, handleViewerAlertChange, selectionCount, copyButtonLabel, handleCopySelection, handleScreenshotCopy, partIntroAnimation = null }) { const viewerAlertVariant = viewerAlert?.severity === "warning" ? "warning" : "destructive"; const viewerAlertSummaryClasses = viewerAlert?.severity === "warning" ? "text-chart-5" : "text-destructive"; const dxfMode = renderFormat === RENDER_FORMAT.DXF; const urdfMode = renderFormat === RENDER_FORMAT.URDF; const stlMode = renderFormat === RENDER_FORMAT.STL; const dxfMeshPreviewReady = dxfMode && !!selectedDxfMeshData; const activeMeshData = dxfMeshPreviewReady ? selectedDxfMeshData : selectedMeshData; const activeModelKey = dxfMeshPreviewReady ? (selectedDxfKey || selectedKey) : selectedKey; const ctaMode = !dxfMode && !stlMode && drawToolActive ? "screenshot" : selectionCount > 0 ? "selection" : ""; const mobileBottomOverlayOffset = ctaMode === "screenshot" ? "calc(env(safe-area-inset-bottom, 0px) + 10.25rem)" : "calc(env(safe-area-inset-bottom, 0px) + 7.25rem)"; const bottomOverlayStyle = { bottom: isDesktop ? "1rem" : mobileBottomOverlayOffset }; const ctaLabel = ctaMode === "screenshot" ? "Copy Screenshot" : copyButtonLabel; const ctaTitle = ctaMode === "screenshot" ? "Copy screenshot to clipboard" : copyButtonLabel; const ctaDisabled = ctaMode === "screenshot" ? viewerLoading || !activeMeshData : false; return (
{viewerAlert.summary || "Viewer error"}
{viewerAlert.message}
{viewerAlert.resolution ? ({viewerAlert.resolution}
) : null}Rebuild command
{viewerAlert.command}