transformNodePropertyGridComponent.tsx 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. import * as React from "react";
  2. import { TransformNode } from "babylonjs/Meshes/transformNode";
  3. import { Observable } from "babylonjs/Misc/observable";
  4. import { PropertyChangedEvent } from "../../../../propertyChangedEvent";
  5. import { LineContainerComponent } from "../../../lineContainerComponent";
  6. import { CheckBoxLineComponent } from "../../../lines/checkBoxLineComponent";
  7. import { Vector3LineComponent } from "../../../lines/vector3LineComponent";
  8. import { TextLineComponent } from "../../../lines/textLineComponent";
  9. import { QuaternionLineComponent } from "../../../lines/quaternionLineComponent";
  10. import { LockObject } from "../lockObject";
  11. import { GlobalState } from '../../../../globalState';
  12. import { CustomPropertyGridComponent } from '../customPropertyGridComponent';
  13. import { ButtonLineComponent } from '../../../lines/buttonLineComponent';
  14. import { TextInputLineComponent } from '../../../lines/textInputLineComponent';
  15. import { AnimationGridComponent } from '../animations/animationPropertyGridComponent';
  16. import { CommonPropertyGridComponent } from '../commonPropertyGridComponent';
  17. import { VariantsPropertyGridComponent } from '../variantsPropertyGridComponent';
  18. import { Mesh } from 'babylonjs/Meshes/mesh';
  19. interface ITransformNodePropertyGridComponentProps {
  20. globalState: GlobalState;
  21. transformNode: TransformNode,
  22. lockObject: LockObject,
  23. onPropertyChangedObservable?: Observable<PropertyChangedEvent>
  24. }
  25. export class TransformNodePropertyGridComponent extends React.Component<ITransformNodePropertyGridComponentProps> {
  26. constructor(props: ITransformNodePropertyGridComponentProps) {
  27. super(props);
  28. }
  29. render() {
  30. const transformNode = this.props.transformNode;
  31. return (
  32. <div className="pane">
  33. <CustomPropertyGridComponent globalState={this.props.globalState} target={transformNode}
  34. lockObject={this.props.lockObject}
  35. onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  36. <LineContainerComponent globalState={this.props.globalState} title="GENERAL">
  37. <TextLineComponent label="ID" value={transformNode.id} />
  38. <TextInputLineComponent lockObject={this.props.lockObject} label="Name" target={transformNode} propertyName="name" onPropertyChangedObservable={this.props.onPropertyChangedObservable}/>
  39. <TextLineComponent label="Unique ID" value={transformNode.uniqueId.toString()} />
  40. <TextLineComponent label="Class" value={transformNode.getClassName()} />
  41. <CheckBoxLineComponent label="IsEnabled" isSelected={() => transformNode.isEnabled()} onSelect={(value) => transformNode.setEnabled(value)} />
  42. {
  43. transformNode.parent &&
  44. <TextLineComponent label="Parent" value={transformNode.parent.name} onLink={() => this.props.globalState.onSelectionChangedObservable.notifyObservers(transformNode.parent)}/>
  45. }
  46. <ButtonLineComponent label="Dispose" onClick={() => {
  47. transformNode.dispose();
  48. this.props.globalState.onSelectionChangedObservable.notifyObservers(null);
  49. }} />
  50. </LineContainerComponent>
  51. <CommonPropertyGridComponent host={transformNode} lockObject={this.props.lockObject} globalState={this.props.globalState} />
  52. <VariantsPropertyGridComponent host={transformNode as Mesh} lockObject={this.props.lockObject} globalState={this.props.globalState} />
  53. <LineContainerComponent globalState={this.props.globalState} title="TRANSFORMATIONS">
  54. <Vector3LineComponent label="Position" target={transformNode} propertyName="position" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  55. {
  56. !transformNode.rotationQuaternion &&
  57. <Vector3LineComponent label="Rotation" useEuler={this.props.globalState.onlyUseEulers} target={transformNode} propertyName="rotation" step={0.01} onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  58. }
  59. {
  60. transformNode.rotationQuaternion &&
  61. <QuaternionLineComponent label="Rotation" useEuler={this.props.globalState.onlyUseEulers} target={transformNode} propertyName="rotationQuaternion" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  62. }
  63. <Vector3LineComponent label="Scaling" target={transformNode} propertyName="scaling" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  64. </LineContainerComponent>
  65. <AnimationGridComponent globalState={this.props.globalState} animatable={transformNode} scene={transformNode.getScene()} lockObject={this.props.lockObject} />
  66. </div>
  67. );
  68. }
  69. }