12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- import * as React from "react";
- import { GlobalState } from '../../globalState';
- import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
- import { faCircle, faRing, faCube, faHockeyPuck, faSquareFull, faPlus, faDotCircle, faWindowRestore } from '@fortawesome/free-solid-svg-icons';
- import { PreviewMeshType } from './previewMeshType';
- import { DataStorage } from '../../dataStorage';
- interface IPreviewMeshControlComponent {
- globalState: GlobalState;
- togglePreviewAreaComponent: () => void;
- }
- export class PreviewMeshControlComponent extends React.Component<IPreviewMeshControlComponent> {
- changeMeshType(newOne: PreviewMeshType) {
- if (this.props.globalState.previewMeshType === newOne) {
- return;
- }
- this.props.globalState.previewMeshType = newOne;
- this.props.globalState.onPreviewCommandActivated.notifyObservers();
- DataStorage.StoreNumber("PreviewMeshType", newOne);
- this.forceUpdate();
- }
- useCustomMesh(evt: any) {
- var files: File[] = evt.target.files;
- if (files && files.length) {
- let file = files[0];
- this.props.globalState.previewMeshFile = file;
- this.props.globalState.previewMeshType = PreviewMeshType.Custom;
- this.props.globalState.onPreviewCommandActivated.notifyObservers();
- this.forceUpdate();
- }
- (document.getElementById("file-picker")! as HTMLInputElement).value = "";
- }
- onPopUp() {
- this.props.togglePreviewAreaComponent();
- }
- render() {
- return (
- <div id="preview-mesh-bar">
- <div
- title="Preview with a cube"
- onClick={() => this.changeMeshType(PreviewMeshType.Box)} className={"button" + (this.props.globalState.previewMeshType === PreviewMeshType.Box ? " selected" : "")}>
- <FontAwesomeIcon icon={faCube} />
- </div>
- <div
- title="Preview with a sphere"
- onClick={() => this.changeMeshType(PreviewMeshType.Sphere)} className={"button" + (this.props.globalState.previewMeshType === PreviewMeshType.Sphere ? " selected" : "")}>
- <FontAwesomeIcon icon={faCircle} />
- </div>
- <div
- title="Preview with a torus"
- onClick={() => this.changeMeshType(PreviewMeshType.Torus)} className={"button" + (this.props.globalState.previewMeshType === PreviewMeshType.Torus ? " selected" : "")}>
- <FontAwesomeIcon icon={faRing} />
- </div>
- <div
- title="Preview with a cylinder"
- onClick={() => this.changeMeshType(PreviewMeshType.Cylinder)} className={"button" + (this.props.globalState.previewMeshType === PreviewMeshType.Cylinder ? " selected" : "")}>
- <FontAwesomeIcon icon={faHockeyPuck} />
- </div>
- <div
- title="Preview with a plane"
- onClick={() => this.changeMeshType(PreviewMeshType.Plane)} className={"button" + (this.props.globalState.previewMeshType === PreviewMeshType.Plane ? " selected" : "")}>
- <FontAwesomeIcon icon={faSquareFull} />
- </div>
- <div
- title="Preview with a shader ball"
- onClick={() => this.changeMeshType(PreviewMeshType.ShaderBall)} className={"button" + (this.props.globalState.previewMeshType === PreviewMeshType.ShaderBall ? " selected" : "")}>
- <FontAwesomeIcon icon={faDotCircle} />
- </div>
- <div className={"button align"} title="Preview with a custom mesh" >
- <label htmlFor="file-picker" id="file-picker-label">
- <FontAwesomeIcon icon={faPlus} />
- </label>
- <input ref="file-picker" id="file-picker" type="file" onChange={evt => this.useCustomMesh(evt)} accept=".gltf, .glb, .babylon, .obj"/>
- </div>
- <div
- title="Open preview in new window" id="preview-new-window"
- onClick={() => this.onPopUp()} className="button">
- <FontAwesomeIcon icon={faWindowRestore} />
- </div>
- </div>
- );
- }
- }
|