You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

svg_viewer.html 5.5 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. <html>
  2. <title>Visualizer</title>
  3. <head>
  4. <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
  5. </head>
  6. <script>
  7. window.onload = () => {
  8. var board = document.getElementById('board');
  9. var fileInput = document.getElementById('fileInput');
  10. var desc = document.getElementById('desc');
  11. var hRange = document.getElementById('hRange');
  12. var vRange = document.getElementById('vRange');
  13. var lastColor = undefined;
  14. var lastElem = undefined;
  15. var scale = 1;
  16. var svg = undefined;
  17. var svgWidth = undefined;
  18. var svgHeight = undefined;
  19. var loadDesc = (svgElem) => {
  20. var mgeType = svgElem.attributes['tag:type'];
  21. if (mgeType === undefined) {
  22. return;
  23. }
  24. var elemList = [];
  25. for (attrName of svgElem.getAttributeNames()) {
  26. var prefix = 'tag:';
  27. if (!attrName.startsWith(prefix)) {
  28. continue;
  29. }
  30. var elem = '<p>' + attrName.substr(prefix.length) + ': ' + svgElem.attributes[attrName].value + '</p>'
  31. elemList.push(elem);
  32. }
  33. desc.innerHTML = elemList.join('');
  34. };
  35. var selectElem = svgElem => {
  36. loadDesc(svgElem);
  37. lastColor = svgElem.attributes['fill'].value;
  38. lastElem = svgElem;
  39. svgElem.attributes['fill'].value = 'green';
  40. };
  41. var unselectLast = svgElem => {
  42. if (lastElem) {
  43. lastElem.attributes['fill'].value = lastColor;
  44. }
  45. lastElem = undefined;
  46. lastColor = undefined;
  47. };
  48. function recLoadSVG(svgElem) {
  49. if (svgElem.children === undefined) {
  50. return;
  51. }
  52. svgElem.onmousedown = e => {
  53. var mgeType = svgElem.attributes['tag:type'];
  54. if (mgeType === undefined) {
  55. return;
  56. }
  57. unselectLast();
  58. selectElem(svgElem);
  59. e.stopPropagation();
  60. };
  61. for (child of svgElem.children) {
  62. recLoadSVG(child);
  63. }
  64. }
  65. function loadSVG() {
  66. var file = fileInput.files[0];
  67. var reader = new FileReader();
  68. reader.readAsText(file, "UTF-8");
  69. reader.onload = e => {
  70. board.innerHTML = '<p style="margin: 0;">' + e.target.result + '</p>';
  71. svg = board.children[0].children[0];
  72. svgWidth = svg.attributes['width'].value;
  73. svgHeight = svg.attributes['height'].value;
  74. for (child of board.children) {
  75. recLoadSVG(child);
  76. var svgInfo = child.attributes['svg:info'];
  77. if (svgInfo !== undefined) {
  78. var elemList = [];
  79. for (attrName of child.getAttributeNames()) {
  80. var prefix = 'svg:';
  81. if (!attrName.startsWith(prefix)) {
  82. continue;
  83. }
  84. var elem = '<p>' + attrName.substr(prefix.length) + ': ' + child.attributes[attrName].value + '</p>'
  85. elemList.push(elem);
  86. }
  87. info.innerHTML = elemList.join('');
  88. }
  89. }
  90. };
  91. }
  92. function scaleBoard(x, y) {
  93. var transform = 'scale(' + x + ',' + y + ')';
  94. svg.setAttribute('transform', transform);
  95. board.style['width'] = svgWidth * x;
  96. board.style['height'] = svgHeight * y;
  97. }
  98. function autoScaleBoard() {
  99. var hRangeValue = Math.sqrt(Number(hRange.value) / 10);
  100. var vRangeValue = Math.sqrt(Number(vRange.value) / 10);
  101. scaleBoard(Number(hRangeValue), Number(vRangeValue));
  102. }
  103. fileInput.onchange = loadSVG;
  104. var zoomBoard = dScale => {
  105. scale *= dScale;
  106. scaleBoard(scale, scale);
  107. };
  108. window.addEventListener('wheel', e => {
  109. console.log(e);
  110. if (e.ctrlKey) {
  111. e.preventDefault();
  112. e.stopPropagation();
  113. var factor = 1;
  114. if (e.deltaY < 0) {
  115. factor = 1.1;
  116. } else if (e.deltaY > 0) {
  117. factor = 1 / 1.1;
  118. }
  119. zoomBoard(factor);
  120. var newPageX = e.pageX * factor;
  121. var newPageY = e.pageY * factor;
  122. x = newPageX - e.x;
  123. y = newPageY - e.y;
  124. window.scrollTo({
  125. top: y,
  126. left: x,
  127. });
  128. console.log('scroll', [x, y]);
  129. }
  130. }, { 'passive': false });
  131. };
  132. </script>
  133. <body>
  134. <p id="desc" style="position: fixed;bottom: 0; background-color: white;">desc</p>
  135. <p id="info" style="position: fixed;top: 0; right: 0; background-color: white;">info</p>
  136. <p id="board"
  137. style="white-space: nowrap; display: flex; justify-content: center; align-content: center; align-items: center; margin: 0;opacity: 0.7;">
  138. </p>
  139. <input type='file' id='fileInput' style="position: fixed; top: 0; background-color: white;"></input>
  140. </body>
  141. </html>

MegEngine 安装包中集成了使用 GPU 运行代码所需的 CUDA 环境,不用区分 CPU 和 GPU 版。 如果想要运行 GPU 程序,请确保机器本身配有 GPU 硬件设备并安装好驱动。 如果你想体验在云端 GPU 算力平台进行深度学习开发的感觉,欢迎访问 MegStudio 平台