commonMaterialPropertyGridComponent.tsx 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. import * as React from "react";
  2. import { Observable } from "babylonjs/Misc/observable";
  3. import { Material } from "babylonjs/Materials/material";
  4. import { PBRMaterial } from "babylonjs/Materials/PBR/pbrMaterial";
  5. import { Constants } from "babylonjs/Engines/constants";
  6. import { Engine } from "babylonjs/Engines/engine";
  7. import { PropertyChangedEvent } from "../../../../propertyChangedEvent";
  8. import { CheckBoxLineComponent } from "../../../lines/checkBoxLineComponent";
  9. import { SliderLineComponent } from "../../../lines/sliderLineComponent";
  10. import { LineContainerComponent } from "../../../lineContainerComponent";
  11. import { TextLineComponent } from "../../../lines/textLineComponent";
  12. import { OptionsLineComponent } from "../../../lines/optionsLineComponent";
  13. import { LockObject } from "../lockObject";
  14. import { GlobalState } from '../../../../globalState';
  15. import { CustomPropertyGridComponent } from '../customPropertyGridComponent';
  16. import { ButtonLineComponent } from '../../../lines/buttonLineComponent';
  17. interface ICommonMaterialPropertyGridComponentProps {
  18. globalState: GlobalState;
  19. material: Material;
  20. lockObject: LockObject;
  21. onPropertyChangedObservable?: Observable<PropertyChangedEvent>;
  22. }
  23. export class CommonMaterialPropertyGridComponent extends React.Component<ICommonMaterialPropertyGridComponentProps> {
  24. constructor(props: ICommonMaterialPropertyGridComponentProps) {
  25. super(props);
  26. }
  27. render() {
  28. const material = this.props.material;
  29. var orientationOptions = [
  30. { label: "Clockwise", value: Material.ClockWiseSideOrientation },
  31. { label: "Counterclockwise", value: Material.CounterClockWiseSideOrientation }
  32. ];
  33. var transparencyModeOptions = [
  34. { label: "Opaque", value: PBRMaterial.PBRMATERIAL_OPAQUE },
  35. { label: "Alpha test", value: PBRMaterial.PBRMATERIAL_ALPHATEST },
  36. { label: "Alpha blend", value: PBRMaterial.PBRMATERIAL_ALPHABLEND },
  37. { label: "Alpha blend and test", value: PBRMaterial.PBRMATERIAL_ALPHATESTANDBLEND },
  38. ];
  39. var alphaModeOptions = [
  40. { label: "Combine", value: Constants.ALPHA_COMBINE },
  41. { label: "One one", value: Constants.ALPHA_ONEONE },
  42. { label: "Add", value: Constants.ALPHA_ADD },
  43. { label: "Subtract", value: Constants.ALPHA_SUBTRACT },
  44. { label: "Multiply", value: Constants.ALPHA_MULTIPLY },
  45. { label: "Maximized", value: Constants.ALPHA_MAXIMIZED },
  46. { label: "Pre-multiplied", value: Constants.ALPHA_PREMULTIPLIED },
  47. ];
  48. var depthfunctionOptions = [
  49. { label: "Never", value: Engine.NEVER },
  50. { label: "Always", value: Engine.ALWAYS },
  51. { label: "Equal", value: Engine.EQUAL },
  52. { label: "Less", value: Engine.LESS },
  53. { label: "Less or equal", value: Engine.LEQUAL },
  54. { label: "Greater", value: Engine.GREATER },
  55. { label: "Greater or equal", value: Engine.GEQUAL },
  56. { label: "Not equal", value: Engine.NOTEQUAL },
  57. ];
  58. return (
  59. <div>
  60. <CustomPropertyGridComponent globalState={this.props.globalState} target={material}
  61. lockObject={this.props.lockObject}
  62. onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  63. <LineContainerComponent globalState={this.props.globalState} title="GENERAL">
  64. <TextLineComponent label="ID" value={material.id} />
  65. <TextLineComponent label="Unique ID" value={material.uniqueId.toString()} />
  66. <TextLineComponent label="Class" value={material.getClassName()} />
  67. <CheckBoxLineComponent label="Backface culling" target={material} propertyName="backFaceCulling" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  68. <OptionsLineComponent label="Orientation" options={orientationOptions} target={material} propertyName="sideOrientation" onPropertyChangedObservable={this.props.onPropertyChangedObservable} onSelect={(value) => this.setState({ mode: value })} />
  69. <CheckBoxLineComponent label="Disable lighting" target={material} propertyName="disableLighting" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  70. <CheckBoxLineComponent label="Disable depth write" target={material} propertyName="disableDepthWrite" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  71. <OptionsLineComponent label="Depth function" options={depthfunctionOptions} target={material} propertyName="depthFunction" onPropertyChangedObservable={this.props.onPropertyChangedObservable} onSelect={(value) => this.setState({ depthFunction: value })} />
  72. <CheckBoxLineComponent label="Need depth pre-pass" target={material} propertyName="needDepthPrePass" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  73. <CheckBoxLineComponent label="Wireframe" target={material} propertyName="wireframe" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  74. <CheckBoxLineComponent label="Point cloud" target={material} propertyName="pointsCloud" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  75. <SliderLineComponent label="Point size" target={material} propertyName="pointSize" minimum={0} maximum={100} step={0.1} onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  76. <SliderLineComponent label="Z-offset" target={material} propertyName="zOffset" minimum={-10} maximum={10} step={0.1} onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  77. <ButtonLineComponent label="Dispose" onClick={() => {
  78. material.dispose();
  79. this.props.globalState.onSelectionChangedObservable.notifyObservers(null);
  80. }} />
  81. </LineContainerComponent>
  82. <LineContainerComponent globalState={this.props.globalState} title="TRANSPARENCY">
  83. <SliderLineComponent label="Alpha" target={material} propertyName="alpha" minimum={0} maximum={1} step={0.01} onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  84. {
  85. (material as any).transparencyMode !== undefined &&
  86. <OptionsLineComponent label="Transparency mode" options={transparencyModeOptions} target={material} propertyName="transparencyMode" onPropertyChangedObservable={this.props.onPropertyChangedObservable} onSelect={(value) => this.setState({ transparencyMode: value })} />
  87. }
  88. <OptionsLineComponent label="Alpha mode" options={alphaModeOptions} target={material} propertyName="alphaMode" onPropertyChangedObservable={this.props.onPropertyChangedObservable} onSelect={(value) => this.setState({ alphaMode: value })} />
  89. <CheckBoxLineComponent label="Separate culling pass" target={material} propertyName="separateCullingPass" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  90. </LineContainerComponent>
  91. </div>
  92. );
  93. }
  94. }