commonCameraPropertyGridComponent.tsx 4.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. import * as React from "react";
  2. import { Camera, Observable } from "babylonjs";
  3. import { PropertyChangedEvent } from "../../../../propertyChangedEvent";
  4. import { SliderLineComponent } from "../../../lines/sliderLineComponent";
  5. import { LineContainerComponent } from "../../../lineContainerComponent";
  6. import { FloatLineComponent } from "../../../lines/floatLineComponent";
  7. import { TextLineComponent } from "../../../lines/textLineComponent";
  8. import { OptionsLineComponent } from "../../../lines/optionsLineComponent";
  9. import { LockObject } from "../lockObject";
  10. interface ICommonCameraPropertyGridComponentProps {
  11. camera: Camera,
  12. lockObject: LockObject,
  13. onPropertyChangedObservable?: Observable<PropertyChangedEvent>
  14. }
  15. export class CommonCameraPropertyGridComponent extends React.Component<ICommonCameraPropertyGridComponentProps, { mode: number }> {
  16. constructor(props: ICommonCameraPropertyGridComponentProps) {
  17. super(props);
  18. this.state = { mode: this.props.camera.mode };
  19. }
  20. render() {
  21. const camera = this.props.camera;
  22. var modeOptions = [
  23. { label: "Perspective", value: BABYLON.Camera.PERSPECTIVE_CAMERA },
  24. { label: "Orthographic", value: BABYLON.Camera.ORTHOGRAPHIC_CAMERA }
  25. ];
  26. return (
  27. <LineContainerComponent title="GENERAL">
  28. <TextLineComponent label="ID" value={camera.id} />
  29. <TextLineComponent label="Unique ID" value={camera.uniqueId.toString()} />
  30. <TextLineComponent label="Class" value={camera.getClassName()} />
  31. <FloatLineComponent lockObject={this.props.lockObject} label="Near plane" target={camera} propertyName="minZ" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  32. <FloatLineComponent lockObject={this.props.lockObject} label="Far plane" target={camera} propertyName="maxZ" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  33. <SliderLineComponent label="Inertia" target={camera} propertyName="inertia" minimum={0} maximum={1} step={0.01} onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  34. <OptionsLineComponent label="Mode" options={modeOptions} target={camera} propertyName="mode" onPropertyChangedObservable={this.props.onPropertyChangedObservable} onSelect={value => this.setState({ mode: value })} />
  35. {
  36. camera.mode === BABYLON.Camera.PERSPECTIVE_CAMERA &&
  37. <SliderLineComponent label="Field of view" target={camera} propertyName="fov" minimum={0.1} maximum={Math.PI} step={0.1} onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  38. }
  39. {
  40. camera.mode === BABYLON.Camera.ORTHOGRAPHIC_CAMERA &&
  41. <FloatLineComponent lockObject={this.props.lockObject} label="Left" target={camera} propertyName="orthoLeft" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  42. }
  43. {
  44. camera.mode === BABYLON.Camera.ORTHOGRAPHIC_CAMERA &&
  45. <FloatLineComponent lockObject={this.props.lockObject} label="Top" target={camera} propertyName="orthoTop" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  46. }
  47. {
  48. camera.mode === BABYLON.Camera.ORTHOGRAPHIC_CAMERA &&
  49. <FloatLineComponent lockObject={this.props.lockObject} label="Right" target={camera} propertyName="orthoRight" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  50. }
  51. {
  52. camera.mode === BABYLON.Camera.ORTHOGRAPHIC_CAMERA &&
  53. <FloatLineComponent lockObject={this.props.lockObject} label="Bottom" target={camera} propertyName="orthoBottom" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  54. }
  55. </LineContainerComponent>
  56. );
  57. }
  58. }