diff --git a/nerfstudio/viewer/app/src/index.scss b/nerfstudio/viewer/app/src/index.scss index fab8b8a68..3a331e37a 100644 --- a/nerfstudio/viewer/app/src/index.scss +++ b/nerfstudio/viewer/app/src/index.scss @@ -242,6 +242,25 @@ $sidebar-width: 100% !default; margin-top: 20px; } +// ------------------------------------ +// Load Path Modal styling + +.LoadPathModal-box { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + width: 500px; // 400 + background-color: $base-color2; + border: 2px solid #000; + padding: 32px; + margin-top: 20px; +} + +.LoadPathModal-upload_button { + text-align: center; +} + // ------------------------------------ // Camera Pane diff --git a/nerfstudio/viewer/app/src/modules/ConfigPanel/ConfigPanel.jsx b/nerfstudio/viewer/app/src/modules/ConfigPanel/ConfigPanel.jsx index ec5d95e82..a1c331fad 100644 --- a/nerfstudio/viewer/app/src/modules/ConfigPanel/ConfigPanel.jsx +++ b/nerfstudio/viewer/app/src/modules/ConfigPanel/ConfigPanel.jsx @@ -47,7 +47,6 @@ export function RenderControls() { const crop_enabled = useSelector( (state) => state.renderingState.crop_enabled, ); - console.log('crop_enabled_config panel', crop_enabled); const crop_bg_color = useSelector( (state) => state.renderingState.crop_bg_color, @@ -162,7 +161,6 @@ export function RenderControls() { value: crop_enabled, hint: 'Crop the viewport to the selected box', onChange: (value) => { - console.log('dispact value', value); dispatch_and_send( websocket, dispatch, diff --git a/nerfstudio/viewer/app/src/modules/LoadPathModal/LoadPathModal.jsx b/nerfstudio/viewer/app/src/modules/LoadPathModal/LoadPathModal.jsx new file mode 100644 index 000000000..5f79d1e00 --- /dev/null +++ b/nerfstudio/viewer/app/src/modules/LoadPathModal/LoadPathModal.jsx @@ -0,0 +1,149 @@ +/* eslint-disable react/jsx-props-no-spreading */ +import * as React from 'react'; + +import { Box, Button, FormControl, Modal, Typography } from '@mui/material'; +import InputLabel from '@mui/material/InputLabel'; +import { useSelector } from 'react-redux'; +import { FileUpload } from '@mui/icons-material'; +import MenuItem from '@mui/material/MenuItem'; +import Select from '@mui/material/Select'; + +interface LoadPathModalProps { + open: object; + setOpen: object; + pathUploadFunction: any; + loadCameraPathFunction: any; +} + +export default function LoadPathModal(props: LoadPathModalProps) { + const open = props.open; + const setOpen = props.setOpen; + const uploadCameraPath = props.pathUploadFunction; + const loadCameraPath = props.loadCameraPathFunction; + + const [existingPathSelect, setExistingPathSelect] = React.useState(''); + + // redux store state + const all_camera_paths = useSelector( + (state) => state.renderingState.all_camera_paths, + ); + + let camera_paths_arr = []; + if (typeof all_camera_paths === 'object' && all_camera_paths !== null) { + camera_paths_arr = Object.keys(all_camera_paths).map((key) => { + return { + name: key, + val: all_camera_paths[key], + }; + }); + } + + const hiddenFileInput = React.useRef(null); + const handleFileUploadClick = () => { + hiddenFileInput.current.click(); + }; + + // react state + + const handleClose = () => setOpen(false); + const handlePathSelect = (event) => { + setExistingPathSelect(event.target.value); + }; + + const handleExistingLoadClick = () => { + loadCameraPath(existingPathSelect); + handleClose(); + }; + + const handleFileInput = (event) => { + uploadCameraPath(event); + handleClose(); + }; + + return ( +
+ Either upload a local file or select a saved camera path +
++
No existing saved paths found
+ )} +
- ./renders/{data_base_dir}/{export_path}.mp4
+ ./renders/{data_base_dir_leaf}/{export_path}.mp4
.
-
+