Advertisement
Guest User

Untitled

a guest
Nov 15th, 2016
640
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.05 KB | None | 0 0
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>Double Circle</title>
  5. <meta name="description" content="Arrange nodes into concentric circles." />
  6. <!-- Copyright 1998-2016 by Northwoods Software Corporation. -->
  7. <meta charset="UTF-8">
  8. <script src="go.js"></script>
  9. <link href="../assets/css/goSamples.css" rel="stylesheet" type="text/css" /> <!-- you don't need to use this -->
  10. <script src="goSamples.js"></script> <!-- this is only for the GoJS Samples framework -->
  11. <script id="code">
  12. function init() {
  13. if (window.goSamples) goSamples(); // init for these samples -- you don't need to call this
  14. var $ = go.GraphObject.make; // for conciseness in defining templates in this function
  15.  
  16. myDiagram =
  17. $(go.Diagram, "myDiagramDiv", // must be the ID or reference to div
  18. {
  19. initialContentAlignment: go.Spot.Center,
  20. initialAutoScale: go.Diagram.Uniform,
  21. "animationManager.isEnabled": false
  22. });
  23.  
  24. myDiagram.nodeTemplate =
  25. $(go.Node, "Auto",
  26. { locationSpot: go.Spot.Center },
  27. $(go.Shape, "RoundedRectangle",
  28. { fill: "gray", stroke: "#D8D8D8" },
  29. new go.Binding("fill", "color")),
  30. // define the node's text
  31. $(go.TextBlock,
  32. { margin: 5, font: '10pt "Segoe UI",Sans-Serif' },
  33. new go.Binding("text", "key"))
  34. );
  35.  
  36. myDiagram.linkTemplate =
  37. $(go.Link,
  38. { selectable: false },
  39. $(go.Shape,
  40. { strokeWidth: 3, stroke: "#333" }));
  41.  
  42. // create the model for the double circle
  43. var data = [];
  44. var links = [];
  45. // if you want a node in the center, set its layer: 0
  46. //data.push({ layer: 0, color: "red" });
  47. data.push({ key: 'ServiceNameHere-Prod-XY3_0_0', layer: 0, color: 'yellow' });
  48.  
  49. for (var i = 0; i < 15; i++) {
  50. data.push({ key: 'ServiceNameHere-Prod-XY3_1_' + i, layer: 1, color: 'greenyellow' });
  51. links.push({ from: 'ServiceNameHere-Prod-XY3_0_0', to: 'ServiceNameHere-Prod-XY3_1_' + i });
  52. }
  53.  
  54. for (var i = 0; i < 50; i++) {
  55. data.push({ key: 'ServiceNameHere-Prod-XY3_2_' + i, layer: 2, color: 'limegreen' });
  56. }
  57.  
  58. for (var i = 0; i < 40; i++) {
  59. data.push({ key: 'ServiceNameHere-Prod-XY3_3_' + i, layer: 3, color: 'mediumaquamarine' });
  60. }
  61.  
  62. myDiagram.model = new go.GraphLinksModel(data, links);
  63.  
  64. doubleCircleLayout(myDiagram);
  65. }
  66.  
  67. function doubleCircleLayout(diagram) {
  68. var $ = go.GraphObject.make; // for conciseness in defining templates
  69. diagram.startTransaction("Multi Circle Layout");
  70.  
  71. var radius = 100;
  72. var layer = 1;
  73. var nodes = null;
  74. while (nodes = nodesByLayer(diagram, layer), nodes.count > 0) {
  75. var layout = $(go.CircularLayout,
  76. { radius: radius, aspectRatio: 0.45, spacing: 0 });
  77. layout.doLayout(nodes);
  78. // recenter at (0, 0)
  79. var cntr = layout.actualCenter;
  80. diagram.moveParts(nodes, new go.Point(-cntr.x, -cntr.y));
  81. // next layout uses a larger radius
  82. radius = layout.actualRadius * 2;
  83. layer++;
  84. }
  85.  
  86. nodesByLayer(diagram, 0).each(function(n) { n.location = new go.Point(0, 0); });
  87.  
  88. diagram.commitTransaction("Multi Circle Layout");
  89. }
  90.  
  91. function nodesByLayer(diagram, layer) {
  92. var set = new go.Set(go.Node);
  93. diagram.nodes.each(function(part) {
  94. if (part instanceof go.Node && part.data.layer === layer) set.add(part);
  95. });
  96. return set;
  97. }
  98. </script>
  99. </head>
  100. <body onload="init()">
  101. <div id="sample">
  102. <div id="myDiagramDiv" style="background-color: white; border: solid 1px black; width: 100%; height: 751px"></div>
  103. <p>
  104. This sample displays a diagram of two sets of nodes intended to be arranged in different circles.
  105. </p>
  106. <p>
  107. Unlike many <b>GoJS</b> apps, there is no <a>Diagram.layout</a> assigned.
  108. Layouts are performed explicitly in code -- a separate <a>CircularLayout</a> for each subset of nodes.
  109. The code will actually work with a variable number of layers/circles, not just two.
  110. </p>
  111. </div>
  112. </body>
  113. </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement