portHelper.tsx 6.3 KB

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