multiMaterialPropertyGridComponent.tsx 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. import * as React from "react";
  2. import { Observable } from "babylonjs/Misc/observable";
  3. import { PropertyChangedEvent } from "../../../../propertyChangedEvent";
  4. import { LineContainerComponent } from "../../../lineContainerComponent";
  5. import { CommonMaterialPropertyGridComponent } from "./commonMaterialPropertyGridComponent";
  6. import { LockObject } from "../../../../../sharedUiComponents/tabs/propertyGrids/lockObject";
  7. import { GlobalState } from '../../../../globalState';
  8. import { TextLineComponent } from '../../../../../sharedUiComponents/lines/textLineComponent';
  9. import { Material } from 'babylonjs/Materials/material';
  10. import { MultiMaterial } from 'babylonjs/Materials/multiMaterial';
  11. interface IMultiMaterialPropertyGridComponentProps {
  12. globalState: GlobalState;
  13. material: MultiMaterial;
  14. lockObject: LockObject;
  15. onSelectionChangedObservable?: Observable<any>;
  16. onPropertyChangedObservable?: Observable<PropertyChangedEvent>;
  17. }
  18. export class MultiMaterialPropertyGridComponent extends React.Component<IMultiMaterialPropertyGridComponentProps> {
  19. constructor(props: IMultiMaterialPropertyGridComponentProps) {
  20. super(props);
  21. }
  22. onMaterialLink(mat: Material) {
  23. if (!this.props.onSelectionChangedObservable) {
  24. return;
  25. }
  26. this.props.onSelectionChangedObservable.notifyObservers(mat);
  27. }
  28. renderChildMaterial() {
  29. const material = this.props.material;
  30. return (
  31. <LineContainerComponent globalState={this.props.globalState} title="CHILDREN">
  32. {
  33. material.subMaterials.map((mat, i) => {
  34. if (mat) {
  35. return (
  36. <TextLineComponent key={"Material #" + i} label={"Material #" + i} value={mat.name} onLink={() => this.onMaterialLink(mat)} />
  37. )
  38. }
  39. return null;
  40. })
  41. }
  42. </LineContainerComponent>
  43. );
  44. }
  45. render() {
  46. const material = this.props.material;
  47. return (
  48. <div className="pane">
  49. <CommonMaterialPropertyGridComponent globalState={this.props.globalState} lockObject={this.props.lockObject} material={material} onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  50. {this.renderChildMaterial()}
  51. </div>
  52. );
  53. }
  54. }