commonMaterialPropertyGridComponent.tsx 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. import * as React from "react";
  2. import { Material, Observable } from "babylonjs";
  3. import { PropertyChangedEvent } from "../../../../propertyChangedEvent";
  4. import { CheckBoxLineComponent } from "../../../lines/checkBoxLineComponent";
  5. import { SliderLineComponent } from "../../../lines/sliderLineComponent";
  6. import { LineContainerComponent } from "../../../lineContainerComponent";
  7. import { TextLineComponent } from "../../../lines/textLineComponent";
  8. import { OptionsLineComponent } from "../../../lines/optionsLineComponent";
  9. import { LockObject } from "../lockObject";
  10. interface ICommonMaterialPropertyGridComponentProps {
  11. material: Material,
  12. lockObject: LockObject,
  13. onPropertyChangedObservable?: Observable<PropertyChangedEvent>
  14. }
  15. export class CommonMaterialPropertyGridComponent extends React.Component<ICommonMaterialPropertyGridComponentProps> {
  16. constructor(props: ICommonMaterialPropertyGridComponentProps) {
  17. super(props);
  18. }
  19. render() {
  20. const material = this.props.material;
  21. var orientationOptions = [
  22. { label: "Clockwise", value: BABYLON.Material.ClockWiseSideOrientation },
  23. { label: "Counterclockwise", value: BABYLON.Material.CounterClockWiseSideOrientation }
  24. ]
  25. var transparencyModeOptions = [
  26. { label: "Opaque", value: BABYLON.PBRMaterial.PBRMATERIAL_OPAQUE },
  27. { label: "Alpha test", value: BABYLON.PBRMaterial.PBRMATERIAL_ALPHATEST },
  28. { label: "Alpha blend", value: BABYLON.PBRMaterial.PBRMATERIAL_ALPHABLEND },
  29. { label: "Alpha blend and test", value: BABYLON.PBRMaterial.PBRMATERIAL_ALPHATESTANDBLEND },
  30. ];
  31. var alphaModeOptions = [
  32. { label: "Combine", value: BABYLON.Engine.ALPHA_COMBINE },
  33. { label: "One one", value: BABYLON.Engine.ALPHA_ONEONE },
  34. { label: "Add", value: BABYLON.Engine.ALPHA_ADD },
  35. { label: "Subtract", value: BABYLON.Engine.ALPHA_SUBTRACT },
  36. { label: "Multiply", value: BABYLON.Engine.ALPHA_MULTIPLY },
  37. { label: "Maximized", value: BABYLON.Engine.ALPHA_MAXIMIZED },
  38. { label: "Pre-multiplied", value: BABYLON.Engine.ALPHA_PREMULTIPLIED },
  39. ];
  40. return (
  41. <div>
  42. <LineContainerComponent title="GENERAL">
  43. <TextLineComponent label="ID" value={material.id} />
  44. <TextLineComponent label="Unique ID" value={material.uniqueId.toString()} />
  45. <TextLineComponent label="Class" value={material.getClassName()} />
  46. <CheckBoxLineComponent label="Backface culling" target={material} propertyName="backFaceCulling" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  47. <OptionsLineComponent label="Orientation" options={orientationOptions} target={material} propertyName="sideOrientation" onPropertyChangedObservable={this.props.onPropertyChangedObservable} onSelect={value => this.setState({ mode: value })} />
  48. <CheckBoxLineComponent label="Disable lighting" target={material} propertyName="disableLighting" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  49. <CheckBoxLineComponent label="Disable depth write" target={material} propertyName="disableDepthWrite" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  50. <CheckBoxLineComponent label="Need depth pre-pass" target={material} propertyName="needDepthPrePass" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  51. <CheckBoxLineComponent label="Wireframe" target={material} propertyName="wireframe" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  52. <CheckBoxLineComponent label="Point cloud" target={material} propertyName="pointsCloud" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  53. <SliderLineComponent label="Point size" target={material} propertyName="pointSize" minimum={0} maximum={100} step={0.1} onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  54. <SliderLineComponent label="Z-offset" target={material} propertyName="zOffset" minimum={-10} maximum={10} step={0.1} onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  55. </LineContainerComponent>
  56. <LineContainerComponent title="TRANSPARENCY">
  57. <SliderLineComponent label="Alpha" target={material} propertyName="alpha" minimum={0} maximum={1} step={0.01} onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  58. {
  59. (material as any).transparencyMode !== undefined &&
  60. <OptionsLineComponent label="Transparency mode" options={transparencyModeOptions} target={material} propertyName="transparencyMode" onPropertyChangedObservable={this.props.onPropertyChangedObservable} onSelect={value => this.setState({ transparencyMode: value })} />
  61. }
  62. <OptionsLineComponent label="Alpha mode" options={alphaModeOptions} target={material} propertyName="alphaMode" onPropertyChangedObservable={this.props.onPropertyChangedObservable} onSelect={value => this.setState({ alphaMode: value })} />
  63. <CheckBoxLineComponent label="Separate culling pass" target={material} propertyName="separateCullingPass" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  64. </LineContainerComponent>
  65. </div>
  66. );
  67. }
  68. }