babylon.nodeEditor.d.ts 26 KB

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