treeItemSpecializedComponent.tsx 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. import { Camera } from "babylonjs/Cameras/camera";
  2. import { IExplorerExtensibilityGroup } from "babylonjs/Debug/debugLayer";
  3. import { AnimationGroup } from "babylonjs/Animations/animationGroup";
  4. import { Material } from "babylonjs/Materials/material";
  5. import { Texture } from "babylonjs/Materials/Textures/texture";
  6. import { TransformNode } from "babylonjs/Meshes/transformNode";
  7. import { Light } from "babylonjs/Lights/light";
  8. import { AbstractMesh } from "babylonjs/Meshes/abstractMesh";
  9. import { PostProcess } from 'babylonjs/PostProcesses/postProcess';
  10. import { MeshTreeItemComponent } from "./entities/meshTreeItemComponent";
  11. import { CameraTreeItemComponent } from "./entities/cameraTreeItemComponent";
  12. import { LightTreeItemComponent } from "./entities/lightTreeItemComponent";
  13. import { TreeItemLabelComponent } from "./treeItemLabelComponent";
  14. import { faProjectDiagram } from '@fortawesome/free-solid-svg-icons';
  15. import { MaterialTreeItemComponent } from "./entities/materialTreeItemComponent";
  16. import { TextureTreeItemComponent } from "./entities/textureTreeItemComponent";
  17. import { TransformNodeItemComponent } from "./entities/transformNodeTreeItemComponent";
  18. import * as React from "react";
  19. import { ControlTreeItemComponent } from "./entities/gui/controlTreeItemComponent";
  20. import { Control } from "babylonjs-gui/2D/controls/control";
  21. import { AdvancedDynamicTexture } from "babylonjs-gui/2D/advancedDynamicTexture";
  22. import { AdvancedDynamicTextureTreeItemComponent } from "./entities/gui/advancedDynamicTextureTreeItemComponent";
  23. import { AnimationGroupItemComponent } from "./entities/animationGroupTreeItemComponent";
  24. import { GlobalState } from "../globalState";
  25. import { PostProcessItemComponent } from './entities/postProcessTreeItemComponent';
  26. import { RenderingPipelineItemComponent } from './entities/renderingPipelineTreeItemComponent';
  27. import { PostProcessRenderPipeline } from 'babylonjs/PostProcesses/RenderPipeline/postProcessRenderPipeline';
  28. interface ITreeItemSpecializedComponentProps {
  29. label: string,
  30. entity?: any,
  31. extensibilityGroups?: IExplorerExtensibilityGroup[],
  32. globalState: GlobalState,
  33. onClick?: () => void
  34. }
  35. export class TreeItemSpecializedComponent extends React.Component<ITreeItemSpecializedComponentProps> {
  36. constructor(props: ITreeItemSpecializedComponentProps) {
  37. super(props);
  38. }
  39. onClick() {
  40. if (!this.props.onClick) {
  41. return;
  42. }
  43. this.props.onClick();
  44. }
  45. render() {
  46. const entity = this.props.entity;
  47. if (entity && entity.getClassName) {
  48. const className = entity.getClassName();
  49. if (className.indexOf("Mesh") !== -1) {
  50. const mesh = entity as AbstractMesh;
  51. if (mesh.getTotalVertices() > 0) {
  52. return (<MeshTreeItemComponent extensibilityGroups={this.props.extensibilityGroups} mesh={mesh} onClick={() => this.onClick()} />);
  53. } else {
  54. return (<TransformNodeItemComponent extensibilityGroups={this.props.extensibilityGroups} transformNode={entity as TransformNode} onClick={() => this.onClick()} />);
  55. }
  56. }
  57. if (className.indexOf("TransformNode") !== -1) {
  58. return (<TransformNodeItemComponent extensibilityGroups={this.props.extensibilityGroups} transformNode={entity as TransformNode} onClick={() => this.onClick()} />);
  59. }
  60. if (className.indexOf("Camera") !== -1) {
  61. return (<CameraTreeItemComponent extensibilityGroups={this.props.extensibilityGroups} camera={entity as Camera} onClick={() => this.onClick()} />);
  62. }
  63. if (className.indexOf("Light") !== -1) {
  64. return (<LightTreeItemComponent globalState={this.props.globalState} extensibilityGroups={this.props.extensibilityGroups} light={entity as Light} onClick={() => this.onClick()} />);
  65. }
  66. if (className.indexOf("Material") !== -1) {
  67. return (<MaterialTreeItemComponent extensibilityGroups={this.props.extensibilityGroups} material={entity as Material} onClick={() => this.onClick()} />);
  68. }
  69. if (className === "AdvancedDynamicTexture") {
  70. return (<AdvancedDynamicTextureTreeItemComponent onSelectionChangedObservable={this.props.globalState.onSelectionChangedObservable} extensibilityGroups={this.props.extensibilityGroups} texture={entity as AdvancedDynamicTexture} onClick={() => this.onClick()} />);
  71. }
  72. if (className === "AnimationGroup") {
  73. return (<AnimationGroupItemComponent extensibilityGroups={this.props.extensibilityGroups} animationGroup={entity as AnimationGroup} onClick={() => this.onClick()} />);
  74. }
  75. if (className.indexOf("Texture") !== -1) {
  76. return (<TextureTreeItemComponent extensibilityGroups={this.props.extensibilityGroups} texture={entity as Texture} onClick={() => this.onClick()} />);
  77. }
  78. if (className.indexOf("RenderingPipeline") !== -1) {
  79. return (<RenderingPipelineItemComponent extensibilityGroups={this.props.extensibilityGroups} renderPipeline={entity as PostProcessRenderPipeline} onClick={() => this.onClick()} />);
  80. }
  81. if (className.indexOf("PostProcess") !== -1) {
  82. return (<PostProcessItemComponent extensibilityGroups={this.props.extensibilityGroups} postProcess={entity as PostProcess} onClick={() => this.onClick()} />);
  83. }
  84. if (entity._host) {
  85. return (<ControlTreeItemComponent extensibilityGroups={this.props.extensibilityGroups} control={entity as Control} onClick={() => this.onClick()} />);
  86. }
  87. }
  88. return (
  89. <div className="meshTools">
  90. <TreeItemLabelComponent label={entity.name} onClick={() => this.onClick()} icon={faProjectDiagram} color="cornflowerblue" />
  91. </div>
  92. );
  93. }
  94. }