import * as React from "react"; import { Scene } from "babylonjs"; import { LineContainerComponent } from "../../lineContainerComponent"; import { CheckBoxLineComponent } from "../../lines/checkBoxLineComponent"; import { GlobalState } from "../../../globalState"; import { FloatLineComponent } from "../../lines/floatLineComponent"; import { OptionsLineComponent } from "../../lines/optionsLineComponent"; import { MessageLineComponent } from "../../lines/messageLineComponent"; import { faCheck, faTimesCircle } from "@fortawesome/free-solid-svg-icons"; import { TextLineComponent } from "../../lines/textLineComponent"; interface IGLTFComponentProps { scene: Scene, globalState: GlobalState } export class GLTFComponent extends React.Component { constructor(props: IGLTFComponentProps) { super(props); const extensionStates = this.props.globalState.glTFLoaderExtensionDefaults; extensionStates["MSFT_lod"] = extensionStates["MSFT_lod"] || { enabled: true, maxLODsToLoad: Number.MAX_VALUE }; extensionStates["MSFT_minecraftMesh"] = extensionStates["MSFT_minecraftMesh"] || { enabled: true }; extensionStates["MSFT_sRGBFactors"] = extensionStates["MSFT_sRGBFactors"] || { enabled: true }; extensionStates["MSFT_audio_emitter"] = extensionStates["MSFT_audio_emitter"] || { enabled: true }; extensionStates["KHR_draco_mesh_compression"] = extensionStates["KHR_draco_mesh_compression"] || { enabled: true }; extensionStates["KHR_materials_pbrSpecularGlossiness"] = extensionStates["KHR_materials_pbrSpecularGlossiness"] || { enabled: true }; extensionStates["KHR_materials_unlit"] = extensionStates["KHR_materials_unlit"] || { enabled: true }; extensionStates["KHR_lights_punctual"] = extensionStates["KHR_lights_punctual"] || { enabled: true }; extensionStates["KHR_texture_transform"] = extensionStates["KHR_texture_transform"] || { enabled: true }; extensionStates["EXT_lights_image_based"] = extensionStates["EXT_lights_image_based"] || { enabled: true }; const loaderState = this.props.globalState.glTFLoaderDefaults; if (loaderState["animationStartMode"] === undefined) { loaderState["animationStartMode"] = BABYLON.GLTFLoaderAnimationStartMode.FIRST; } loaderState["capturePerformanceCounters"] = loaderState["capturePerformanceCounters"] || false; loaderState["compileMaterials"] = loaderState["compileMaterials"] || false; loaderState["compileShadowGenerators"] = loaderState["compileShadowGenerators"] || false; loaderState["coordinateSystemMode"] = loaderState["coordinateSystemMode"] || BABYLON.GLTFLoaderCoordinateSystemMode.AUTO; loaderState["loggingEnabled"] = loaderState["loggingEnabled"] || false; loaderState["transparencyAsCoverage"] = loaderState["transparencyAsCoverage"] || false; loaderState["useClipPlane"] = loaderState["useClipPlane"] || false; loaderState["validate"] = loaderState["validate"] || true; } openValidationDetails() { const validationResults = this.props.globalState.validationResults; const win = window.open("", "_blank"); if (win) { // TODO: format this better and use generator registry (https://github.com/KhronosGroup/glTF-Generator-Registry) win.document.title = "glTF Validation Results"; win.document.body.innerText = JSON.stringify(validationResults, null, 2); win.document.body.style.whiteSpace = "pre"; win.document.body.style.fontFamily = `monospace`; win.document.body.style.fontSize = `14px`; win.focus(); } } prepareText(singularForm: string, count: number) { if (count) { return `${count} ${singularForm}s`; } return `${singularForm}`; } renderValidation() { const validationResults = this.props.globalState.validationResults; const issues = validationResults.issues; return ( { issues.numErrors !== 0 && } { issues.numErrors === 0 && } this.openValidationDetails()} /> ) } render() { const extensionStates = this.props.globalState.glTFLoaderExtensionDefaults; const loaderState = this.props.globalState.glTFLoaderDefaults; var animationStartMode = [ { label: "None", value: BABYLON.GLTFLoaderAnimationStartMode.NONE }, { label: "First", value: BABYLON.GLTFLoaderAnimationStartMode.FIRST }, { label: "ALL", value: BABYLON.GLTFLoaderAnimationStartMode.ALL } ]; var coordinateSystemMode = [ { label: "Auto", value: BABYLON.GLTFLoaderCoordinateSystemMode.AUTO }, { label: "Right handed", value: BABYLON.GLTFLoaderCoordinateSystemMode.FORCE_RIGHT_HANDED } ]; return (
extensionStates["MSFT_lod"].enabled} onSelect={value => extensionStates["MSFT_lod"].enabled = value} /> extensionStates["MSFT_minecraftMesh"].enabled} onSelect={value => extensionStates["MSFT_minecraftMesh"].enabled = value} /> extensionStates["MSFT_sRGBFactors"].enabled} onSelect={value => extensionStates["MSFT_sRGBFactors"].enabled = value} /> extensionStates["MSFT_audio_emitter"].enabled} onSelect={value => extensionStates["MSFT_audio_emitter"].enabled = value} /> extensionStates["KHR_draco_mesh_compression"].enabled} onSelect={value => extensionStates["KHR_draco_mesh_compression"].enabled = value} /> extensionStates["KHR_materials_pbrSpecularGlossiness"].enabled} onSelect={value => extensionStates["KHR_materials_pbrSpecularGlossiness"].enabled = value} /> extensionStates["KHR_materials_unlit"].enabled} onSelect={value => extensionStates["KHR_materials_unlit"].enabled = value} /> extensionStates["KHR_lights_punctual"].enabled} onSelect={value => extensionStates["KHR_lights_punctual"].enabled = value} /> extensionStates["KHR_texture_transform"].enabled} onSelect={value => extensionStates["KHR_texture_transform"].enabled = value} /> extensionStates["EXT_lights_image_based"].enabled} onSelect={value => extensionStates["EXT_lights_image_based"].enabled = value} /> { loaderState["validate"] && this.props.globalState.validationResults && this.renderValidation() }
); } }