propertyGridTabComponent.tsx 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  1. import * as React from "react";
  2. import { PaneComponent, IPaneComponentProps } from "../paneComponent";
  3. import { Mesh, TransformNode, Material, StandardMaterial, Texture, PBRMaterial, Scene, FreeCamera, ArcRotateCamera, HemisphericLight, PointLight, BackgroundMaterial, AnimationGroup } from "babylonjs";
  4. import { MaterialPropertyGridComponent } from "./propertyGrids/materials/materialPropertyGridComponent";
  5. import { StandardMaterialPropertyGridComponent } from "./propertyGrids/materials/standardMaterialPropertyGridComponent";
  6. import { TexturePropertyGridComponent } from "./propertyGrids/materials/texturePropertyGridComponent";
  7. import { PBRMaterialPropertyGridComponent } from "./propertyGrids/materials/pbrMaterialPropertyGridComponent";
  8. import { ScenePropertyGridComponent } from "./propertyGrids/scenePropertyGridComponent";
  9. import { HemisphericLightPropertyGridComponent } from "./propertyGrids/lights/hemisphericLightPropertyGridComponent";
  10. import { PointLightPropertyGridComponent } from "./propertyGrids/lights/pointLightPropertyGridComponent";
  11. import { FreeCameraPropertyGridComponent } from "./propertyGrids/cameras/freeCameraPropertyGridComponent";
  12. import { ArcRotateCameraPropertyGridComponent } from "./propertyGrids/cameras/arcRotateCameraPropertyGridComponent";
  13. import { MeshPropertyGridComponent } from "./propertyGrids/meshes/meshPropertyGridComponent";
  14. import { TransformNodePropertyGridComponent } from "./propertyGrids/meshes/transformNodePropertyGridComponent";
  15. import { BackgroundMaterialPropertyGridComponent } from "./propertyGrids/materials/backgroundMaterialPropertyGridComponent";
  16. import { Control } from "babylonjs-gui/2D/controls/control";
  17. import { ControlPropertyGridComponent } from "./propertyGrids/gui/controlPropertyGridComponent";
  18. import { TextBlockPropertyGridComponent } from "./propertyGrids/gui/textBlockPropertyGridComponent";
  19. import { TextBlock } from "babylonjs-gui/2D/controls/textBlock";
  20. import { InputText } from "babylonjs-gui/2D/controls/inputText";
  21. import { InputTextPropertyGridComponent } from "./propertyGrids/gui/inputTextPropertyGridComponent";
  22. import { ColorPicker, Image, Slider, ImageBasedSlider } from "babylonjs-gui";
  23. import { ColorPickerPropertyGridComponent } from "./propertyGrids/gui/colorPickerPropertyGridComponent";
  24. import { AnimationGroupGridComponent } from "./propertyGrids/animationGroupPropertyGridComponent";
  25. import { LockObject } from "./propertyGrids/lockObject";
  26. import { ImagePropertyGridComponent } from "./propertyGrids/gui/imagePropertyGridComponent";
  27. import { SliderPropertyGridComponent } from "./propertyGrids/gui/sliderPropertyGridComponent";
  28. import { ImageBasedSliderPropertyGridComponent } from "./propertyGrids/gui/imageBasedSliderPropertyGridComponent";
  29. export class PropertyGridTabComponent extends PaneComponent {
  30. private _timerIntervalId: number;
  31. private _lockObject = new LockObject();
  32. constructor(props: IPaneComponentProps) {
  33. super(props);
  34. }
  35. timerRefresh() {
  36. if (!this._lockObject.lock) {
  37. this.forceUpdate();
  38. }
  39. }
  40. componentWillMount() {
  41. this._timerIntervalId = window.setInterval(() => this.timerRefresh(), 500);
  42. }
  43. componentWillUnmount() {
  44. window.clearInterval(this._timerIntervalId);
  45. }
  46. render() {
  47. const entity = this.props.selectedEntity;
  48. if (!entity) {
  49. return (
  50. <div className="infoMessage">
  51. Please select an entity in the scene explorer.
  52. </div>
  53. );
  54. }
  55. if (entity.getClassName) {
  56. const className = entity.getClassName();
  57. if (className.indexOf("Mesh") !== -1) {
  58. const mesh = entity as Mesh;
  59. if (mesh.getTotalVertices() > 0) {
  60. return (<MeshPropertyGridComponent mesh={mesh}
  61. lockObject={this._lockObject}
  62. onSelectionChangedObservable={this.props.onSelectionChangedObservable}
  63. onPropertyChangedObservable={this.props.onPropertyChangedObservable} />);
  64. }
  65. }
  66. if (className.indexOf("FreeCamera") !== -1) {
  67. const freeCamera = entity as FreeCamera;
  68. return (<FreeCameraPropertyGridComponent camera={freeCamera}
  69. lockObject={this._lockObject}
  70. onPropertyChangedObservable={this.props.onPropertyChangedObservable} />);
  71. }
  72. if (className.indexOf("ArcRotateCamera") !== -1) {
  73. const arcRotateCamera = entity as ArcRotateCamera;
  74. return (<ArcRotateCameraPropertyGridComponent camera={arcRotateCamera}
  75. lockObject={this._lockObject}
  76. onPropertyChangedObservable={this.props.onPropertyChangedObservable} />);
  77. }
  78. if (className === "HemisphericLight") {
  79. const hemisphericLight = entity as HemisphericLight;
  80. return (<HemisphericLightPropertyGridComponent
  81. light={hemisphericLight}
  82. lockObject={this._lockObject}
  83. onPropertyChangedObservable={this.props.onPropertyChangedObservable} />);
  84. }
  85. if (className === "PointLight") {
  86. const pointLight = entity as PointLight;
  87. return (<PointLightPropertyGridComponent
  88. light={pointLight}
  89. lockObject={this._lockObject}
  90. onPropertyChangedObservable={this.props.onPropertyChangedObservable} />);
  91. }
  92. if (className.indexOf("TransformNode") !== -1 || className.indexOf("Mesh") !== -1) {
  93. const transformNode = entity as TransformNode;
  94. return (<TransformNodePropertyGridComponent transformNode={transformNode}
  95. lockObject={this._lockObject}
  96. onPropertyChangedObservable={this.props.onPropertyChangedObservable} />);
  97. }
  98. if (className === "StandardMaterial") {
  99. const material = entity as StandardMaterial;
  100. return (<StandardMaterialPropertyGridComponent
  101. material={material}
  102. lockObject={this._lockObject}
  103. onSelectionChangedObservable={this.props.onSelectionChangedObservable}
  104. onPropertyChangedObservable={this.props.onPropertyChangedObservable} />);
  105. }
  106. if (className === "PBRMaterial") {
  107. const material = entity as PBRMaterial;
  108. return (<PBRMaterialPropertyGridComponent
  109. material={material}
  110. lockObject={this._lockObject}
  111. onSelectionChangedObservable={this.props.onSelectionChangedObservable}
  112. onPropertyChangedObservable={this.props.onPropertyChangedObservable} />);
  113. }
  114. if (className === "BackgroundMaterial") {
  115. const material = entity as BackgroundMaterial;
  116. return (<BackgroundMaterialPropertyGridComponent
  117. material={material}
  118. lockObject={this._lockObject}
  119. onSelectionChangedObservable={this.props.onSelectionChangedObservable}
  120. onPropertyChangedObservable={this.props.onPropertyChangedObservable} />);
  121. }
  122. if (className === "AnimationGroup") {
  123. const animationGroup = entity as AnimationGroup;
  124. return (<AnimationGroupGridComponent
  125. animationGroup={animationGroup}
  126. scene={this.props.scene}
  127. lockObject={this._lockObject}
  128. onPropertyChangedObservable={this.props.onPropertyChangedObservable} />);
  129. }
  130. if (className.indexOf("Material") !== -1) {
  131. const material = entity as Material;
  132. return (<MaterialPropertyGridComponent material={material}
  133. lockObject={this._lockObject}
  134. onPropertyChangedObservable={this.props.onPropertyChangedObservable} />);
  135. }
  136. if (className.indexOf("Texture") !== -1) {
  137. const texture = entity as Texture;
  138. return (<TexturePropertyGridComponent texture={texture}
  139. lockObject={this._lockObject}
  140. onPropertyChangedObservable={this.props.onPropertyChangedObservable} />);
  141. }
  142. if (className === "TextBlock") {
  143. const textBlock = entity as TextBlock;
  144. return (<TextBlockPropertyGridComponent textBlock={textBlock}
  145. lockObject={this._lockObject}
  146. onPropertyChangedObservable={this.props.onPropertyChangedObservable} />);
  147. }
  148. if (className === "InputText") {
  149. const inputText = entity as InputText;
  150. return (<InputTextPropertyGridComponent inputText={inputText}
  151. lockObject={this._lockObject}
  152. onPropertyChangedObservable={this.props.onPropertyChangedObservable} />);
  153. }
  154. if (className === "ColorPicker") {
  155. const colorPicker = entity as ColorPicker;
  156. return (<ColorPickerPropertyGridComponent colorPicker={colorPicker}
  157. lockObject={this._lockObject}
  158. onPropertyChangedObservable={this.props.onPropertyChangedObservable} />);
  159. }
  160. if (className === "Image") {
  161. const image = entity as Image;
  162. return (<ImagePropertyGridComponent image={image}
  163. lockObject={this._lockObject}
  164. onPropertyChangedObservable={this.props.onPropertyChangedObservable} />);
  165. }
  166. if (className === "Slider") {
  167. const slider = entity as Slider;
  168. return (<SliderPropertyGridComponent slider={slider}
  169. lockObject={this._lockObject}
  170. onPropertyChangedObservable={this.props.onPropertyChangedObservable} />);
  171. }
  172. if (className === "ImageBasedSlider") {
  173. const imageBasedSlider = entity as ImageBasedSlider;
  174. return (<ImageBasedSliderPropertyGridComponent imageBasedSlider={imageBasedSlider}
  175. lockObject={this._lockObject}
  176. onPropertyChangedObservable={this.props.onPropertyChangedObservable} />);
  177. }
  178. if (entity._host) {
  179. const control = entity as Control;
  180. return (<ControlPropertyGridComponent control={control}
  181. lockObject={this._lockObject}
  182. onPropertyChangedObservable={this.props.onPropertyChangedObservable} />);
  183. }
  184. } else if (entity.transformNodes) {
  185. const scene = entity as Scene;
  186. return (<ScenePropertyGridComponent scene={scene}
  187. lockObject={this._lockObject}
  188. onSelectionChangedObservable={this.props.onSelectionChangedObservable}
  189. onPropertyChangedObservable={this.props.onPropertyChangedObservable} />);
  190. }
  191. return null;
  192. }
  193. }