ObJS.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. var backColor = "rgba(200, 200, 200, 1)";
  2. var vertColor = "rgba(10, 10, 10, 1)";
  3. var edgeColor = "rgba(200, 0, 0, 1)";
  4. var faceColor = "rgba(180, 180, 255, .5)";
  5. var textColor = "rgba(0, 0, 0, 1)";
  6. var vertSize = 6; //Make it even
  7. var scale = 50;
  8. var mDown = false;
  9. var canvas;
  10. var ctx;
  11. var obj;
  12. var vert;
  13. var face;
  14. function loadModel(val){
  15. //Get file
  16. xmlhttp = new XMLHttpRequest();
  17. xmlhttp.open("GET","/obj/" + val.value + ".obj", false);
  18. xmlhttp.send();
  19. var fileContent = xmlhttp.responseText;
  20. initArrays();
  21. readVerts(fileContent);
  22. readFaces(fileContent);
  23. initCanvas();
  24. drawFaces();
  25. drawVerts();
  26. writeCredits();
  27. }
  28. function initArrays(){
  29. obj = null;
  30. vert = null;
  31. face = null;
  32. obj = new Array();
  33. vert = new Array();
  34. face = new Array();
  35. }
  36. function readVerts(text){
  37. var line;
  38. var i = 0;
  39. while (text.indexOf("v ") != -1){
  40. line = text.substring(text.indexOf("v "), text.indexOf("\n", text.indexOf("v ")));
  41. vert[i] = new Array(3);
  42. line = line.substring(2);
  43. vert[i][0] = scale * Math.round(line.substring(0, line.indexOf(" ")));
  44. line = line.substring(line.indexOf(" ") + 1);
  45. vert[i][1] = scale * Math.round(line.substring(0, line.indexOf(" ")));
  46. line = line.substring(line.indexOf(" ") + 1);
  47. vert[i][2] = scale * Math.round(line);
  48. i = i + 1;
  49. text = text.substring(text.indexOf("v ") + 1)
  50. }
  51. }
  52. function readFaces(text){
  53. var finish = false;
  54. var line;
  55. var i = 0;
  56. var j;
  57. while (text.indexOf("f ") != -1){
  58. line = text.substring(text.indexOf("f "), text.indexOf("\n", text.indexOf("f ")));
  59. line = line.substring(2);
  60. face[i] = new Array();
  61. j = 0;
  62. while(line.indexOf(" ") != -1){
  63. face[i][j] = line.substring(0, line.indexOf(" ")) - 1;
  64. line = line.substring(line.indexOf(" ") + 1);
  65. j = j + 1;
  66. }
  67. face[i][j] = line - 1;
  68. i = i + 1;
  69. text = text.substring(text.indexOf("f ") + 1)
  70. }
  71. }
  72. function drawVerts(){
  73. ctx.fillStyle = vertColor;
  74. var x;
  75. var y;
  76. var w;
  77. var h;
  78. //console.log("Drawing " + vert.length + " verts");
  79. for (var i = 0; i < vert.length; i++) {
  80. x = vert[i][0] - (vertSize / 2);
  81. w = vertSize;
  82. y = vert[i][1] - (vertSize / 2);
  83. h = vertSize;
  84. //console.log("vert[" + i + "] x: " + vert[i][0] + " y: " + vert[i][1] + " z: " + vert[i][2])
  85. //ctx.arc(vert[i][0], vert[i][1], vertSize, 0, 2 * Math.PI, false);
  86. //console.log(x + ", " + y + ", " + w + ", " + h)
  87. ctx.fillRect(x, y, w, h);
  88. //console.log("Drawed vert " + i);
  89. }
  90. }
  91. function drawFaces(){
  92. for (var i = 0; i < face.length; i++){
  93. ctx.fillStyle = edgeColor;
  94. ctx.beginPath();
  95. ctx.moveTo(vert[face[i][0]][0], vert[face[i][0]][1]);
  96. for (var j = 1; j < face[i].length; j++) {
  97. ctx.lineTo(vert[face[i][j]][0], vert[face[i][j]][1]);
  98. }
  99. ctx.closePath();
  100. ctx.fillStyle = faceColor;
  101. ctx.fill();
  102. }
  103. }
  104. function initCanvas(){
  105. if (canvas == null){
  106. //console.log("INIT");
  107. canvas = document.getElementById("ObJSCanvas");
  108. ctx = canvas.getContext("2d");
  109. ctx.translate(canvas.width / 2, canvas.height / 2);
  110. canvas.onmousedown = function(e){
  111. mDown = true;
  112. }
  113. canvas.onmouseup = function(e){
  114. if(mDown) mouseClick(e);
  115. mDown = false;
  116. }
  117. canvas.onmousemove = function(e){
  118. if(!mDown) return;
  119. return false;
  120. }
  121. }
  122. ctx.clearRect(0, 0, canvas.width, canvas.height);
  123. ctx.fillStyle = backColor;
  124. ctx.fillRect(-canvas.width / 2, -canvas.height / 2, canvas.width, canvas.height);
  125. }
  126. function mouseClick(){
  127. //TODO: Element clicked
  128. }
  129. function writeCredits(){
  130. //console.log("CREDITS");
  131. ctx.fillStyle = textColor;
  132. ctx.font = "12px Arial";
  133. var h = canvas.height / 2 - 14;
  134. var w = canvas.width / 2 - 45;
  135. ctx.fillText("ObJS", w, h);
  136. }