playground.html 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title>Diagram</title>
  6. </head>
  7. <body>
  8. <script type="text/javascript" src="../build/escher.js"></script>
  9. <script type="text/javascript" src="./lib/pdf.js"></script>
  10. <script type="text/javascript">
  11. // Division
  12. var division = document.createElement("div");
  13. division.style.position = "absolute";
  14. division.style.width = "100%";
  15. division.style.height = "100%";
  16. division.style.top = "0px";
  17. division.style.left = "0px";
  18. division.style.overflow = "hidden";
  19. document.body.appendChild(division);
  20. // Canvas
  21. var canvas = document.createElement("canvas");
  22. canvas.style.position = "absolute";
  23. canvas.style.width = "100%";
  24. canvas.style.height = "100%";
  25. canvas.style.top = "0px";
  26. canvas.style.left = "0px";
  27. canvas.width = window.innerWidth;
  28. canvas.height = window.innerHeight;
  29. division.appendChild(canvas);
  30. // Prevent context menu events
  31. document.body.oncontextmenu = function(event)
  32. {
  33. event.preventDefault();
  34. return false;
  35. };
  36. // Resize canvas on window resize
  37. window.onresize = function()
  38. {
  39. canvas.width = window.innerWidth;
  40. canvas.height = window.innerHeight;
  41. };
  42. // Create boxes on double click
  43. canvas.ondblclick = function(event)
  44. {
  45. var p = new Escher.Vector2(event.clientX, event.clientY);
  46. p = viewport.inverseMatrix.transformPoint(p);
  47. var box = new Escher.Box();
  48. box.position.copy(p);
  49. box.draggable = true;
  50. boxes.add(box);
  51. var text = new Escher.Text();
  52. text.text = "Box";
  53. box.add(text);
  54. if(boxes.children.length > 1)
  55. {
  56. var line = new Escher.Line();
  57. line.layer = -1;
  58. line.from = boxes.children[boxes.children.length - 1].position;
  59. line.to = boxes.children[boxes.children.length - 2].position;
  60. group.add(line);
  61. }
  62. };
  63. /*
  64. window.onkeydown = function(event)
  65. {
  66. if(selected !== null && event.keyCode === 46)
  67. {
  68. selected.parent.remove(selected);
  69. }
  70. };
  71. var selected = null;
  72. var selectObject = function(object)
  73. {
  74. this.strokeStyle = "#0000FF";
  75. selected = this;
  76. };
  77. */
  78. // Group to store other objects
  79. var group = new Escher.Object2D();
  80. // Customized box object
  81. var object = new Escher.Box();
  82. object.draggable = true;
  83. object.layer = 2;
  84. object.draw = function(context, viewport, canvas)
  85. {
  86. // Create gradient
  87. var gradient = context.createLinearGradient(this.box.min.x, 0, this.box.max.x, 0);
  88. gradient.addColorStop(0, "#FF0000");
  89. gradient.addColorStop(0.5, "#00FF00");
  90. gradient.addColorStop(1, "#0000FF");
  91. // Box property has the min and max points of the object.
  92. var size = this.box.getSize();
  93. // Fill with gradient
  94. context.fillStyle = gradient;
  95. context.fillRect(this.box.min.x, this.box.min.y, size.x , size.y);
  96. };
  97. group.add(object);
  98. Escher.Helpers.boxResizeTool(object);
  99. // Pattern image object
  100. var image = new Escher.Pattern("images/grid.png");
  101. image.position.set(-300, -400);
  102. image.layer = 5;
  103. image.draggable = true;
  104. group.add(image);
  105. var graph = new Escher.Graph();
  106. graph.box.min.set(-500, -50);
  107. graph.box.max.set(500, 50);
  108. graph.position.set(-300, -400);
  109. graph.layer = 5;
  110. graph.draggable = true;
  111. group.add(graph);
  112. Escher.Helpers.boxResizeTool(graph);
  113. for(var i = 0; i < 300; i++)
  114. {
  115. graph.data.push(Math.random() * 9 + 1);
  116. }
  117. function cycleGraph()
  118. {
  119. graph.data.push(graph.data.shift());
  120. requestAnimationFrame(cycleGraph);
  121. }
  122. cycleGraph();
  123. // Image object
  124. var background = new Escher.Image("images/hexagon.jpg");
  125. background.position.set(-300, -400);
  126. background.layer = -2;
  127. background.draggable = true;
  128. group.add(background);
  129. // Box
  130. var boxA = new Escher.Box();
  131. boxA.draggable = true;
  132. boxA.position.set(-50, -100);
  133. group.add(boxA);
  134. Escher.Helpers.boxResizeTool(boxA);
  135. // DOM
  136. var div = new Escher.DOM(division);
  137. div.size.set(100, 50);
  138. div.origin.set(50, 25);
  139. boxA.add(div);
  140. var text = document.createElement("div");
  141. text.style.fontFamily = "Arial";
  142. text.style.textAlign = "center";
  143. text.innerHTML = "DOM text!";
  144. div.element.appendChild(text);
  145. // DOM Fixed
  146. var div = new Escher.DOM(division);
  147. div.size.set(100, 50);
  148. div.origin.set(50, 25);
  149. div.position.set(200, 200);
  150. boxA.add(div);
  151. var text = document.createElement("div");
  152. text.style.fontFamily = "Arial";
  153. text.style.textAlign = "center";
  154. text.innerHTML = "DOM Derp!";
  155. div.element.appendChild(text);
  156. group.add(div);
  157. // Box
  158. var boxB = new Escher.Box();
  159. boxB.position.set(100, 100);
  160. boxB.draggable = true;
  161. group.add(boxB);
  162. // DOM
  163. var div = new Escher.DOM(division);
  164. div.size.set(100, 50);
  165. div.origin.set(50, 25);
  166. boxB.add(div);
  167. var text = document.createElement("div");
  168. text.style.fontFamily = "Arial";
  169. text.style.textAlign = "center";
  170. text.innerHTML = "Double click to add box!";
  171. div.element.appendChild(text);
  172. // Circle
  173. var circle = new Escher.Circle();
  174. circle.radius = 60;
  175. circle.position.set(300, 0);
  176. circle.draggable = true;
  177. circle.onDoubleClick = function()
  178. {
  179. viewport.centerObject(circle, canvas);
  180. }
  181. group.add(circle);
  182. var text = new Escher.Text();
  183. text.text = "Canvas Text";
  184. circle.add(text);
  185. var text = new Escher.Text();
  186. text.text = "Double-click to center!";
  187. text.font = "30px Comic Sans MS";
  188. text.position.set(0, -75);
  189. text.strokeStyle = "#000000";
  190. text.fillStyle = "#FFFFFF";
  191. circle.add(text);
  192. // Line (connection)
  193. var line = new Escher.Line();
  194. line.from = boxA.position;
  195. line.to = boxB.position;
  196. line.layer = -1;
  197. line.dashPattern = [];
  198. group.add(line);
  199. // Line (connection)
  200. var line = new Escher.Line();
  201. line.from = boxA.position;
  202. line.to = circle.position;
  203. line.layer = -1;
  204. line.dashPattern = [];
  205. line.lineWidth = 2;
  206. group.add(line);
  207. // Line (connection)
  208. var line = new Escher.BezierCurve();
  209. line.from = boxB.position;
  210. line.to = circle.position;
  211. line.layer = -1;
  212. group.add(line);
  213. Escher.BezierCurve.curveHelper(line);
  214. // Line (connection)
  215. var line = new Escher.QuadraticCurve();
  216. line.from = boxA.position;
  217. line.to.set(-100, -300);
  218. line.controlPoint.set(-100, -200);
  219. line.layer = -1;
  220. group.add(line);
  221. Escher.QuadraticCurve.curveHelper(line);
  222. var multiline = new Escher.MultiLineText();
  223. multiline.position.set(-500, -400);
  224. multiline.text = "This is a multiline text!\n\nvar line = new Escher.QuadraticCurve();\n" +
  225. "\t\tline.from = boxA.position;\n" +
  226. "\t\tline.to.set(-100, -300);\n" +
  227. "\t\tline.controlPoint.set(-100, -200);\n" +
  228. "\t\tline.layer = -1;\n" +
  229. "\t\tgroup.add(line);\n" +
  230. "\t\tEscher.QuadraticCurve.curveHelper(line);";
  231. group.add(multiline);
  232. // Boxes group
  233. var boxes = new Escher.Object2D();
  234. group.add(boxes);
  235. // Viewport
  236. var viewport = new Escher.Viewport(canvas);
  237. // Renderer
  238. var renderer = new Escher.Renderer(canvas);
  239. renderer.createRenderLoop(group, viewport);
  240. </script>
  241. </body>
  242. </html>