User Tools

Site Tools


workshop:metalworking:knurl

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
workshop:metalworking:knurl [2021/12/23 17:37] yentworkshop:metalworking:knurl [2024/01/12 08:33] (current) yent
Line 1: Line 1:
 +====== Knurling calculation tools ======
 +
 +<html>
 +<script type="text/javascript">
 +function onlinetool_create_calculator(id) {
 +  var c = {
 +    fields: {},
 +    processors: {},
 +    get: function(name) {
 +      if(!(name in this.fields)) return null;
 +      var v = parseFloat(this.fields[name].val());
 +      return isNaN(v) ? null : v;
 +    },
 +    set: function(name, value) {
 +      if(!(name in this.fields)) return;
 +      this.fields[name].val(value);
 +    },
 +    dataOk: function(ignore) {
 +      if(!ignore) ignore = /^$/;
 +      for(var n in this.fields) if(!n.match(ignore)) if(this.get(n) == null) return false;
 +      return true;
 +    },
 +    addTrigger: function(name, processor) {
 +      if(!(name in this.fields)) return this;
 +      this.processors[name] = processor;
 +      this.fields[name].change(function() {
 +        var i = jQuery(this);
 +        var c = i.data('calculator');
 +        c.processors[i.attr('name')].call(c);
 +      });
 +      return this;
 +    }
 +  };
 +  jQuery('#' + id+ ' td').each(function(i) {
 +    if(i%4 == 2) jQuery(this).css('padding-left', '30px');
 +  });
 +  jQuery('#' + id + ' td input, #' + id + ' td select').each(function() {
 +    var i = jQuery(this);
 +    i.data('calculator', c);
 +    c.fields[i.attr('name')] = i;
 +  });
 +  return c;
 +}
 +</script></html>
 +
 +<html>
 +<script type="text/javascript">
 +document.addEventListener("DOMContentLoaded", function(event) {
 +    onlinetool_create_calculator('diameter_calculator').addTrigger('rough_diameter', function() {
 +      if(!this.dataOk(/(diameter_inf|diameter_sup)/)) return;
 +      var dp = (25.4 / this.get('pitch')) / Math.PI;
 +      var du = Math.floor(this.get('rough_diameter') / dp);
 +      this.set('diameter_inf', (du * dp).toFixed(2));
 +      this.set('diameter_sup', ((du + 1) * dp).toFixed(2));
 +    }).addTrigger('pitch', function() {
 +      if(!this.dataOk(/(diameter_inf|diameter_sup)/)) return;
 +      var dp = (25.4 / this.get('pitch')) / Math.PI;
 +      var du = Math.floor(this.get('rough_diameter') / dp);
 +      this.set('diameter_inf', (du * dp).toFixed(2));
 +      this.set('diameter_sup', ((du + 1) * dp).toFixed(2));
 +    });
 +  });
 +</script>
 +<table id="diameter_calculator">
 +  <tr><td>Rough diameter</td><td><input type="text" name="rough_diameter" /> mm</td><td>Pitch</td><td><select name="pitch"><option value="20">20 TPI</option><option value="23">23 TPI</option></select></td></tr>
 +  <tr><td>Closest diameter (inf)</td><td><input type="text" readonly="readonly" name="diameter_inf" /> mm</td><td>Closest diameter (sup)</td><td><input type="text" readonly="readonly" name="diameter_sup" /> mm</td></tr>
 +</table>
 +</html>