treeItemSpecializedComponent.tsx 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  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. import { SkeletonTreeItemComponent } from './entities/skeletonTreeItemComponent';
  29. import { Skeleton } from 'babylonjs/Bones/skeleton';
  30. import { BoneTreeItemComponent } from './entities/boneTreeItemComponent';
  31. import { Bone } from 'babylonjs/Bones/bone';
  32. interface ITreeItemSpecializedComponentProps {
  33. label: string,
  34. entity?: any,
  35. extensibilityGroups?: IExplorerExtensibilityGroup[],
  36. globalState: GlobalState,
  37. onClick?: () => void
  38. }
  39. export class TreeItemSpecializedComponent extends React.Component<ITreeItemSpecializedComponentProps> {
  40. constructor(props: ITreeItemSpecializedComponentProps) {
  41. super(props);
  42. }
  43. onClick() {
  44. if (!this.props.onClick) {
  45. return;
  46. }
  47. this.props.onClick();
  48. }
  49. render() {
  50. const entity = this.props.entity;
  51. if (entity && entity.getClassName) {
  52. const className = entity.getClassName();
  53. if (className.indexOf("Mesh") !== -1) {
  54. const mesh = entity as AbstractMesh;
  55. if (mesh.getTotalVertices() > 0) {
  56. return (<MeshTreeItemComponent extensibilityGroups={this.props.extensibilityGroups} mesh={mesh} onClick={() => this.onClick()} />);
  57. } else {
  58. return (<TransformNodeItemComponent extensibilityGroups={this.props.extensibilityGroups} transformNode={entity as TransformNode} onClick={() => this.onClick()} />);
  59. }
  60. }
  61. if (className.indexOf("Skeleton") !== -1) {
  62. return (<SkeletonTreeItemComponent extensibilityGroups={this.props.extensibilityGroups} skeleton={entity as Skeleton} onClick={() => this.onClick()} />);
  63. }
  64. if (className.indexOf("Bone") !== -1) {
  65. return (<BoneTreeItemComponent extensibilityGroups={this.props.extensibilityGroups} bone={entity as Bone} onClick={() => this.onClick()} />);
  66. }
  67. if (className.indexOf("TransformNode") !== -1) {
  68. return (<TransformNodeItemComponent extensibilityGroups={this.props.extensibilityGroups} transformNode={entity as TransformNode} onClick={() => this.onClick()} />);
  69. }
  70. if (className.indexOf("Camera") !== -1) {
  71. return (<CameraTreeItemComponent extensibilityGroups={this.props.extensibilityGroups} camera={entity as Camera} onClick={() => this.onClick()} />);
  72. }
  73. if (className.indexOf("Light") !== -1) {
  74. return (<LightTreeItemComponent globalState={this.props.globalState} extensibilityGroups={this.props.extensibilityGroups} light={entity as Light} onClick={() => this.onClick()} />);
  75. }
  76. if (className.indexOf("Material") !== -1) {
  77. return (<MaterialTreeItemComponent extensibilityGroups={this.props.extensibilityGroups} material={entity as Material} onClick={() => this.onClick()} />);
  78. }
  79. if (className === "AdvancedDynamicTexture") {
  80. return (<AdvancedDynamicTextureTreeItemComponent onSelectionChangedObservable={this.props.globalState.onSelectionChangedObservable} extensibilityGroups={this.props.extensibilityGroups} texture={entity as AdvancedDynamicTexture} onClick={() => this.onClick()} />);
  81. }
  82. if (className === "AnimationGroup") {
  83. return (<AnimationGroupItemComponent extensibilityGroups={this.props.extensibilityGroups} animationGroup={entity as AnimationGroup} onClick={() => this.onClick()} />);
  84. }
  85. if (className.indexOf("Texture") !== -1) {
  86. return (<TextureTreeItemComponent extensibilityGroups={this.props.extensibilityGroups} texture={entity as Texture} onClick={() => this.onClick()} />);
  87. }
  88. if (className.indexOf("RenderingPipeline") !== -1) {
  89. return (<RenderingPipelineItemComponent extensibilityGroups={this.props.extensibilityGroups} renderPipeline={entity as PostProcessRenderPipeline} onClick={() => this.onClick()} />);
  90. }
  91. if (className.indexOf("PostProcess") !== -1) {
  92. return (<PostProcessItemComponent extensibilityGroups={this.props.extensibilityGroups} postProcess={entity as PostProcess} onClick={() => this.onClick()} />);
  93. }
  94. if (entity._host) {
  95. return (<ControlTreeItemComponent extensibilityGroups={this.props.extensibilityGroups} control={entity as Control} onClick={() => this.onClick()} />);
  96. }
  97. }
  98. return (
  99. <div className="meshTools">
  100. <TreeItemLabelComponent label={entity.name} onClick={() => this.onClick()} icon={faProjectDiagram} color="cornflowerblue" />
  101. </div>
  102. );
  103. }
  104. }