Advertisement
gopro2027

CNC Circle Holes

May 12th, 2023 (edited)
654
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <html>
  2.     <body>
  3.         <canvas id="canvas" width="300" height="300"></canvas><br>
  4.         <label>holes:</label><input type="text" id="numHoles" value="0"/><br>
  5.         <label>diameter:</label><input type="text" id="diameter" value="0"/><br>
  6.         <label>hole diameter (for visual only):</label><input type="text" id="holediameter" value="0"/><br>
  7.         <label>x0:</label><input type="text" id="x0" value="0"/><br>
  8.         <label>y0:</label><input type="text" id="y0" value="0"/><br>
  9.         <label>Start Rotation (degrees, added before calculations):</label><input type="text" id="rotation" value="0"/><br>
  10.         <label>Smallest Number (values less than this round to 0):</label><input type="text" id="delta" value="0.000001"/><br>
  11.         <label>Decimal Places:</label><input type="text" id="decimals" value="5"/><br>
  12.         <input type="button" id="draw" value="Draw"></button><br>
  13.         <textarea class="textarea" id="text_box" rows="10" cols="50"></textarea>
  14.        
  15.         <script>
  16. const canvas = document.getElementById("canvas");
  17. const ctx = canvas.getContext("2d");
  18.  
  19.  
  20. // Set line width
  21. ctx.lineWidth = 1;
  22.  
  23. // Wall
  24. //ctx.strokeRect(75, 140, 150, 110);
  25.  
  26. // Door
  27. //ctx.fillRect(130, 190, 40, 60);
  28.  
  29. // Roof
  30. //ctx.beginPath();
  31. //ctx.moveTo(50, 140);
  32. //ctx.lineTo(150, 60);
  33. //ctx.lineTo(250, 140);
  34. //ctx.closePath();
  35. //ctx.stroke();
  36. canvasSize = 300;
  37. canvasCenterX = canvasSize/2;
  38. canvasCenterY = canvasSize/2;
  39. renderMultiplier = 1;
  40. function drawCircle(x,y,r) {
  41.     ctx.beginPath();
  42.     //canvasSize - y flips it because yk
  43.     ctx.arc(canvasCenterX+(x*renderMultiplier), canvasSize-(canvasCenterY+(y*renderMultiplier)), r*renderMultiplier, 0, 2 * Math.PI);
  44.     ctx.stroke();
  45. }
  46.  
  47. function draw() {
  48.     ctx.clearRect(0, 0, canvas.width, canvas.height);
  49.  
  50.     numHoles = parseFloat(document.getElementById('numHoles').value);
  51.     diameter = parseFloat(document.getElementById('diameter').value);
  52.     holediameter = parseFloat(document.getElementById('holediameter').value);
  53.     x0 = parseFloat(document.getElementById('x0').value);
  54.     y0 = parseFloat(document.getElementById('y0').value);
  55.     roation = parseFloat(document.getElementById('rotation').value);
  56.     delta = parseFloat(document.getElementById('delta').value);
  57.     decimals = parseInt(document.getElementById('decimals').value);
  58.  
  59.     renderMultiplier = (canvasSize/2)/diameter;//we want diameter to be half of the height, so when diameter is 150 and height is 300 this value is 1. diameter=300 height=300 this value is 1/2
  60.  
  61.  
  62.  
  63.     r = diameter/2;
  64.     drawCircle(0,0,r);
  65.  
  66.     ctx.font = "24px serif";
  67.     ctx.fillText("0°→+", canvasSize/2, canvasSize-(canvasSize/8*6.7));
  68.  
  69.     text = "";
  70.  
  71.     radIncrement = ((Math.PI * 2)/numHoles);
  72.     radAddition = roation * Math.PI/180;
  73.     for (i = 0; i < numHoles; i++) {
  74.         angle = radIncrement * i;
  75.         x = r*Math.sin(angle+radAddition);
  76.         y = r*Math.cos(angle+radAddition);
  77.         drawCircle(x,y,holediameter/2);
  78.  
  79.         if (Math.abs(y) < delta) {
  80.             y = 0;
  81.         }
  82.         if (Math.abs(x) < delta) {
  83.             x = 0;
  84.         }
  85.         text += (x+x0).toFixed(decimals)+", "+(y+y0).toFixed(decimals)+"\n";
  86.     }
  87.  
  88.     document.getElementById("text_box").innerHTML = text;
  89. }
  90. function output(x,y) {
  91.     return x+", "+y+"\n";
  92. }
  93. document.getElementById("draw").onclick = draw;
  94.          </script>
  95.     </body>
  96. </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement