portHelper.tsx 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. import * as React from "react";
  2. import { PortWidget } from "storm-react-diagrams";
  3. import { DefaultNodeModel } from './defaultNodeModel';
  4. import { DefaultPortModel } from './defaultPortModel';
  5. import { Nullable } from 'babylonjs/types';
  6. import { NodeMaterialConnectionPoint } from 'babylonjs/Materials/Node/nodeMaterialBlockConnectionPoint';
  7. import { NodeMaterialBlockConnectionPointTypes } from 'babylonjs/Materials/Node/nodeMaterialBlockConnectionPointTypes';
  8. export class PortHelper {
  9. private static _GetPortTypeIndicator(connection: NodeMaterialConnectionPoint): Nullable<JSX.Element> {
  10. switch (connection.type) {
  11. case NodeMaterialBlockConnectionPointTypes.Float:
  12. case NodeMaterialBlockConnectionPointTypes.Int:
  13. return <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABESURBVDhPY/z//z8DJYAJSpMNRg3Ab4APEL+GYhAbK8AXjSCNIhAmwxsgFoUwUQFNvZAJxCCbQRjExgpGU+LAG8DAAAA+ghAthzG18wAAAABJRU5ErkJggg=="></img>;
  14. case NodeMaterialBlockConnectionPointTypes.Vector2:
  15. return <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABHSURBVDhPY/z//z8DJYAJSpMN8BngA8SvoRjExgrweQGkUQTCZHgDxKIQJiqgqRcygRhkMwiD2FjB4I4FosBoNA6DaGRgAABqpx09dHGG2QAAAABJRU5ErkJggg=="></img>;
  16. case NodeMaterialBlockConnectionPointTypes.Vector3:
  17. case NodeMaterialBlockConnectionPointTypes.Color3:
  18. return <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABHSURBVDhPY/z//z8DJYAJSmMDPkD8GopBbKwAnwtAGkUgTIY3QCwKYaICfC4gCuAzIBOIQTaDMIiNFYwG4mgggsCQD0QGBgD0QypNGzDYqQAAAABJRU5ErkJggg=="></img>;
  19. case NodeMaterialBlockConnectionPointTypes.Vector4:
  20. case NodeMaterialBlockConnectionPointTypes.Color4:
  21. return <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABRSURBVDhPY/z//z8DJYAJSpMN0A3wAeLXUAxiwwAucQYGkBeQ8GsghgEQm5A45V6AmwTFIUAMsgGEQWxC4gyDLxZIBqPpAAiQTQPiIZcOGBgAyCDrTTmX3gcAAAAASUVORK5CYII="></img>;
  22. case NodeMaterialBlockConnectionPointTypes.Matrix:
  23. return <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsIAAA7CARUoSoAAAABuSURBVDhPY/z//z8DJYAJSpMN0A3wAeLXUAxiwwAucQZ0L4AUiECYOMEbIBaFMGnghUwoDQKhQMwIxSA2DCCrwfACCMAEQBqRAVZxqnuBZEB1A9DjHgZwsQdpOgDZAMLo6QAmTjAdkAQo9AIDAwD62SHFU/Hk8QAAAABJRU5ErkJggg=="></img>;
  24. }
  25. return null;
  26. }
  27. public static GenerateOutputPorts(node: Nullable<DefaultNodeModel>, ignoreLabel: boolean) {
  28. if (!node) {
  29. return new Array<JSX.Element>();
  30. }
  31. let outputPorts = [];
  32. for (var key in node.ports) {
  33. let port = node.ports[key] as DefaultPortModel;
  34. if (port.position === "output") {
  35. let typeIndicator = this._GetPortTypeIndicator(port.connection!);
  36. outputPorts.push(
  37. <div key={key} className="output-port">
  38. {
  39. !ignoreLabel &&
  40. <div className="output-port-label">
  41. {port.name}
  42. </div>
  43. }
  44. <div className="output-port-plug">
  45. <PortWidget key={key} name={port.name} node={node} className={port.connection && port.connection.endpoints.length > 0 ? "connected" : ""} />
  46. <div className="output-port-type">
  47. {
  48. typeIndicator
  49. }
  50. </div>
  51. <div className="output-port-border">
  52. </div>
  53. </div>
  54. </div>
  55. );
  56. }
  57. }
  58. return outputPorts;
  59. }
  60. public static GenerateInputPorts(node: Nullable<DefaultNodeModel>, includeOnly?: string[]) {
  61. if (!node) {
  62. return new Array<JSX.Element>();
  63. }
  64. let inputPorts = [];
  65. for (var key in node.ports) {
  66. let port = node.ports[key] as DefaultPortModel;
  67. if (port.position === "input") {
  68. let typeIndicator = this._GetPortTypeIndicator(port.connection!);
  69. if (!includeOnly || includeOnly.indexOf(port.name) !== -1) {
  70. inputPorts.push(
  71. <div key={key} className="input-port">
  72. <div className="input-port-plug">
  73. <PortWidget key={key} name={port.name} node={node} className={port.connection && port.connection.connectedPoint ? "connected" : ""} />
  74. <div className="input-port-type">
  75. {
  76. typeIndicator
  77. }
  78. </div>
  79. <div className="input-port-border">
  80. </div>
  81. </div>
  82. <div className="input-port-label">
  83. {port.name}
  84. </div>
  85. </div>
  86. );
  87. }
  88. }
  89. }
  90. return inputPorts;
  91. }
  92. }