playground.html 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301
  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. // Box index
  43. var boxIndex = 0;
  44. // Create boxes on double click
  45. canvas.ondblclick = function(event)
  46. {
  47. var p = new Escher.Vector2(event.clientX, event.clientY);
  48. p = viewport.inverseMatrix.transformPoint(p);
  49. var box = new Escher.Box();
  50. box.position.copy(p);
  51. box.draggable = true;
  52. boxes.add(box);
  53. var text = new Escher.Text();
  54. text.text = "Box " + boxIndex++;
  55. box.add(text);
  56. if(boxes.children.length > 1)
  57. {
  58. var line = new Escher.Line();
  59. line.layer = -1;
  60. line.from = boxes.children[boxes.children.length - 1].position;
  61. line.to = boxes.children[boxes.children.length - 2].position;
  62. group.add(line);
  63. }
  64. };
  65. /*
  66. window.onkeydown = function(event)
  67. {
  68. if(selected !== null && event.keyCode === 46)
  69. {
  70. selected.parent.remove(selected);
  71. }
  72. };
  73. var selected = null;
  74. var selectObject = function(object)
  75. {
  76. this.strokeStyle = "#0000FF";
  77. selected = this;
  78. };
  79. */
  80. // Group to store other objects
  81. var group = new Escher.Object2D();
  82. // Customized box object
  83. var object = new Escher.Box();
  84. object.draggable = true;
  85. object.layer = 2;
  86. object.draw = function(context, viewport, canvas)
  87. {
  88. // Create gradient
  89. var gradient = context.createLinearGradient(this.box.min.x, 0, this.box.max.x, 0);
  90. gradient.addColorStop(0, "#FF0000");
  91. gradient.addColorStop(0.5, "#00FF00");
  92. gradient.addColorStop(1, "#0000FF");
  93. // Box property has the min and max points of the object.
  94. var size = this.box.getSize();
  95. // Fill with gradient
  96. context.fillStyle = gradient;
  97. context.fillRect(this.box.min.x, this.box.min.y, size.x , size.y);
  98. };
  99. group.add(object);
  100. Escher.Helpers.boxResizeTool(object);
  101. // Pattern image object
  102. var image = new Escher.Pattern("images/grid.png");
  103. image.position.set(-300, -400);
  104. image.layer = 5;
  105. image.draggable = true;
  106. group.add(image);
  107. var gauge = new Escher.Gauge();
  108. gauge.position.set(500, 700);
  109. gauge.layer = 5;
  110. gauge.draggable = true;
  111. group.add(gauge);
  112. var graph = new Escher.Graph();
  113. graph.box.min.set(-500, -50);
  114. graph.box.max.set(500, 50);
  115. graph.position.set(-300, -400);
  116. graph.layer = 5;
  117. graph.draggable = true;
  118. group.add(graph);
  119. Escher.Helpers.boxResizeTool(graph);
  120. for(var i = 0; i < 300; i++)
  121. {
  122. graph.data.push(Math.random() * 9 + 1);
  123. }
  124. function cycleGraph()
  125. {
  126. graph.data.push(graph.data.shift());
  127. requestAnimationFrame(cycleGraph);
  128. }
  129. cycleGraph();
  130. // Image object
  131. var background = new Escher.Image("images/hexagon.jpg");
  132. background.position.set(-300, -400);
  133. background.layer = -2;
  134. background.draggable = true;
  135. group.add(background);
  136. // Box
  137. var boxA = new Escher.Box();
  138. boxA.draggable = true;
  139. boxA.position.set(-50, -100);
  140. group.add(boxA);
  141. Escher.Helpers.boxResizeTool(boxA);
  142. // DOM
  143. var div = new Escher.DOM();
  144. div.size.set(100, 50);
  145. div.origin.set(50, 25);
  146. boxA.add(div);
  147. var text = document.createElement("div");
  148. text.style.fontFamily = "Arial";
  149. text.style.textAlign = "center";
  150. text.innerHTML = "DOM text!";
  151. div.element.appendChild(text);
  152. // DOM Fixed
  153. var div = new Escher.DOM();
  154. div.size.set(100, 50);
  155. div.origin.set(50, 25);
  156. div.position.set(200, 200);
  157. boxA.add(div);
  158. var text = document.createElement("div");
  159. text.style.fontFamily = "Arial";
  160. text.style.textAlign = "center";
  161. text.innerHTML = "DOM Derp!";
  162. div.element.appendChild(text);
  163. group.add(div);
  164. // Box
  165. var boxB = new Escher.Box();
  166. boxB.position.set(100, 100);
  167. boxB.draggable = true;
  168. group.add(boxB);
  169. // DOM
  170. var div = new Escher.DOM();
  171. div.size.set(100, 50);
  172. div.origin.set(50, 25);
  173. boxB.add(div);
  174. var text = document.createElement("div");
  175. text.style.fontFamily = "Arial";
  176. text.style.textAlign = "center";
  177. text.innerHTML = "Double click to add box!";
  178. div.element.appendChild(text);
  179. // Circle
  180. var circle = new Escher.Circle();
  181. circle.radius = 60;
  182. circle.position.set(300, 0);
  183. circle.draggable = true;
  184. circle.onDoubleClick = function()
  185. {
  186. viewport.centerObject(circle, canvas);
  187. }
  188. group.add(circle);
  189. var text = new Escher.Text();
  190. text.text = "Canvas Text";
  191. circle.add(text);
  192. var text = new Escher.Text();
  193. text.text = "Double-click to center!";
  194. text.font = "30px Comic Sans MS";
  195. text.position.set(0, -75);
  196. text.strokeStyle = new Escher.ColorStyle("#000000");
  197. text.fillStyle = new Escher.ColorStyle("#FFFFFF");
  198. circle.add(text);
  199. // Line (connection)
  200. var line = new Escher.Line();
  201. line.from = boxA.position;
  202. line.to = boxB.position;
  203. line.layer = -1;
  204. line.dashPattern = [];
  205. group.add(line);
  206. // Line (connection)
  207. var line = new Escher.Line();
  208. line.from = boxA.position;
  209. line.to = circle.position;
  210. line.layer = -1;
  211. line.dashPattern = [];
  212. line.lineWidth = 2;
  213. group.add(line);
  214. // Line (connection)
  215. var line = new Escher.BezierCurve();
  216. line.from = boxB.position;
  217. line.to = circle.position;
  218. line.layer = -1;
  219. group.add(line);
  220. Escher.BezierCurve.curveHelper(line);
  221. // Line (connection)
  222. var line = new Escher.QuadraticCurve();
  223. line.from = boxA.position;
  224. line.to.set(-100, -300);
  225. line.controlPoint.set(-100, -200);
  226. line.layer = -1;
  227. group.add(line);
  228. Escher.QuadraticCurve.curveHelper(line);
  229. var multiline = new Escher.MultiLineText();
  230. multiline.position.set(-500, -400);
  231. multiline.text = "This is a multiline text!\n\nvar line = new Escher.QuadraticCurve();\n" +
  232. "\t\tline.from = boxA.position;\n" +
  233. "\t\tline.to.set(-100, -300);\n" +
  234. "\t\tline.controlPoint.set(-100, -200);\n" +
  235. "\t\tline.layer = -1;\n" +
  236. "\t\tgroup.add(line);\n" +
  237. "\t\tEscher.QuadraticCurve.curveHelper(line);";
  238. multiline.fillStyle = new Escher.LinearGradientStyle();
  239. multiline.fillStyle.start.set(-500, 0);
  240. multiline.fillStyle.end.set(-300, 0);
  241. multiline.fillStyle.addColorStop(0, "#e5ff50");
  242. multiline.fillStyle.addColorStop(0.5, "#50ff67");
  243. multiline.fillStyle.addColorStop(1, "#32adff");
  244. group.add(multiline);
  245. // Boxes group
  246. var boxes = new Escher.Object2D();
  247. group.add(boxes);
  248. // Viewport
  249. var viewport = new Escher.Viewport(canvas);
  250. viewport.center.set(500, 500);
  251. // Renderer
  252. var renderer = new Escher.Renderer(canvas);
  253. renderer.createRenderLoop(group, viewport);
  254. </script>
  255. </body>
  256. </html>