babylon.nodeEditor.module.d.ts 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770
  1. /// <reference types="react" />
  2. declare module "babylonjs-node-editor/globalState" {
  3. import { NodeMaterial } from "babylonjs/Materials/Node/nodeMaterial";
  4. import { Nullable } from "babylonjs/types";
  5. export class GlobalState {
  6. nodeMaterial?: NodeMaterial;
  7. hostDocument?: Nullable<Document>;
  8. }
  9. }
  10. declare module "babylonjs-node-editor/components/customDiragramNodes/generic/genericPortModel" {
  11. import { LinkModel, PortModel } from "storm-react-diagrams";
  12. import { Nullable } from 'babylonjs/types';
  13. import { NodeMaterialConnectionPoint } from 'babylonjs/Materials/Node/nodeMaterialBlockConnectionPoint';
  14. import { GenericNodeModel } from "babylonjs-node-editor/components/customDiragramNodes/generic/genericNodeModel";
  15. /**
  16. * Port model for the generic node
  17. */
  18. export class GenericPortModel extends PortModel {
  19. /**
  20. * If the port is input or output
  21. */
  22. position: string | "input" | "output";
  23. /**
  24. * What the port is connected to
  25. */
  26. connection: Nullable<NodeMaterialConnectionPoint>;
  27. static idCounter: number;
  28. constructor(name: string, type?: string);
  29. syncWithNodeMaterialConnectionPoint(connection: NodeMaterialConnectionPoint): void;
  30. getNodeModel(): GenericNodeModel;
  31. link(outPort: GenericPortModel): LinkModel<import("storm-react-diagrams").LinkModelListener>;
  32. getInputFromBlock(): void;
  33. createLinkModel(): LinkModel;
  34. getValue: Function;
  35. static SortInputOutput(a: Nullable<GenericPortModel>, b: Nullable<GenericPortModel>): {
  36. input: GenericPortModel;
  37. output: GenericPortModel;
  38. } | null;
  39. }
  40. }
  41. declare module "babylonjs-node-editor/components/customDiragramNodes/generic/genericNodeModel" {
  42. import { NodeModel } from "storm-react-diagrams";
  43. import { Nullable } from 'babylonjs/types';
  44. import { NodeMaterialBlock } from 'babylonjs/Materials/Node/nodeMaterialBlock';
  45. import { Texture } from 'babylonjs/Materials/Textures/texture';
  46. import { Vector2, Vector3, Vector4, Matrix } from 'babylonjs/Maths/math';
  47. import { GenericPortModel } from "babylonjs-node-editor/components/customDiragramNodes/generic/genericPortModel";
  48. /**
  49. * Generic node model which stores information about a node editor block
  50. */
  51. export class GenericNodeModel extends NodeModel {
  52. /**
  53. * The babylon block this node represents
  54. */
  55. block: Nullable<NodeMaterialBlock>;
  56. /**
  57. * Labels for the block
  58. */
  59. headerLabels: Array<{
  60. text: string;
  61. }>;
  62. /**
  63. * Texture for the node if it exists
  64. */
  65. texture: Nullable<Texture>;
  66. /**
  67. * Vector2 for the node if it exists
  68. */
  69. vector2: Nullable<Vector2>;
  70. /**
  71. * Vector3 for the node if it exists
  72. */
  73. vector3: Nullable<Vector3>;
  74. /**
  75. * Vector4 for the node if it exists
  76. */
  77. vector4: Nullable<Vector4>;
  78. /**
  79. * Matrix for the node if it exists
  80. */
  81. matrix: Nullable<Matrix>;
  82. ports: {
  83. [s: string]: GenericPortModel;
  84. };
  85. /**
  86. * Constructs the node model
  87. */
  88. constructor();
  89. }
  90. }
  91. declare module "babylonjs-node-editor/sharedComponents/textureLineComponent" {
  92. import * as React from "react";
  93. import { BaseTexture } from "babylonjs/Materials/Textures/baseTexture";
  94. interface ITextureLineComponentProps {
  95. texture: BaseTexture;
  96. width: number;
  97. height: number;
  98. globalState?: any;
  99. hideChannelSelect?: boolean;
  100. }
  101. export class TextureLineComponent extends React.Component<ITextureLineComponentProps, {
  102. displayRed: boolean;
  103. displayGreen: boolean;
  104. displayBlue: boolean;
  105. displayAlpha: boolean;
  106. face: number;
  107. }> {
  108. constructor(props: ITextureLineComponentProps);
  109. shouldComponentUpdate(nextProps: ITextureLineComponentProps, nextState: {
  110. displayRed: boolean;
  111. displayGreen: boolean;
  112. displayBlue: boolean;
  113. displayAlpha: boolean;
  114. face: number;
  115. }): boolean;
  116. componentDidMount(): void;
  117. componentDidUpdate(): void;
  118. updatePreview(): void;
  119. render(): JSX.Element;
  120. }
  121. }
  122. declare module "babylonjs-node-editor/sharedComponents/fileButtonLineComponent" {
  123. import * as React from "react";
  124. interface IFileButtonLineComponentProps {
  125. label: string;
  126. onClick: (file: File) => void;
  127. accept: string;
  128. }
  129. export class FileButtonLineComponent extends React.Component<IFileButtonLineComponentProps> {
  130. constructor(props: IFileButtonLineComponentProps);
  131. onChange(evt: any): void;
  132. render(): JSX.Element;
  133. }
  134. }
  135. declare module "babylonjs-node-editor/sharedComponents/numericInputComponent" {
  136. import * as React from "react";
  137. interface INumericInputComponentProps {
  138. label: string;
  139. value: number;
  140. step?: number;
  141. onChange: (value: number) => void;
  142. }
  143. export class NumericInputComponent extends React.Component<INumericInputComponentProps, {
  144. value: string;
  145. }> {
  146. static defaultProps: {
  147. step: number;
  148. };
  149. private _localChange;
  150. constructor(props: INumericInputComponentProps);
  151. shouldComponentUpdate(nextProps: INumericInputComponentProps, nextState: {
  152. value: string;
  153. }): boolean;
  154. updateValue(evt: any): void;
  155. render(): JSX.Element;
  156. }
  157. }
  158. declare module "babylonjs-node-editor/sharedComponents/propertyChangedEvent" {
  159. export class PropertyChangedEvent {
  160. object: any;
  161. property: string;
  162. value: any;
  163. initialValue: any;
  164. }
  165. }
  166. declare module "babylonjs-node-editor/sharedComponents/vector2LineComponent" {
  167. import * as React from "react";
  168. import { Vector2 } from "babylonjs/Maths/math";
  169. import { Observable } from "babylonjs/Misc/observable";
  170. import { PropertyChangedEvent } from "babylonjs-node-editor/sharedComponents/propertyChangedEvent";
  171. interface IVector2LineComponentProps {
  172. label: string;
  173. target: any;
  174. propertyName: string;
  175. step?: number;
  176. onChange?: (newvalue: Vector2) => void;
  177. onPropertyChangedObservable?: Observable<PropertyChangedEvent>;
  178. }
  179. export class Vector2LineComponent extends React.Component<IVector2LineComponentProps, {
  180. isExpanded: boolean;
  181. value: Vector2;
  182. }> {
  183. static defaultProps: {
  184. step: number;
  185. };
  186. private _localChange;
  187. constructor(props: IVector2LineComponentProps);
  188. shouldComponentUpdate(nextProps: IVector2LineComponentProps, nextState: {
  189. isExpanded: boolean;
  190. value: Vector2;
  191. }): boolean;
  192. switchExpandState(): void;
  193. raiseOnPropertyChanged(previousValue: Vector2): void;
  194. updateStateX(value: number): void;
  195. updateStateY(value: number): void;
  196. render(): JSX.Element;
  197. }
  198. }
  199. declare module "babylonjs-node-editor/sharedComponents/vector3LineComponent" {
  200. import * as React from "react";
  201. import { Vector3 } from "babylonjs/Maths/math";
  202. import { Observable } from "babylonjs/Misc/observable";
  203. import { PropertyChangedEvent } from "babylonjs-node-editor/sharedComponents/propertyChangedEvent";
  204. interface IVector3LineComponentProps {
  205. label: string;
  206. target: any;
  207. propertyName: string;
  208. step?: number;
  209. onChange?: (newvalue: Vector3) => void;
  210. onPropertyChangedObservable?: Observable<PropertyChangedEvent>;
  211. }
  212. export class Vector3LineComponent extends React.Component<IVector3LineComponentProps, {
  213. isExpanded: boolean;
  214. value: Vector3;
  215. }> {
  216. static defaultProps: {
  217. step: number;
  218. };
  219. private _localChange;
  220. constructor(props: IVector3LineComponentProps);
  221. shouldComponentUpdate(nextProps: IVector3LineComponentProps, nextState: {
  222. isExpanded: boolean;
  223. value: Vector3;
  224. }): boolean;
  225. switchExpandState(): void;
  226. raiseOnPropertyChanged(previousValue: Vector3): void;
  227. updateVector3(): void;
  228. updateStateX(value: number): void;
  229. updateStateY(value: number): void;
  230. updateStateZ(value: number): void;
  231. render(): JSX.Element;
  232. }
  233. }
  234. declare module "babylonjs-node-editor/components/customDiragramNodes/generic/genericNodeWidget" {
  235. import * as React from "react";
  236. import { GenericNodeModel } from "babylonjs-node-editor/components/customDiragramNodes/generic/genericNodeModel";
  237. import { Nullable } from 'babylonjs/types';
  238. /**
  239. * GenericNodeWidgetProps
  240. */
  241. export interface GenericNodeWidgetProps {
  242. node: Nullable<GenericNodeModel>;
  243. }
  244. /**
  245. * GenericNodeWidgetState
  246. */
  247. export interface GenericNodeWidgetState {
  248. }
  249. /**
  250. * Used to display a node block for the node editor
  251. */
  252. export class GenericNodeWidget extends React.Component<GenericNodeWidgetProps, GenericNodeWidgetState> {
  253. /**
  254. * Creates a GenericNodeWidget
  255. * @param props
  256. */
  257. constructor(props: GenericNodeWidgetProps);
  258. /**
  259. * Replaces the texture of the node
  260. * @param file the file of the texture to use
  261. */
  262. replaceTexture(file: File): void;
  263. render(): JSX.Element;
  264. }
  265. }
  266. declare module "babylonjs-node-editor/components/customDiragramNodes/generic/genericNodeFactory" {
  267. import * as SRD from "storm-react-diagrams";
  268. import { GenericNodeModel } from "babylonjs-node-editor/components/customDiragramNodes/generic/genericNodeModel";
  269. /**
  270. * Node factory which creates editor nodes
  271. */
  272. export class GenericNodeFactory extends SRD.AbstractNodeFactory {
  273. /**
  274. * Constructs a GenericNodeFactory
  275. */
  276. constructor();
  277. /**
  278. * Generates a node widget
  279. * @param diagramEngine diagram engine
  280. * @param node node to generate
  281. * @returns node widget jsx
  282. */
  283. generateReactWidget(diagramEngine: SRD.DiagramEngine, node: GenericNodeModel): JSX.Element;
  284. /**
  285. * Gets a new instance of a node model
  286. * @returns generic node model
  287. */
  288. getNewInstance(): GenericNodeModel;
  289. }
  290. }
  291. declare module "babylonjs-node-editor/sharedComponents/lineContainerComponent" {
  292. import * as React from "react";
  293. interface ILineContainerComponentProps {
  294. globalState?: any;
  295. title: string;
  296. children: any[] | any;
  297. closed?: boolean;
  298. }
  299. export class LineContainerComponent extends React.Component<ILineContainerComponentProps, {
  300. isExpanded: boolean;
  301. isHighlighted: boolean;
  302. }> {
  303. private static _InMemoryStorage;
  304. constructor(props: ILineContainerComponentProps);
  305. switchExpandedState(): void;
  306. componentDidMount(): void;
  307. renderHeader(): JSX.Element;
  308. render(): JSX.Element;
  309. }
  310. }
  311. declare module "babylonjs-node-editor/sharedComponents/buttonLineComponent" {
  312. import * as React from "react";
  313. export interface IButtonLineComponentProps {
  314. label: string;
  315. onClick: () => void;
  316. }
  317. export class ButtonLineComponent extends React.Component<IButtonLineComponentProps> {
  318. constructor(props: IButtonLineComponentProps);
  319. render(): JSX.Element;
  320. }
  321. }
  322. declare module "babylonjs-node-editor/components/graphEditor" {
  323. import * as React from "react";
  324. import { GlobalState } from "babylonjs-node-editor/globalState";
  325. import { GenericNodeModel } from "babylonjs-node-editor/components/customDiragramNodes/generic/genericNodeModel";
  326. import { NodeMaterialBlock } from 'babylonjs/Materials/Node/nodeMaterialBlock';
  327. import { NodeMaterialConnectionPoint } from 'babylonjs/Materials/Node/nodeMaterialBlockConnectionPoint';
  328. import { AlphaTestBlock } from 'babylonjs/Materials/Node/Blocks/Fragment/alphaTestBlock';
  329. import { FragmentOutputBlock } from 'babylonjs/Materials/Node/Blocks/Fragment/fragmentOutputBlock';
  330. import { ImageProcessingBlock } from 'babylonjs/Materials/Node/Blocks/Fragment/imageProcessingBlock';
  331. import { RGBAMergerBlock } from 'babylonjs/Materials/Node/Blocks/Fragment/rgbaMergerBlock';
  332. import { RGBASplitterBlock } from 'babylonjs/Materials/Node/Blocks/Fragment/rgbaSplitterBlock';
  333. import { TextureBlock } from 'babylonjs/Materials/Node/Blocks/Fragment/textureBlock';
  334. import { BonesBlock } from 'babylonjs/Materials/Node/Blocks/Vertex/bonesBlock';
  335. import { InstancesBlock } from 'babylonjs/Materials/Node/Blocks/Vertex/instancesBlock';
  336. import { MorphTargetsBlock } from 'babylonjs/Materials/Node/Blocks/Vertex/morphTargetsBlock';
  337. import { VertexOutputBlock } from 'babylonjs/Materials/Node/Blocks/Vertex/vertexOutputBlock';
  338. import { FogBlock } from 'babylonjs/Materials/Node/Blocks/Dual/fogBlock';
  339. import { AddBlock } from 'babylonjs/Materials/Node/Blocks/addBlock';
  340. import { ClampBlock } from 'babylonjs/Materials/Node/Blocks/clampBlock';
  341. import { MatrixMultiplicationBlock } from 'babylonjs/Materials/Node/Blocks/matrixMultiplicationBlock';
  342. import { MultiplyBlock } from 'babylonjs/Materials/Node/Blocks/multiplyBlock';
  343. import { Vector2TransformBlock } from 'babylonjs/Materials/Node/Blocks/vector2TransformBlock';
  344. import { Vector3TransformBlock } from 'babylonjs/Materials/Node/Blocks/vector3TransformBlock';
  345. import { Vector4TransformBlock } from 'babylonjs/Materials/Node/Blocks/vector4TransformBlock';
  346. interface IGraphEditorProps {
  347. globalState: GlobalState;
  348. }
  349. export class GraphEditor extends React.Component<IGraphEditorProps> {
  350. private _engine;
  351. private _model;
  352. private _nodes;
  353. /**
  354. * Current row/column position used when adding new nodes
  355. */
  356. private _rowPos;
  357. /**
  358. * Creates a node and recursivly creates its parent nodes from it's input
  359. * @param nodeMaterialBlock
  360. */
  361. createNodeFromObject(options: {
  362. column: number;
  363. nodeMaterialBlock?: NodeMaterialBlock;
  364. }): GenericNodeModel;
  365. componentDidMount(): void;
  366. componentWillUnmount(): void;
  367. constructor(props: IGraphEditorProps);
  368. addNodeFromClass(ObjectClass: typeof NodeMaterialBlock): GenericNodeModel;
  369. addValueNode(type: string, column?: number, connection?: NodeMaterialConnectionPoint): GenericNodeModel;
  370. allBlocks: {
  371. Fragment: (typeof AlphaTestBlock | typeof FragmentOutputBlock | typeof ImageProcessingBlock | typeof RGBAMergerBlock | typeof RGBASplitterBlock | typeof TextureBlock)[];
  372. Vertex: (typeof BonesBlock | typeof InstancesBlock | typeof MorphTargetsBlock | typeof VertexOutputBlock)[];
  373. Dual: (typeof FogBlock)[];
  374. Other: (typeof AddBlock | typeof ClampBlock | typeof MatrixMultiplicationBlock | typeof MultiplyBlock | typeof Vector2TransformBlock | typeof Vector3TransformBlock | typeof Vector4TransformBlock)[];
  375. Value: string[];
  376. };
  377. render(): JSX.Element;
  378. }
  379. }
  380. declare module "babylonjs-node-editor/sharedComponents/popup" {
  381. export class Popup {
  382. static CreatePopup(title: string, windowVariableName: string, width?: number, height?: number): HTMLDivElement | null;
  383. private static _CopyStyles;
  384. }
  385. }
  386. declare module "babylonjs-node-editor/nodeEditor" {
  387. import { NodeMaterial } from "babylonjs/Materials/Node/nodeMaterial";
  388. /**
  389. * Interface used to specify creation options for the node editor
  390. */
  391. export interface INodeEditorOptions {
  392. /**
  393. * Defines the DOM element that will host the node editor
  394. */
  395. hostElement?: HTMLDivElement;
  396. nodeMaterial?: NodeMaterial;
  397. }
  398. /**
  399. * Class used to create a node editor
  400. */
  401. export class NodeEditor {
  402. /**
  403. * Show the node editor
  404. * @param options defines the options to use to configure the node editor
  405. */
  406. static Show(options: INodeEditorOptions): void;
  407. }
  408. }
  409. declare module "babylonjs-node-editor/index" {
  410. export * from "babylonjs-node-editor/nodeEditor";
  411. }
  412. declare module "babylonjs-node-editor/legacy/legacy" {
  413. export * from "babylonjs-node-editor/index";
  414. }
  415. declare module "babylonjs-node-editor" {
  416. export * from "babylonjs-node-editor/legacy/legacy";
  417. }
  418. /// <reference types="react" />
  419. declare module NODEEDITOR {
  420. export class GlobalState {
  421. nodeMaterial?: BABYLON.NodeMaterial;
  422. hostDocument?: BABYLON.Nullable<Document>;
  423. }
  424. }
  425. declare module NODEEDITOR {
  426. /**
  427. * Port model for the generic node
  428. */
  429. export class GenericPortModel extends PortModel {
  430. /**
  431. * If the port is input or output
  432. */
  433. position: string | "input" | "output";
  434. /**
  435. * What the port is connected to
  436. */
  437. connection: BABYLON.Nullable<BABYLON.NodeMaterialConnectionPoint>;
  438. static idCounter: number;
  439. constructor(name: string, type?: string);
  440. syncWithNodeMaterialConnectionPoint(connection: BABYLON.NodeMaterialConnectionPoint): void;
  441. getNodeModel(): GenericNodeModel;
  442. link(outPort: GenericPortModel): LinkModel<import("storm-react-diagrams").LinkModelListener>;
  443. getInputFromBlock(): void;
  444. createLinkModel(): LinkModel;
  445. getValue: Function;
  446. static SortInputOutput(a: BABYLON.Nullable<GenericPortModel>, b: BABYLON.Nullable<GenericPortModel>): {
  447. input: GenericPortModel;
  448. output: GenericPortModel;
  449. } | null;
  450. }
  451. }
  452. declare module NODEEDITOR {
  453. /**
  454. * Generic node model which stores information about a node editor block
  455. */
  456. export class GenericNodeModel extends NodeModel {
  457. /**
  458. * The babylon block this node represents
  459. */
  460. block: BABYLON.Nullable<BABYLON.NodeMaterialBlock>;
  461. /**
  462. * Labels for the block
  463. */
  464. headerLabels: Array<{
  465. text: string;
  466. }>;
  467. /**
  468. * BABYLON.Texture for the node if it exists
  469. */
  470. texture: BABYLON.Nullable<BABYLON.Texture>;
  471. /**
  472. * BABYLON.Vector2 for the node if it exists
  473. */
  474. vector2: BABYLON.Nullable<BABYLON.Vector2>;
  475. /**
  476. * BABYLON.Vector3 for the node if it exists
  477. */
  478. vector3: BABYLON.Nullable<BABYLON.Vector3>;
  479. /**
  480. * BABYLON.Vector4 for the node if it exists
  481. */
  482. vector4: BABYLON.Nullable<BABYLON.Vector4>;
  483. /**
  484. * BABYLON.Matrix for the node if it exists
  485. */
  486. matrix: BABYLON.Nullable<BABYLON.Matrix>;
  487. ports: {
  488. [s: string]: GenericPortModel;
  489. };
  490. /**
  491. * Constructs the node model
  492. */
  493. constructor();
  494. }
  495. }
  496. declare module NODEEDITOR {
  497. interface ITextureLineComponentProps {
  498. texture: BABYLON.BaseTexture;
  499. width: number;
  500. height: number;
  501. globalState?: any;
  502. hideChannelSelect?: boolean;
  503. }
  504. export class TextureLineComponent extends React.Component<ITextureLineComponentProps, {
  505. displayRed: boolean;
  506. displayGreen: boolean;
  507. displayBlue: boolean;
  508. displayAlpha: boolean;
  509. face: number;
  510. }> {
  511. constructor(props: ITextureLineComponentProps);
  512. shouldComponentUpdate(nextProps: ITextureLineComponentProps, nextState: {
  513. displayRed: boolean;
  514. displayGreen: boolean;
  515. displayBlue: boolean;
  516. displayAlpha: boolean;
  517. face: number;
  518. }): boolean;
  519. componentDidMount(): void;
  520. componentDidUpdate(): void;
  521. updatePreview(): void;
  522. render(): JSX.Element;
  523. }
  524. }
  525. declare module NODEEDITOR {
  526. interface IFileButtonLineComponentProps {
  527. label: string;
  528. onClick: (file: File) => void;
  529. accept: string;
  530. }
  531. export class FileButtonLineComponent extends React.Component<IFileButtonLineComponentProps> {
  532. constructor(props: IFileButtonLineComponentProps);
  533. onChange(evt: any): void;
  534. render(): JSX.Element;
  535. }
  536. }
  537. declare module NODEEDITOR {
  538. interface INumericInputComponentProps {
  539. label: string;
  540. value: number;
  541. step?: number;
  542. onChange: (value: number) => void;
  543. }
  544. export class NumericInputComponent extends React.Component<INumericInputComponentProps, {
  545. value: string;
  546. }> {
  547. static defaultProps: {
  548. step: number;
  549. };
  550. private _localChange;
  551. constructor(props: INumericInputComponentProps);
  552. shouldComponentUpdate(nextProps: INumericInputComponentProps, nextState: {
  553. value: string;
  554. }): boolean;
  555. updateValue(evt: any): void;
  556. render(): JSX.Element;
  557. }
  558. }
  559. declare module NODEEDITOR {
  560. export class PropertyChangedEvent {
  561. object: any;
  562. property: string;
  563. value: any;
  564. initialValue: any;
  565. }
  566. }
  567. declare module NODEEDITOR {
  568. interface IVector2LineComponentProps {
  569. label: string;
  570. target: any;
  571. propertyName: string;
  572. step?: number;
  573. onChange?: (newvalue: BABYLON.Vector2) => void;
  574. onPropertyChangedObservable?: BABYLON.Observable<PropertyChangedEvent>;
  575. }
  576. export class Vector2LineComponent extends React.Component<IVector2LineComponentProps, {
  577. isExpanded: boolean;
  578. value: BABYLON.Vector2;
  579. }> {
  580. static defaultProps: {
  581. step: number;
  582. };
  583. private _localChange;
  584. constructor(props: IVector2LineComponentProps);
  585. shouldComponentUpdate(nextProps: IVector2LineComponentProps, nextState: {
  586. isExpanded: boolean;
  587. value: BABYLON.Vector2;
  588. }): boolean;
  589. switchExpandState(): void;
  590. raiseOnPropertyChanged(previousValue: BABYLON.Vector2): void;
  591. updateStateX(value: number): void;
  592. updateStateY(value: number): void;
  593. render(): JSX.Element;
  594. }
  595. }
  596. declare module NODEEDITOR {
  597. interface IVector3LineComponentProps {
  598. label: string;
  599. target: any;
  600. propertyName: string;
  601. step?: number;
  602. onChange?: (newvalue: BABYLON.Vector3) => void;
  603. onPropertyChangedObservable?: BABYLON.Observable<PropertyChangedEvent>;
  604. }
  605. export class Vector3LineComponent extends React.Component<IVector3LineComponentProps, {
  606. isExpanded: boolean;
  607. value: BABYLON.Vector3;
  608. }> {
  609. static defaultProps: {
  610. step: number;
  611. };
  612. private _localChange;
  613. constructor(props: IVector3LineComponentProps);
  614. shouldComponentUpdate(nextProps: IVector3LineComponentProps, nextState: {
  615. isExpanded: boolean;
  616. value: BABYLON.Vector3;
  617. }): boolean;
  618. switchExpandState(): void;
  619. raiseOnPropertyChanged(previousValue: BABYLON.Vector3): void;
  620. updateVector3(): void;
  621. updateStateX(value: number): void;
  622. updateStateY(value: number): void;
  623. updateStateZ(value: number): void;
  624. render(): JSX.Element;
  625. }
  626. }
  627. declare module NODEEDITOR {
  628. /**
  629. * GenericNodeWidgetProps
  630. */
  631. export interface GenericNodeWidgetProps {
  632. node: BABYLON.Nullable<GenericNodeModel>;
  633. }
  634. /**
  635. * GenericNodeWidgetState
  636. */
  637. export interface GenericNodeWidgetState {
  638. }
  639. /**
  640. * Used to display a node block for the node editor
  641. */
  642. export class GenericNodeWidget extends React.Component<GenericNodeWidgetProps, GenericNodeWidgetState> {
  643. /**
  644. * Creates a GenericNodeWidget
  645. * @param props
  646. */
  647. constructor(props: GenericNodeWidgetProps);
  648. /**
  649. * Replaces the texture of the node
  650. * @param file the file of the texture to use
  651. */
  652. replaceTexture(file: File): void;
  653. render(): JSX.Element;
  654. }
  655. }
  656. declare module NODEEDITOR {
  657. /**
  658. * Node factory which creates editor nodes
  659. */
  660. export class GenericNodeFactory extends SRD.AbstractNodeFactory {
  661. /**
  662. * Constructs a GenericNodeFactory
  663. */
  664. constructor();
  665. /**
  666. * Generates a node widget
  667. * @param diagramEngine diagram engine
  668. * @param node node to generate
  669. * @returns node widget jsx
  670. */
  671. generateReactWidget(diagramEngine: SRD.DiagramEngine, node: GenericNodeModel): JSX.Element;
  672. /**
  673. * Gets a new instance of a node model
  674. * @returns generic node model
  675. */
  676. getNewInstance(): GenericNodeModel;
  677. }
  678. }
  679. declare module NODEEDITOR {
  680. interface ILineContainerComponentProps {
  681. globalState?: any;
  682. title: string;
  683. children: any[] | any;
  684. closed?: boolean;
  685. }
  686. export class LineContainerComponent extends React.Component<ILineContainerComponentProps, {
  687. isExpanded: boolean;
  688. isHighlighted: boolean;
  689. }> {
  690. private static _InMemoryStorage;
  691. constructor(props: ILineContainerComponentProps);
  692. switchExpandedState(): void;
  693. componentDidMount(): void;
  694. renderHeader(): JSX.Element;
  695. render(): JSX.Element;
  696. }
  697. }
  698. declare module NODEEDITOR {
  699. export interface IButtonLineComponentProps {
  700. label: string;
  701. onClick: () => void;
  702. }
  703. export class ButtonLineComponent extends React.Component<IButtonLineComponentProps> {
  704. constructor(props: IButtonLineComponentProps);
  705. render(): JSX.Element;
  706. }
  707. }
  708. declare module NODEEDITOR {
  709. interface IGraphEditorProps {
  710. globalState: GlobalState;
  711. }
  712. export class GraphEditor extends React.Component<IGraphEditorProps> {
  713. private _engine;
  714. private _model;
  715. private _nodes;
  716. /**
  717. * Current row/column position used when adding new nodes
  718. */
  719. private _rowPos;
  720. /**
  721. * Creates a node and recursivly creates its parent nodes from it's input
  722. * @param nodeMaterialBlock
  723. */
  724. createNodeFromObject(options: {
  725. column: number;
  726. nodeMaterialBlock?: BABYLON.NodeMaterialBlock;
  727. }): GenericNodeModel;
  728. componentDidMount(): void;
  729. componentWillUnmount(): void;
  730. constructor(props: IGraphEditorProps);
  731. addNodeFromClass(ObjectClass: typeof BABYLON.NodeMaterialBlock): GenericNodeModel;
  732. addValueNode(type: string, column?: number, connection?: BABYLON.NodeMaterialConnectionPoint): GenericNodeModel;
  733. allBlocks: {
  734. Fragment: (typeof BABYLON.AlphaTestBlock | typeof BABYLON.FragmentOutputBlock | typeof BABYLON.ImageProcessingBlock | typeof BABYLON.RGBAMergerBlock | typeof BABYLON.RGBASplitterBlock | typeof BABYLON.TextureBlock)[];
  735. Vertex: (typeof BABYLON.BonesBlock | typeof BABYLON.InstancesBlock | typeof BABYLON.MorphTargetsBlock | typeof BABYLON.VertexOutputBlock)[];
  736. Dual: (typeof BABYLON.FogBlock)[];
  737. Other: (typeof BABYLON.AddBlock | typeof BABYLON.ClampBlock | typeof BABYLON.MatrixMultiplicationBlock | typeof BABYLON.MultiplyBlock | typeof BABYLON.Vector2TransformBlock | typeof BABYLON.Vector3TransformBlock | typeof BABYLON.Vector4TransformBlock)[];
  738. Value: string[];
  739. };
  740. render(): JSX.Element;
  741. }
  742. }
  743. declare module NODEEDITOR {
  744. export class Popup {
  745. static CreatePopup(title: string, windowVariableName: string, width?: number, height?: number): HTMLDivElement | null;
  746. private static _CopyStyles;
  747. }
  748. }
  749. declare module NODEEDITOR {
  750. /**
  751. * Interface used to specify creation options for the node editor
  752. */
  753. export interface INodeEditorOptions {
  754. /**
  755. * Defines the DOM element that will host the node editor
  756. */
  757. hostElement?: HTMLDivElement;
  758. nodeMaterial?: BABYLON.NodeMaterial;
  759. }
  760. /**
  761. * Class used to create a node editor
  762. */
  763. export class NodeEditor {
  764. /**
  765. * Show the node editor
  766. * @param options defines the options to use to configure the node editor
  767. */
  768. static Show(options: INodeEditorOptions): void;
  769. }
  770. }