designix-uis 1.0.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/dist/designix-uis.js +1 -1
  2. package/dist/public/_app/immutable/assets/{3.CSM_vx3m.css → 3.F_XryGBu.css} +1 -1
  3. package/dist/public/_app/immutable/assets/{_page.CSM_vx3m.css → _page.F_XryGBu.css} +1 -1
  4. package/dist/public/_app/immutable/chunks/71jGndfk.js +1 -0
  5. package/dist/public/_app/immutable/chunks/B6f9MN2N.js +1 -0
  6. package/dist/public/_app/immutable/chunks/Bpmoxeo_.js +1 -0
  7. package/dist/public/_app/immutable/chunks/BxEGwKtU.js +1 -0
  8. package/dist/public/_app/immutable/chunks/{iRux6CXb.js → C6gpjNdh.js} +1 -1
  9. package/dist/public/_app/immutable/chunks/CNuAIbK8.js +1 -0
  10. package/dist/public/_app/immutable/chunks/Cfb4YnNO.js +131 -0
  11. package/dist/public/_app/immutable/chunks/Cyy3J-St.js +1 -0
  12. package/dist/public/_app/immutable/chunks/DzodC9Fi.js +1 -0
  13. package/dist/public/_app/immutable/chunks/UedIxzRF.js +3 -0
  14. package/dist/public/_app/immutable/chunks/vc0esDx2.js +2 -0
  15. package/dist/public/_app/immutable/entry/app.CG242Ik5.js +2 -0
  16. package/dist/public/_app/immutable/entry/start.B5keCfEW.js +1 -0
  17. package/dist/public/_app/immutable/nodes/0.BBqlSwyG.js +2 -0
  18. package/dist/public/_app/immutable/nodes/1.CRPDCYJR.js +1 -0
  19. package/dist/public/_app/immutable/nodes/2.DywDsvzu.js +1 -0
  20. package/dist/public/_app/immutable/nodes/3.Qz57JPTx.js +217 -0
  21. package/dist/public/_app/version.json +1 -1
  22. package/dist/public/gear/gear_bar.html +22 -22
  23. package/dist/public/gear/gear_epicycloid.html +22 -22
  24. package/dist/public/gear/gear_ring.html +22 -22
  25. package/dist/public/gear/gear_wheel.html +22 -22
  26. package/dist/public/heliostat/base.html +22 -22
  27. package/dist/public/heliostat/haxis_guidance.html +22 -22
  28. package/dist/public/heliostat/heliostat.html +22 -22
  29. package/dist/public/heliostat/heliostat_2.html +22 -22
  30. package/dist/public/heliostat/pole_static.html +22 -22
  31. package/dist/public/heliostat/rake.html +22 -22
  32. package/dist/public/heliostat/rake_stopper.html +22 -22
  33. package/dist/public/heliostat/ring.html +22 -22
  34. package/dist/public/heliostat/ring_guidance.html +22 -22
  35. package/dist/public/heliostat/rod.html +22 -22
  36. package/dist/public/heliostat/spider.html +22 -22
  37. package/dist/public/heliostat/surface.html +22 -22
  38. package/dist/public/heliostat/swing.html +22 -22
  39. package/dist/public/heliostat/trapeze.html +22 -22
  40. package/dist/public/heliostat/vaxis.html +22 -22
  41. package/dist/public/heliostat/vaxis_guidance.html +22 -22
  42. package/dist/public/heliostat/vaxis_holder.html +22 -22
  43. package/dist/public/index.html +18 -18
  44. package/package.json +1 -1
  45. package/dist/public/_app/immutable/chunks/BXhXgK-X.js +0 -1
  46. package/dist/public/_app/immutable/chunks/Bri-INA7.js +0 -1
  47. package/dist/public/_app/immutable/chunks/Cx4P1agx.js +0 -216
  48. package/dist/public/_app/immutable/chunks/D7Msejhv.js +0 -1
  49. package/dist/public/_app/immutable/chunks/DIf3_IO7.js +0 -3
  50. package/dist/public/_app/immutable/chunks/DK0oecVG.js +0 -1
  51. package/dist/public/_app/immutable/chunks/DkLECPfi.js +0 -1
  52. package/dist/public/_app/immutable/chunks/YqyiSuve.js +0 -1
  53. package/dist/public/_app/immutable/chunks/iWAlx9xc.js +0 -1
  54. package/dist/public/_app/immutable/chunks/r97NiIDa.js +0 -125
  55. package/dist/public/_app/immutable/entry/app.szyEdMiC.js +0 -2
  56. package/dist/public/_app/immutable/entry/start.CjAw_MmN.js +0 -1
  57. package/dist/public/_app/immutable/nodes/0.9AOOvzU3.js +0 -2
  58. package/dist/public/_app/immutable/nodes/1.9kuTOvrY.js +0 -1
  59. package/dist/public/_app/immutable/nodes/2.DAbxBD_F.js +0 -1
  60. package/dist/public/_app/immutable/nodes/3.DXfYaJ3y.js +0 -7
@@ -0,0 +1,131 @@
1
+ var ps=Object.defineProperty;var $s=(s,t,o)=>t in s?ps(s,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):s[t]=o;var w=(s,t,o)=>$s(s,typeof t!="symbol"?t+"":t,o);import"./vc0esDx2.js";var ke=10**-4;function Et(s){return s*Math.PI/180}function ut(s){return 180*s/Math.PI}function j(s){let t=s;return Math.abs(t)<ke&&(t=0),t}function bt(s){let t=s%(2*Math.PI);return t<0&&(t+=2*Math.PI),t}function gt(s){let t=bt(s);return t>Math.PI&&(t-=2*Math.PI),t}function yt(s){let t=s%Math.PI;return t<0&&(t+=Math.PI),t}function wt(s){let t=yt(s);return t>Math.PI/2&&(t-=Math.PI),t}function Te(s,t,o){const e=gt(t)-gt(s);return o?bt(e):bt(e)-2*Math.PI}function Ue(s,t,o,e){let n=!1;if(j(gt(s-t))===0)n=!0;else if(j(gt(s-o))===0)n=!0;else{const i=Te(t,o,e),r=Te(t,s,e);Math.abs(r)<Math.abs(i)&&(n=!0)}return n}function L(s){return s.toFixed(2)}var Pt={point:"grey",line:"grey",vector:"DarkTurquoise",contour:"green",mainOuter:"SlateBlue",mainInner:"SteelBlue",mainB:"SlateGrey",second:"Violet",secondB:"SlateGrey",dynamics:"Tomato",ruler:"blue",origin:"red",reference:"blue",mouse:"yellow"},Ce=.05;function Jt(s,t,o){const e=o.shiftX+(s-o.xMin)*o.scaleX,n=o.shiftY+(t-o.yMin)*o.scaleY;return[e,n]}function qe(s,t){if(j(t.scaleX-Math.abs(t.scaleY))!==0)throw`err683: iAdjust.scaleX and scaleY differ ${t.scaleX} ${t.scaleY}`;if(t.scaleX<0)throw`err684: iAdjust.scaleX ${t.scaleX} is negative`;const o=s*t.scaleX;if(o<0)throw`err685: rRadius for canvas ${o} is negative`;return o}function He(){return{init:0,xMin:0,yMin:0,xyDiff:1,shiftX:0,shiftY:0,scaleX:1,scaleY:1}}function Ie(s,t,o,e,n,i){const r=He(),l=Math.max(t-s,1),a=Math.max(e-o,1),h=n/l,d=i/a;let u=.9*h,f=l;return d<h&&(u=.9*d,f=a),r.init=1,r.xMin=s,r.yMin=o,r.xyDiff=f,r.shiftX=Ce*n,r.scaleX=u,r.shiftY=i-Ce*i,r.scaleY=-1*u,r}function le(s,t){let o=0;if(t>s)throw`err539: ila < ilc ${s} ${t}`;return o=Math.sqrt(s**2-t**2),o}function oe(s,t,o){return Math.sqrt(s**2+t**2-2*s*t*Math.cos(o))}function me(s,t,o){let e=0;const n=[s,t,o];for(let r=0;r<n.length;r++)if(n[r]<0)throw`err209: l3[${r}] = ${n[r]}`;const i=n.sort(function(r,l){return l-r});if(i[0]>i[1]+i[2])throw`err839: impossible triangle with length ${s}, ${t} and ${o}`;return e=Math.acos((s**2+t**2-o**2)/(2*s*t)),e}function Ve(s,t,o){let e=0;const n=[s,t,o];for(let a=0;a<n.length;a++)if(j(n[a])===0||n[a]<0)throw`err329: negative or zero triangle-args ${a} : ${n[a]}`;const i=yt(t),r=yt(o);if(i+r>Math.PI)throw`err939: impossible triangle with angles ${t} and ${o}`;return e=s*Math.sin(o)/Math.sin(t),e}function ne(s,t,o){let e=0;const n=[s,t,o];for(let i=0;i<n.length;i++)if(n[i]<=0)throw`err429: negative or zero triangle-args ${i} : ${n[i]}`;return e=Math.asin(t*Math.sin(o)/s),e}var Ot=(s=>(s[s.eDefault=0]="eDefault",s[s.eCircle=1]="eCircle",s[s.eCross=2]="eCross",s[s.eSquare=3]="eSquare",s[s.eBigSquare=4]="eBigSquare",s[s.eTwoTri=5]="eTwoTri",s[s.eTri1=6]="eTri1",s[s.eTri2=7]="eTri2",s[s.eTri3=8]="eTri3",s[s.eTri4=9]="eTri4",s))(Ot||{}),xt=class Gt{constructor(t,o,e=0){w(this,"cx");w(this,"cy");w(this,"shape");this.cx=t,this.cy=o,this.shape=e}draw(t,o,e=Pt.point,n=0){if(isFinite(this.cx)&&isFinite(this.cy)){const i=t.canvas.width*.006999999999999999,r=2*i,[l,a]=Jt(this.cx,this.cy,o);let h=n;switch(h===0&&(h=this.shape),t.beginPath(),h){case 2:t.moveTo(l-r,a),t.lineTo(l+r,a),t.moveTo(l,a-r),t.lineTo(l,a+r);break;case 3:t.rect(l-i,a-i,2*i,2*i);break;case 4:t.rect(l-2*i,a-2*i,4*i,4*i);break;case 5:t.moveTo(l-r,a),t.lineTo(l+r,a),t.lineTo(l,a+r),t.lineTo(l,a-r),t.lineTo(l-r,a);break;case 6:t.moveTo(l-r,a),t.lineTo(l+r,a),t.lineTo(l,a-r),t.lineTo(l,a+r);break;case 7:t.moveTo(l+r,a),t.lineTo(l-r,a),t.lineTo(l,a-r),t.lineTo(l,a+r);break;case 8:t.moveTo(l+r,a),t.lineTo(l-r,a),t.lineTo(l,a+r),t.lineTo(l,a-r);break;case 9:t.moveTo(l-r,a),t.lineTo(l+r,a),t.lineTo(l,a+r),t.lineTo(l,a-r);break;case 1:default:t.arc(l,a,i,0,2*Math.PI)}t.strokeStyle=e,t.stroke()}else console.log(`INFO489: point not draw because of infinity ${this.cx} ${this.cy}`)}distanceOrig(){return Math.sqrt(this.cx**2+this.cy**2)}angleOrig(){return Math.atan2(this.cy,this.cx)}getPolar(){return[this.angleOrig(),this.distanceOrig()]}setPolar(t,o){return new Gt(o*Math.cos(t),o*Math.sin(t))}translate(t,o){return new Gt(this.cx+t,this.cy+o)}translatePolar(t,o){return new Gt(this.cx+o*Math.cos(t),this.cy+o*Math.sin(t))}clone(t=0){return new Gt(this.cx,this.cy,t)}rotateOrig(t){const o=this.getPolar();return this.setPolar(o[0]+t,o[1])}scaleOrig(t){const o=this.getPolar();return this.setPolar(o[0],o[1]*t)}rotate(t,o){const n=this.translate(-1*t.cx,-1*t.cy).getPolar();return this.setPolar(n[0]+o,n[1]).translate(t.cx,t.cy)}scale(t,o){const n=this.translate(-1*t.cx,-1*t.cy).getPolar();return this.setPolar(n[0],n[1]*o).translate(t.cx,t.cy)}isEqual(t){return j(this.cx-t.cx)===0&&j(this.cy-t.cy)===0}distanceToPoint(t){return Math.sqrt((t.cx-this.cx)**2+(t.cy-this.cy)**2)}angleToPoint(t){if(j(this.distanceToPoint(t))===0)throw`err434: no angle because points identical ${this.cx} ${t.cx} ${this.cy} ${t.cy}`;return Math.atan2(t.cy-this.cy,t.cx-this.cx)}angleFromToPoints(t,o){const e=this.angleToPoint(t),n=this.angleToPoint(o);return gt(n-e)}middlePoint(t){const o=(this.cx+t.cx)/2,e=(this.cy+t.cy)/2;return new Gt(o,e)}equidistantPoint(t,o,e){const n=this.distanceToPoint(t)/2;if(this.isEqual(t))throw`err633: no equidistance because identical point ${this.cx} ${this.cy}`;if(o<n)throw`err392: equidistance ${o} smaller than lp1p2h ${n}`;const i=this.middlePoint(t),r=this.angleToPoint(t)+Math.PI/2,l=Math.sqrt(o**2-n**2),a=i.translatePolar(r,l),h=i.translatePolar(r+Math.PI,l),d=e.distanceToPoint(a),u=e.distanceToPoint(h);if(l!==0&&d===u)throw`err284: magnet point p3 is on line p1p2. cx ${e.cx} cy: ${e.cy}`;let f=a;return u<d&&(f=h),f}};function z(s,t,o=0){return new xt(s,t,o)}function Ds(s){let t=0,o=0,e=0,n=0;if(s.length>0){const i=s[0];if(i.cx===Number.NEGATIVE_INFINITY||i.cx===Number.POSITIVE_INFINITY||i.cy===Number.NEGATIVE_INFINITY||i.cy===Number.POSITIVE_INFINITY)throw`err292: pointMinMax first point with infinity: ${i.cx} ${i.cy}`;t=s[0].cx,o=s[0].cx,e=s[0].cy,n=s[0].cy;for(const r of s)r.cx!==Number.NEGATIVE_INFINITY&&(t=Math.min(t,r.cx)),r.cx!==Number.POSITIVE_INFINITY&&(o=Math.max(o,r.cx)),r.cy!==Number.NEGATIVE_INFINITY&&(e=Math.min(e,r.cy)),r.cy!==Number.POSITIVE_INFINITY&&(n=Math.max(n,r.cy))}return[t,o,e,n]}var vs=class Ht{constructor(t,o,e){w(this,"cx");w(this,"cy");w(this,"ca");this.cx=t,this.cy=o,this.ca=e}draw(t,o,e=Pt.line){const n=t.canvas.width*2,[i,r]=Jt(this.cx-n*Math.cos(this.ca),this.cy-n*Math.sin(this.ca),o),[l,a]=Jt(this.cx+2*n*Math.cos(this.ca),this.cy+2*n*Math.sin(this.ca),o);t.beginPath(),t.moveTo(i,r),t.lineTo(l,a),t.strokeStyle=e,t.stroke()}setFromPoints(t,o){return this.cx=t.cx,this.cy=t.cy,this.ca=t.angleToPoint(o),this}getAffine(){const t={quasiVertical:!1,ha:0,hb:0,va:0,vb:0};return Math.abs(wt(this.ca))>Math.PI/4?(t.quasiVertical=!0,t.va=-1*Math.tan(wt(this.ca-Math.PI/2)),t.vb=this.cx-t.va*this.cy):(t.ha=Math.tan(wt(this.ca)),t.hb=this.cy-t.ha*this.cx),t}setAffine(t){const o=new Ht(0,0,0);return t.quasiVertical?(o.ca=Math.PI/2-Math.atan(t.va),o.cx=t.vb,o.cy=0):(o.ca=Math.atan(t.ha),o.cx=0,o.cy=t.hb),o}intersection(t){if(this.isParallel(t))throw`err902: no intersection, lines are parallel ca1: ${this.ca} ca2: ${t.ca}`;let o=0,e=0;const n=this.getAffine(),i=t.getAffine();return n.quasiVertical?i.quasiVertical?(e=(n.vb-i.vb)/(i.va-n.va),o=n.va*e+n.vb):(o=(n.va*i.hb+n.vb)/(1-n.va*i.ha),e=i.ha*o+i.hb):i.quasiVertical?(e=(n.ha*i.vb+n.hb)/(1-n.ha*i.va),o=i.va*e+i.vb):(o=(n.hb-i.hb)/(i.ha-n.ha),e=n.ha*o+n.hb),z(o,e)}getAxisXIntersection(){const t=new Ht(0,0,0);return this.intersection(t).cx}getAxisYIntersection(){const t=new Ht(0,0,Math.PI/2);return this.intersection(t).cy}getAxisXIntersecTri(){let t=1/0;if(j(wt(this.ca))!==0){const o=new xt(this.cx,this.cy),e=yt(this.ca),n=o.angleOrig(),i=o.distanceOrig();if(j(i)===0)t=0;else if(j(wt(e-n))===0)t=0;else{const r=Math.min(e,Math.PI-e),l=gt(e-n),a=Math.min(Math.abs(l),Math.PI-Math.abs(l));t=Math.sign(l)*Ve(i,r,a)}}return t}getAxisYIntersecTri(){let t=1/0;if(j(wt(this.ca-Math.PI/2))!==0){const o=new xt(this.cx,this.cy),e=wt(this.ca),n=o.angleOrig(),i=o.distanceOrig(),r=wt(e-n);if(j(i)===0)t=0;else if(j(r)===0)t=0;else{const l=yt(e-Math.PI/2),a=-1*gt(e-n),h=Math.min(l,Math.PI-l),d=Math.min(Math.abs(a),Math.PI-Math.abs(a));t=Math.sign(a)*Ve(i,h,d)}}return t}angleOrig(){const o=new xt(this.cx,this.cy).angleOrig(),e=wt(this.ca),n=-1*gt(e-o);let i=0;return n<0&&(i=-Math.PI),yt(Math.PI/2+this.ca)+i}distanceOrig(){const t=this.angleOrig(),o=new xt(this.cx,this.cy),e=o.angleOrig(),n=o.distanceOrig(),i=wt(e-t);return n*Math.cos(i)}projectOrig(){const t=this.angleOrig(),o=this.distanceOrig();return z(0,0).setPolar(t,o)}translate(t,o){return new Ht(this.cx+t,this.cy+o,this.ca)}rotateOrig(t){const o=new xt(this.cx,this.cy).rotateOrig(t);return new Ht(o.cx,o.cy,gt(this.ca+t))}scaleOrig(t){const o=new xt(this.cx,this.cy).scaleOrig(t);return new Ht(o.cx,o.cy,this.ca)}rotate(t,o){const e=new xt(this.cx,this.cy).rotate(t,o);return new Ht(e.cx,e.cy,gt(this.ca+o))}scale(t,o){const e=new xt(this.cx,this.cy).scale(t,o);return new Ht(e.cx,e.cy,this.ca)}clone(){const t=new xt(this.cx,this.cy);return new Ht(t.cx,t.cy,this.ca)}lineOrthogonal(t){return new Ht(t.cx,t.cy,this.ca+Math.PI/2)}lineParallel(t){return new Ht(t.cx,t.cy,this.ca)}distanceToPoint(t){let o=0;const e=new xt(this.cx,this.cy),n=e.distanceToPoint(t);if(j(n)!==0){const i=e.angleToPoint(t),r=wt(i-this.ca);o=n*Math.abs(Math.sin(r))}return o}projectPoint(t){let o=0;const e=new xt(this.cx,this.cy),n=e.distanceToPoint(t);if(j(n)!==0){const r=e.angleToPoint(t),l=gt(r-this.ca);o=n*Math.cos(l)}return e.translatePolar(this.ca,o)}isParallel(t){return j(wt(this.ca-t.ca))===0}isOrthogonal(t){return j(wt(Math.PI/2+this.ca-t.ca))===0}isEqual(t){const o=z(t.cx,t.cy),e=this.distanceToPoint(o);return j(e)===0&&this.isParallel(t)}bisector(t,o){const e=this.intersection(t),n=yt(this.ca),i=yt(t.ca),r=Math.min(n,i),l=Math.max(n,i),a=[r,l,r+Math.PI,l+Math.PI,r],h=e.angleToPoint(o);let d=0;for(let g=0;g<4;g++){const S=gt(a[g]-h),_=gt(a[g+1]-h);if(S===0||_===0)throw`err419: bad reference point for bisecor ${o.cx} ${o.cy}`;S<0&&_>0&&(d=g)}const f=yt((r+l)/2)+d*Math.PI/2;return new Ht(e.cx,e.cy,f)}lineParallelDistance(t,o,e){const n=z(this.cx,this.cy),i=n.translatePolar(this.ca+Math.PI/2,t),r=n.translatePolar(this.ca-Math.PI/2,t);let l=r,a=o;return j(this.distanceToPoint(a))===0&&(a=e),a.distanceToPoint(i)<a.distanceToPoint(r)&&(l=i),new Ht(l.cx,l.cy,this.ca)}};function ae(s,t,o){return new vs(s,t,o)}function jt(s,t){return ae(0,0,0).setFromPoints(s,t)}function we(s,t){if(s.isEqual(t))throw`err546: no bisector with two same points cx: ${s.cx} cy: ${s.cy}`;const o=s.middlePoint(t),e=yt(s.angleToPoint(t)+Math.PI/2);return ae(o.cx,o.cy,e)}function Ms(s,t,o){if(s.isEqual(t)||t.isEqual(o)||s.isEqual(o))throw`err833: no bisector with two same points cx: ${s.cx} cy: ${s.cy}`;const e=we(s,t),n=we(t,o);return e.intersection(n)}function Dt(s){let t=!1;return(s===0||s===1)&&(t=!0),t}function Wt(s){let t=!1;return(Dt(s)||s===6)&&(t=!0),t}function ie(s){let t=!1;return(s===3||s===4||s===5)&&(t=!0),t}function Pe(s){let t=!1;return(s===2||ie(s))&&(t=!0),t}var mt=class Ye{constructor(t,o,e,n,i=!1,r=!1){w(this,"sType");w(this,"px");w(this,"py");w(this,"radius");w(this,"arcLarge");w(this,"arcCcw");this.sType=t,this.px=o,this.py=e,this.radius=n,this.arcLarge=i,this.arcCcw=r}clone(){return new Ye(this.sType,this.px,this.py,this.radius,this.arcLarge,this.arcCcw)}},$t=class{constructor(s,t,o,e,n,i,r,l=!1){w(this,"sType");w(this,"p1");w(this,"p2");w(this,"pc");w(this,"radius");w(this,"a1");w(this,"a2");w(this,"arcCcw");this.sType=s,this.p1=t,this.p2=o,this.pc=e,this.radius=n,this.a1=i,this.a2=r,this.arcCcw=l}},bs=class{constructor(){w(this,"debugPoints");w(this,"debugLines");w(this,"logMessage");this.debugPoints=[],this.debugLines=[],this.logMessage=""}addPoint(s){this.debugPoints.push(s)}getPoints(){return this.debugPoints}clearPoints(){this.debugPoints=[]}addLine(s){this.debugLines.push(s)}getLines(){return this.debugLines}clearLines(){this.debugLines=[]}addMsg(s){this.logMessage+=s}getMsg(){return this.logMessage}clearMsg(){this.logMessage=""}},Vt=new bs;function Ut(s,t,o){if(o.sType!==1)throw`err202: arcSeg1To2 has unexpected type ${o.sType}`;const e=z(s,t),n=z(o.px,o.py),i=e.distanceToPoint(n)/2;if(e.isEqual(n))throw`err638: no equidistance because identical point ${e.cx} ${n.cy}`;let r=0;if(j(o.radius-i)===0)r=0;else{if(o.radius<i)throw`err399: radius ${o.radius} smaller than lp1p2h ${i}`;r=le(o.radius,i)}const l=e.middlePoint(n),a=e.angleToPoint(n)+Math.PI/2,h=l.translatePolar(a,r),d=l.translatePolar(a+Math.PI,r);let u=h;(!o.arcLarge&&!o.arcCcw||o.arcLarge&&o.arcCcw)&&(u=d);const f=u.angleToPoint(e),g=u.angleToPoint(n);return new $t(1,e,n,u,o.radius,f,g,o.arcCcw)}function ks(s){let t=bt(s.a2-s.a1);s.arcCcw||(t=2*Math.PI-t);let o=!1;return t>Math.PI&&(o=!0),new mt(1,s.p2.cx,s.p2.cy,s.radius,o,s.arcCcw)}function As(s,t,o){const e=s.p1,n=s.p2,i=o.p1,r=o.p2;if(!n.isEqual(i))throw`err309: makeCorner-prepare p2 and p2b differ px ${n.cx} ${i.cx} py ${n.cy} ${i.cy}`;let l=n.angleToPoint(e);if(s.sType===1){const _=s.arcCcw?1:-1;l=s.a2-_*Math.PI/2}let a=n.angleToPoint(r);if(o.sType===1){const _=o.arcCcw?1:-1;a=o.a1+_*Math.PI/2}const h=a-l;let u=gt(h)/2;if(j(u)===0){const _=ke*.01;if(s.sType===0&&o.sType===1)u=o.arcCcw?_:-1e-6;else if(s.sType===1&&o.sType===0)u=s.arcCcw?_:-1e-6;else if(s.sType===0&&o.sType===0)throw`err402: prepare aPeakHalf too closed to zero ${u}`}const f=l+u,g=n.translatePolar(f,t.radius);return{s1:s,s2:t,s3:o,ra:t.radius,p1:e,p2:n,p3:r,p4:s.pc,p5:o.pc,p6:g,at1:l,at3:a,abi:f,aph:u}}function re(s,t,o){if(t.sType!==1)throw`err510: modifRadius with wrong type ${t.sType}`;const e=s>0?1:-1,n=t.arcCcw?1:-1,i=j(s)===0?1:e*n,r=t.radius+i*o;if(r<=0)throw`err621: modifRadius with negative modified lenght ${r}`;return r}function Ae(s,t,o,e){const n=o.translatePolar(s,t),i=o.translatePolar(s+Math.PI,t),r=e.distanceToPoint(n),l=e.distanceToPoint(i);return r<l?n:i}function Oe(s,t,o,e,n){const i=s.translatePolar(t-o,e),r=s.translatePolar(t+o,e),l=n.distanceToPoint(i),a=n.distanceToPoint(r);return l<a?-1:1}function de(s,t){const o=t.clone(),e=s.p1.clone(),n=s.p2;if(s.sType!==0)throw`err103: newStrokeFirst unexpected sType ${s.sType}`;const i=jt(e,n).distanceToPoint(o);if(j(i)!==0)throw`err104: newStrokeFirst new point not aligned ${i} ${o.cx} ${o.cy}`;const r=e.angleToPoint(n),l=e.angleToPoint(o);if(j(gt(l-r))!==0)throw`err105: newStrokeFirst new point miss aligned ${r} ${l} ${o.cx} ${o.cy}`;const a=e.distanceToPoint(o),h=e.distanceToPoint(n);if(h<a)throw`err106: newStrokeFirst new point out of scope ${h} ${a} ${o.cx} ${o.cy}`;const d=z(0,0);return new $t(0,e,o,d,0,0,0,!1)}function he(s,t){const o=t.clone(),e=s.p2.clone(),n=s.p1;if(s.sType!==0)throw`err203: newStrokeSecond unexpected sType ${s.sType}`;const i=jt(e,n).distanceToPoint(o);if(j(i)!==0)throw`err204: newStrokeSecond new point not aligned ${i} ${o.cx} ${o.cy}`;const r=e.angleToPoint(n),l=e.angleToPoint(o);if(j(gt(l-r))!==0)throw`err205: newStrokeSecond new point miss aligned ${r} ${l} ${o.cx} ${o.cy}`;const a=e.distanceToPoint(o),h=e.distanceToPoint(n);if(h<a)throw`err206: newStrokeSecond new point out of scope ${h} ${a} ${o.cx} ${o.cy}`;const d=z(0,0);return new $t(0,o,e,d,0,0,0,!1)}function ge(s,t){if(s.sType!==1)throw`err203: newArcFirst unexpected sType ${s.sType}`;const o=s.p1.clone(),e=s.pc.clone(),n=t.clone(),i=e.angleToPoint(n);if(!Ue(i,s.a1,s.a2,s.arcCcw))throw`err908: newArcFirst a48 out of scope ${i} ${s.a1} ${s.a2} ${s.arcCcw}`;return new $t(1,o,n,e,s.radius,s.a1,i,s.arcCcw)}function ue(s,t){if(s.sType!==1)throw`err204: newArcSecond unexpected sType ${s.sType}`;const o=s.p2.clone(),e=s.pc.clone(),n=t.clone(),i=e.angleToPoint(n);if(!Ue(i,s.a1,s.a2,s.arcCcw))throw`err907: newArcSecond a59 out of scope ${i} ${s.a1} ${s.a2} ${s.arcCcw}`;return new $t(1,n,o,e,s.radius,i,s.a2,s.arcCcw)}function te(s,t,o,e,n,i){const r=s.clone(),l=t.clone(),a=o.clone(),h=a.distanceToPoint(r),d=a.distanceToPoint(l);if(j(h-e)!==0||j(d-e)!==0)throw`err610: newRounded not on circle ${e} ${h} ${d}`;const u=a.angleToPoint(r),f=a.angleToPoint(l),g=gt(u-i+Math.PI),S=gt(f-i+Math.PI);Math.abs(S-g)>Math.PI+ke&&Vt.addMsg(`warn882: newRounded a873 or a972 larger than PI/2 ${L(g)} ${L(S)} at ${L(a.cx)} ${L(a.cy)}
2
+ `);const _=!(n>0);return new $t(1,r,l,a,e,u,f,_)}function ys(s){const t=Math.abs(s.ra/Math.sin(s.aph)),o=t*Math.cos(s.aph),e=s.p2.translatePolar(s.abi,t),n=s.p2.translatePolar(s.at1,o),i=s.p2.translatePolar(s.at3,o),r=[];return r.push(de(s.s1,n)),r.push(te(n,i,e,s.ra,s.aph,s.abi)),r.push(he(s.s3,i)),r}function Es(s){const o=jt(s.p1,s.p2).lineParallelDistance(s.ra,s.p6,s.p5),e=o.projectPoint(s.p5),n=e.distanceToPoint(s.p5),i=re(s.aph,s.s3,s.ra),r=le(i,n),l=Ae(o.ca,r,e,s.p6),a=s.p5.angleToPoint(l),h=s.p5.translatePolar(a,s.s3.radius),d=s.p2.angleFromToPoints(s.p1,l),f=Math.abs(s.ra/Math.sin(d))*Math.cos(d),g=s.p2.angleToPoint(s.p1),S=s.p2.translatePolar(g,f),_=[];return _.push(de(s.s1,S)),_.push(te(S,h,l,s.ra,s.aph,s.abi)),_.push(ue(s.s3,h)),_}function Rs(s){const o=jt(s.p3,s.p2).lineParallelDistance(s.ra,s.p6,s.p4),e=o.projectPoint(s.p4),n=e.distanceToPoint(s.p4),i=re(s.aph,s.s1,s.ra),r=le(i,n),l=Ae(o.ca,r,e,s.p6),a=s.p4.angleToPoint(l),h=s.p4.translatePolar(a,s.s1.radius),d=s.p2.angleFromToPoints(s.p3,l),f=Math.abs(s.ra/Math.sin(d))*Math.cos(d),g=s.p2.angleToPoint(s.p3),S=s.p2.translatePolar(g,f),_=[];return _.push(ge(s.s1,h)),_.push(te(h,S,l,s.ra,s.aph,s.abi)),_.push(he(s.s3,S)),_}function Ns(s){const t=re(s.aph,s.s1,s.ra),o=re(s.aph,s.s3,s.ra),e=s.p4.distanceToPoint(s.p5),n=s.p4.angleToPoint(s.p5),i=me(e,t,o),r=Oe(s.p4,n,i,t,s.p6),l=n+r*i,a=s.p4.translatePolar(l,t),h=s.p4.translatePolar(l,s.s1.radius),d=Math.PI+n,u=me(e,o,t),f=Oe(s.p5,d,u,o,s.p6),g=d+f*u,S=s.p5.translatePolar(g,o);if(!S.isEqual(a))throw`err909: roundArcArc p7 anf p7b differ ${a.cx} ${S.cx} ${a.cy} ${S.cy} 0`;const _=s.p5.translatePolar(g,s.s3.radius),P=[];return P.push(ge(s.s1,h)),P.push(te(h,_,a,s.ra,s.aph,s.abi)),P.push(ue(s.s3,_)),P}function Xe(s){const t=s.abi-2*s.aph,o=s.abi+2*s.aph;let e=s.p6.translatePolar(t,s.ra),n=s.p6.translatePolar(o,s.ra);if(s.s1.sType===1){const a=s.p4.angleFromToPoints(s.p2,s.p6),d=s.p4.angleToPoint(s.p2)+2*a;e=s.p4.translatePolar(d,s.s1.radius)}if(s.s3.sType===1){const a=s.p5.angleFromToPoints(s.p2,s.p6),d=s.p5.angleToPoint(s.p2)+2*a;n=s.p5.translatePolar(d,s.s3.radius)}const i=!(s.aph>0),r=new $t(1,e,n,s.p6,s.ra,t,o,i),l=[];return s.s1.sType===0?l.push(de(s.s1,e)):s.s1.sType===1&&l.push(ge(s.s1,e)),l.push(r),s.s3.sType===0?l.push(he(s.s3,n)):s.s3.sType===1&&l.push(ue(s.s3,n)),l}function Be(s,t,o,e){let n=o,i=o;const r=e.p6.angleFromToPoints(e.p2,o);if(Math.abs(r)>Math.PI/2){i=e.p6.translatePolar(e.abi+s*Math.PI/2,e.ra);const l=ae(i.cx,i.cy,e.abi);if(t.sType===0)n=jt(t.p1,t.p2).intersection(l);else if(t.sType===1){const a=l.projectPoint(t.pc),h=a.distanceToPoint(t.pc);if(h<t.radius){const d=le(t.radius,h);n=Ae(e.abi,d,a,o)}else Vt.addMsg(`warn222: wideAccess not possible on arc ${L(t.radius)} ${L(h)} at ${L(o.cx)} ${L(o.cy)}
3
+ `),n=o,i=o}}return[n,i]}function Ts(s){const t=Xe(s),o=t[1].arcCcw?1:-1,[e,n]=Be(o,s.s1,t[1].p1,s),[i,r]=Be(-o,s.s3,t[1].p2,s),l=[];if(e.isEqual(n))l.push(t[0]);else{s.s1.sType===0?l.push(de(s.s1,e)):s.s1.sType===1&&l.push(ge(s.s1,e));const a=z(0,0),h=new $t(0,e,n,a,0,0,0,!1);l.push(h)}if(l.push(te(n,r,s.p6,s.ra,s.aph,s.abi)),i.isEqual(r))l.push(t[2]);else{const a=z(0,0),h=new $t(0,r,i,a,0,0,0,!1);l.push(h),s.s3.sType===0?l.push(he(s.s3,i)):s.s3.sType===1&&l.push(ue(s.s3,i))}return l}function Fe(s,t,o){const e=As(s,t,o),n=[];if(t.sType===3)if(s.sType===0&&o.sType===0)n.push(...ys(e));else if(s.sType===0&&o.sType===1)n.push(...Es(e));else if(s.sType===1&&o.sType===0)n.push(...Rs(e));else if(s.sType===1&&o.sType===1)n.push(...Ns(e));else throw`err123: makeCorner unexpected s1s3.sType ${s.sType} ${o.sType}`;else if(t.sType===4)n.push(...Xe(e));else if(t.sType===5)n.push(...Ts(e));else throw`err723: makeCorner unexpected s2.sType ${t.sType}`;return n}function At(s){return s.toFixed(4)}function Cs(s,t,o,e=""){let n=e;return n===""&&(n="black"),`<circle cx="${At(s)}" cy="${At(t)}" r="${At(o)}" stroke="${n}" stroke-width="1" fill="none" />`}var Is=class{constructor(){w(this,"pathD");this.pathD=""}addStart(s,t){this.pathD=`M ${At(s)} ${At(t)}`}addStroke(s,t){this.pathD+=` L ${At(s)} ${At(t)}`}addArc(s,t,o,e,n){const i=At(o),r=e?1:0,l=n?1:0;this.pathD+=` A ${i} ${i} 0 ${r} ${l} ${At(s)} ${At(t)}`}stringify(s=""){let t=s;return t===""&&(t="black"),`<path d="${this.pathD} Z" stroke="${t}" stroke-width="1" fill="none" />`}};function ms(){return new Is}var ye=class{constructor(s,t,o,e,n,i,r,l){w(this,"arc");w(this,"p1x");w(this,"p1y");w(this,"radius");w(this,"a1");w(this,"a2");w(this,"p2x");w(this,"p2y");this.arc=s,this.p1x=t,this.p1y=o,this.radius=e,this.a1=n,this.a2=i,this.p2x=r,this.p2y=l}};function Vs(s,t,o,e){return new ye(!1,s,t,0,0,0,o,e)}function Os(s,t,o,e,n,i){const r=i?e:n,l=i?n:e,a=ut(bt(r)),h=ut(bt(l));return new ye(!0,s,t,o,a,h,0,0)}function Bs(s,t,o){return new ye(!1,s,t,o,0,0,0,0)}function Fs(s,t,o){return{circle:!0,cx:s,cy:t,radius:o}}var Js=class{constructor(){w(this,"seg");this.seg=[]}addStart(s,t){this.seg=[];const o={typ:0,px:s,py:t};this.seg.push(o)}addStroke(s,t){const o={typ:1,px:s,py:t};this.seg.push(o)}addArc(s,t,o,e,n){const i={typ:2,px:s,py:t,radius:o,large:e,ccw:n};this.seg.push(i)}toJson(){return{circle:!1,seg:this.seg}}};function zs(){return new Js}var We=class{};function Gs(s,t,o){const e=Ut(s,t,o),n=z(e.pc.cx,e.pc.cy),i=gt((e.a2-e.a1)/2);let r=e.a1+i;return(Math.sign(i)>0&&!o.arcCcw||Math.sign(i)<0&&o.arcCcw)&&(r+=Math.PI),n.translatePolar(r,o.radius)}var Us=class Bt extends We{constructor(o,e,n=""){super();w(this,"circle",!1);w(this,"segments");w(this,"points");w(this,"debugPoints");w(this,"debugLines");w(this,"lastPoint");w(this,"imposedColor");this.segments=[new mt(6,o,e,0)],this.points=[],this.debugPoints=[],this.debugLines=[],this.lastPoint=z(o,e),this.imposedColor=n}setLastPoint(o,e){this.lastPoint=z(o,e)}getLastPoint(){return this.lastPoint}getFirstPoint(){return z(this.segments[0].px,this.segments[0].py)}addPointA(o,e){if(this.points.length>2)throw`err311: contour add too much point ${o} ${e}`;return this.points.push(z(o,e)),this}addPointAP(o,e){const n=z(0,0).translatePolar(o,e);return this.addPointA(n.cx,n.cy),this}addPointR(o,e){const i=this.getLastPoint().translate(o,e);return this.addPointA(i.cx,i.cy),this}addPointRP(o,e){const i=this.getLastPoint().translatePolar(o,e);return this.addPointA(i.cx,i.cy),this}addSeg(o){return this.segments.push(o),this}addSegStroke(){if(this.points.length!==1)throw`err554: contour addSegStroke with unexpected points.length ${this.points.length}`;const o=this.points.pop();if(o!==void 0){const e=new mt(0,o.cx,o.cy,0);o.isEqual(this.getLastPoint())||(this.addSeg(e),this.setLastPoint(o.cx,o.cy))}else throw"err284: contour p1 is undefined";return this}addSegStrokeA(o,e){return this.addPointA(o,e).addSegStroke(),this}addSegStrokeAP(o,e){return this.addPointAP(o,e).addSegStroke(),this}addSegStrokeR(o,e){return this.addPointR(o,e).addSegStroke(),this}addSegStrokeRP(o,e){return this.addPointRP(o,e).addSegStroke(),this}addSegArc(o,e,n){if(this.points.length!==1)throw`err954: contour addSegArc with unexpected points.length ${this.points.length}`;const i=this.points.pop();if(i!==void 0){const r=new mt(1,i.cx,i.cy,o,e,n);i.isEqual(this.getLastPoint())?console.log(`warn144: addSegArc last and new point identical ${L(i.cx)} ${L(i.cy)}`):(this.addSeg(r),this.setLastPoint(i.cx,i.cy))}else throw"err482: contour p1 is undefined";return this}addSegArc2(){if(this.points.length!==2)throw`err958: contour addSegArc2 with unexpected points.length ${this.points.length}`;const o=this.points.pop(),e=this.points.pop();if(e!==void 0&&o!==void 0){const n=this.getLastPoint(),i=Ms(n,e,o),r=i.distanceToPoint(n),l=n.middlePoint(o),a=l.angleToPoint(n),h=l.angleToPoint(e),d=gt(h-a);let u=!1,f=!1;if(!l.isEqual(i)){const g=l.angleToPoint(i),S=gt(g-a);Math.sign(S)*Math.sign(d)>0&&(u=!0)}Math.sign(d)>0&&(f=!0),this.addPointA(o.cx,o.cy).addSegArc(r,u,f),this.debugPoints.push(e)}else throw"err488: contour p1 or p2 or seg is undefined";return this}addSegArc3(o,e){if(this.points.length!==1)throw`err914: contour addSegArc3 with unexpected points.length ${this.points.length}`;const n=this.points.pop();if(n!==void 0){const i=this.getLastPoint(),r=we(i,n);let l=n;e&&(l=i);const a=ae(l.cx,l.cy,o+Math.PI/2),h=r.intersection(a),d=h.distanceToPoint(i),u=i.middlePoint(n),f=l.angleToPoint(u),g=gt(o-f);let S=!1;Math.abs(g)>Math.PI/2&&(S=!0);let _=!1;g<0&&(_=!0),e||(_=!_),this.addPointA(n.cx,n.cy).addSegArc(d,S,_),this.debugPoints.push(u),this.debugPoints.push(h)}else throw"err282: contour p1 is undefined";return this}addSeg2Arcs(o,e){if(this.points.length!==1)throw`err214: contour addSeg2Arcs with unexpected points.length ${this.points.length}`;const n=this.points.pop();if(n!==void 0){const i=this.getLastPoint(),r=i.distanceToPoint(n),l=i.angleToPoint(n),a=n.angleToPoint(i),h=gt(o-l),d=-1*gt(e-a);if(Math.abs(h)>=Math.PI/2)throw`err545: addSeg2Arcs with too large au ${h}`;if(Math.abs(d)>=Math.PI/2)throw`err546: addSeg2Arcs with too large av ${d}`;if(j(h)===0)throw`err765: addSeg2Arcs with almost zero au ${h}`;if(j(d)===0)throw`err766: addSeg2Arcs with almost zero av ${d}`;if(Math.sign(h)*Math.sign(d)<1)throw`err767: addSeg2Arcs with au/av bad orientation ${h} ${d}`;const u=Math.tan(h/2),f=Math.tan(d/2),g=r*f/(f+u),S=Math.abs(g/Math.sin(h)),_=g/Math.cos(h/2),P=r*u/(f+u),A=Math.abs(P/Math.sin(d)),D=i.translatePolar(l+h/2,_);let H=!1;Math.sign(h)<0&&(H=!0),this.addPointA(D.cx,D.cy).addSegArc(S,!1,H),this.addPointA(n.cx,n.cy).addSegArc(A,!1,H),this.debugPoints.push(i.translatePolar(l,g)),this.debugPoints.push(i.translatePolar(l+h-Math.sign(h)*Math.PI/2,S)),this.debugPoints.push(n.translatePolar(a-d+Math.sign(h)*Math.PI/2,A))}else throw"err182: contour p1 is undefined";return this}addCornerPointed(){const o=new mt(2,0,0,0);return this.addSeg(o),this}addCornerRounded(o){const e=new mt(3,0,0,o);return this.addSeg(e),this}addCornerWidened(o){const e=new mt(4,0,0,o);return this.addSeg(e),this}addCornerWideAcc(o){const e=new mt(5,0,0,o);return this.addSeg(e),this}closeSegStroke(){const o=this.segments[0].px,e=this.segments[0].py;return this.addSegStrokeA(o,e),this}closeSegArc(o,e,n){const i=this.segments[0].px,r=this.segments[0].py;return this.addPointA(i,r).addSegArc(o,e,n),this}clone(){const o=new Bt(this.segments[0].px,this.segments[0].py);for(const e of this.segments){const n=e.clone();n.sType!==6&&(o.addSeg(n),Dt(n.sType)&&o.setLastPoint(n.px,n.py))}return o}translate(o,e){const n=this.segments[0].px+o,i=this.segments[0].py+e,r=new Bt(n,i);for(const l of this.segments){const a=l.clone();Dt(l.sType)&&(a.px+=o,a.py+=e),a.sType!==6&&(r.addSeg(a),Dt(a.sType)&&r.setLastPoint(a.px,a.py))}return r}translatePolar(o,e){return this.translate(e*Math.cos(o),e*Math.sin(o))}rotate(o,e,n){const i=z(o,e),l=z(this.segments[0].px,this.segments[0].py).rotate(i,n),a=new Bt(l.cx,l.cy);for(const h of this.segments){const d=h.clone();if(Dt(h.sType)){const f=z(d.px,d.py).rotate(i,n);d.px=f.cx,d.py=f.cy}d.sType!==6&&(a.addSeg(d),Dt(d.sType)&&a.setLastPoint(d.px,d.py))}return a}scale(o,e,n,i=!1){const r=z(o,e),a=z(this.segments[0].px,this.segments[0].py).scale(r,n),h=new Bt(a.cx,a.cy);for(const d of this.segments){const u=d.clone();if(Dt(d.sType)){const g=z(u.px,u.py).scale(r,n);u.px=g.cx,u.py=g.cy}d.sType===1&&(u.radius*=n),ie(d.sType)&&i&&(u.radius*=n),u.sType!==6&&(h.addSeg(u),Dt(u.sType)&&h.setLastPoint(u.px,u.py))}return h}addPartial(o){if(this.points.length>0)throw`err911: addPartial, points should be used ${this.points.length}`;let e=o;if(o.segments.length>0){const n=o.segments[0],i=this.getLastPoint(),r=n.px-i.cx,l=n.py-i.cy;n.sType===6&&(e=o.translate(-r,-l))}for(const n of e.segments)n.sType!==6&&(this.addSeg(n),Dt(n.sType)&&this.setLastPoint(n.px,n.py));return this}draw(o,e,n=Pt.contour){const i=this.imposedColor===""?n:this.imposedColor;let r=0,l=0;for(const a of this.segments){if(a.sType===0){const[h,d]=Jt(r,l,e),[u,f]=Jt(a.px,a.py,e);o.beginPath(),o.moveTo(h,d),o.lineTo(u,f),o.strokeStyle=i,o.stroke()}if(a.sType===1)try{const h=Ut(r,l,a),[d,u]=Jt(h.pc.cx,h.pc.cy,e),f=qe(a.radius,e);o.beginPath(),o.arc(d,u,f,-h.a1,-h.a2,a.arcCcw),o.strokeStyle=i,o.stroke()}catch(h){console.log("err413: "+h)}Wt(a.sType)&&(r=a.px,l=a.py)}}extractSkeleton(){const o=this.segments[0],e=new Bt(o.px,o.py);for(const n of this.segments)Dt(n.sType)&&e.addSeg(n);return e}generateContour(){Vt.clearPoints(),Vt.clearLines();const o=[],e=[];let n=0,i=0,r=0;for(const d of this.segments){if(d.sType===0){const g=z(i,r),S=z(d.px,d.py),_=z(0,0);o.push(new $t(d.sType,g,S,_,0,0,0,!1)),n=1}if(d.sType===1){const g=Ut(i,r,d);o.push(g),n=1}const u=o.at(-1),f=o.at(-2);if(u!==void 0&&f!==void 0&&Dt(u.sType)&&Pe(f.sType)){const g=o.pop(),S=o.pop(),_=o.pop();if(_!==void 0&&S!==void 0&&g!==void 0){const P=Fe(_,S,g);o.push(...P)}else throw"err603: contour generateContour internal error"}if(Pe(d.sType)){if(n===2)throw`err419: generateContour with two consecutive corners ${d.sType}`;if(n===0&&ie(d.sType)&&d.radius>0){const g=z(0,0);e.push(new $t(d.sType,g,g,g,d.radius,0,0,!1))}if(n===1&&ie(d.sType)&&d.radius>0){const g=z(0,0);o.push(new $t(d.sType,g,g,g,d.radius,0,0,!1))}n=2}Wt(d.sType)&&(i=d.px,r=d.py)}if(e.length>0)if(n===1)o.push(...e);else throw"err397: contour generateContour Corners defined at end and begining";const l=o.at(-1);if(l!==void 0&&Pe(l.sType)){const d=o[0],u=o.pop(),f=o.pop();if(f!==void 0&&u!==void 0&&d!==void 0){const g=Fe(f,u,d);o.push(...g.slice(0,-1));const S=g.at(-1);if(S!==void 0)o[0]=S;else throw"err606: contour generateContour internal error"}else throw"err602: contour generateContour internal error"}const a=o[0],h=new Bt(a.p1.cx,a.p1.cy,this.imposedColor);h.debugPoints.push(...Vt.getPoints()),h.debugLines.push(...Vt.getLines());for(const d of o)if(d.sType===0)h.addSegStrokeA(d.p2.cx,d.p2.cy);else if(d.sType===1){const u=ks(d);h.addPointA(d.p2.cx,d.p2.cy).addSegArc(u.radius,u.arcLarge,u.arcCcw)}else throw`err986: contour generateContour unexpected in seg2 Enum ${d.sType}`;return h}generatePoints(){const o=[];o.push(...this.debugPoints);const e=this.segments[0];o.push(z(e.px,e.py));let n=0,i=0;for(const r of this.segments){if(r.sType===1)try{const l=Gs(n,i,r);o.push(l)}catch(l){console.log("err453: "+l)}Wt(r.sType)&&(n=r.px,i=r.py,o.push(z(n,i)))}return o}generateLines(){const o=[];return o.push(...this.debugLines),o}checkContour(o){if(o.segments[0].sType!==6)throw`err412: contour check first seg is not eStart ${o.segments[0].sType}`;let e=0,n=0;for(const l of o.segments){if(l.sType===1)try{Ut(e,n,l)}catch(a){throw`err778: ${a}`}Wt(l.sType)&&(e=l.px,n=l.py)}const i=o.segments[0].px,r=o.segments[0].py;if(j(e-i)!==0||j(n-r)!==0)throw`err414: contour check, contour is not closed px ${i} ${e} py ${i} ${r}`}check(){Vt.clearMsg(),this.checkContour(this);const o=this.generateContour();return this.checkContour(o),Vt.getMsg()}toSvg(o,e=""){const n=ms();for(const r of this.segments)r.sType===6?n.addStart(r.px,o-r.py):r.sType===0?n.addStroke(r.px,o-r.py):r.sType===1?n.addArc(r.px,o-r.py,r.radius,r.arcLarge,!r.arcCcw):console.log(`err631: contour.toSvg has unknown segment type ${r.sType}`);return n.stringify(e)}toDxfSeg(){const o=[];let e=0,n=0;for(const i of this.segments){if(i.sType===0)o.push(Vs(e,n,i.px,i.py));else if(i.sType===1)try{const r=Ut(e,n,i);o.push(Os(r.pc.cx,r.pc.cy,i.radius,r.a1,r.a2,r.arcCcw))}catch(r){console.log("err413: "+r)}Wt(i.sType)&&(e=i.px,n=i.py)}return o}toPax(){const o=zs();for(const n of this.segments)n.sType===6?o.addStart(n.px,n.py):n.sType===0?o.addStroke(n.px,n.py):n.sType===1?o.addArc(n.px,n.py,n.radius,n.arcLarge,n.arcCcw):console.log(`err709: contour.toPax has unknown segment type ${n.sType}`);return o.toJson()}getPerimeter(){let o=0;const e=this.generateContour();let n=0,i=0;for(const r of e.segments)if(r.sType===6)n=r.px,i=r.py;else if(r.sType===0){const l=Math.sqrt((r.px-n)**2+(r.py-i)**2);n=r.px,i=r.py,o+=l}else if(r.sType===1){const l=Ut(n,i,r),a=bt(l.a2-l.a1),h=l.arcCcw?a:bt(2*Math.PI-a),d=r.radius*h;n=r.px,i=r.py,o+=d}else console.log(`err760: contour.getPerimeter has unknown segment type ${r.sType}`);return o}},qs=class qt extends We{constructor(o,e,n,i=""){super();w(this,"circle",!0);w(this,"px");w(this,"py");w(this,"radius");w(this,"imposedColor");if(this.px=o,this.py=e,this.radius=n,this.imposedColor=i,n<0)throw`err432: iRadius ${n} is negative at circle ix ${o}, iy ${e}`}clone(){return new qt(this.px,this.py,this.radius,this.imposedColor)}translate(o,e){return new qt(this.px+o,this.py+e,this.radius,this.imposedColor)}translatePolar(o,e){return this.translate(e*Math.cos(o),e*Math.sin(o))}rotate(o,e,n){const i=z(o,e),r=z(this.px,this.py).rotate(i,n);return new qt(r.cx,r.cy,this.radius,this.imposedColor)}draw(o,e,n=Pt.contour){const[i,r]=Jt(this.px,this.py,e),l=qe(this.radius,e),a=this.imposedColor===""?n:this.imposedColor;o.beginPath(),o.arc(i,r,l,0,2*Math.PI,!0),o.strokeStyle=a,o.stroke()}extractSkeleton(){return new qt(this.px,this.py,this.radius)}generateContour(){return new qt(this.px,this.py,this.radius,this.imposedColor)}generatePoints(){const o=[],e=z(this.px,this.py);o.push(e);for(let n=0;n<4;n++){const i=e.translatePolar(n*Math.PI/2,this.radius);o.push(i)}return o}generateLines(){return[]}check(){return""}toSvg(o,e=""){return Cs(this.px,o-this.py,this.radius,e)}toDxfSeg(){const o=[];return o.push(Bs(this.px,this.py,this.radius)),o}toPax(){return Fs(this.px,this.py,this.radius)}getPerimeter(){return 2*Math.PI*this.radius}};function J(s,t,o=""){return new Us(s,t,o)}function x(s,t,o,e=""){return new qs(s,t,o,e)}var Ys=class xe{constructor(){w(this,"pointList");w(this,"lineList");w(this,"vectorList");w(this,"mainList");w(this,"mainBList");w(this,"secondList");w(this,"secondBList");w(this,"dynamicsList");w(this,"xMin");w(this,"xMax");w(this,"yMin");w(this,"yMax");this.pointList=[],this.lineList=[],this.vectorList=[],this.mainList=[],this.mainBList=[],this.secondList=[],this.secondBList=[],this.dynamicsList=[],this.xMin=0,this.xMax=0,this.yMin=0,this.yMax=0}addPoint(t){this.pointList.push(t)}addPoints(t){this.pointList.push(...t)}addLine(t){this.lineList.push(t)}addLines(t){for(const o of t)this.lineList.push(o)}addVector(t){this.vectorList.push(t)}addMainOI(t){const o=[];for(const e of t){const n=e.generateContour();this.addPoints(n.generatePoints()),this.addLines(n.generateLines()),o.push(n),this.mainBList.push(e.extractSkeleton())}this.mainList.push(o)}addMainO(t){const o=[t];this.addMainOI(o)}addSecond(t){const o=t.generateContour();this.addPoints(o.generatePoints()),this.addLines(o.generateLines()),this.secondList.push(o),this.secondBList.push(t.extractSkeleton())}addDynamics(t){this.addPoints(t.generatePoints()),this.addLines(t.generateLines()),this.dynamicsList.push(t)}translate(t,o){const e=new xe;for(const n of this.pointList)e.addPoint(n.translate(t,o));for(const n of this.lineList)e.addLine(n.translate(t,o));for(const n of this.vectorList)e.addVector(n.translate(t,o));for(const n of this.mainList){const i=[];for(const r of n)i.push(r.translate(t,o));e.addMainOI(i)}for(const n of this.secondList)e.addSecond(n.translate(t,o));for(const n of this.dynamicsList)e.addDynamics(n.translate(t,o));return e}translatePolar(t,o){return this.translate(o*Math.cos(t),o*Math.sin(t))}rotate(t,o,e){const n=new xe,i=z(t,o);for(const r of this.pointList)n.addPoint(r.rotate(i,e));for(const r of this.lineList)n.addLine(r.rotate(i,e));for(const r of this.vectorList)n.addVector(r.rotate(i,e));for(const r of this.mainList){const l=[];for(const a of r)l.push(a.rotate(t,o,e));n.addMainOI(l)}for(const r of this.secondList)n.addSecond(r.rotate(t,o,e));for(const r of this.dynamicsList)n.addDynamics(r.rotate(t,o,e));return n}mergeFigure(t,o=!1){for(const e of t.pointList)this.addPoint(e.clone());for(const e of t.lineList)this.addLine(e.clone());for(const e of t.vectorList)this.addVector(e.clone());for(const e of t.mainList){const n=[];for(const i of e)n.push(i.clone());if(o)for(const i of n)this.addSecond(i);else this.addMainOI(n)}for(const e of t.secondList)this.addSecond(e.clone());for(const e of t.dynamicsList)this.addDynamics(e.clone())}mainListC(){const t=[];for(const o of this.mainList)for(const e of o)t.push(e);return t}clear(){this.pointList=[],this.lineList=[],this.vectorList=[],this.mainList=[],this.mainBList=[],this.secondList=[],this.secondBList=[],this.dynamicsList=[]}getMinMax(){[this.xMin,this.xMax,this.yMin,this.yMax]=Ds(this.pointList)}getAdjustFull(t,o){let e=He();return this.pointList.length>0&&(this.getMinMax(),e=Ie(this.xMin,this.xMax,this.yMin,this.yMax,t,o)),e}getAdjustZoom(t,o){let e=He();if(this.pointList.length>0){this.getMinMax();const n=(this.xMin+this.xMax)/2,i=(this.yMin+this.yMax)/2;e=Ie(n,this.xMax,i,this.yMax,t,o)}return e}quantifyRuler(t,o){const n=t/10/o.scaleX;let i=1e-4;for(;i<n;)i*=10;i/5>n?i/=5:i/2>n&&(i/=2);const r=i*o.scaleX;return[i,r]}drawRuler(t,o,e){const[n,i]=this.quantifyRuler(t.canvas.width,o),r=t.canvas.width-10-i;t.font="15px Arial",t.fillStyle=e,t.fillText(`${n.toFixed(4)}`,r,20),t.beginPath(),t.moveTo(r,25),t.lineTo(r+i,25),t.lineTo(r+i,25+i),t.strokeStyle=e,t.stroke()}draw(t,o,e){if(e.points)for(const n of this.pointList)n.draw(t,o);if(e.lines)for(const n of this.lineList)n.draw(t,o);if(e.vectors)for(const n of this.vectorList)n.draw(t,o);if(e.main)for(const n of this.mainList)for(const[i,r]of n.entries()){let l=Pt.mainOuter;i>0&&(l=Pt.mainInner),r.draw(t,o,l)}if(e.mainB)for(const n of this.mainBList)n.draw(t,o,Pt.mainB);if(e.second)for(const n of this.secondList)n.draw(t,o,Pt.second);if(e.secondB)for(const n of this.secondBList)n.draw(t,o,Pt.secondB);if(e.dynamics)for(const n of this.dynamicsList)n.draw(t,o,Pt.dynamics);if(e.ruler&&this.drawRuler(t,o,Pt.ruler),e.refframe){for(const n of[10,100,200])z(n,0).draw(t,o,Pt.reference,2),z(-n,0).draw(t,o,Pt.reference,2),z(0,n).draw(t,o,Pt.reference,2),z(0,-n).draw(t,o,Pt.reference,2);z(0,0).draw(t,o,Pt.origin,2)}}};function I(){return new Ys}function Xs(s,t,o){return{val:s,init:t,chg:o}}function Ws(s){const t={};for(const o of Object.keys(s))t[o]=s[o].val;return t}var Zs=class{constructor(s,t=""){w(this,"paramVal",{});w(this,"paramInit",{});w(this,"paramChanged",{});w(this,"partName");w(this,"suffix");w(this,"paramNames");for(const o of s.params)this.paramVal[o.name]=o.init,this.paramInit[o.name]=o.init,this.paramChanged[o.name]=!1;this.suffix=t,this.partName=s.partName,this.paramNames=this.getParamName()}getParamName(){const s=[];for(const t of Object.keys(this.paramVal))s.push(t);return s}getPartName(){return this.partName}getPartNameSuffix(){return this.partName+this.suffix}getSuffix(){return this.suffix}getParamVal(){return this.paramVal}getVal(s){if(this.paramNames.includes(s))return this.paramVal[s];throw`err140: parameter ${s} does not exist in design ${this.partName}`}getInit(s){if(this.paramNames.includes(s))return this.paramInit[s];throw`err149: parameter ${s} does not exist in design ${this.partName}`}getChanged(s){if(this.paramNames.includes(s))return this.paramChanged[s];throw`err156: parameter ${s} does not exist in design ${this.partName}`}setVal(s,t){if(this.paramNames.includes(s))this.paramVal[s]=t,this.paramChanged[s]=!0;else throw`err163: parameter ${s} does not exist in design ${this.partName}`}applyParamVal(s){let t="";for(const o of Object.keys(s))this.setVal(o,s[o]);return t+=`info104: apply ${Object.keys(s).length} parameters on ${this.partName}
4
+ `,t}applyParamList(s){return this.applyParamVal(Ws(s))}getDesignParamList(){const s={};for(const t of this.paramNames)s[t]=Xs(this.getVal(t),this.getInit(t),this.getChanged(t));return s}};function vt(s,t=""){return new Zs(s,t)}function c(s,t,o,e=0,n=100,i=1){return{name:s,unit:t,init:o,min:e,max:n,step:i,dropdown:[],pType:0}}function Nt(s,t){return{name:s,unit:"checkbox",init:t?1:0,min:0,max:1,step:1,dropdown:[],pType:1}}function Tt(s,t,o=0){let e=0;return o<t.length&&(e=o),{name:s,unit:"dropdown",init:e,min:0,max:t.length-1,step:1,dropdown:t,pType:2}}function U(s){return{name:s,unit:"section-separator",init:0,min:0,max:0,step:0,dropdown:[],pType:3}}var q=(s=>(s[s.eLinearOrtho=0]="eLinearOrtho",s[s.eRotate=1]="eRotate",s))(q||{}),lt=(s=>(s[s.eIdentity=0]="eIdentity",s[s.eIntersection=1]="eIntersection",s[s.eUnion=2]="eUnion",s[s.eSubstraction=3]="eSubstraction",s))(lt||{});function _t(s){return{partName:s,calcErr:!0,logstr:"",fig:{},vol:{extrudes:[],volumes:[]},sub:{}}}function Mt(s){if(s.calcErr){let t=`err182: Error in sub-design ${s.partName}
5
+ `;throw t+=pt(s.logstr,s.partName),t}}function pt(s,t){let o="";for(const e of s.split(`
6
+ `))e!==""&&(o+=`[${t}]: ${e}
7
+ `);return o}function Ze(){return[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]]}function Yt(){return[[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]]}function Ks(s){const t=Yt(),o=Math.cos(s),e=Math.sin(s);return t[1][1]=o,t[2][2]=o,t[2][1]=e,t[1][2]=-e,t}function Qs(s){const t=Yt(),o=Math.cos(s),e=Math.sin(s);return t[0][0]=o,t[2][2]=o,t[0][2]=e,t[2][0]=-e,t}function js(s){const t=Yt(),o=Math.cos(s),e=Math.sin(s);return t[0][0]=o,t[1][1]=o,t[0][1]=-e,t[1][0]=e,t}function to(s,t){const o=Ze();for(let e=0;e<4;e++)for(let n=0;n<4;n++){let i=0;for(let r=0;r<4;r++)i+=s[e][r]*t[r][n];o[e][n]=i}return o}function pe(s){let t=Yt();for(const o of s)t=to(o,t);return t}function eo(s,t,o){return pe([Ks(s),Qs(t),js(o)])}function so(s,t,o){const e=Yt();return e[0][3]=s,e[1][3]=t,e[2][3]=o,e}function oo(s){const t=Ze();for(let o=0;o<4;o++)for(let e=0;e<4;e++)t[o][e]=s[o][e];return t}function no(s,t){const o=[t[0],t[1],t[2],1],e=[0,0,0];for(let n=0;n<3;n++){let i=0;for(let r=0;r<4;r++)i+=s[n][r]*o[r];e[n]=i}return e}function io(s){return[s[0][3],s[1][3],s[2][3]]}function ro(s){let t=0,o=0,e=0;const n=s[2][0],i=10**-5;return Math.abs(n-1)<i?(e=0,o=-Math.PI/2,t=-e+Math.atan2(-s[0][1],-s[0][2])):Math.abs(n+1)<i?(e=0,o=Math.PI/2,t=e+Math.atan2(s[0][1],s[0][2])):(t=Math.atan2(s[2][1],s[2][2]),o=Math.atan2(-s[2][0],Math.sqrt(s[2][1]**2+s[2][2]**2)),e=Math.atan2(s[1][0],s[0][0])),[t,o,e]}var co=class{constructor(s){w(this,"mmat");this.mmat=oo(s)}addRotation(s,t,o){const e=eo(s,t,o);return this.mmat=pe([this.mmat,e]),this}addTranslation(s,t,o){const e=so(s,t,o);return this.mmat=pe([this.mmat,e]),this}getMatrix(){return this.mmat}getRotation(){return ro(this.mmat)}getTranslation(){return io(this.mmat)}transform(s){return no(this.mmat,s)}},lo=Yt();function Je(s=lo){return new co(s)}function ht(s,t,o,e,n=0){return J(s,t).addCornerRounded(n).addSegStrokeR(o,0).addCornerRounded(n).addSegStrokeR(0,e).addCornerRounded(n).addSegStrokeR(-o,0).addCornerRounded(n).closeSegStroke()}function Rt(s,t,o,e,n,i=0){return ht(s,t,o,e,i).rotate(s,t,n)}function Z(s,t,o,e,n,i=0){const r=e/2*Math.sin(n),l=-e/2*Math.cos(n);return Rt(s+r,t+l,o,e,n,i)}function ao(s,t,o,e,n,i=0){const r=(e-o)/2;return J(s,t).addCornerRounded(i).addSegStrokeR(o,0).addCornerRounded(i).addSegStrokeR(r,n).addCornerRounded(i).addSegStrokeR(-e,0).addCornerRounded(i).closeSegStroke()}function ho(s,t,o,e,n){if(e<o)throw`err821: Hlength ${e} is too small compare to Vwidth ${o}`;const i=o/2,r=e-o;return J(i+r,-i).addPointA(i+r,i).addSegArc(i,!1,!0).addSegStrokeA(i,i).addPointA(i,-i).addSegArc(i,!1,!0).closeSegStroke().rotate(0,0,n).translate(s,t)}var go=class{constructor(s,t,o,e,n){w(this,"base_center_x");w(this,"base_center_y");w(this,"base_radius");w(this,"initial_angle");w(this,"right_nleft");this.base_center_x=s,this.base_center_y=t,this.base_radius=o,this.initial_angle=e,this.right_nleft=n}angleSign(){return this.right_nleft?1:-1}lFromU(s){return this.base_radius*Math.sqrt(1+s**2)}wFromU(s){if(s<0)throw`err729: involute parameter au ${s} is negative`;if(Math.abs(s)>Math.PI/2)throw`err730: involute parameter au ${s} is larger than PI/2`;return this.angleSign()*(s-Math.atan(s))}w2FromU(s){return this.initial_angle+this.wFromU(s)}ptc(s){const t=this.lFromU(s),o=this.w2FromU(s),e=this.base_center_x+Math.cos(o)*t,n=this.base_center_y+Math.sin(o)*t;return[e,n]}ptcta(s){return this.initial_angle+this.angleSign()*s}uFromL(s){return Math.sqrt(s**2/this.base_radius**2-1)}uFromWslow(s){let o=Math.PI/3,e=o/2,n=this.wFromU(o),i=0;for(;Math.abs(n-s)>1e-4;)n<s?o+=e:o-=e,n=this.wFromU(o),e=e/2,i+=1;return console.log(`dbg072: uFromWslow itcnt ${i}`),o}laptc(s,t,o,e){if(Math.sign(t)*this.angleSign()<0)throw`err904: Invole.laptc angle-of-pressure ${t} not compatible with right_nleft ${this.right_nleft}`;const n=s+t,i=this.base_center_x+Math.cos(n)*this.base_radius,r=this.base_center_y+Math.sin(n)*this.base_radius,l=n-this.angleSign()*Math.PI/2,a=o*this.base_radius,h=i+Math.cos(l)*a,d=r+Math.sin(l)*a,f=this.lFromU(o)*e,g=o,S=Math.cos(g)*f,_=Math.sin(g)*f;return[h,d,S,_]}};function It(s,t,o,e,n){return new go(s,t,o,e,n)}var uo=class{constructor(){w(this,"mod",1);w(this,"TN",23);w(this,"as",1);w(this,"cx",0);w(this,"cy",0);w(this,"brr",50);w(this,"blr",50);w(this,"ar",54);w(this,"pr",53);w(this,"dr",52);w(this,"br",51);w(this,"bRound",1);w(this,"adt",.5);w(this,"initAngle",0);w(this,"axisAngle",0);w(this,"involArcPairs",1);w(this,"skinThickness",0);w(this,"involuteR",It(0,0,50,0,!0));w(this,"involuteL",It(0,0,50,0,!1));w(this,"rud",0);w(this,"rup",0);w(this,"rua",0);w(this,"rwd",0);w(this,"rwp",0);w(this,"rwa",0);w(this,"lud",0);w(this,"lup",0);w(this,"lua",0);w(this,"lwd",0);w(this,"lwp",0);w(this,"lwa",0);w(this,"msg");w(this,"initStep",0);this.mod=1,this.msg="",this.initStep=0}incInitStep(s){if(this.initStep+1!==s)throw`err834: incInitStep initStep ${this.initStep} and target ${s} are not compatible`;this.initStep=s}checkInitStep(s,t){if(this.initStep<s)throw`err835: checkInitStep for ${t} initStep ${this.initStep} is too small compare to targetMin ${s}`}set1ModuleToothNumber(s,t){this.incInitStep(1),this.mod=s,this.TN=t,this.pr=this.mod*this.TN/2,this.as=2*Math.PI/this.TN}set2CenterPosition(s,t){this.incInitStep(2),this.cx=s,this.cy=t}set3CircleRadius(s,t,o,e){this.incInitStep(3),this.ar=this.pr+this.mod*s,this.dr=this.pr-this.mod*t,this.br=this.dr-this.mod*o,this.bRound=e}set4BaseCircles(s,t){this.incInitStep(4),this.brr=s,this.blr=t}set5AddendumThickness(s){this.incInitStep(5),this.adt=s/100}set6Angles(s,t){this.incInitStep(6),this.initAngle=s,this.axisAngle=t}set7InvoluteDetails(s,t){this.incInitStep(7),this.involArcPairs=s,this.skinThickness=t}getRefCircles(){return this.checkInitStep(4,"getRefCircles"),[x(this.cx,this.cy,this.ar,"Azure"),x(this.cx,this.cy,this.pr,"Azure"),x(this.cx,this.cy,this.dr,"Azure"),x(this.cx,this.cy,this.br,"Azure"),x(this.cx,this.cy,this.brr,"CornFlowerBlue"),x(this.cx,this.cy,this.blr,"Crimson")]}calcInvoluteAngles(){this.checkInitStep(4,"calcInvoluteAngles"),this.involuteR=It(this.cx,this.cy,this.brr,0,!0),this.dr>this.brr?this.rud=this.involuteR.uFromL(this.dr):this.rud=0,this.rup=this.involuteR.uFromL(this.pr),this.rua=this.involuteR.uFromL(this.ar),this.rwd=this.involuteR.wFromU(this.rud),this.rwp=this.involuteR.wFromU(this.rup),this.rwa=this.involuteR.wFromU(this.rua),this.involuteL=It(this.cx,this.cy,this.blr,0,!1),this.dr>this.blr?this.lud=this.involuteL.uFromL(this.dr):this.lud=0,this.lup=this.involuteL.uFromL(this.pr),this.lua=this.involuteL.uFromL(this.ar),this.lwd=this.involuteL.wFromU(this.lud),this.lwp=this.involuteL.wFromU(this.lup),this.lwa=this.involuteL.wFromU(this.lua)}checkProfileConditions(){const s=this.as*this.adt,t=this.rwa-this.rwp,o=Math.abs(this.lwa-this.lwp),e=s-t-o;if(e<0)throw`err554: No remaining Addendum reserve ${L(e)}
8
+ `;const n=this.as*(1-this.adt),i=this.rwp-this.rwd,r=Math.abs(this.lwp-this.lwd),l=n-i-r;if(l<2*Math.atan2(this.bRound,this.br))throw`err555: No remaining Dedendum reserve ${L(l)} compare to bRound ${L(this.bRound)}
9
+ `}getToothRef(){const s=6*this.involArcPairs,t=0;this.checkInitStep(7,"getProfile"),this.calcInvoluteAngles();const o=(this.rua-this.rud)/s,e=(this.lua-this.lud)/s,n=this.initAngle+t*this.as,i=It(this.cx,this.cy,this.brr,n-this.rwp,!0),[r,l]=i.ptc(this.rud+0*o),a=J(r,l,"Gold");for(let u=0;u<s;u++){const[f,g]=i.ptc(this.rud+(u+1)*o);a.addSegStrokeA(f,g)}const h=n+this.as*this.adt,d=It(this.cx,this.cy,this.blr,h-this.lwp,!1);for(let u=0;u<s+1;u++){const[f,g]=d.ptc(this.lud+(s-u)*e);a.addSegStrokeA(f,g)}return a.closeSegStroke(),a}getProfile(){this.checkInitStep(7,"getProfile"),this.calcInvoluteAngles(),this.checkProfileConditions();const s=this.rwd-this.rwp,t=this.lwd-this.lwp,o=this.dr>this.brr?this.dr:this.brr,e=this.dr>this.blr?this.dr:this.blr;if(this.bRound>o-this.br)throw`err409: getProfile bRound ${L(this.bRound)} too large for erdr ${L(o)} and br ${L(this.br)}`;if(this.bRound>e-this.br)throw`err408: getProfile bRound ${L(this.bRound)} too large for eldr ${L(e)} and br ${L(this.br)}`;const n=(this.rua-this.rud)/this.involArcPairs,i=(this.lua-this.lud)/this.involArcPairs,r=z(this.cx,this.cy),l=r.translatePolar(this.initAngle+s,this.br),a=J(l.cx,l.cy);for(let h=0;h<this.TN;h++){const d=this.initAngle+h*this.as,u=r.translatePolar(d+s,this.br);a.addSegStrokeA(u.cx,u.cy).addCornerRounded(this.bRound);const f=It(this.cx,this.cy,this.brr,d-this.rwp,!0),[g,S]=f.ptc(this.rud),_=f.ptcta(this.rud),P=z(g,S).translatePolar(_-Math.PI/2,this.skinThickness);a.addSegStrokeA(P.cx,P.cy);for(let $=0;$<this.involArcPairs;$++){const V=this.rud+$*n,[N,v]=f.ptc(V+n),G=f.ptcta(V),Y=f.ptcta(V+n)+Math.PI,B=z(N,v).translatePolar(G-Math.PI/2,this.skinThickness);a.addPointA(B.cx,B.cy).addSeg2Arcs(G,Y)}const A=d+this.as*this.adt,D=It(this.cx,this.cy,this.blr,A-this.lwp,!1),H=this.lud+this.involArcPairs*i,[k,R]=D.ptc(H),E=D.ptcta(H)+Math.PI,p=z(k,R).translatePolar(E-Math.PI/2,this.skinThickness);a.addSegStrokeA(p.cx,p.cy);for(let $=0;$<this.involArcPairs;$++){const V=this.lud+(this.involArcPairs-$)*i,[N,v]=D.ptc(V-i),G=D.ptcta(V)+Math.PI,Y=D.ptcta(V-i),B=z(N,v).translatePolar(G-Math.PI/2,this.skinThickness);a.addPointA(B.cx,B.cy).addSeg2Arcs(G,Y)}const b=r.translatePolar(A+t,this.br);a.addSegStrokeA(b.cx,b.cy).addCornerRounded(this.bRound)}return a.closeSegStroke(),a}getMsg(){return this.msg}};function ze(){return new uo}function fo(s,t,o,e){s.checkInitStep(1,"helper.gw2center-1"),t.checkInitStep(1,"helper.gw2center-2");const n=s.pr+t.pr+e,i=s.cx+n*Math.cos(o),r=s.cy+n*Math.sin(o);return[i,r,n]}function So(s,t,o,e,n,i,r,l,a,h,d){s.checkInitStep(3,"helper.baseCircles-1"),t.checkInitStep(3,"helper.baseCircles-2");let u=o,f=n,g=e,S=i;const _=s.pr+t.pr,P=h,A=d;switch(P){case 0:t.TN>s.TN?(u=s.dr,f=u*t.TN/s.TN):(f=t.dr,u=f*s.TN/t.TN);break;case 1:f=u*t.TN/s.TN;break;case 2:u=f*s.TN/t.TN;break;case 3:u=_*s.TN/(s.TN+t.TN)*Math.cos(Et(r)),f=u*t.TN/s.TN;break;case 4:break;default:console.log(`err337: involROpt2 case ${P} is not implemented!`)}switch(A){case 0:t.TN>s.TN?(g=s.dr,S=g*t.TN/s.TN):(S=t.dr,g=S*s.TN/t.TN);break;case 1:S=g*t.TN/s.TN;break;case 2:g=S*s.TN/t.TN;break;case 3:g=_*s.TN/(s.TN+t.TN)*Math.cos(Et(l)),S=g*t.TN/s.TN;break;case 4:break;default:console.log(`err358: involLOpt2 case ${A} is not implemented!`)}return a===1&&(g=u,S=f),[u,g,f,S]}var _o=class{constructor(s,t,o,e,n,i){w(this,"gw1");w(this,"gw2");w(this,"initAngle1");w(this,"angleCenterCenter");w(this,"interAxis");w(this,"rightLeftCenter2");w(this,"msg");w(this,"apr");w(this,"apl");w(this,"lBDr",0);w(this,"lBDl",0);w(this,"laStartRr1",0);w(this,"laStartRr2",0);w(this,"laStartRl1",0);w(this,"laStartRl2",0);w(this,"aFODr1",0);w(this,"aFODr2",0);w(this,"aFODl1",0);w(this,"aFODl2",0);w(this,"lasr1",0);w(this,"lasr2",0);w(this,"lasl1",0);w(this,"lasl2",0);w(this,"firstToothUr1",0);w(this,"firstToothUl1",0);w(this,"ftdr1",0);w(this,"ftdl1",0);this.gw1=s,this.gw2=t,this.initAngle1=o,this.angleCenterCenter=e,this.interAxis=n,this.rightLeftCenter2=i,this.msg="",this.apr=0,this.apl=0}check1(){this.gw1.checkInitStep(4,"ActionLine.check1-1"),this.gw2.checkInitStep(4,"ActionLine.check1-2"),this.interAxis>this.gw1.ar+this.gw2.ar&&(this.msg+=`warn333: initAngle2 interAxis ${L(this.interAxis)} is too large compare to gw1.ar ${L(this.gw1.ar)} and gw2.ar ${L(this.gw2.ar)}
10
+ `),j(this.gw1.brr*this.gw2.TN-this.gw2.brr*this.gw1.TN)!==0&&(this.msg+=`warn407: right ratios differ N1/N2 = ${this.gw1.TN} / ${this.gw2.TN} = ${L(this.gw1.TN/this.gw2.TN)} and brr1/brr2 = ${L(this.gw1.brr)}/${L(this.gw2.brr)} = ${L(this.gw1.brr/this.gw2.brr)}
11
+ `),j(this.gw1.blr*this.gw2.TN-this.gw2.blr*this.gw1.TN)!==0&&(this.msg+=`warn408: left ratios differ N1/N2 = ${this.gw1.TN} / ${this.gw2.TN} = ${L(this.gw1.TN/this.gw2.TN)} and blr1/blr2 = ${L(this.gw1.blr)}/${L(this.gw2.blr)} = ${L(this.gw1.blr/this.gw2.blr)}
12
+ `)}check2(){this.gw1.checkInitStep(5,"ActionLine.check2-1"),this.gw2.checkInitStep(5,"ActionLine.check2-2"),j(this.gw1.adt+this.gw2.adt-1)>0&&(this.msg+=`warn281: addendum thickness too large: adt1 ${L(this.gw1.adt)} adt2 ${L(this.gw2.adt)}
13
+ `);const s=this.gw1.ar-this.gw1.pr,t=this.gw1.pr-this.gw1.dr,o=this.gw2.ar-this.gw2.pr,e=this.gw2.pr-this.gw2.dr;j(e-s)<0&&(this.msg+=`warn282: addendum-1 ${L(s)} larger than dedendum-2 ${L(e)}
14
+ `),j(t-o)<0&&(this.msg+=`warn283: addendum-2 ${L(o)} larger than dedendum-1 ${L(t)}
15
+ `)}calcActionLine(){this.gw1.checkInitStep(4,"ActionLine.calcActionLine-1"),this.gw2.checkInitStep(4,"ActionLine.calcActionLine-2"),this.gw1.calcInvoluteAngles(),this.gw2.calcInvoluteAngles();const s=this.interAxis*this.gw1.brr/(this.gw1.brr+this.gw2.brr),t=this.interAxis*this.gw1.blr/(this.gw1.blr+this.gw2.blr),o=this.interAxis-s,e=this.interAxis-t;this.apr=Math.acos((this.gw1.brr+this.gw2.brr)/this.interAxis),this.apl=Math.acos((this.gw1.blr+this.gw2.blr)/this.interAxis),this.msg+=`Pressure angular: right: ${L(ut(this.apr))} left: ${L(ut(this.apl))} degree
16
+ `,this.lBDr=this.interAxis*Math.sin(this.apr),this.lBDl=this.interAxis*Math.sin(this.apl),this.msg+=`Line of Action Maximum length: right: ${L(this.lBDr)} left: ${L(this.lBDl)} mm
17
+ `;const n=Math.PI/2+this.apr,i=ne(this.gw1.ar,s,n);this.aFODr1=Math.PI-n-i;const r=this.gw1.rua-this.apr-this.gw1.rwa;if(j(this.aFODr1-r)!==0)throw`dbg378: aFODr1 ${this.aFODr1} and aFODr1Alt ${r} differ`;const l=oe(s,this.gw1.ar,this.aFODr1),a=n,h=ne(this.gw2.ar,o,a);this.aFODr2=Math.PI-a-h;const d=this.gw2.rua-this.apr-this.gw2.rwa;if(j(this.aFODr2-d)!==0)throw`dbg379: aFODr2 ${this.aFODr2} and aFODr2Alt ${d} differ`;const u=oe(o,this.gw2.ar,this.aFODr2),f=l+u,g=f/this.gw1.brr,S=f/this.gw2.brr,_=this.gw1.rua-g,P=this.gw2.rua-S;this.laStartRr1=this.gw1.involuteR.lFromU(_),this.laStartRr2=this.gw2.involuteR.lFromU(P);const A=Math.PI/2+this.apl,D=ne(this.gw1.ar,t,A);this.aFODl1=Math.PI-A-D;const H=this.gw1.lua-this.apl+this.gw1.lwa;if(j(this.aFODl1-H)!==0)throw`dbg388: aFODl1 ${this.aFODl1} and aFODl1Alt ${H} differ`;const k=oe(t,this.gw1.ar,this.aFODl1),R=A,E=ne(this.gw2.ar,e,R);this.aFODl2=Math.PI-R-E;const p=this.gw2.lua-this.apl+this.gw2.lwa;if(j(this.aFODl2-p)!==0)throw`dbg389: aFODl2 ${this.aFODl2} and aFODl2Alt ${p} differ`;const b=oe(e,this.gw2.ar,this.aFODl2),$=k+b,V=$/this.gw1.blr,N=$/this.gw2.blr,v=this.gw1.lua-V,G=this.gw2.lua-N;this.laStartRl1=this.gw1.involuteL.lFromU(v),this.laStartRl2=this.gw2.involuteL.lFromU(G),this.msg+=`Line of Action Effective length: right: ${L(f)} left: ${L($)} mm
18
+ `,this.msg+=`Line of Action Effective rotation angle: right-1: ${L(ut(g))} right-2: ${L(ut(S))} left-1: ${L(ut(V))} left-2: ${L(ut(N))} degree
19
+ `,this.msg+=`Line of Action Effective height: right-1: ${L(this.gw1.ar-this.laStartRr1)} right-2: ${L(this.gw2.ar-this.laStartRr2)} left-1: ${L(this.gw1.ar-this.laStartRl1)} left-2: ${L(this.gw2.ar-this.laStartRl2)} mm
20
+ `,this.lasr1=2*Math.PI/this.gw1.TN*this.gw1.brr,this.lasr2=2*Math.PI/this.gw2.TN*this.gw2.brr,this.msg+=`Line of Action right: step length: 1: ${L(this.lasr1)} 2: ${L(this.lasr2)} mm
21
+ `,this.msg+=`Line of Action right: nb of contact point: 1: ${L(f/this.lasr1)} 2: ${L(f/this.lasr2)}
22
+ `,this.lasl1=2*Math.PI/this.gw1.TN*this.gw1.blr,this.lasl2=2*Math.PI/this.gw2.TN*this.gw2.blr,this.msg+=`Line of Action left: step length: 1: ${L(this.lasl1)} 2: ${L(this.lasl2)} mm
23
+ `,this.msg+=`Line of Action left: nb of contact point: 1: ${L($/this.lasl1)} 2: ${L($/this.lasl2)}
24
+ `}calcContactPoint1(){for(this.gw1.checkInitStep(5,"ActionLine.calcContactPoint1"),this.firstToothUr1=bt(this.apr-(this.initAngle1-this.angleCenterCenter)+this.gw1.rwp);j(this.firstToothUr1-this.gw1.as)>=0;)this.firstToothUr1=j(this.firstToothUr1-this.gw1.as);for(this.firstToothUl1=bt(this.apl+(this.initAngle1-this.angleCenterCenter)+this.gw1.as*this.gw1.adt-this.gw1.lwp);j(this.firstToothUl1-this.gw1.as)>=0;)this.firstToothUl1=j(this.firstToothUl1-this.gw1.as);this.ftdr1=this.gw1.brr*this.firstToothUr1,this.ftdl1=this.gw1.blr*this.firstToothUl1}prepare(){this.check1(),this.check2(),this.calcActionLine(),this.calcContactPoint1()}oneContactSpeed(s,t,o,e,n,i,r,l,a,h){const u=Math.floor(t/(2*o)),f=(e+u*o)/n,g=s?1:-1,[S,_,P,A]=i.laptc(r,g*l,f,.4);this.msg+=`speed ${a}: vx ${L(P)} vy: ${L(A)} m/s
25
+ `;const D=z(S,_),H=r+g*l,k=J(S,_,h),R=D.translatePolar(H,-A);k.addSegStrokeA(R.cx,R.cy);const E=R.translatePolar(H-g*Math.PI/2,P);return k.addSegStrokeA(E.cx,E.cy),k.closeSegStroke(),k}getContactSpeed(){const s=this.oneContactSpeed(!0,this.lBDr,this.lasr1,this.ftdr1,this.gw1.brr,this.gw1.involuteR,this.angleCenterCenter,this.apr,"R1","Black"),t=this.oneContactSpeed(!1,this.lBDl,this.lasl1,this.ftdl1,this.gw1.blr,this.gw1.involuteL,this.angleCenterCenter,this.apl,"L1","Black"),o=[];return o.push(s),o.push(t),o}getContours(){const s=[];s.push(x(this.gw1.cx,this.gw1.cy,this.laStartRr1,"SkyBlue")),s.push(x(this.gw1.cx,this.gw1.cy,this.laStartRl1,"SlateBlue")),s.push(x(this.gw2.cx,this.gw2.cy,this.laStartRr2,"SkyBlue")),s.push(x(this.gw2.cx,this.gw2.cy,this.laStartRl2,"SlateBlue"));const t=z(this.gw1.cx,this.gw1.cy),o=z(this.gw2.cx,this.gw2.cy),e=t.translatePolar(this.angleCenterCenter+this.apr,this.gw1.brr),n=o.translatePolar(this.angleCenterCenter+Math.PI+this.apr,this.gw2.brr),i=J(e.cx,e.cy,"YellowGreen");i.addSegStrokeA(n.cx,n.cy),i.closeSegStroke(),s.push(i);const r=t.translatePolar(this.angleCenterCenter-this.aFODr1,this.gw1.ar),l=o.translatePolar(this.angleCenterCenter+Math.PI-this.aFODr2,this.gw2.ar),a=J(r.cx,r.cy,"Yellow");a.addSegStrokeA(l.cx,l.cy),a.closeSegStroke(),s.push(a);const h=t.translatePolar(this.angleCenterCenter-this.apl,this.gw1.blr),d=o.translatePolar(this.angleCenterCenter+Math.PI-this.apl,this.gw2.blr),u=J(h.cx,h.cy,"YellowGreen");u.addSegStrokeA(d.cx,d.cy),u.closeSegStroke(),s.push(u);const f=t.translatePolar(this.angleCenterCenter+this.aFODl1,this.gw1.ar),g=o.translatePolar(this.angleCenterCenter+Math.PI+this.aFODl2,this.gw2.ar),S=J(f.cx,f.cy,"Yellow");return S.addSegStrokeA(g.cx,g.cy),S.closeSegStroke(),s.push(S),s.push(...this.getContactSpeed()),s}getContactPoint(){const s=[],t=z(this.gw1.cx,this.gw1.cy),o=t.translatePolar(this.angleCenterCenter+this.apr,this.gw1.brr),e=t.translatePolar(this.angleCenterCenter-this.apl,this.gw1.blr);s.push(z(o.cx,o.cy,Ot.eBigSquare)),s.push(z(e.cx,e.cy,Ot.eBigSquare));const n=this.angleCenterCenter+this.apr-Math.PI/2,i=this.angleCenterCenter-this.apl+Math.PI/2,r=o.translatePolar(n,this.ftdr1),l=e.translatePolar(i,this.ftdl1);s.push(z(r.cx,r.cy,Ot.eBigSquare)),s.push(z(l.cx,l.cy,Ot.eBigSquare));let a=this.ftdr1;for(;a+this.lasr1<this.lBDr;){a+=this.lasr1;const d=o.translatePolar(n,a);s.push(z(d.cx,d.cy,Ot.eBigSquare))}let h=this.ftdl1;for(;h+this.lasl1<this.lBDl;){h+=this.lasl1;const d=e.translatePolar(i,h);s.push(z(d.cx,d.cy,Ot.eBigSquare))}return s}getMsg(){return this.msg}getInitAngle2(){let s=this.lBDr-this.ftdr1;for(;j(s-this.lasr2)>=0;)s=j(s-this.lasr2);let t=this.lBDl-this.ftdl1;for(;j(t-this.lasl2)>=0;)t=j(t-this.lasl2);const o=s/this.gw2.brr,e=t/this.gw2.blr,n=this.angleCenterCenter+Math.PI+this.apr-o+this.gw2.rwp,r=this.angleCenterCenter+Math.PI-this.apl+e+this.gw2.lwp-this.gw2.as*this.gw2.adt;let l=2*Math.PI+bt(r);for(;j(l-this.gw2.as-n)>=0;)l=j(l-this.gw2.as);const a=l-n,h=a*this.gw2.brr/this.gw1.brr,d=a*this.gw2.brr,u=a*this.gw2.blr;this.msg+=`slack angle: 1: ${L(ut(h))} 2: ${L(ut(a))} degree
26
+ `,this.msg+=`slack on action line: right-2: ${L(d)} left-2: ${L(u)} mm
27
+ `;let f=0;if(this.rightLeftCenter2===0)f=n;else if(this.rightLeftCenter2===1)f=r;else if(this.rightLeftCenter2===2)f=n+a/2;else throw`err221: initAngle2 rightLeftCenter2 ${this.rightLeftCenter2} has an unkown value`;return gt(f)}};function Lo(s,t,o,e,n,i){return new _o(s,t,o,e,n,i)}function Po(s,t,o,e,n,i,r,l,a){let h=x(s,t,o);if(e>0){if(n>2*o)throw`err383: axisTorque ribWidth ${L(n)} larger than 2x axisRadius ${L(o)}`;const d=Math.asin(n/(2*o)),u=2*Math.PI/e;if(u-2.5*d<0)throw`err384: axisTorque ribWidth ${L(n)} or ribNb ${e} are too large`;if(r>n/2)throw`err385: axisTorque ribRound1 ${L(r)} too large compare to ribWidth ${L(n)}`;if(r+l>i)throw`err386: axisTorque ribRound12 ${L(r)} ${L(l)} too large compare to ribHeight ${L(n)}`;const f=u-2*d>Math.PI,g=z(s,t),_=g.translatePolar(a,o+i).translatePolar(a+Math.PI/2,n/2);h=J(_.cx,_.cy);for(let P=0;P<e;P++){const A=a+P*u,D=A+u,H=g.translatePolar(A+d,o),k=g.translatePolar(D-d,o),E=g.translatePolar(A,o+i).translatePolar(A+Math.PI/2,n/2),b=g.translatePolar(D,o+i).translatePolar(D-Math.PI/2,n/2);h.addSegStrokeA(E.cx,E.cy).addCornerRounded(r),h.addSegStrokeA(H.cx,H.cy).addCornerRounded(l),h.addPointA(k.cx,k.cy).addSegArc(o,f,!0).addCornerRounded(l),h.addSegStrokeA(b.cx,b.cy).addCornerRounded(r)}h.closeSegStroke()}return h}function Ho(s,t,o,e,n,i,r,l){const a=2*Math.PI/n,h=Math.asin(i/(2*e)),d=Math.asin(i/(2*o));if(i>2*e)throw`err905: hollowStraight spokeWidth ${L(i)} too large for hollowInt ${L(e)}`;if(o-e<2.1*r)throw`err906: hollowStraight hollowExt ${L(o)}, hollowInt ${L(e)} and spokeRound ${L(r)} do not fit`;if(a-2*d<2.5*Math.asin(r/o))throw`err907: hollowStraight spokeNb ${n}, spokeWidth ${L(i)} or spokeRound ${L(r)} are too large`;const u=i/(2*Math.sin(a/2)),f=a-2*h<2.1*Math.asin(r/e),g=a-2*d>Math.PI,S=z(s,t),_=[];for(let P=0;P<n;P++){const A=l+P*a,D=A+a,H=A+a/2,k=S.translatePolar(A+d,o),R=S.translatePolar(D-d,o),E=S.translatePolar(D-h,e),p=S.translatePolar(A+h,e),b=S.translatePolar(H,u),$=J(k.cx,k.cy);$.addCornerRounded(r),$.addPointA(R.cx,R.cy).addSegArc(o,g,!0).addCornerRounded(r),f?$.addSegStrokeA(b.cx,b.cy).addCornerRounded(r):($.addSegStrokeA(E.cx,E.cy).addCornerRounded(r),$.addPointA(p.cx,p.cy).addSegArc(e,g,!1).addCornerRounded(r)),$.closeSegStroke(),_.push($)}return _}function Ge(s,t,o,e,n,i,r,l,a,h){const d=h?1:-1,u=s/2,f=u+t,g=f+o,S=J(0,-g);return S.addSegStrokeA(d*e,-g).addCornerRounded(r).addSegStrokeA(d*e,-f).addCornerRounded(l).addSegStrokeA(d*n,-f).addSegStrokeA(d*i,-u).addCornerRounded(a).addSegStrokeA(d*i,u).addCornerRounded(a).addSegStrokeA(d*n,f).addSegStrokeA(d*e,f).addCornerRounded(l).addSegStrokeA(d*e,g).addCornerRounded(r).addSegStrokeA(0,g).closeSegStroke(),S}var Ke={partName:"gear_wheel",params:[c("module","mm",10,.1,100,.1),c("N1","scalar",23,3,1e3,1),c("N2","scalar",19,3,1e3,1),c("angleCenterCenter","degree",0,-180,180,1),c("addInterAxis","mm",0,0,100,.05),c("c1x","mm",0,-200,200,1),c("c1y","mm",0,-200,200,1),U("Tooth addendum dedendum"),c("ah1","scalar",1,.1,2,.05),c("dh1","scalar",1,.1,2,.05),c("bh1","scalar",.25,.1,2,.05),c("bRound1","mm",2,0,50,.1),c("ah2","scalar",1,.1,2,.05),c("dh2","scalar",1,.1,2,.05),c("bh2","scalar",.25,.1,2,.05),c("bRound2","mm",2,0,50,.1),c("at1","%",50,10,90,.5),c("at2","%",50,10,90,.5),U("Tooth involute of circle"),Nt("involSym",!0),Tt("involROpt",["Optimum","Base-1","Base-2","PressureAngle","FreeBase-12"]),Tt("involLOpt",["Optimum","Base-1","Base-2","PressureAngle","FreeBase-12"]),c("brr1","mm",102.9,10,2e3,.05),c("blr1","mm",102.9,10,2e3,.05),c("brr2","mm",85,10,2e3,.05),c("blr2","mm",85,10,2e3,.05),c("rightPressureAngle","degree",26,1,45,.5),c("leftPressureAngle","degree",26,1,45,.5),c("involArcPairs1","scalar",2,1,40,1),c("involArcPairs2","scalar",2,1,40,1),c("skinThickness1","mm",0,-3,3,.01),c("skinThickness2","mm",0,-3,3,.01),c("initAngle1","degree",0,-180,180,1),Tt("gw2Position",["right","left","center"]),U("Inner"),Nt("centralAxis",!0),c("axisRadius","mm",10,.1,200,.1),c("ribNb","scalar",5,0,32,1),c("ribWidth","mm",8,1,100,.1),c("ribHeight","mm",8,1,100,.1),c("ribRound1","mm",2,0,20,.1),c("ribRound2","mm",2,0,20,.1),Nt("hollow",!0),c("materialHeightExt","mm",20,1,200,.5),c("materialHeightInt","mm",15,1,200,.5),c("spokeNb","scalar",5,1,18,1),c("spokeWidth","mm",15,1,200,.1),c("spokeRound","mm",10,0,20,.1),U("Axis"),Nt("wheelAxis",!0),c("wheelHeight","mm",40,.1,400,.1),c("wheelMidExtra","mm",6,0,10,.1),c("wheelAxisLength","mm",40,0,400,.1),c("wheelAxisRadius","mm",20,0,200,.1),c("wheelMidRadius","mm",60,0,200,.1),c("wheelRadiusExtra","mm",1,0,20,.1),c("wheelAxisExtRound","mm",4,0,20,.1),c("wheelAxisIntRound","mm",0,0,20,.1),c("wheelExtraRound","mm",4,0,20,.1)],paramSvg:{module:"gearwheel_params_main.svg",N1:"gearwheel_params_main.svg",N2:"gearwheel_params_main.svg",angleCenterCenter:"gearwheel_params_interaxis.svg",addInterAxis:"gearwheel_params_interaxis.svg",c1x:"gearwheel_params_main.svg",c1y:"gearwheel_params_main.svg",ah1:"gearwheel_params_teeth_height.svg",dh1:"gearwheel_params_teeth_height.svg",bh1:"gearwheel_params_teeth_height.svg",bRound1:"gearwheel_params_teeth_height.svg",ah2:"gearwheel_params_teeth_height.svg",dh2:"gearwheel_params_teeth_height.svg",bh2:"gearwheel_params_teeth_height.svg",bRound2:"gearwheel_params_teeth_height.svg",at1:"gearwheel_params_addendum_portion.svg",at2:"gearwheel_params_addendum_portion.svg",involSym:"gearwheel_params_involSym.svg",involROpt:"gearwheel_params_main.svg",involLOpt:"gearwheel_params_main.svg",brr1:"gearwheel_params_baseCircles.svg",brr2:"gearwheel_params_baseCircles.svg",blr1:"gearwheel_params_baseCircles.svg",blr2:"gearwheel_params_baseCircles.svg",rightPressureAngle:"gearwheel_params_baseCircles.svg",leftPressureAngle:"gearwheel_params_baseCircles.svg",involArcPairs1:"gearwheel_params_skin.svg",skinThickness1:"gearwheel_params_skin.svg",involArcPairs2:"gearwheel_params_skin.svg",skinThickness2:"gearwheel_params_skin.svg",initAngle1:"gearwheel_params_initAngle.svg",gw2Position:"gearwheel_params_initAngle.svg",centralAxis:"gearwheel_params_hollow_axis.svg",axisRadius:"gearwheel_params_hollow_axis.svg",ribNb:"gearwheel_params_hollow_axis.svg",ribWidth:"gearwheel_params_hollow_axis.svg",ribHeight:"gearwheel_params_hollow_axis.svg",ribRound1:"gearwheel_params_hollow_axis.svg",ribRound2:"gearwheel_params_hollow_axis.svg",hollow:"gearwheel_params_hollow_axis.svg",materialHeightExt:"gearwheel_params_hollow_axis.svg",materialHeightInt:"gearwheel_params_hollow_axis.svg",spokeNb:"gearwheel_params_hollow_axis.svg",spokeWidth:"gearwheel_params_hollow_axis.svg",spokeRound:"gearwheel_params_hollow_axis.svg",wheelAxis:"gearwheel_params_side.svg",wheelHeight:"gearwheel_params_side.svg",wheelMidExtra:"gearwheel_params_side.svg",wheelAxisLength:"gearwheel_params_side.svg",wheelAxisRadius:"gearwheel_params_side.svg",wheelMidRadius:"gearwheel_params_side.svg",wheelRadiusExtra:"gearwheel_params_side.svg",wheelAxisExtRound:"gearwheel_params_side.svg",wheelAxisIntRound:"gearwheel_params_side.svg",wheelExtraRound:"gearwheel_params_side.svg"},sim:{tMax:100,tStep:.5,tUpdate:500}};function wo(s,t,o=""){const e=_t(Ke.partName+o),n=I(),i=I();e.logstr+=`${e.partName} simTime: ${s}
28
+ `;try{const r=[],l=ze(),a=ze();l.set1ModuleToothNumber(t.module,t.N1),a.set1ModuleToothNumber(t.module,t.N2),l.set2CenterPosition(t.c1x,t.c1y);const h=Et(t.angleCenterCenter),[d,u,f]=fo(l,a,h,t.addInterAxis);a.set2CenterPosition(d,u),l.set3CircleRadius(t.ah1,t.dh1,t.bh1,t.bRound1),a.set3CircleRadius(t.ah2,t.dh2,t.bh2,t.bRound2);const[g,S,_,P]=So(l,a,t.brr1,t.blr1,t.brr2,t.blr2,t.rightPressureAngle,t.leftPressureAngle,t.involSym,t.involROpt,t.involLOpt);e.logstr+=`base-circles: brr1: ${g.toFixed(2)} blr1: ${S.toFixed(2)} brr2: ${_.toFixed(2)} blr2: ${P.toFixed(2)}
29
+ `,l.set4BaseCircles(g,S),a.set4BaseCircles(_,P),l.set5AddendumThickness(t.at1),a.set5AddendumThickness(t.at2);const A=Et(t.initAngle1)+s*3*l.as/100;l.set6Angles(A,h);const D=Lo(l,a,A,h,f,t.gw2Position);D.prepare();for(const $ of D.getContours())n.addDynamics($);n.addPoints(D.getContactPoint()),a.set6Angles(D.getInitAngle2(),h+Math.PI),e.logstr+=D.getMsg(),l.set7InvoluteDetails(t.involArcPairs1,t.skinThickness1),a.set7InvoluteDetails(t.involArcPairs2,t.skinThickness2);for(const $ of l.getRefCircles())n.addDynamics($);for(const $ of a.getRefCircles())n.addDynamics($);n.addDynamics(l.getToothRef()),n.addDynamics(a.getToothRef());const H=l.getProfile();if(e.logstr+=l.getMsg(),e.logstr+=H.check(),r.push(H),t.centralAxis===1){const $=Po(l.cx,l.cy,t.axisRadius,t.ribNb,t.ribWidth,t.ribHeight,t.ribRound1,t.ribRound2,A);e.logstr+=$.check(),r.push($)}if(t.hollow===1){const $=l.br,V=t.axisRadius+t.ribHeight,N=$-t.materialHeightExt,v=V+t.materialHeightInt;if(v>N)throw`err902: hollowMaterialInt ${L(v)} bigger than hollowMaterialExt ${L(N)}`;const G=Ho(l.cx,l.cy,N,v,t.spokeNb,t.spokeWidth,t.spokeRound,A);for(const Y of G)e.logstr+=Y.check(),r.push(Y)}n.addMainOI(r);const k=a.getProfile();e.logstr+=k.check(),n.addSecond(k);const R=[],E=l.ar+t.wheelRadiusExtra;if(t.wheelAxis===1){const $=Ge(t.wheelHeight,t.wheelMidExtra,t.wheelAxisLength,t.wheelAxisRadius,t.wheelMidRadius,E,t.wheelAxisExtRound,t.wheelAxisIntRound,t.wheelExtraRound,!0),V=Ge(t.wheelHeight,t.wheelMidExtra,t.wheelAxisLength,t.wheelAxisRadius,t.wheelMidRadius,E,t.wheelAxisExtRound,t.wheelAxisIntRound,t.wheelExtraRound,!1);R.push($),i.addSecond(V)}else{const $=J(0,-t.wheelHeight/2).addSegStrokeR(0,t.wheelHeight).addSegStrokeR(E,0).addSegStrokeR(0,-t.wheelHeight).closeSegStroke(),V=J(0,-t.wheelHeight/2).addSegStrokeR(0,t.wheelHeight).addSegStrokeR(-E,0).addSegStrokeR(0,-t.wheelHeight).closeSegStroke();R.push($),i.addSecond(V)}i.addMainOI(R),e.fig={teethProfile:n,axisProfile:i};const p=e.partName,b=t.wheelHeight/2+t.wheelMidExtra+t.wheelAxisLength+10;e.vol={extrudes:[{outName:`subpax_${p}_teethProfile`,face:`${p}_teethProfile`,extrudeMethod:q.eLinearOrtho,length:2*b,rotate:[0,0,0],translate:[0,0,-b]},{outName:`subpax_${p}_axisProfile`,face:`${p}_axisProfile`,extrudeMethod:q.eRotate,rotate:[0,0,0],translate:[0,0,0]}],volumes:[{outName:`pax_${p}`,boolMethod:lt.eIntersection,inList:[`subpax_${p}_teethProfile`,`subpax_${p}_axisProfile`]}]},e.logstr+=`gear_wheel drawn successfully!
30
+ `,e.calcErr=!1}catch(r){e.logstr+=r,console.log(r)}return e}var xo={pTitle:"Gearwheel",pDescription:"Gear-system with two wheels",pDef:Ke,pGeom:wo},Qe={partName:"gear_bar",params:[c("H1","mm",40,1,4e3,1),c("H2","mm",50,1,4e3,1),c("radius","mm",10,1,4e3,1),U("corners"),c("Rc","mm",10,0,400,1)],paramSvg:{H1:"voila_face.svg",H2:"voila_face.svg",radius:"voila_face.svg",Rc:"voila_face.svg"},sim:{tMax:180,tStep:.5,tUpdate:500}};function po(s,t,o=""){const e=_t(Qe.partName+o),n=I();e.logstr+=`${e.partName} simTime: ${s}
31
+ `;try{const i=[],r=J(-t.H1/2,-t.H2/2).addCornerRounded(t.Rc).addSegStrokeA(t.H1/2,-t.H2/2).addSegStrokeA(t.H1/2,t.H2/2).addCornerRounded(t.Rc).addSegStrokeA(-t.H1/2,t.H2/2).closeSegStroke();i.push(r),i.push(x(0,0,t.radius)),n.addMainOI(i),e.fig={faceVoila:n};const l=e.partName;e.vol={extrudes:[{outName:`subpax_${l}_top`,face:`${l}_faceVoila`,extrudeMethod:q.eLinearOrtho,length:10,rotate:[0,0,0],translate:[0,0,0]}],volumes:[{outName:`pax_${l}`,boolMethod:lt.eIdentity,inList:[`subpax_${l}_top`]}]},e.sub={},e.logstr+=`gear_bar drawn successfully!
32
+ `,e.calcErr=!1}catch(i){e.logstr+=i,console.log(i)}return e}var $o={pTitle:"Gearbar",pDescription:"Gear-system with a bar and a wheel",pDef:Qe,pGeom:po},je={partName:"gear_ring",params:[c("H1","mm",40,1,4e3,1),c("H2","mm",50,1,4e3,1),c("radius","mm",10,1,4e3,1),U("corners"),c("Rc","mm",10,0,400,1)],paramSvg:{H1:"voila_face.svg",H2:"voila_face.svg",radius:"voila_face.svg",Rc:"voila_face.svg"},sim:{tMax:180,tStep:.5,tUpdate:500}};function Do(s,t,o=""){const e=_t(je.partName+o),n=I();e.logstr+=`${e.partName} simTime: ${s}
33
+ `;try{const i=[],r=J(-t.H1/2,-t.H2/2).addCornerRounded(t.Rc).addSegStrokeA(t.H1/2,-t.H2/2).addSegStrokeA(t.H1/2,t.H2/2).addCornerRounded(t.Rc).addSegStrokeA(-t.H1/2,t.H2/2).closeSegStroke();i.push(r),i.push(x(0,0,t.radius)),n.addMainOI(i),e.fig={faceVoila:n};const l=e.partName;e.vol={extrudes:[{outName:`subpax_${l}_top`,face:`${l}_faceVoila`,extrudeMethod:q.eLinearOrtho,length:10,rotate:[0,0,0],translate:[0,0,0]}],volumes:[{outName:`pax_${l}`,boolMethod:lt.eIdentity,inList:[`subpax_${l}_top`]}]},e.sub={},e.logstr+=`gear_ring drawn successfully!
34
+ `,e.calcErr=!1}catch(i){e.logstr+=i,console.log(i)}return e}var vo={pTitle:"Gearring",pDescription:"Gear-system with a ring and a wheel",pDef:je,pGeom:Do},ts={partName:"gear_epicycloid",params:[c("H1","mm",40,1,4e3,1),c("H2","mm",50,1,4e3,1),c("radius","mm",10,1,4e3,1),U("corners"),c("Rc","mm",10,0,400,1)],paramSvg:{H1:"voila_face.svg",H2:"voila_face.svg",radius:"voila_face.svg",Rc:"voila_face.svg"},sim:{tMax:180,tStep:.5,tUpdate:500}};function Mo(s,t,o=""){const e=_t(ts.partName+o),n=I();e.logstr+=`${e.partName} simTime: ${s}
35
+ `;try{const i=[],r=J(-t.H1/2,-t.H2/2).addCornerRounded(t.Rc).addSegStrokeA(t.H1/2,-t.H2/2).addSegStrokeA(t.H1/2,t.H2/2).addCornerRounded(t.Rc).addSegStrokeA(-t.H1/2,t.H2/2).closeSegStroke();i.push(r),i.push(x(0,0,t.radius)),n.addMainOI(i),e.fig={faceVoila:n};const l=e.partName;e.vol={extrudes:[{outName:`subpax_${l}_top`,face:`${l}_faceVoila`,extrudeMethod:q.eLinearOrtho,length:10,rotate:[0,0,0],translate:[0,0,0]}],volumes:[{outName:`pax_${l}`,boolMethod:lt.eIdentity,inList:[`subpax_${l}_top`]}]},e.sub={},e.logstr+=`gear_epicycloid drawn successfully!
36
+ `,e.calcErr=!1}catch(i){e.logstr+=i,console.log(i)}return e}var bo={pTitle:"Gear-epicycloid",pDescription:"The epicycloid gear system",pDef:ts,pGeom:Mo};function ko(s){let t="";const o=s.PHD1/2,e=s.PHD5/2,n=2*Math.asin(s.PHR4/o),i=2*Math.asin(s.PHL2/(2*e)),r=2*Math.PI/s.PHN1-i,l=s.PHL2/2,a=Math.sqrt(e**2-l**2)-o,h=Math.sqrt(l**2+a**2),d=Math.acos(a/h),u=Math.acos(s.PHR4/h),f=Math.PI-d-u;if(e<o+s.PHR4)throw`err211: PHD5 ${s.PHD5} too small compare to PHD1 ${s.PHD1} or PHR4 ${s.PHR4}`;if(r<i)throw`err212: PHL2 ${s.PHL2} too large compare to PHN1 ${s.PHN1}`;if(s.PHD3>2*s.PHR4)throw`err213: PHD3 ${s.PHD3} too large compare to PHR4 ${s.PHR4}`;f>Math.PI/2-n&&(t+=`warn345: PHL2 is quiet small ${L(s.PHL2)} mm
37
+ `),t+=`petal angle: ${L(ut(i))} degree
38
+ `,t+=`hollow angle: ${L(ut(r))} degree
39
+ `;const g=z(0,0),_=z(e,0).rotate(g,-i/2),P=z(o,0),A=z(o-s.PHR4,0),D=A.rotate(P,f),H=A.rotate(P,-f),k=J(_.cx,_.cy).addCornerRounded(s.PHR6).addSegStrokeA(D.cx,D.cy).addPointA(o-s.PHR4,0).addPointA(H.cx,H.cy).addSegArc2().addSegStrokeAP(i/2,e).addCornerRounded(s.PHR6).addPointAP(i/2+r/2,e).addPointAP(i/2+r,e).addSegArc2(),R=J(_.cx,_.cy),E=[...Array(s.PHN1).keys()].map(p=>p*(i+r));for(const p of E)R.addPartial(k.rotate(0,0,p));return[t,R,E]}function es(s){const t="",o=s.D1/2,e=s.D2/2,n=s.D4/2,i=2*Math.PI/s.N1,r=s.L1/2,l=Math.sqrt(e**2-r**2),a=Math.asin(r/e),h=o-l,d=Math.atan2(r,h),u=Math.sqrt(r**2+h**2),f=Math.acos(n/u),g=d+f,S=(i-2*a)/2;if(S<0)throw`err464: N1 ${s.N1} is too large compare to D2 ${s.D2}, L1 ${s.L1}`;if(o<e)throw`err465: D2 ${s.D2} is too large compare to D1 ${s.D1}`;const _=J(l,-r),P=z(0,0),A=z(e,0),D=z(o,0),k=z(o-n,0).rotate(D,g),R=A.rotate(P,a+S),E=A.rotate(P,i-a),p=J(l,-r).addCornerRounded(s.R5).addSegStrokeA(k.cx,k.cy).addPointA(o+n,0).addPointA(k.cx,-k.cy).addSegArc2().addSegStrokeA(l,r).addCornerRounded(s.R5).addPointA(R.cx,R.cy).addPointA(E.cx,E.cy).addSegArc2();for(let b=0;b<s.N1;b++)_.addPartial(p.rotate(0,0,b*i));return[t,_,i]}function ce(s,t){let o="";const e=s.SD2/2,n=e+s.SE1,i=2*n;let r=!1,l=-e,a=-n;if(t&&(r=!0,l=n,a=e),s.SL2<n)throw`err421: SL2 ${s.SL2} is too small compare to SD2 ${s.SD2} and SE1 ${s.SE1}`;o+=`info309: spring height: ${L(s.SL1+i)} length: ${L(s.SN1*2*(s.SD2+s.SE1))}
40
+ `;const h=J(0,0);for(let d=0;d<s.SN1;d++)h.addSegStrokeR(0,-s.SL1).addPointR(2*l,0).addSegArc(Math.abs(l),!1,r),d<s.SN1-1?h.addSegStrokeR(0,s.SL1).addPointR(2*a,0).addSegArc(Math.abs(a),!1,!r):s.Send===1?h.addSegStrokeR(0,s.SL2):h.addSegStrokeR(0,s.SL2-n).addPointR(2*a,0).addSegArc(Math.abs(a),!1,!r);s.Send===1?h.addSegStrokeR(-s.SE1,0):h.addSegStrokeR(s.SE1,0);for(let d=0;d<s.SN1;d++)d>0?h.addPointR(-2*l,0).addSegArc(Math.abs(l),!1,r).addSegStrokeR(0,-s.SL1):s.Send===1?h.addSegStrokeR(0,-s.SL2):h.addPointR(-2*l,0).addSegArc(Math.abs(l),!1,r).addSegStrokeR(0,-s.SL2+n),h.addPointR(-2*a,0).addSegArc(Math.abs(a),!1,!r).addSegStrokeR(0,s.SL1);return[o,h]}function Ao(s){let t="";const o=s.D6/2,e=2*Math.PI/s.N2,n=s.E2/2,i=2*Math.asin(n/o),r=(e-i)/2,a=(s.N2<3?0:Math.PI/s.N2)+Et(s.SA1),h=Math.PI/2-a,d=-Math.PI/2+a,u=s.SD1/2;if(r<0)throw`err564: N2 ${s.N2} is too large compare to D6 ${s.D6}, E2 ${s.E2}`;if(s.orientation===2&&s.N2%2===1)throw`err565: N2 ${s.N2} is odd and orientation is alt`;const[f,g]=ce(s,!1),[,S]=ce(s,!0);t+=f;const _=z(0,-o),P=z(0,0),A=_.rotate(P,i),D=_.translate(0,s.L2),H=D.translate(-u,0),k=H.translate(0,u),R=H.translate(0,u+s.SE1),E=R.rotate(H,h),p=D.translate(0,u+s.SE1).translate(s.SE1,0),b=_.rotate(P,-i),$=D.translate(u,0),V=$.translate(0,u),N=V.rotate($,d),v=$.translate(0,u+s.SE1),G=D.translate(0,u+s.SE1).translate(-s.SE1,0),Y=J(A.cx,A.cy).addSegStrokeA(p.cx,p.cy).addSegStrokeA(R.cx,R.cy),B=J(R.cx,R.cy).addPointA(E.cx,E.cy).addSegArc(u+s.SE1,!1,!0);B.addPartial(g.rotate(0,0,-a).translate(E.cx,E.cy)),B.addPointA(k.cx,k.cy).addPointA(D.cx,D.cy).addSegArc2().addSegStrokeA(_.cx,_.cy),Y.addPartial(B);const O=J(_.cx,_.cy).addSegStrokeA(D.cx,D.cy).addPointA(V.cx,V.cy).addPointA(N.cx,N.cy).addSegArc2();O.addPartial(S.rotate(0,0,a).translate(N.cx,N.cy)),O.addPointA(v.cx,v.cy).addSegArc(u+s.SE1,!1,!0);const F=J(v.cx,v.cy).addSegStrokeA(G.cx,G.cy).addSegStrokeA(b.cx,b.cy),W=J(_.cx,_.cy).addPartial(O).addPartial(F),T=J(o,0);if(s.orientation===2)for(let tt=0;tt<s.N2/2;tt++){T.addPointAP(-2*tt*e-2*r,o).addPointAP(-2*tt*e-4*r,o).addSegArc2(),T.addCornerRounded(s.R7);const rt=Math.PI/2-(2*tt+2)*e,C=rt+2*i;T.addPartial(O.rotate(0,0,C));const ot=B.rotate(0,0,rt),M=ot.getFirstPoint();T.addCornerRounded(s.R7),T.addSegStrokeA(M.cx,M.cy),T.addCornerRounded(s.R7),T.addPartial(ot),T.addCornerRounded(s.R7)}else for(let tt=0;tt<s.N2;tt++)T.addPointAP(-tt*e-r,o).addPointAP(-tt*e-2*r,o).addSegArc2().addCornerRounded(s.R7),s.orientation===0?T.addPartial(W.rotate(0,0,Math.PI/2-(tt+1)*e+i)):s.orientation===1&&T.addPartial(Y.rotate(0,0,Math.PI/2-(tt+1)*e)),T.addCornerRounded(s.R7);return[t,T]}var ss={partName:"vaxis_holder",params:[c("PHD1","mm",700,1,2e3,1),c("PHD2","mm",900,1,4e3,1),c("PHD5","mm",800,1,4e3,1),c("PHN1","holes",6,1,24,1),U("screw holes"),c("PHD3","mm",40,1,100,1),c("PHR4","mm",40,1,100,1),c("PHL2","mm",120,1,400,1),c("PHR6","mm",20,0,400,1),U("section"),c("PHE1","mm",10,1,80,1),c("PHH1","mm",50,1,200,1),c("PHA","degree",5,-45,45,.1),c("PHL1","mm",300,1,500,1),c("PHE2","mm",10,1,80,1),c("PHE3","mm",10,1,80,1),U("for reuse"),Nt("withOuterCone",!0)],paramSvg:{PHD1:"vaxis_holder_top.svg",PHD2:"vaxis_holder_top.svg",PHD5:"vaxis_holder_top.svg",PHD3:"vaxis_holder_top.svg",PHR4:"vaxis_holder_top.svg",PHN1:"vaxis_holder_top.svg",PHL2:"vaxis_holder_top.svg",PHR6:"vaxis_holder_top.svg",PHE1:"vaxis_holder_section.svg",PHH1:"vaxis_holder_section.svg",PHA:"vaxis_holder_section.svg",PHL1:"vaxis_holder_section.svg",PHE2:"vaxis_holder_section.svg",PHE3:"vaxis_holder_top.svg",withOuterCone:"vaxis_holder_section.svg"},sim:{tMax:180,tStep:.5,tUpdate:500}};function yo(s,t,o=""){const e=_t(ss.partName+o),n=I(),i=I(),r=I(),l=I(),a=I();e.logstr+=`${e.partName} simTime: ${s}
41
+ `;try{const h=Et(t.PHA),d=t.PHD1/2,u=t.PHD2/2,f=t.PHD3/2,g=t.PHD5/2,S=u+t.PHL1/2*Math.sin(h),_=u-t.PHL1/2*Math.sin(h),P=t.PHL1*Math.cos(h),A=u-t.PHE2/Math.cos(h)+t.PHE1/2*Math.tan(h),D=u-t.PHE2/Math.cos(h)-t.PHE1/2*Math.tan(h),H=Math.min(A,D),k=(t.PHL1-t.PHE1/Math.cos(h))/2,R=u-t.PHE2/Math.cos(h);if(H<g)throw`err210: PHD5 ${t.PHD5} too large compare to PHE2 ${t.PHE2} or PHA ${t.PHA}`;e.logstr+=`vaxis_holder's height: ${L(P)} mm
42
+ `,e.logstr+=`vaxis_holder outerD1: ${L(2*S)} mm
43
+ `,e.logstr+=`vaxis_holder outerD2: ${L(2*_)} mm
44
+ `,e.logstr+=`vaxis_holder innerD: ${L(t.PHD1-2*t.PHR4)} mm
45
+ `,e.logstr+=`vaxis_holder D2-next: ${L(2*R)} mm
46
+ `;const E=function(C){const ot=g+(A-g)/2;return J(C*ot,-t.PHE1/2).addSegStrokeR(C*(A-ot),0).addSegStrokeRP(-Math.PI/2+C*h,k).addSegStrokeRP(-Math.PI/2+C*(Math.PI/2+h),t.PHE2).addSegStrokeRP(Math.PI/2+C*h,t.PHL1).addSegStrokeRP(Math.PI/2+C*(Math.PI/2+h),t.PHE2).addSegStrokeRP(-Math.PI/2+C*h,k).addSegStrokeA(C*ot,t.PHE1/2).closeSegStroke()},p=function(C){return J(C*H,-t.PHE1/2).addSegStrokeA(C*H,t.PHE1/2).addSegStrokeA(C*(d-t.PHR4),t.PHE1/2).addSegStrokeA(C*(d-t.PHR4),-t.PHE1/2).closeSegStroke()},b=function(C){return J(C*(d+f),-t.PHE1/2).addSegStrokeA(C*(d+f),t.PHE1/2).addSegStrokeA(C*(d-f),t.PHE1/2).addSegStrokeA(C*(d-f),-t.PHE1/2).closeSegStroke()};n.addMainO(E(1)),n.addSecond(E(-1)),n.addSecond(p(1)),n.addSecond(b(1)),n.addSecond(p(-1)),n.addSecond(b(-1));const $=function(C){return J(C*(d+t.PHR4),-t.PHE1/2).addSegStrokeA(C*A,-t.PHE1/2).addSegStrokeRP(-Math.PI/2+C*h,k).closeSegStroke()},V=function(C){return J(C*(d+t.PHR4),t.PHE1/2).addSegStrokeA(C*D,t.PHE1/2).addSegStrokeRP(Math.PI/2+C*h,k).addSegStrokeA(C*(d+t.PHR4),t.PHE1/2+t.PHH1).closeSegStroke()},N=function(C){const ot=z(C*D,t.PHE1/2).translatePolar(Math.PI/2+C*h,k),M=z(C*A,-t.PHE1/2).translatePolar(-Math.PI/2+C*h,k),X=u-t.PHE2/2;return J(C*X,0).addSegStrokeA(ot.cx,ot.cy).addSegStrokeA(C*(d+t.PHR4),t.PHE1/2+t.PHH1).addSegStrokeA(C*(d+t.PHR4),t.PHE1/2).addSegStrokeA(C*(d+t.PHR4),-t.PHE1/2).addSegStrokeA(M.cx,M.cy).closeSegStroke()};n.addSecond($(-1)),n.addSecond(V(-1)),r.mergeFigure(n,!0),l.mergeFigure(n,!0),a.mergeFigure(n,!0),n.addSecond($(1)),n.addSecond(V(1)),r.addMainO($(1)),r.addSecond(V(1)),l.addSecond($(1)),l.addMainO(V(1)),a.addMainO(N(1));const v=[];v.push(x(0,0,H)),i.addSecond(x(0,0,u)),i.addSecond(x(0,0,Math.max(S,_)));const[G,Y,B]=ko(t);e.logstr+=G,v.push(Y);for(const C of B){const ot=z(0,0).translatePolar(C,d);v.push(x(ot.cx,ot.cy,t.PHD3/2))}const O=J(d+t.PHR4,-t.PHE3).addSegStrokeA(H,-t.PHE3).addSegStrokeA(H,t.PHE3).addSegStrokeA(d+t.PHR4,t.PHE3).closeSegStroke();for(const C of B)i.addSecond(O.rotate(0,0,C));i.addMainOI(v),e.fig={facePetal:i,faceOuter:n,faceButtress1:r,faceButtress2:l,faceButtress12:a};const F=e.partName,W=Je();W.addRotation(Math.PI/2,0,0),W.addTranslation(0,t.PHE3/2,0);const T=B.map((C,ot)=>{const M=Je(W.getMatrix());return M.addRotation(0,0,C),{outName:`subpax_${F}_b2_${ot}`,face:`${F}_faceButtress12`,extrudeMethod:q.eLinearOrtho,length:t.PHE3,rotate:M.getRotation(),translate:M.getTranslation()}}),tt=B.map((C,ot)=>`subpax_${F}_b2_${ot}`),rt=t.withOuterCone?[`subpax_${F}_outer`]:[];e.vol={extrudes:[{outName:`subpax_${F}_outer`,face:`${F}_faceOuter`,extrudeMethod:q.eRotate,rotate:[0,0,0],translate:[0,0,0]},{outName:`subpax_${F}_petal`,face:`${F}_facePetal`,extrudeMethod:q.eLinearOrtho,length:t.PHE1,rotate:[0,0,0],translate:[0,0,-t.PHE1/2]},...T],volumes:[{outName:`pax_${F}`,boolMethod:lt.eUnion,inList:[`subpax_${F}_petal`,...rt,...tt]}]},e.sub={},e.logstr+=`vaxis_holder drawn successfully!
47
+ `,e.calcErr=!1}catch(h){e.logstr+=h,console.log(h)}return e}var Ft={pTitle:"Heliostat vaxis_holder",pDescription:"The holders of the guidance mechanism for azimuth motion",pDef:ss,pGeom:yo},os={partName:"pole_static",params:[c("D1","mm",1e3,20,4e3,1),c("D2","mm",700,10,4e3,1),c("D3","mm",800,10,4e3,1),c("H1","mm",3e3,10,4e4,10),c("H2","mm",7e3,50,4e4,10),U("thickness"),c("E1","mm",30,1,80,1),c("E2","mm",5,1,80,1),U("base holes"),c("N1","",32,3,100,1),c("D5","mm",40,1,100,1),c("L1","mm",45,1,300,1),U("door"),c("D4","mm",600,1,1200,1),c("H3","mm",300,5,1200,1),c("H4","mm",1800,10,2500,1),c("L2","mm",30,1,100,1),c("E3","mm",40,1,100,1),U("holders"),Nt("holders",!0),c("PHL1A","mm",400,1,1e3,1),c("PHL1B","mm",400,1,1e3,1),c("PHB","mm",5e3,1,2e4,1),c("PHD1A","mm",600,1,4e3,1),c("PHD1B","mm",380,1,4e3,1),c("PHN1AB","petal",6,1,24,1),U("holder-B"),c("PHD5B2","mm",600,1,4e3,1),c("PHD5B1","mm",600,1,4e3,1),c("PHR4B","mm",30,1,400,1),c("PHD3B","mm",40,1,400,1),c("PHL2B","mm",140,1,400,1),c("PHE3B","mm",10,1,50,1),c("PHR6B","mm",20,0,400,1),c("PHE1B","mm",10,1,50,1),c("PHH1B","mm",10,1,50,1),U("holder-A"),c("PHD5A","mm",900,1,4e3,1),c("PHR4A","mm",30,1,400,1),c("PHD3A","mm",40,1,400,1),c("PHL2A","mm",200,1,400,1),c("PHE3A","mm",10,1,50,1),c("PHR6A","mm",20,0,400,1),c("PHE1A","mm",10,1,50,1),c("PHH1A","mm",10,1,50,1)],paramSvg:{D1:"pole_stator_cut.svg",D2:"pole_stator_cut.svg",D3:"pole_stator_cut.svg",H1:"pole_stator_cut.svg",H2:"pole_stator_cut.svg",E1:"pole_stator_cut.svg",E2:"pole_stator_E2.svg",N1:"pole_stator_bottom.svg",D5:"pole_stator_bottom.svg",L1:"pole_stator_bottom.svg",D4:"pole_stator_face.svg",H3:"pole_stator_face.svg",H4:"pole_stator_face.svg",L2:"pole_stator_face.svg",E3:"pole_stator_right.svg",holders:"pole_stator_holders.svg",PHL1A:"pole_stator_holders.svg",PHL1B:"pole_stator_holders.svg",PHB:"pole_stator_holders.svg",PHD1A:"pole_stator_holders.svg",PHD1B:"pole_stator_holders.svg",PHN1AB:"pole_stator_holderB_top.svg",PHD5A:"pole_stator_holderB_top.svg",PHR4A:"pole_stator_holderB_top.svg",PHD3A:"pole_stator_holderB_top.svg",PHL2A:"pole_stator_holderB_top.svg",PHE3A:"pole_stator_holderB_top.svg",PHR6A:"pole_stator_holderB_top.svg",PHE1A:"pole_stator_holderB_section.svg",PHH1A:"pole_stator_holderB_section.svg",PHD5B1:"pole_stator_holderB_top.svg",PHD5B2:"pole_stator_holderB_top.svg",PHR4B:"pole_stator_holderB_top.svg",PHD3B:"pole_stator_holderB_top.svg",PHL2B:"pole_stator_holderB_top.svg",PHE3B:"pole_stator_holderB_top.svg",PHR6B:"pole_stator_holderB_top.svg",PHE1B:"pole_stator_holderB_section.svg",PHH1B:"pole_stator_holderB_section.svg"},sim:{tMax:180,tStep:.5,tUpdate:500}};function Eo(s,t,o=""){const e=_t(os.partName+o),n=I(),i=I(),r=I(),l=I(),a=I(),h=I(),d=I(),u=I(),f=I(),g=I(),S=I();e.logstr+=`${e.partName} simTime: ${s}
48
+ `;try{const _=t.D1/2,P=t.D2/2,A=t.D3/2,D=t.H1+t.H2,H=Math.atan2(_-P,t.H2),k=t.E2*Math.tan(H/2),R=t.H1-k,E=t.PHL1B/Math.cos(H),p=P+t.PHL1B/2*Math.tan(H),b=t.H1+t.H2-t.PHL1B/2,$=P+(t.PHL1B/2+t.PHB)*Math.tan(H),V=t.H1+t.H2-t.PHL1B/2-t.PHB,N=t.PHL1A/Math.cos(H),v=_-t.PHL1A/2*Math.tan(H),G=t.H1+t.PHL1A/2;if(P>_)throw`err091: D2 ${t.D2} is larger than D1 ${t.D1}`;if(A+t.E2>_)throw`err095: D3 ${t.D3} and E2 ${t.E2} are too large compare to D1 ${t.D1}`;if(t.holders){if(t.PHB<t.PHL1B)throw`err131: PHB ${t.PHB} is too small compare to PHL1B ${t.PHL1B}`;if(t.PHB>t.H2-t.PHL1B-t.PHL1A)throw`err132: PHB ${t.PHB} is too large compare to H2 ${t.H2}, PHL1B ${t.PHL1B} and PHL1A ${t.PHL1A}`}e.logstr+=`pole-height: ${L(D)} mm
49
+ `,e.logstr+=`cone-half-angle: ${L(ut(H))} degree
50
+ `,e.logstr+=`holder position: A: ${L(G)} B1: ${L(V)} B2: ${L(b)} mm
51
+ `;const Y=function(y){let Q=P-t.E2*Math.cos(H);return Q+=(D-t.E2*Math.sin(H)-y)*Math.tan(H),Q},B=function(y,Q){const K=J(y*_,0).addSegStrokeA(y*_,t.H1).addSegStrokeA(y*P,D).addSegStrokeR(-y*t.E2*Math.cos(H),-t.E2*Math.sin(H));if(Q&&t.holders){const ft=t.H1+t.PHL1A/2-t.PHE1A/2,at=ft+t.PHE1A,St=D-t.PHL1B/2+t.PHE1B/2,nt=St-t.PHE1B,et=St-t.PHB,Lt=et-t.PHE1B;K.addSegStrokeA(y*Y(St),St).addSegStrokeA(y*(t.PHD1B/2-t.PHR4B),St).addSegStrokeA(y*(t.PHD1B/2-t.PHR4B),nt).addSegStrokeA(y*Y(nt),nt).addSegStrokeA(y*Y(et),et).addSegStrokeA(y*(t.PHD1B/2-t.PHR4B),et).addSegStrokeA(y*(t.PHD1B/2-t.PHR4B),Lt).addSegStrokeA(y*Y(Lt),Lt).addSegStrokeA(y*Y(at),at).addSegStrokeA(y*(t.PHD1A/2-t.PHR4A),at).addSegStrokeA(y*(t.PHD1A/2-t.PHR4A),ft).addSegStrokeA(y*Y(ft),ft)}return K.addSegStrokeA(y*(_-t.E2),R),Q?K.addSegStrokeA(y*(_-t.E2),t.E1).addSegStrokeA(y*A,t.E1).addSegStrokeA(y*A,0):K.addSegStrokeA(y*(_-t.E2),0),K.closeSegStroke(),K};n.addMainO(B(1,!1)),n.addSecond(B(1,!0)),n.addSecond(B(-1,!0));const O=t.D4/2,F=t.H4-2*O;if(F<0)throw`err121: H4 ${t.H4} is too small compare to D4 ${t.D4}`;if(O-t.L2<0)throw`err121: D4 ${t.D4} is too small compare to L2 ${t.L2}`;const W=function(y){const Q=O-y;return ho(0,t.H3+O-Q,2*Q,F+2*Q,Math.PI/2)};i.addMainOI([W(0),W(t.L2)]);const T=J(_,0).addSegStrokeA(_,t.H1).addSegStrokeA(P,D).addSegStrokeA(-P,D).addSegStrokeA(-_,t.H1).addSegStrokeA(-_,0).closeSegStroke();i.addSecond(T);const tt=J(-_,t.H3).addSegStrokeR(0,t.H4).addSegStrokeR(-t.E3,0).addSegStrokeR(0,-t.H4).closeSegStroke();i.addSecond(tt);const rt=[];rt.push(x(0,0,_)),rt.push(x(0,0,A));const C=A+t.L1,ot=2*Math.PI/t.N1;for(let y=0;y<t.N1;y++){const Q=C*Math.cos(y*ot),K=C*Math.sin(y*ot);rt.push(x(Q,K,t.D5/2))}r.addSecond(x(0,0,P)),r.addSecond(x(0,0,_-t.E2)),r.addMainOI(rt),l.addMainOI([x(0,0,_+t.E3),x(0,0,_-t.E2)]),a.addMainO(W(t.L2));const M=e.partName,X=[],ct=[];let m={};if(t.holders){const Q=vt(Ft.pDef,"B2");Q.setVal("PHD1",t.PHD1B),Q.setVal("PHD2",2*p),Q.setVal("PHD5",t.PHD5B2),Q.setVal("PHN1",t.PHN1AB),Q.setVal("PHD3",t.PHD3B),Q.setVal("PHR4",t.PHR4B),Q.setVal("PHL2",t.PHL2B),Q.setVal("PHR6",t.PHR6B),Q.setVal("PHE1",t.PHE1B),Q.setVal("PHH1",t.PHH1B),Q.setVal("PHA",ut(H)),Q.setVal("PHL1",E),Q.setVal("PHE2",t.E2),Q.setVal("PHE3",t.PHE3B),Q.setVal("withOuterCone",1);const K=Ft.pGeom(0,Q.getParamVal(),Q.getSuffix());Mt(K),e.logstr+=pt(K.logstr,Q.getPartNameSuffix()),h.mergeFigure(K.fig.faceOuter),d.mergeFigure(K.fig.facePetal);const ft={outName:`inpax_${M}_hB2`,subdesign:"pax_vaxis_holderB2",subgeom:K,rotate:[0,0,0],translate:[0,0,b]};X.push(ft),ct.push(`inpax_${M}_hB2`);const at=vt(Ft.pDef,"B1");at.setVal("PHD1",t.PHD1B),at.setVal("PHD2",2*$),at.setVal("PHD5",t.PHD5B1),at.setVal("PHN1",t.PHN1AB),at.setVal("PHD3",t.PHD3B),at.setVal("PHR4",t.PHR4B),at.setVal("PHL2",t.PHL2B),at.setVal("PHR6",t.PHR6B),at.setVal("PHE1",t.PHE1B),at.setVal("PHH1",t.PHH1B),at.setVal("PHA",ut(H)),at.setVal("PHL1",E),at.setVal("PHE2",t.E2),at.setVal("PHE3",t.PHE3B),at.setVal("withOuterCone",1);const St=Ft.pGeom(0,at.getParamVal(),at.getSuffix());Mt(St),e.logstr+=pt(St.logstr,at.getPartNameSuffix()),u.mergeFigure(St.fig.faceOuter),f.mergeFigure(St.fig.facePetal);const nt={outName:`inpax_${M}_hB1`,subdesign:"pax_vaxis_holderB1",subgeom:St,rotate:[0,0,0],translate:[0,0,V]};X.push(nt),ct.push(`inpax_${M}_hB1`);const et=vt(Ft.pDef,"A");et.setVal("PHD1",t.PHD1A),et.setVal("PHD2",2*v),et.setVal("PHD5",t.PHD5A),et.setVal("PHN1",t.PHN1AB),et.setVal("PHD3",t.PHD3A),et.setVal("PHR4",t.PHR4A),et.setVal("PHL2",t.PHL2A),et.setVal("PHR6",t.PHR6A),et.setVal("PHE1",t.PHE1A),et.setVal("PHH1",t.PHH1A),et.setVal("PHA",ut(H)),et.setVal("PHL1",N),et.setVal("PHE2",t.E2),et.setVal("PHE3",t.PHE3A),et.setVal("withOuterCone",1);const Lt=Ft.pGeom(0,et.getParamVal(),et.getSuffix());Mt(Lt),e.logstr+=pt(Lt.logstr,et.getPartNameSuffix()),g.mergeFigure(Lt.fig.faceOuter),S.mergeFigure(Lt.fig.facePetal);const kt={outName:`inpax_${M}_hA`,subdesign:"pax_vaxis_holderA",subgeom:Lt,rotate:[0,0,0],translate:[0,0,G]};X.push(kt),ct.push(`inpax_${M}_hA`),m={vaxis_holder_B2:{partName:Q.getPartName(),dparam:Q.getDesignParamList(),orientation:[0,0,0],position:[0,0,b]},vaxis_holder_B1:{partName:at.getPartName(),dparam:at.getDesignParamList(),orientation:[0,0,0],position:[0,0,V]},vaxis_holder_A:{partName:et.getPartName(),dparam:et.getDesignParamList(),orientation:[0,0,0],position:[0,0,G]}}}e.fig={poleCut:n,poleFace:i,poleBottom:r,emptyPole:l,emptyDoor:a,holderB2Section:h,holderB2Top:d,holderB1Section:u,holderB1Top:f,holderASection:g,holderATop:S},e.vol={inherits:X,extrudes:[{outName:`subpax_${M}_pole`,face:`${M}_poleCut`,extrudeMethod:q.eRotate,rotate:[0,0,0],translate:[0,0,0]},{outName:`subpax_${M}_bottom`,face:`${M}_poleBottom`,extrudeMethod:q.eLinearOrtho,length:t.E1,rotate:[0,0,0],translate:[0,0,0]},{outName:`subpax_${M}_door`,face:`${M}_poleFace`,extrudeMethod:q.eLinearOrtho,length:_+t.E3,rotate:[Math.PI/2,0,0],translate:[0,0,0]},{outName:`subpax_${M}_emptyPole`,face:`${M}_emptyPole`,extrudeMethod:q.eLinearOrtho,length:t.H1,rotate:[0,0,0],translate:[0,0,0]},{outName:`subpax_${M}_emptyDoor`,face:`${M}_emptyDoor`,extrudeMethod:q.eLinearOrtho,length:_+t.E3+10,rotate:[Math.PI/2,0,0],translate:[0,0,0]}],volumes:[{outName:`ipax_${M}_door`,boolMethod:lt.eIntersection,inList:[`subpax_${M}_door`,`subpax_${M}_emptyPole`]},{outName:`ipax_${M}_pole`,boolMethod:lt.eSubstraction,inList:[`subpax_${M}_pole`,`subpax_${M}_emptyDoor`]},{outName:`pax_${M}`,boolMethod:lt.eUnion,inList:[`ipax_${M}_pole`,`subpax_${M}_bottom`,`ipax_${M}_door`,...ct]}]},e.sub=m,e.logstr+=`pole_static drawn successfully!
52
+ `,e.calcErr=!1}catch(_){e.logstr+=_,console.log(_)}return e}var Zt={pTitle:"Heliostat pole static",pDescription:"The vertical pole of an heliostat",pDef:os,pGeom:Eo},ns={partName:"rake",params:[c("D1","mm",600,10,4e3,1),c("D2","mm",400,10,4e3,1),c("D3","mm",400,10,4e3,1),c("H1","mm",800,1,4e3,1),c("H2","mm",3e3,20,6e3,1),c("H3","mm",400,0,4e3,1),c("E1","mm",20,1,80,1),c("E3","mm",30,1,80,1),U("transversal"),c("H4","mm",400,10,1e3,1),c("D4","mm",300,10,1e3,1),c("E4","mm",20,1,80,1),c("H5","mm",1e3,10,2e3,1),c("D5","mm",200,1,1e3,1),c("L4","mm",300,1,1e3,1),c("L5","mm",2e3,10,4e3,1),c("L6","mm",2e3,1,4e3,1),c("D8","mm",400,1,1e3,1),U("diagonal"),c("D6","mm",100,1,600,1),c("E6","mm",10,1,80,1),c("L7","mm",100,1,1e3,1),c("L8","mm",200,1,1e3,1),U("base"),c("N1","",24,3,100,1),c("D7","mm",40,1,100,1),c("L1","mm",30,1,300,1),U("door"),c("H6","mm",100,1,1e3,1),c("H7","mm",600,10,2e3,1),c("L9","mm",300,1,1e3,1),c("R9","mm",50,0,300,1),c("doorOrientation","degree",0,-180,180,1)],paramSvg:{D1:"rake_face.svg",D2:"rake_side.svg",D3:"rake_face.svg",H1:"rake_face.svg",H2:"rake_face.svg",H3:"rake_face.svg",E1:"rake_face.svg",E3:"rake_face.svg",H4:"rake_side.svg",D4:"rake_side.svg",E4:"rake_side.svg",H5:"rake_side.svg",D5:"rake_side.svg",L4:"rake_face.svg",L5:"rake_face.svg",L6:"rake_face.svg",D6:"rake_face.svg",E6:"rake_face.svg",L7:"rake_face.svg",L8:"rake_face.svg",N1:"rake_top.svg",D7:"rake_top.svg",L1:"rake_top.svg",D8:"rake_side.svg",H6:"rake_door.svg",H7:"rake_door.svg",L9:"rake_door.svg",R9:"rake_door.svg",doorOrientation:"rake_door.svg"},sim:{tMax:180,tStep:.5,tUpdate:500}};function Ro(s,t,o=""){const e=_t(ns.partName+o),n=I(),i=I(),r=I(),l=I(),a=I(),h=I(),d=I(),u=I(),f=I();e.logstr+=`${e.partName} simTime: ${s}
53
+ `;try{const S=Math.PI/2,_=-Math.PI/2,P=t.D1/2,A=t.D2/2,D=t.D3/2,H=t.D4/2,k=t.D5/2,R=t.D6/2,E=t.D7/2,p=t.D8/2,b=t.D4-2*t.E4,$=t.H1+t.H2,V=$-t.H4+t.H5,N=4*t.L4+t.L5+2*t.L6,v=t.H1+t.H2-t.H4,G=H*Math.cos(Math.PI/6),Y=H*Math.sin(Math.PI/6),B=k*Math.cos(Math.PI/6),O=k*Math.sin(Math.PI/6),F=p*Math.cos(Math.PI/6),W=p*Math.sin(Math.PI/6),T=[-N/2,-t.L5/2-t.L4,t.L5/2,N/2-t.L4],tt=t.H2-t.L8-t.H4-H,rt=Math.atan2(P-A,t.H2),C=N/2-t.L7-P+t.L8*Math.tan(rt),ot=Math.sqrt(C**2+tt**2),M=Math.atan2(C,tt),X=t.E1/Math.sin(M+rt),ct=ot+t.E4/Math.cos(M)+X,m=P-t.L8*Math.tan(rt)-X*Math.sin(M),y=t.H1+t.L8-X*Math.cos(M),Q=m-R*Math.cos(M),K=y+R*Math.sin(M),ft=R-t.E6,at=m-t.E6*Math.cos(M),St=y+t.E6*Math.sin(M),nt=Math.PI/2-M,et=t.L9/2,Lt=et-t.H7*Math.tan(rt);if(t.D2>t.D1)throw`err110: D2 ${t.D2} is larger than D1 ${t.D1}`;if(t.D3+t.E1>t.D1)throw`err113: D3 ${t.D3} is too large compare to D1 ${t.D1} and E1 ${t.E1}`;if(t.H3+t.E3>t.H1)throw`err116: H3 ${t.H3} is too large compare to H1 ${t.H1} and E3 ${t.E3}`;if(t.H4+H>t.H2)throw`err119: H4 ${t.H4} is too large compare to H2 ${t.H2} and D4 ${t.D4}`;if(t.E4>H)throw`err122: E4 ${t.E4} is too large compare to D4 ${t.D4}`;if(t.D8<=t.D5)throw`err146: D8 ${t.D8} is too small compare to D5 ${t.D5}`;if(tt<0)throw`err140: H2 ${t.H2} too small compare to L8 ${t.L8}, H4 ${t.H4} and D4 ${t.D4}`;if(Lt<t.R9)throw`err177: R9 ${t.R9} too large compare to doorHighX ${Lt} and L9 ${t.L9}`;if(t.L9>t.D1)throw`err180: L9 ${t.L9} too large compare to D1 ${t.D1}`;if(t.E6>t.D6/2)throw`err197: E6 ${t.E6} is too large compare to D6 ${t.D6}`;e.logstr+=`rake-L4: ${L(t.L4)} mm (compare with swing)
54
+ `,e.logstr+=`rake-L5: ${L(t.L5)} mm (compare with swing)
55
+ `,e.logstr+=`rake-L6: ${L(t.L6)} mm (compare with swing)
56
+ `,e.logstr+=`rake-beamL (4*L4+L5+2*L6): ${L(N)} mm (compare with swing)
57
+ `,e.logstr+=`cone-height: ${L($)} mm
58
+ `,e.logstr+=`cone-height total: ${L(V)} mm
59
+ `,e.logstr+=`cone-angle: ${L(ut(rt))} degree
60
+ `,e.logstr+=`wing-angle: ${L(ut(M))} degree
61
+ `;const kt=t.E1*Math.cos(rt),Ct=t.E1*Math.sin(rt),st=t.E1*Math.tan(rt/2),Ls=function(dt){return J(dt*P,0).addSegStrokeA(dt*P,t.H1).addSegStrokeA(dt*A,$).addSegStrokeA(dt*(A-kt),$-Ct).addSegStrokeA(dt*(P-t.E1),t.H1-st).addSegStrokeA(dt*(P-t.E1),0).closeSegStroke()},zt=function(dt){return J(dt*P,0).addSegStrokeA(dt*P,t.H1).addSegStrokeA(dt*A,$).addSegStrokeA(dt*(A-kt),$-Ct).addSegStrokeA(dt*(P-t.E1),t.H1-st).addSegStrokeA(dt*(P-t.E1),t.H1-t.H3).addSegStrokeA(dt*D,t.H1-t.H3).addSegStrokeA(dt*D,t.H1-t.H3-t.E3).addSegStrokeA(dt*(P-t.E1),t.H1-t.H3-t.E3).addSegStrokeA(dt*(P-t.E1),0).closeSegStroke()},Ps=v-H-(t.H1-st),Hs=P-t.E1-Math.tan(rt)*Ps,ws=J(0,v-H).addSegStrokeA(Hs,v-H).addSegStrokeA(P-t.E1,t.H1-st).addSegStrokeA(P-t.E1,t.H1-t.H3).addSegStrokeA(0,t.H1-t.H3).closeSegStroke(),fe=ao(-et,t.H1+t.H6,t.L9,2*Lt,t.H7,t.R9);n.addMainO(Ls(1)),n.addSecond(zt(1)),n.addSecond(zt(-1)),n.addSecond(Z(-N/2,v,N,t.D4,0)),n.addSecond(Z(-N/2,v,N,b,0));for(const dt of T)n.addSecond(ht(dt,v+Y,t.L4,t.H5-Y-O));n.addSecond(Rt(m,y,ct,2*R,nt)),n.addSecond(Rt(at,St,ct,2*ft,nt)),n.addSecond(Rt(-m,y,2*R,ct,M)),n.addSecond(Rt(-at,St,2*ft,ct,M)),n.addSecond(fe),i.mergeFigure(n,!0),i.addMainO(ws);const Se=[],_e=J(G,v+Y).addSegStrokeA(F,v+t.H5-W).addSegStrokeA(B,v+t.H5-O).addPointA(-B,v+t.H5-O).addSegArc(k,!1,!1).addSegStrokeA(-F,v+t.H5-W).addSegStrokeA(-G,v+Y).closeSegArc(H,!1,!1);Se.push(x(0,v,H)),Se.push(x(0,v,H-t.E4)),r.addSecond(zt(1)),r.addSecond(zt(-1)),r.addSecond(_e),r.addSecond(x(0,v+t.H5,k)),r.addSecond(Z(0,t.H1+t.L8,tt,2*R,S)),r.addSecond(Z(0,t.H1+t.L8,tt,2*ft,S)),r.addSecond(fe),r.addMainOI(Se),l.addMainO(x(0,v,H-t.E4)),l.addSecond(x(0,v,H)),l.addSecond(_e);const ee=[];ee.push(x(0,0,P)),ee.push(x(0,0,D));const Ee=D+t.L1,Re=2*Math.PI/t.N1;for(let dt=0;dt<t.N1;dt++){const Xt=Ee*Math.cos(dt*Re),Ne=Ee*Math.sin(dt*Re);ee.push(x(Xt,Ne,E))}a.addSecond(x(0,0,P-t.E1)),a.addSecond(x(0,0,A)),a.addSecond(Z(0,-N/2,N,t.D4,S)),a.addSecond(Z(0,-N/2,N,b,S));for(const dt of T)a.addSecond(Z(0,dt,t.L4,2*G,S)),a.addSecond(Z(0,dt,t.L4,2*B,S)),a.addSecond(Z(0,dt,t.L4,2*F,S));const se=P-t.L8*Math.tan(rt);a.addSecond(Z(0,se,C,2*R,S)),a.addSecond(Z(0,se,C,2*ft,S)),a.addSecond(Z(0,-se,C,2*R,_)),a.addSecond(Z(0,-se,C,2*ft,_)),a.addMainOI(ee),h.addMainO(_e),h.addSecond(x(0,v,H)),h.addSecond(x(0,v,H-t.E4)),h.addSecond(x(0,v+t.H5,k));const Le=[];Le.push(x(0,0,R)),Le.push(x(0,0,ft)),d.addMainOI(Le),u.addSecond(x(0,0,R)),u.addMainO(x(0,0,ft)),f.addMainO(fe),f.addSecond(zt(1)),f.addSecond(zt(-1)),f.addSecond(Z(-N/2,v,N,t.D4,0)),f.addSecond(Z(-N/2,v,N,b,0));for(const dt of T)f.addSecond(ht(dt,v+Y,t.L4,t.H5-Y-O));f.addSecond(Rt(m,y,ct,2*R,nt)),f.addSecond(Rt(at,St,ct,2*ft,nt)),f.addSecond(Rt(-m,y,2*R,ct,M)),f.addSecond(Rt(-at,St,2*ft,ct,M)),e.fig={faceCone:n,faceConeHollow:i,faceBeam:r,faceBeamHollow:l,faceDisc:a,faceHand:h,faceWing:d,faceWingHollow:u,faceDoor:f};const it=e.partName,xs=T.map((dt,Xt)=>({outName:`subpax_${it}_hand_${Xt}`,face:`${it}_faceHand`,extrudeMethod:q.eLinearOrtho,length:t.L4,rotate:[Math.PI/2,0,0],translate:[0,-dt,0]}));e.vol={extrudes:[{outName:`subpax_${it}_cone`,face:`${it}_faceCone`,extrudeMethod:q.eRotate,rotate:[0,0,0],translate:[0,0,0]},{outName:`subpax_${it}_coneHollow`,face:`${it}_faceConeHollow`,extrudeMethod:q.eRotate,rotate:[0,0,0],translate:[0,0,0]},{outName:`subpax_${it}_beam`,face:`${it}_faceBeam`,extrudeMethod:q.eLinearOrtho,length:N,rotate:[Math.PI/2,0,0],translate:[0,N/2,0]},{outName:`subpax_${it}_beamHollow`,face:`${it}_faceBeamHollow`,extrudeMethod:q.eLinearOrtho,length:N,rotate:[Math.PI/2,0,0],translate:[0,N/2,0]},{outName:`subpax_${it}_disc`,face:`${it}_faceDisc`,extrudeMethod:q.eLinearOrtho,length:t.E3,rotate:[0,0,0],translate:[0,0,t.H1-t.H3-t.E3]},{outName:`subpax_${it}_wing_right`,face:`${it}_faceWing`,extrudeMethod:q.eLinearOrtho,length:ct,rotate:[-M,0,0],translate:[0,Q,K]},{outName:`subpax_${it}_wing_left`,face:`${it}_faceWing`,extrudeMethod:q.eLinearOrtho,length:ct,rotate:[M,0,0],translate:[0,-Q,K]},{outName:`subpax_${it}_wing_hollow_right`,face:`${it}_faceWingHollow`,extrudeMethod:q.eLinearOrtho,length:ct,rotate:[-M,0,0],translate:[0,Q,K]},{outName:`subpax_${it}_wing_hollow_left`,face:`${it}_faceWingHollow`,extrudeMethod:q.eLinearOrtho,length:ct,rotate:[M,0,0],translate:[0,-Q,K]},{outName:`subpax_${it}_door`,face:`${it}_faceDoor`,extrudeMethod:q.eLinearOrtho,length:t.D1,rotate:[Math.PI/2,0,-Math.PI/2+Et(t.doorOrientation)],translate:[0,0,0]},...xs],volumes:[{outName:`ipax_${it}_plus`,boolMethod:lt.eUnion,inList:[`subpax_${it}_cone`,`subpax_${it}_beam`,`subpax_${it}_disc`,`subpax_${it}_hand_0`,`subpax_${it}_hand_1`,`subpax_${it}_hand_2`,`subpax_${it}_hand_3`,`subpax_${it}_wing_right`,`subpax_${it}_wing_left`]},{outName:`ipax_${it}_hollow`,boolMethod:lt.eUnion,inList:[`subpax_${it}_coneHollow`,`subpax_${it}_beamHollow`,`subpax_${it}_wing_hollow_right`,`subpax_${it}_wing_hollow_left`,`subpax_${it}_door`]},{outName:`pax_${it}`,boolMethod:lt.eSubstraction,inList:[`ipax_${it}_plus`,`ipax_${it}_hollow`]}]},e.sub={},e.logstr+=`heliostat-rake drawn successfully!
62
+ `,e.calcErr=!1}catch(g){e.logstr+=g,console.log(g)}return e}var Kt={pTitle:"Heliostat rake",pDescription:"The rake on top of the V-Axis of the heliostat",pDef:ns,pGeom:Ro},$e={partName:"spider",params:[c("D1","mm",100,1,400,1),c("L1","mm",400,1,1e3,1),c("L2","mm",400,1,1e3,1),c("L3","mm",100,1,400,1),c("L4","mm",3e3,10,8e3,10),U("longitude"),c("L5","mm",2e3,1,8e3,1),c("N1","",6,1,20,1),c("L6","mm",30,1,100,1),U("thickness"),c("E1","mm",3,1,80,1),c("E2","mm",50,1,200,1),c("E3","mm",3,1,80,1),c("R2","mm",100,0,400,10)],paramSvg:{D1:"spider_profile.svg",L1:"spider_profile.svg",L2:"spider_profile.svg",L3:"spider_profile.svg",L4:"spider_profile.svg",L5:"spider_lateral.svg",L6:"spider_lateral.svg",E1:"spider_profile.svg",E2:"spider_profile.svg",E3:"spider_profile.svg",R2:"spider_profile.svg",N1:"spider_lateral.svg"},sim:{tMax:360,tStep:.5,tUpdate:500}};function No(s,t,o=""){const e=_t($e.partName+o);let n,i;const r=I(),l=I(),a=I();e.logstr+=`${e.partName} simTime: ${s}
63
+ `;try{const h=t.D1/2;if(t.D1<t.E2)throw`err476: D1 ${t.D1} smaller then E2 ${t.E2}`;const d=t.E2/2,u=Math.sqrt(h**2-d**2),f=t.L1+t.L2*Math.sqrt(2),g=t.L2+t.L1*Math.sqrt(2),S=t.L4-g;if(S<t.R2)throw`err984: L4 ${t.L4} too small compare to R2 ${t.R2}`;const _=S*Math.cos(Math.PI/4),P=S*Math.sin(Math.PI/4),A=t.E2*Math.cos(Math.PI/4),D=t.E2*Math.sin(Math.PI/4),H=t.E2*Math.tan(Math.PI/8);if(h<t.E1)throw`err092: D1 ${t.D1} too small compare to E1 ${t.E1}`;if(t.L3<t.E2)throw`err994: L3 ${t.L3} smaller than E2 ${t.E2}`;if(t.L3<2*t.E3)throw`err997: L3 ${t.L3} too small compare to E3 ${t.E3}`;const k=(t.L3-t.E2)/2*Math.cos(Math.PI/4),R=f+_+k,E=-t.L1-P+k,p=E-t.E3*Math.sqrt(2);if(t.L5<t.N1*t.L6)throw`err110: L5 ${t.L5} too small compare to N1 ${t.N1} and L6 ${t.L6}`;let b=1;t.N1>1&&(b=(t.L5-t.L6)/(t.N1-1));const $=[...Array(t.N1).keys()].map(O=>O*b);n=function(O,F,W){return J(O,F).addSegStrokeA(O+W*Math.cos(Math.PI/4),F-W*Math.sin(Math.PI/4)).addSegStrokeA(O,F-2*W*Math.sin(Math.PI/4)).addSegStrokeA(O-W*Math.cos(Math.PI/4),F-W*Math.sin(Math.PI/4)).closeSegStroke()},i=function(O,F,W,T){return J(W,T).addSegStrokeA(W+O,T).addSegStrokeA(W+O,T+F).addSegStrokeA(W,T+F).closeSegStroke()};const V=Math.sin(2*Math.PI*s/$e.sim.tMax)*Math.PI/2;e.logstr+=`spide leg number: ${t.N1}
64
+ `,e.logstr+=`spide position angle: ${L(ut(V))} degree
65
+ `;const N=[],v=J(d,-u).addCornerRounded(t.R2).addSegStrokeA(d,-t.L1).addCornerRounded(t.R2).addSegStrokeA(f,-t.L1).addCornerRounded(t.R2+t.E2).addSegStrokeA(f+_,-t.L1-P).addSegStrokeA(f+_-A,-t.L1-P-D).addSegStrokeA(f-H,-t.L1-t.E2).addCornerRounded(t.R2).addSegStrokeA(-f+H,-t.L1-t.E2).addCornerRounded(t.R2).addSegStrokeA(-f-_+A,-t.L1-P-D).addSegStrokeA(-f-_,-t.L1-P).addSegStrokeA(-f,-t.L1).addCornerRounded(t.R2+t.E2).addSegStrokeA(-d,-t.L1).addCornerRounded(t.R2).addSegStrokeA(-d,-u).addCornerRounded(t.R2).closeSegArc(h,!0,!1);N.push(v),N.push(x(0,0,h-t.E1)),r.addSecond(n(R,E,t.L3)),r.addSecond(n(R,p,t.L3-2*t.E3)),r.addSecond(n(-R,E,t.L3)),r.addSecond(n(-R,p,t.L3-2*t.E3)),r.addMainOI(N),l.addMainOI([x(0,0,h),x(0,0,h-t.E1)]),l.addMainOI([n(R,E,t.L3),n(R,p,t.L3-2*t.E3)]),l.addMainOI([n(-R,E,t.L3),n(-R,p,t.L3-2*t.E3)]),l.addSecond(v),a.addSecond(i(t.L5,t.D1,0,-t.D1/2)),a.addSecond(i(t.L5,t.L3,0,-t.L4-t.L3));for(const O of $)a.addSecond(i(t.L6,t.L4,O,-t.L4));e.fig={faceLegs:r.rotate(0,0,V),faceTube:l.rotate(0,0,V),faceBody:a};const G=e.partName,Y=$.map((O,F)=>({outName:`subpax_${G}_leg_${F}`,face:`${G}_faceLegs`,extrudeMethod:q.eLinearOrtho,length:t.L6,rotate:[0,0,0],translate:[0,0,O]})),B=$.map((O,F)=>`subpax_${G}_leg_${F}`);e.vol={extrudes:[{outName:`subpax_${G}_tube`,face:`${G}_faceTube`,extrudeMethod:q.eLinearOrtho,length:t.L5,rotate:[0,0,0],translate:[0,0,0]},...Y],volumes:[{outName:`pax_${G}`,boolMethod:lt.eUnion,inList:[`subpax_${G}_tube`,...B]}]},e.sub={},e.logstr+=`heliostat-spider drawn successfully!
66
+ `,e.calcErr=!1}catch(h){e.logstr+=h,console.log(h)}return e}var De={pTitle:"Heliostat spider",pDescription:"The spider part for the control of the inclination of the heliostat",pDef:$e,pGeom:No},is={partName:"swing",params:[c("L1","mm",12500,100,4e4,1),c("L2","mm",6e3,100,4e4,1),U("radial"),c("D1","mm",400,1,1e3,1),c("E1","mm",5,1,80,1),c("H2","mm",100,1,400,1),c("H4","mm",100,1,400,1),c("E2","mm",3,1,80,1),c("L3","mm",500,1,4e3,1),U("longitudinal"),c("L4","mm",600,1,4e3,1),c("L5","mm",2e3,1,1e4,1),c("L6","mm",2e3,1,1e4,1),c("H1","mm",100,1,400,1),c("H3","mm",100,1,400,1),c("E3","mm",3,1,80,1),U("buttress"),c("S1","mm",300,0,3e3,1),c("S2","mm",10,0,2e3,1),c("R2","mm",100,0,1e3,1),U("rod overlay"),c("rod1","",10,1,40,1),c("rod2","mm",1300,10,4e3,1),c("rod3","mm",400,10,1e3,1),c("rod4","mm",100,1,400,1)],paramSvg:{L1:"swing_top.svg",L2:"swing_top.svg",L3:"swing_top.svg",L4:"swing_top.svg",L5:"swing_top.svg",L6:"swing_top.svg",D1:"swing_top.svg",H1:"swing_top.svg",H2:"swing_top.svg",H3:"swing_side.svg",H4:"swing_side.svg",E1:"swing_side.svg",E2:"swing_side.svg",E3:"swing_face.svg",S1:"swing_buttress.svg",S2:"swing_buttress.svg",R2:"swing_buttress.svg",rod1:"swing_with_rod.svg",rod2:"swing_with_rod.svg",rod3:"swing_with_rod.svg",rod4:"swing_with_rod.svg"},sim:{tMax:180,tStep:.5,tUpdate:500}};function To(s,t,o=""){const e=_t(is.partName+o),n=I(),i=I(),r=I(),l=I(),a=I();e.logstr+=`${e.partName} simTime: ${s}
67
+ `;try{const h=t.D1/2,d=h+t.S2,u=4*t.L4+t.L5+2*t.L6-2*t.H1,f=t.L4-2*t.H1,g=t.L5+2*t.H1,S=t.L6+2*t.H1;e.logstr+=`swing size: L1 ${L(t.L1)} x L2 ${L(t.L2)} mm
68
+ `,e.logstr+=`rake-L4: ${L(f)} mm (compare with rake)
69
+ `,e.logstr+=`rake-L5: ${L(g)} mm (compare with rake)
70
+ `,e.logstr+=`rake-L6: ${L(S)} mm (compare with rake)
71
+ `,e.logstr+=`rake-beamL: (4*L4+L5+2*L6-2*H1) ${L(u)} mm (compare with rake)
72
+ `,n.addMainOI([x(0,0,h),x(0,0,h-t.E1)]);const _=[-t.L2/2,-t.L3-t.H2,t.L3,t.L2/2-t.H2];for(const B of _)n.addMainOI([ht(B,d-t.H4,t.H2,t.H4),ht(B+t.E2,d-t.H4+t.E2,t.H2-2*t.E2,t.H4-2*t.E2)]);n.addSecond(ht(-t.L2/2,d,t.L2,t.H3));const P=[];P.push(-t.L1/2),P.push(t.L1/2-t.H1);for(const B of[-t.L5/2-2*t.L4-t.L6,-t.L5/2-t.L4,t.L5/2,t.L5/2+t.L4+t.L6])for(const O of[0,t.L4-t.H1])P.push(B+O);for(const B of P)i.addMainOI([ht(B,d,t.H1,t.H3),ht(B+t.E3,d+t.E3,t.H1-2*t.E3,t.H3-2*t.E3)]);i.addSecond(ht(-t.L1/2,-h,t.L1,t.D1)),i.addSecond(ht(-t.L1/2,d-t.H4,t.L1,t.H4));for(const B of P)r.addSecond(ht(B,-t.L2/2,t.H1,t.L2));for(const B of _)r.addSecond(ht(-t.L1/2,B,t.L1,t.H2));r.addSecond(ht(-t.L1/2,-h,t.L1,t.D1));const A=Math.sqrt(d**2+t.S1**2),D=Math.acos(h/A),H=Math.atan2(t.S1,d),k=z(0,0),E=k.translatePolar(Math.PI/2+H,h).rotate(k,D),p=J(-t.L3,d).addSegStrokeA(-t.S1,d).addCornerRounded(t.R2).addSegStrokeA(E.cx,E.cy).addPointA(0,-h).addPointA(-E.cx,E.cy).addSegArc2().addSegStrokeA(t.S1,d).addCornerRounded(t.R2).addSegStrokeA(t.L3,d).addSegStrokeA(t.L3,d+t.E3).addSegStrokeA(-t.L3,d+t.E3).closeSegStroke();l.addMainOI([p,x(0,0,h-t.E1)]),n.addSecond(p);for(const B of P)a.addMainO(ht(B,-t.L2/2,t.H1,t.L2));for(const B of _)a.addMainO(ht(-t.L1/2,B,t.L1,t.H2));a.addMainO(ht(-t.L1/2,-h,t.L1,t.D1));const b=-((t.rod1-1)*t.rod2+t.rod3)/2,$=(t.rod3-t.rod4)/2,V=t.rod3/2,N=1.2*t.L2,v=(N-V)/3,G=-N/2;for(let B=0;B<t.rod1;B++){const O=b+B*t.rod2;a.addSecond(ht(O+$,G,t.rod4,N));for(let F=0;F<4;F++)a.addSecond(ht(O,G+F*v,t.rod3,V,V/4))}e.fig={faceSide:n,faceFace:i,faceTop:r,faceButtress:l,faceTopWithRods:a};const Y=e.partName;e.vol={extrudes:[{outName:`subpax_${Y}_side`,face:`${Y}_faceSide`,extrudeMethod:q.eLinearOrtho,length:t.L1,rotate:[0,0,0],translate:[0,0,-t.L1/2]},{outName:`subpax_${Y}_face`,face:`${Y}_faceFace`,extrudeMethod:q.eLinearOrtho,length:t.L2,rotate:[0,Math.PI/2,0],translate:[-t.L2/2,0,0]},...P.map((B,O)=>({outName:`subpax_${Y}_buttress_${O}`,face:`${Y}_faceButtress`,extrudeMethod:q.eLinearOrtho,length:t.H1,rotate:[0,0,0],translate:[0,0,B]}))],volumes:[{outName:`pax_${Y}`,boolMethod:lt.eUnion,inList:[`subpax_${Y}_side`,`subpax_${Y}_face`,...P.map((B,O)=>`subpax_${Y}_buttress_${O}`)]}]},e.sub={},e.logstr+=`heliostat-swing drawn successfully!
73
+ `,e.calcErr=!1}catch(h){e.logstr+=h,console.log(h)}return e}var Qt={pTitle:"Heliostat swing",pDescription:"The swing for the heliostat inclination",pDef:is,pGeom:To},ve={partName:"heliostat",params:[c("H1","mm",3e3,10,4e4,1),c("H2","mm",2500,50,4e4,1),c("D1","mm",1e3,20,4e3,1),c("D2","mm",700,20,4e3,1),c("E1","mm",30,1,80,1),U("rake"),c("H3","mm",200,1,500,1),c("H4","mm",800,1,4e3,1),c("H5","mm",3e3,50,6e3,1),c("H6","mm",200,1,4e3,1),c("H7","mm",800,1,4e3,1),c("H8","mm",200,1,4e3,1),c("D3","mm",900,20,4e3,1),c("D4","mm",400,20,4e3,1),c("D5","mm",300,20,1e3,1),c("D6","mm",200,10,1e3,1),c("D7","mm",400,10,1e3,1),U("rake diagonal"),c("D9","mm",100,1,1e3,1),c("L7","mm",100,1,1e3,1),c("L8","mm",200,1,1e3,1),U("spider"),c("D8","mm",100,1,1e3,1),c("S1","mm",250,1,800,1),c("S2","mm",200,1,800,1),c("E2","mm",50,1,80,1),U("swing"),c("L1","mm",12500,100,4e4,1),c("L2","mm",6e3,100,4e4,1),c("L3","mm",100,1,500,1),c("L4","mm",600,1,4e3,1),c("L5","mm",2e3,10,6e3,1),c("L6","mm",2e3,1,6e3,1),c("H9","mm",100,1,400,1),U("motion amplitude"),c("al","degree",80,0,95,1),c("ar","degree",80,0,95,1)],paramSvg:{H1:"heliostat_overview.svg",H2:"heliostat_side.svg",H3:"heliostat_side_sizing.svg",H4:"heliostat_side_sizing.svg",H5:"heliostat_side_sizing.svg",H6:"heliostat_side_sizing.svg",H7:"heliostat_side_sizing.svg",H8:"heliostat_side_sizing.svg",H9:"heliostat_side_sizing.svg",D1:"heliostat_side_sizing.svg",D2:"heliostat_side_sizing.svg",D3:"heliostat_side_sizing.svg",D4:"heliostat_side_sizing.svg",D5:"heliostat_side_sizing.svg",D6:"heliostat_side_sizing.svg",D7:"heliostat_side_sizing.svg",D8:"heliostat_side_sizing.svg",D9:"heliostat_face_sizing.svg",S1:"heliostat_side_sizing.svg",S2:"heliostat_side_sizing.svg",E1:"heliostat_side_sizing.svg",E2:"heliostat_side_sizing.svg",L1:"heliostat_face_sizing.svg",L2:"heliostat_side_sizing.svg",L3:"heliostat_face_sizing.svg",L4:"heliostat_face_sizing.svg",L5:"heliostat_face_sizing.svg",L6:"heliostat_face_sizing.svg",L7:"heliostat_face_sizing.svg",L8:"heliostat_face_sizing.svg",al:"heliostat_side_sizing.svg",ar:"heliostat_side_sizing.svg"},sim:{tMax:100,tStep:.5,tUpdate:500}};function Co(s,t,o=""){const e=_t(ve.partName+o),n=I(),i=I();e.logstr+=`${e.partName} simTime: ${s}
74
+ `;try{const r=t.H1+t.H2-t.H3+t.H4+t.H5-t.H6+t.H7;e.logstr+=`heliostat-height: ${L(r)}, diameter ${L(t.D1)} m
75
+ `,e.logstr+=`heliostat-swing-length: ${L(t.L1)}, width ${L(t.L2)} m
76
+ `;const a=(t.al-t.ar)/2-Math.sin(2*Math.PI*s/ve.sim.tMax)*(t.al+t.ar)/2,h=Et(a);e.logstr+=`swing position angle: ${L(ut(h))} degree
77
+ `;const d=t.H1+t.H2-t.H3,u=d+t.H4+t.H5-t.H6+t.H7,f=u+t.H8,g=vt(Zt.pDef),S=vt(Kt.pDef),_=vt(De.pDef),P=vt(Qt.pDef);g.setVal("H1",t.H1),g.setVal("H2",t.H2),g.setVal("D1",t.D1),g.setVal("D2",t.D2),g.setVal("D3",t.D1-6*t.E1),g.setVal("E1",t.E1),g.setVal("E2",t.E1);const A=32,D=(t.D1-6*t.E1)/(A*4);g.setVal("N1",A),g.setVal("D5",D),g.setVal("L1",t.E1+D/2),g.setVal("H3",t.H1/4),g.setVal("H4",t.H1/2),g.setVal("D4",t.H1/4),g.setVal("L2",t.H1/80),g.setVal("E3",t.H1/80),g.setVal("holders",0),S.setVal("H1",t.H4),S.setVal("H2",t.H5),S.setVal("H3",t.H4-2*t.E1),S.setVal("D1",t.D3),S.setVal("D2",t.D4),S.setVal("L9",t.D3/2),S.setVal("H7",t.D3/2*1.6),S.setVal("H6",t.D3/20),S.setVal("R9",t.D3/20),S.setVal("E1",t.E1),S.setVal("E3",t.E1),S.setVal("E4",t.E1),S.setVal("E6",t.E1);const H=t.D2*.6,k=24,R=H/(k*4);if(S.setVal("D3",H),t.D2>t.D3-2*t.E1)throw`err153: D2 ${t.D2} too large compare to D3 ${t.D3} and E1 ${t.E1}`;if(S.setVal("N1",k),S.setVal("D7",R),S.setVal("L1",R),S.setVal("H4",t.H6),S.setVal("D4",t.D5),S.setVal("L7",t.L7),S.setVal("L8",t.L8),S.setVal("D6",t.D9),S.setVal("H5",t.H7+t.H8),S.setVal("D5",t.D6),S.setVal("D8",t.D7),t.D6>=t.D7)throw`err164: D6 ${t.D6} too large compare to D7 ${t.D7}`;const E=t.L4-2*t.L3;if(S.setVal("L4",E),E<=0)throw`err169: L3 ${t.L3} too large compare to L4 ${t.L4}`;S.setVal("L5",t.L5+2*t.L3),S.setVal("L6",t.L6+2*t.L3);const p=t.L5*.96,b=6;if(_.setVal("L5",p),_.setVal("D1",t.D8),_.setVal("L1",t.S1),_.setVal("L2",t.S2),_.setVal("L3",t.E2*2),_.setVal("E1",t.E1),_.setVal("E2",t.E2),_.setVal("E3",t.E1),_.setVal("L4",t.L2/2-t.H8),_.setVal("R2",0),_.setVal("N1",b),_.setVal("L6",p/(b*10)),P.setVal("L2",t.L2),P.setVal("D1",t.D6),P.setVal("H3",t.H9),P.setVal("H4",t.H9),P.setVal("L1",t.L1),t.L1<4*t.L4+2*t.L6+t.L5+2*t.L3)throw`err185: L1 ${t.L1} too small compare to L4 ${t.L4}, L5 ${t.L5}, L6 ${t.L6}`;P.setVal("H1",t.L3),P.setVal("H2",t.L3),P.setVal("L4",t.L4),P.setVal("L5",t.L5),P.setVal("L6",t.L6),P.setVal("L3",t.D7),P.setVal("S1",t.D6/2),P.setVal("R2",0);const $=Zt.pGeom(0,g.getParamVal(),g.getSuffix());Mt($),e.logstr+=pt($.logstr,g.getPartNameSuffix());const V=Kt.pGeom(0,S.getParamVal(),S.getSuffix());Mt(V),e.logstr+=pt(V.logstr,S.getPartNameSuffix());const N=De.pGeom(0,_.getParamVal(),_.getSuffix());Mt(N),e.logstr+=pt(N.logstr,_.getPartNameSuffix());const v=Qt.pGeom(0,P.getParamVal(),P.getSuffix());Mt(v),e.logstr+=pt(v.logstr,P.getPartNameSuffix()),n.mergeFigure($.fig.poleCut),n.mergeFigure(V.fig.faceBeam.translate(0,d)),n.mergeFigure(N.fig.faceLegs.translate(0,u).rotate(0,u,h/2)),n.mergeFigure(v.fig.faceSide.translate(0,f).rotate(0,f,h)),i.mergeFigure($.fig.poleCut),i.mergeFigure(V.fig.faceCone.translate(0,d)),i.mergeFigure(N.fig.faceBody.translate(-p/2,u)),i.mergeFigure(v.fig.faceFace.translate(0,f)),e.fig={faceSide:n,faceFace:i};const G=e.partName;e.vol={inherits:[{outName:`inpax_${G}_poleStatic`,subdesign:"pax_pole_static",subgeom:$,rotate:[0,0,0],translate:[0,0,0]},{outName:`inpax_${G}_rake`,subdesign:"pax_rake",subgeom:V,rotate:[0,0,0],translate:[0,0,d]},{outName:`inpax_${G}_swing`,subdesign:"pax_swing",subgeom:v,rotate:[Math.PI/2,0,0],translate:[0,0,f]},{outName:`inpax_${G}_spider`,subdesign:"pax_spider",subgeom:N,rotate:[Math.PI/2,0,0],translate:[0,p/2,u]}],extrudes:[],volumes:[{outName:`pax_${G}`,boolMethod:lt.eUnion,inList:[`inpax_${G}_poleStatic`,`inpax_${G}_rake`,`inpax_${G}_swing`,`inpax_${G}_spider`]}]};const Y={partName:g.getPartName(),dparam:g.getDesignParamList(),orientation:[0,0,0],position:[0,0,0]},B={partName:S.getPartName(),dparam:S.getDesignParamList(),orientation:[0,0,0],position:[0,0,d]},O={partName:_.getPartName(),dparam:_.getDesignParamList(),orientation:[Math.PI/2,0,0],position:[0,p/2,u]},F={partName:P.getPartName(),dparam:P.getDesignParamList(),orientation:[Math.PI/2,0,0],position:[0,0,f]};e.sub={pole_static_1:Y,rake_1:B,spider_1:O,swing_1:F},e.logstr+=`heliostat-overview drawn successfully!
78
+ `,e.calcErr=!1}catch(r){e.logstr+=r,console.log(r)}return e}var Io={pTitle:"Heliostat overview",pDescription:"The heliostat inclination mechanism",pDef:ve,pGeom:Co},rs={partName:"rake_stopper",params:[c("D1","mm",600,10,4e3,1),c("D2","mm",400,10,4e3,1),c("D3","mm",400,1,4e3,1),c("H1","mm",800,1,4e3,1),c("H2","mm",3e3,20,6e3,1),c("H3","mm",400,0,4e3,1),c("E1","mm",20,1,80,1),c("E3","mm",30,1,80,1),U("transversal"),c("H4","mm",200,1,1e3,1),c("D4","mm",300,1,1e3,1),c("E4","mm",20,1,80,1),c("H5","mm",400,1,2e3,1),c("D5","mm",200,1,1e3,1),c("L4","mm",300,1,1e3,1),c("L5","mm",2e3,1,4e3,1),c("L6","mm",2e3,1,4e3,1),c("D8","mm",400,1,1e3,1),U("diagonal"),c("D6","mm",100,1,600,1),c("E6","mm",10,1,80,1),c("L7","mm",100,1,1e3,1),c("L8","mm",200,1,1e3,1),U("base"),c("N1","",24,3,100,1),c("D7","mm",40,1,100,1),c("L1","mm",30,1,300,1),U("door"),c("H6","mm",100,1,1e3,1),c("H7","mm",600,1,2e3,1),c("L9","mm",300,1,1e3,1),c("R9","mm",50,0,300,1),c("doorOrientation","degree",0,-180,180,1),U("stoppers"),c("S1","mm",100,1,300,1),c("S2","mm",2e3,1,8e3,1),c("S3","mm",100,0,8e3,1),c("E7","mm",5,1,80,1),U("low stopper"),c("JD1","mm",200,1,500,1),c("JE1","mm",5,1,80,1),c("JL1","mm",260,1,2e3,1),c("JH1","mm",20,-500,500,1),c("JS1","mm",100,1,500,1),c("JS2","mm",200,1,500,1),U("high stopper"),c("JD3","mm",200,1,500,1),c("JE3","mm",5,1,80,1),c("JS3","mm",120,1,500,1),c("JD4","mm",200,1,500,1),c("JE4","mm",5,1,80,1),c("JS4","mm",120,1,500,1)],paramSvg:{D1:"rake_face.svg",D2:"rake_side.svg",D3:"rake_face.svg",H1:"rake_face.svg",H2:"rake_face.svg",H3:"rake_face.svg",E1:"rake_face.svg",E3:"rake_face.svg",H4:"rake_side.svg",D4:"rake_side.svg",E4:"rake_side.svg",H5:"rake_side.svg",D5:"rake_side.svg",L4:"rake_face.svg",L5:"rake_face.svg",L6:"rake_face.svg",D6:"rake_face.svg",E6:"rake_face.svg",L7:"rake_face.svg",L8:"rake_face.svg",N1:"rake_top.svg",D7:"rake_top.svg",L1:"rake_top.svg",D8:"rake_side.svg",H6:"rake_door.svg",H7:"rake_door.svg",L9:"rake_door.svg",R9:"rake_door.svg",doorOrientation:"rake_door.svg",S1:"rake_side_stopper.svg",S2:"rake_top_stopper.svg",S3:"rake_side_stopper.svg",E7:"rake_side_stopper.svg",JD1:"rake_low_stopper_holder.svg",JE1:"rake_low_stopper_holder.svg",JL1:"rake_low_stopper_holder.svg",JH1:"rake_low_stopper_holder.svg",JS1:"rake_side_stopper.svg",JS2:"rake_top_stopper.svg",JD3:"rake_side_stopper.svg",JE3:"rake_side_stopper.svg",JS3:"rake_top_stopper.svg",JD4:"rake_top_stopper.svg",JE4:"rake_top_stopper.svg",JS4:"rake_side_stopper.svg"},sim:{tMax:180,tStep:.5,tUpdate:500}};function mo(s,t,o=""){const e=_t(rs.partName+o),n=I(),i=I(),r=I(),l=I(),a=I(),h=I(),d=I(),u=I(),f=I(),g=I(),S=I(),_=I(),P=I(),A=I(),D=I(),H=I(),k=I(),R=I(),E=I();e.logstr+=`${e.partName} simTime: ${s}
79
+ `;try{const b=Math.PI,$=Math.PI/2,V=-Math.PI/2,N=t.D1/2,v=t.H1+t.H2,G=v-t.H4+t.H5,Y=G-t.S2,B=t.H1+t.H2-t.H4,O=B+t.D4/2,F=t.H1+t.S3,W=t.L5/2,T=t.S1/2,tt=t.S1-2*t.E7,rt=tt/2,C=t.S2-T,ot=Y-t.JH1,M=t.JD1/2,X=M-t.JE1,ct=N+t.JS2,m=W-T,y=N+t.JS3,Q=t.JD3-2*t.JE3,K=t.D4/2+t.JS4,ft=t.JD4-2*t.JE4;if(2*t.E7>=t.S1)throw`err135: E7 ${t.E7} too large compare to S1 ${t.S1}`;if(t.L5<t.D2)throw`err138: L5 ${t.L5} too small compare to D2 ${t.D2}`;if(Y-t.JH1-t.JD1/2<0)throw`err143: S2 ${t.S2} too large compare to H1H5 ${L(G)}`;if(t.JS1<t.S1/2)throw`err144: JS1 ${t.JS1} too small compare to S1 ${t.S1}`;if(t.JE1>t.JD1/2)throw`err145: JE1 ${t.JE1} too large compare to JD1 ${t.JD1}`;if(t.JL1>t.D1)throw`err146: JL1 ${t.JL1} too large compare to D1 ${t.D1}`;if(t.JL1<t.JD1)throw`err147: JL1 ${t.JL1} too small compare to JD1 ${t.JD1}`;if(Math.abs(t.JH1)>t.JD1/2+T)throw`err148: JH1 ${t.JH1} too large compare to JD1 ${t.JD1} and S1 ${t.S1}`;if(t.JS2<t.JS1-T)throw`err149: JS2 ${t.JS2} too small compare to JS1 ${t.JS1} and S1 ${t.S1}`;if(t.S3>t.H2-t.H4)throw`err150: S3 ${t.S3} too large compare to H2 ${t.H2} and H4 ${t.H4}`;if(t.JE3>t.JD3/2)throw`err151: JE3 ${t.JE3} too large compare to JD3 ${t.JD3}`;if(t.JE4>t.JD4/2)throw`err152: JE4 ${t.JE4} too large compare to JD4 ${t.JD4}`;e.logstr+=`cone-height: ${L(v)} mm
80
+ `,e.logstr+=`cone-height total: ${L(G)} mm
81
+ `;const at=[],St=[];H.addSecond(Z(-W,Y,t.L5,t.S1,0)),H.addSecond(Z(-W,Y,t.L5,tt,0)),at.push(x(-t.JL1/2,ot,M)),at.push(x(-t.JL1/2,ot,X)),St.push(x(t.JL1/2,ot,M)),St.push(x(t.JL1/2,ot,X)),H.addMainOI(at),H.addMainOI(St);const nt=vt(Kt.pDef);nt.setVal("D1",t.D1),nt.setVal("D2",t.D2),nt.setVal("D3",t.D3),nt.setVal("H1",t.H1),nt.setVal("H2",t.H2),nt.setVal("H3",t.H3),nt.setVal("E1",t.E1),nt.setVal("E3",t.E3),nt.setVal("H4",t.H4),nt.setVal("D4",t.D4),nt.setVal("E4",t.E4),nt.setVal("H5",t.H5),nt.setVal("D5",t.D5),nt.setVal("L4",t.L4),nt.setVal("L5",t.L5),nt.setVal("L6",t.L6),nt.setVal("D6",t.D6),nt.setVal("E6",t.E6),nt.setVal("L7",t.L7),nt.setVal("L8",t.L8),nt.setVal("N1",t.N1),nt.setVal("D7",t.D7),nt.setVal("L1",t.L1),nt.setVal("D8",t.D8),nt.setVal("H6",t.H6),nt.setVal("H7",t.H7),nt.setVal("L9",t.L9),nt.setVal("R9",t.R9),nt.setVal("doorOrientation",t.doorOrientation);const et=Kt.pGeom(0,nt.getParamVal(),nt.getSuffix());Mt(et),e.logstr+=pt(et.logstr,nt.getPartNameSuffix()),n.mergeFigure(et.fig.faceCone),n.mergeFigure(H,!0),i.mergeFigure(et.fig.faceBeam),r.mergeFigure(et.fig.faceBeamHollow),l.mergeFigure(et.fig.faceDisc),a.mergeFigure(et.fig.faceHand),h.mergeFigure(et.fig.faceWing),d.mergeFigure(et.fig.faceWingHollow),u.mergeFigure(et.fig.faceDoor),u.mergeFigure(H,!0),f.mergeFigure(et.fig.faceDisc,!0),f.addMainOI([Z(-N-t.JS1,-W,t.L5,t.S1,$),Z(-N-t.JS1,-W,t.L5,tt,$)]),f.addMainOI([Z(C,-W,t.L5,t.S1,$),Z(C,-W,t.L5,tt,$)]),f.addMainOI([Z(0,-W+T,C,t.S1,0),Z(0,-W+T,C,tt,0)]),f.addMainOI([Z(0,W-T,C,t.S1,0),Z(0,W-T,C,tt,0)]),f.addMainOI([Z(0,-N-T,C,t.S1,0),Z(0,-N-T,C,tt,0)]),f.addMainOI([Z(0,N+T,C,t.S1,0),Z(0,N+T,C,tt,0)]),f.addSecond(Z(0,-t.JL1/2,ct,2*M,b)),f.addSecond(Z(0,-t.JL1/2,ct,2*X,b)),f.addSecond(Z(0,t.JL1/2,ct,2*M,b)),f.addSecond(Z(0,t.JL1/2,ct,2*X,b)),f.addSecond(Z(0,0,y,t.JD3,V)),f.addSecond(Z(0,0,y,Q,V)),f.addSecond(Z(0,0,y,t.JD3,$)),f.addSecond(Z(0,0,y,Q,$)),g.mergeFigure(et.fig.faceBeam,!0),g.addMainOI([x(-N-t.JS1,Y,T),x(-N-t.JS1,Y,rt)]),g.addMainOI([x(C,O+T,T),x(C,O+T,rt)]),g.addSecond(Z(0,O+T,C,t.S1,0)),g.addSecond(Z(0,O+T,C,tt,0));const Lt=O+T-F,kt=Math.sqrt(C**2+Lt**2),Ct=Math.atan2(Lt,C);e.logstr+=`stopper-rod: L ${L(kt)} mm, A ${L(ut(Ct))} degree
82
+ `,g.addSecond(Z(0,F,kt,t.S1,Ct)),g.addSecond(Z(0,F,kt,tt,Ct)),g.addSecond(Z(0,ot,ct,2*M,b)),g.addSecond(Z(0,ot,ct,2*X,b)),g.addSecond(x(0,F,t.JD3/2)),g.addSecond(x(0,F,t.JD3/2-t.JE3)),g.addSecond(Z(0,B,K,t.JD4,$)),g.addSecond(Z(0,B,K,ft,$)),S.mergeFigure(g,!0),S.addMainO(x(-N-t.JS1,Y,rt)),S.addMainO(x(t.S2-T,O+T,rt)),_.mergeFigure(et.fig.faceCone,!0),_.mergeFigure(H,!0),_.addMainOI([x(-t.L5/2+T,O+T,T),x(-t.L5/2+T,O+T,rt)]),_.addMainOI([x(t.L5/2-T,O+T,T),x(t.L5/2-T,O+T,rt)]),P.mergeFigure(et.fig.faceCone,!0),P.mergeFigure(H,!0),P.addSecond(x(-t.L5/2+T,O+T,T)),P.addMainO(x(-t.L5/2+T,O+T,rt)),P.addSecond(x(t.L5/2-T,O+T,T)),P.addMainO(x(t.L5/2-T,O+T,rt)),A.mergeFigure(et.fig.faceCone,!0),A.mergeFigure(H,!0),A.addMainOI([x(-N-T,0,T),x(-N-T,0,rt)]),A.addMainOI([x(N+T,0,T),x(N+T,0,rt)]),D.mergeFigure(et.fig.faceCone,!0),D.mergeFigure(H,!0),D.addSecond(x(-N-T,0,T)),D.addMainO(x(-N-T,0,rt)),D.addSecond(x(N+T,0,T)),D.addMainO(x(N+T,0,rt)),k.mergeFigure(et.fig.faceCone,!0),k.mergeFigure(H),k.addSecond(Z(-m,B,K,t.JD4,$)),k.addSecond(Z(-m,B,K,ft,$)),k.addSecond(Z(m,B,K,t.JD4,$)),k.addSecond(Z(m,B,K,ft,$)),k.addSecond(Z(0,F,y,t.JD3,b)),k.addSecond(Z(0,F,y,Q,b)),k.addSecond(Z(0,F,y,t.JD3,0)),k.addSecond(Z(0,F,y,Q,0)),R.mergeFigure(g,!0),R.addMainOI([x(0,F,t.JD3/2),x(0,F,t.JD3/2-t.JE3)]),E.mergeFigure(f,!0),E.addMainOI([x(0,-m,t.JD4/2),x(0,-m,t.JD4/2-t.JE4)]),E.addMainOI([x(0,m,t.JD4/2),x(0,m,t.JD4/2-t.JE4)]),e.fig={faceCone:n,faceBeam:i,faceBeamHollow:r,faceDisc:l,faceHand:a,faceWing:h,faceWingHollow:d,faceDoor:u,faceStopperTop:f,faceStopperSide:g,faceStopperSideH:S,faceStopperFaceT:_,faceStopperFaceTH:P,faceStopperFaceB:A,faceStopperFaceBH:D,faceLowStopperHolder:k,faceHi1StopperHolder:R,faceHi2StopperHolder:E};const st=e.partName;e.vol={inherits:[{outName:`inpax_${st}_rake`,subdesign:"pax_rake",subgeom:et,rotate:[0,0,0],translate:[0,0,0]},{outName:`inpax_${st}_coneHollow`,subdesign:"subpax_rake_coneHollow",subgeom:et,rotate:[0,0,0],translate:[0,0,0]},{outName:`inpax_${st}_beamHollow`,subdesign:"subpax_rake_beamHollow",subgeom:et,rotate:[0,0,0],translate:[0,0,0]}],extrudes:[{outName:`subpax_${st}_stpSide`,face:`${st}_faceStopperSide`,extrudeMethod:q.eLinearOrtho,length:t.L5,rotate:[Math.PI/2,0,0],translate:[0,t.L5/2,0]},{outName:`subpax_${st}_stpSideH`,face:`${st}_faceStopperSideH`,extrudeMethod:q.eLinearOrtho,length:t.L5,rotate:[Math.PI/2,0,0],translate:[0,t.L5/2,0]},{outName:`subpax_${st}_stpFaceT`,face:`${st}_faceStopperFaceT`,extrudeMethod:q.eLinearOrtho,length:C,rotate:[Math.PI/2,0,Math.PI/2],translate:[0,0,0]},{outName:`subpax_${st}_stpFaceTH`,face:`${st}_faceStopperFaceTH`,extrudeMethod:q.eLinearOrtho,length:C,rotate:[Math.PI/2,0,Math.PI/2],translate:[0,0,0]},{outName:`subpax_${st}_stpFaceB`,face:`${st}_faceStopperFaceB`,extrudeMethod:q.eLinearOrtho,length:kt,rotate:[Math.PI/2-Ct,0,Math.PI/2],translate:[0,0,F]},{outName:`subpax_${st}_stpFaceBH`,face:`${st}_faceStopperFaceBH`,extrudeMethod:q.eLinearOrtho,length:kt,rotate:[Math.PI/2-Ct,0,Math.PI/2],translate:[0,0,F]},{outName:`subpax_${st}_lowSH`,face:`${st}_faceLowStopperHolder`,extrudeMethod:q.eLinearOrtho,length:ct,rotate:[Math.PI/2,0,-Math.PI/2],translate:[0,0,0]},{outName:`subpax_${st}_Hi1SH1`,face:`${st}_faceHi1StopperHolder`,extrudeMethod:q.eLinearOrtho,length:y,rotate:[Math.PI/2,0,0],translate:[0,0,0]},{outName:`subpax_${st}_Hi1SH2`,face:`${st}_faceHi1StopperHolder`,extrudeMethod:q.eLinearOrtho,length:y,rotate:[Math.PI/2,0,Math.PI],translate:[0,0,0]},{outName:`subpax_${st}_Hi2SH`,face:`${st}_faceHi2StopperHolder`,extrudeMethod:q.eLinearOrtho,length:K,rotate:[0,0,0],translate:[0,0,B]}],volumes:[{outName:`ipax_${st}_plus`,boolMethod:lt.eUnion,inList:[`subpax_${st}_stpSide`,`subpax_${st}_stpFaceT`,`subpax_${st}_stpFaceB`,`subpax_${st}_lowSH`,`subpax_${st}_Hi1SH1`,`subpax_${st}_Hi1SH2`,`subpax_${st}_Hi2SH`]},{outName:`ipax_${st}_hollow`,boolMethod:lt.eUnion,inList:[`inpax_${st}_coneHollow`,`inpax_${st}_beamHollow`,`subpax_${st}_stpSideH`,`subpax_${st}_stpFaceTH`,`subpax_${st}_stpFaceBH`]},{outName:`ipax_${st}_stopper`,boolMethod:lt.eSubstraction,inList:[`ipax_${st}_plus`,`ipax_${st}_hollow`]},{outName:`pax_${st}`,boolMethod:lt.eUnion,inList:[`inpax_${st}_rake`,`ipax_${st}_stopper`]}]},e.sub={},e.logstr+=`heliostat-rake drawn successfully!
83
+ `,e.calcErr=!1}catch(p){e.logstr+=p,console.log(p)}return e}var Me={pTitle:"Heliostat rake with stopper",pDescription:"The rake-stopper on top of the V-Axis of the heliostat",pDef:rs,pGeom:mo},be={partName:"heliostat_2",params:[c("H1","mm",3e3,10,4e4,1),c("H2","mm",2500,50,4e4,1),c("D1","mm",1e3,20,4e3,1),c("D2","mm",700,20,4e3,1),c("E1","mm",30,1,80,1),U("rake"),c("H3","mm",200,1,500,1),c("H4","mm",800,1,4e3,1),c("H5","mm",3e3,50,6e3,1),c("H6","mm",200,1,4e3,1),c("H7","mm",400,1,4e3,1),c("D3","mm",900,20,4e3,1),c("D4","mm",400,20,4e3,1),c("D5","mm",300,20,1e3,1),c("D6","mm",200,10,1e3,1),c("D7","mm",400,10,1e3,1),U("rake diagonal"),c("D9","mm",100,1,1e3,1),c("L7","mm",100,1,1e3,1),c("L8","mm",200,1,1e3,1),U("rake stopper"),c("S1","mm",100,1,800,1),U("swing"),c("L1","mm",12500,100,4e4,1),c("L2","mm",6e3,100,4e4,1),c("L3","mm",100,1,500,1),c("L4","mm",600,1,4e3,1),c("L5","mm",2e3,10,6e3,1),c("L6","mm",2e3,1,6e3,1),c("H9","mm",100,1,400,1),c("S2","mm",10,0,2e3,1),U("motion amplitude"),c("al","degree",80,0,95,1)],paramSvg:{H1:"heliostat_overview.svg",H2:"heliostat_side.svg",H3:"heliostat2_side_sizing.svg",H4:"heliostat2_side_sizing.svg",H5:"heliostat2_side_sizing.svg",H6:"heliostat2_side_sizing.svg",H7:"heliostat2_side_sizing.svg",H9:"heliostat2_side_sizing.svg",D1:"heliostat2_side_sizing.svg",D2:"heliostat2_side_sizing.svg",D3:"heliostat2_side_sizing.svg",D4:"heliostat2_side_sizing.svg",D5:"heliostat2_side_sizing.svg",D6:"heliostat2_side_sizing.svg",D7:"heliostat2_side_sizing.svg",D9:"heliostat2_face_sizing.svg",E1:"heliostat2_side_sizing.svg",L1:"heliostat2_face_sizing.svg",L2:"heliostat2_side_sizing.svg",L3:"heliostat2_face_sizing.svg",L4:"heliostat2_face_sizing.svg",L5:"heliostat2_face_sizing.svg",L6:"heliostat2_face_sizing.svg",L7:"heliostat2_face_sizing.svg",L8:"heliostat2_face_sizing.svg",S1:"heliostat2_side_sizing.svg",S2:"heliostat2_side_sizing.svg",al:"heliostat2_side_sizing.svg"},sim:{tMax:100,tStep:.5,tUpdate:500}};function Vo(s,t,o=""){const e=_t(be.partName+o),n=I(),i=I(),r=I();e.logstr+=`${e.partName} simTime: ${s}
84
+ `;try{const l=t.H1+t.H2-t.H3+t.H4+t.H5-t.H6+t.H7;e.logstr+=`heliostat-height: ${L(l)}, diameter ${L(t.D1)} m
85
+ `,e.logstr+=`heliostat-swing-length: ${L(t.L1)}, width ${L(t.L2)} m
86
+ `;const a=t.al*s/be.sim.tMax,h=Et(a);e.logstr+=`swing position angle: ${L(ut(h))} degree
87
+ `;const d=t.H1+t.H2-t.H3,u=d+t.H4+t.H5-t.H6+t.H7,f=vt(Zt.pDef),g=vt(Me.pDef),S=vt(Qt.pDef);f.setVal("H1",t.H1),f.setVal("H2",t.H2),f.setVal("D1",t.D1),f.setVal("D2",t.D2),f.setVal("D3",t.D1-6*t.E1),f.setVal("E1",t.E1),f.setVal("E2",t.E1);const _=32,P=(t.D1-6*t.E1)/(_*4);f.setVal("N1",_),f.setVal("D5",P),f.setVal("L1",t.E1+P/2),f.setVal("H3",t.H1/4),f.setVal("H4",t.H1/2),f.setVal("D4",t.H1/4),f.setVal("L2",t.H1/80),f.setVal("E3",t.H1/80),f.setVal("holders",0),g.setVal("H1",t.H4),g.setVal("H2",t.H5),g.setVal("H3",t.H4-2*t.E1),g.setVal("D1",t.D3),g.setVal("D2",t.D4),g.setVal("L9",t.D3/2),g.setVal("H7",t.D3/2*1.6),g.setVal("H6",t.D3/20),g.setVal("R9",t.D3/20),g.setVal("E1",t.E1),g.setVal("E3",t.E1),g.setVal("E4",t.E1),g.setVal("E6",t.E1),g.setVal("E7",t.E1);const A=t.D2*.6,D=24,H=A/(D*4);if(g.setVal("D3",A),t.D2>t.D3-2*t.E1)throw`err153: D2 ${t.D2} too large compare to D3 ${t.D3} and E1 ${t.E1}`;if(g.setVal("N1",D),g.setVal("D7",H),g.setVal("L1",H),g.setVal("H4",t.H6),g.setVal("D4",t.D5),g.setVal("L7",t.L7),g.setVal("L8",t.L8),g.setVal("D6",t.D9),g.setVal("H5",t.H7),g.setVal("D5",t.D6),g.setVal("D8",t.D7),t.D6>=t.D7)throw`err164: D6 ${t.D6} too large compare to D7 ${t.D7}`;const k=t.L4-2*t.L3;if(g.setVal("L4",k),k<=0)throw`err169: L3 ${t.L3} too large compare to L4 ${t.L4}`;if(g.setVal("L5",t.L5+2*t.L3),g.setVal("L6",t.L6+2*t.L3),g.setVal("S1",t.S1),g.setVal("S2",t.L2/2),g.setVal("S3",0),g.setVal("S3",0),g.setVal("JD1",t.D3/4),g.setVal("JE1",t.E1),g.setVal("JL1",t.D3/3),g.setVal("JH1",0),g.setVal("JS1",t.S1/2),g.setVal("JS2",t.S1/2),g.setVal("JD3",t.D4/4),g.setVal("JE3",t.E1),g.setVal("JS3",t.D4/4),g.setVal("JD4",t.D4/4),g.setVal("JE4",t.E1),g.setVal("JS4",t.D4/4),S.setVal("L2",t.L2),S.setVal("D1",t.D6),S.setVal("H3",t.H9),S.setVal("H4",t.H9),S.setVal("L1",t.L1),t.L1<4*t.L4+2*t.L6+t.L5+2*t.L3)throw`err185: L1 ${t.L1} too small compare to L4 ${t.L4}, L5 ${t.L5}, L6 ${t.L6}`;S.setVal("H1",t.L3),S.setVal("H2",t.L3),S.setVal("L4",t.L4),S.setVal("L5",t.L5),S.setVal("L6",t.L6),S.setVal("L3",t.D7),S.setVal("S1",t.D6/2),S.setVal("S2",t.S2),S.setVal("R2",0);const R=Zt.pGeom(0,f.getParamVal(),f.getSuffix());Mt(R),e.logstr+=pt(R.logstr,f.getPartNameSuffix());const E=Me.pGeom(0,g.getParamVal(),g.getSuffix());Mt(E),e.logstr+=pt(E.logstr,g.getPartNameSuffix());const p=Qt.pGeom(0,S.getParamVal(),S.getSuffix());Mt(p),e.logstr+=pt(p.logstr,S.getPartNameSuffix()),n.mergeFigure(R.fig.poleCut),n.mergeFigure(E.fig.faceStopperSide.translate(0,d)),n.mergeFigure(p.fig.faceSide.translate(0,u).rotate(0,u,h)),i.mergeFigure(R.fig.poleCut),i.mergeFigure(E.fig.faceStopperFaceT.translate(0,d)),i.mergeFigure(p.fig.faceFace.translate(0,u)),r.mergeFigure(R.fig.poleBottom.translate(0,0)),r.mergeFigure(E.fig.faceStopperTop.translate(0,0)),r.mergeFigure(p.fig.faceTop.rotate(0,0,Math.PI/2)),e.fig={faceSide:n,faceFace:i,faceTop:r};const b=e.partName;e.vol={inherits:[{outName:`inpax_${b}_poleStatic`,subdesign:"pax_pole_static",subgeom:R,rotate:[0,0,0],translate:[0,0,0]},{outName:`inpax_${b}_rake`,subdesign:"pax_rake_stopper",subgeom:E,rotate:[0,0,0],translate:[0,0,d]},{outName:`inpax_${b}_swing`,subdesign:"pax_swing",subgeom:p,rotate:[Math.PI/2,0,0],translate:[0,0,u]}],extrudes:[],volumes:[{outName:`pax_${b}`,boolMethod:lt.eUnion,inList:[`inpax_${b}_poleStatic`,`inpax_${b}_rake`,`inpax_${b}_swing`]}]};const $=f.getDesignParamList(),V={partName:f.getPartName(),dparam:$,orientation:[0,0,0],position:[0,0,0]},N={partName:g.getPartName(),dparam:g.getDesignParamList(),orientation:[0,0,0],position:[0,0,d]},v={partName:S.getPartName(),dparam:S.getDesignParamList(),orientation:[0,0,0],position:[0,0,u]};e.sub={pole_static_1:V,rake_1:N,swing_1:v},e.logstr+=`heliostat-2-overview drawn successfully!
88
+ `,e.calcErr=!1}catch(l){e.logstr+=l,console.log(l)}return e}var Oo={pTitle:"Heliostat-2 overview",pDescription:"The heliostat-2 inclination mechanism",pDef:be,pGeom:Vo},cs={partName:"base",params:[c("D1","mm",600,10,4e3,10),c("D2","mm",700,10,4e3,10),c("D3","mm",400,10,4e3,10),c("D4","mm",500,10,4e3,10),c("E1","mm",30,1,80,1),c("E2","mm",30,1,80,1),c("E3","mm",30,1,80,1),c("H1","mm",800,10,4e3,10),c("H2","mm",50,1,4e3,1),U("side holes"),c("H3","mm",400,10,4e3,10),c("N2","",12,1,100,1),c("L2","mm",100,1,400,1),U("base holes"),c("N1","",24,3,100,1),c("D5","mm",40,1,100,1),c("L1","mm",34,1,300,1)],paramSvg:{D1:"base_cut.svg",D2:"base_cut.svg",D3:"base_cut.svg",D4:"base_cut.svg",E1:"base_cut.svg",E2:"base_cut.svg",E3:"base_cut.svg",H1:"base_cut.svg",H2:"base_hollow.svg",H3:"base_hollow.svg",N2:"base_hollow.svg",L2:"base_hollow.svg",N1:"base_top.svg",D5:"base_top.svg",L1:"base_top.svg"},sim:{tMax:180,tStep:.5,tUpdate:500}};function Bo(s,t,o=""){const e=_t(cs.partName+o);let n,i,r;const l=I(),a=I(),h=I();e.logstr+=`${e.partName} simTime: ${s}
89
+ `;try{const d=t.D1/2,u=t.D2/2,f=t.D3/2,g=t.D4/2,S=t.D5/2,_=t.L2/2;if(u<d)throw`err089: D2 ${t.D2} too small compare to D1 ${t.D1}`;if(g>d-t.E2)throw`err189: D4 ${t.D4} too large compare to D1 ${t.D1} and E2 ${t.E2}`;e.logstr+=`base-height: ${L(t.H1)} mm
90
+ `,e.logstr+=`base-external-diameter: ${L(t.D2)} mm
91
+ `;const P=t.D1*Math.PI/t.N2-t.L2;if(e.logstr+=`inter-hollow: ${L(P)} mm
92
+ `,n=function(v){return J(v*u,0).addSegStrokeA(v*u,t.E3).addSegStrokeA(v*d,t.E3).addSegStrokeA(v*d,t.H1).addSegStrokeA(v*(d-t.E2),t.H1).addSegStrokeA(v*(d-t.E2),t.E3).addSegStrokeA(v*g,t.E3).addSegStrokeA(v*g,0).closeSegStroke()},i=function(v){return J(v*u,0).addSegStrokeA(v*u,t.E3).addSegStrokeA(v*d,t.E3).addSegStrokeA(v*d,t.H1).addSegStrokeA(v*f,t.H1).addSegStrokeA(v*f,t.H1-t.E1).addSegStrokeA(v*(d-t.E2),t.H1-t.E1).addSegStrokeA(v*(d-t.E2),t.E3).addSegStrokeA(v*g,t.E3).addSegStrokeA(v*g,0).closeSegStroke()},t.H1<t.E3+t.H2+t.H3+t.E1)throw`err125: H1 ${t.H1} too small compare to E3 ${t.H3}, H2 ${t.H2}, H3 ${t.H3}, E1 ${t.E1}`;if(t.D5>t.H3)throw`err128: D5 ${t.D5} too large compare to H3 ${t.H3}`;const A=2*Math.asin(_/(d-t.E2));if(t.N2*A>2*Math.PI)throw`err132: N2 ${t.N2} too large compare to L2 ${t.L2}, D1 ${t.D1}, E2 ${t.E2}`;const D=t.E3+t.H2+_;r=function(v){return J(v*_,D).addSegStrokeA(v*_,D+t.H3-t.L2).addPointA(-v*_,D+t.H3-t.L2).addSegArc(_,!1,!0).addSegStrokeA(-v*_,D).closeSegArc(_,!1,!0)},l.addMainO(n(1)),l.addSecond(i(1)),l.addSecond(i(-1)),l.addSecond(r(1));const H=[];if(f+t.L1+S>d-t.E2)throw`err127: D3 ${t.D3} too large compare to D1 ${t.D1}, E2 ${t.E2}, L1 ${t.L1}, R5 ${t.D5}`;if(S>t.L1)throw`err130: D5 ${t.D5} too large compare to L1 ${t.L1}`;const k=2*Math.asin(S/(u+t.L1));if(t.N1*k>2*Math.PI)throw`err134: N1 ${t.N1} too large compare to D5 ${t.D5}, L1 ${t.L1}, D2 ${t.D2}`;H.push(x(0,0,d)),H.push(x(0,0,f));const R=f+t.L1,E=2*Math.PI/t.N1;for(let v=0;v<t.N1;v++){const G=R*Math.cos(v*E),Y=R*Math.sin(v*E);H.push(x(G,Y,S))}a.addMainOI(H),a.addSecond(x(0,0,d-t.E1)),a.addSecond(x(0,0,u)),a.addSecond(x(0,0,g)),h.addMainO(r(1)),h.addSecond(i(1)),h.addSecond(i(-1)),e.fig={faceCut:l,faceTop:a,faceHollow:h};const p=e.partName,b=2*Math.PI/t.N2,$=[...Array(t.N2).keys()],V=$.map(v=>({outName:`subpax_${p}_hollow_${v}`,face:`${p}_faceHollow`,extrudeMethod:q.eLinearOrtho,length:u+t.E2,rotate:[Math.PI/2,0,v*b],translate:[0,0,0]})),N=$.map(v=>`subpax_${p}_hollow_${v}`);e.vol={extrudes:[{outName:`subpax_${p}_cut`,face:`${p}_faceCut`,extrudeMethod:q.eRotate,rotate:[0,0,0],translate:[Math.PI/2,0,0]},{outName:`subpax_${p}_top`,face:`${p}_faceTop`,extrudeMethod:q.eLinearOrtho,length:t.E1,rotate:[0,0,0],translate:[0,0,t.H1-t.E1]},...V],volumes:[{outName:`ipax_${p}_hollows`,boolMethod:lt.eUnion,inList:[...N]},{outName:`ipax_${p}_cylinder`,boolMethod:lt.eSubstraction,inList:[`subpax_${p}_cut`,`ipax_${p}_hollows`]},{outName:`pax_${p}`,boolMethod:lt.eUnion,inList:[`ipax_${p}_cylinder`,`subpax_${p}_top`]}]},e.sub={},e.logstr+=`heliostat-base drawn successfully!
93
+ `,e.calcErr=!1}catch(d){e.logstr+=d,console.log(d)}return e}var Fo={pTitle:"Heliostat base",pDescription:"The base for the static-pole of the heliostat",pDef:cs,pGeom:Bo},ls={partName:"vaxis",params:[c("D1","mm",600,1,4e3,1),c("D2","mm",400,1,4e3,1),c("H1","mm",8e3,10,4e4,10),c("E1","mm",5,1,80,1),c("E2","mm",30,1,80,1),U("base holes"),c("N1","",24,3,100,1),c("D3","mm",40,1,100,1),c("L1","mm",45,1,300,1)],paramSvg:{D1:"vaxis_cut.svg",D2:"vaxis_cut.svg",H1:"vaxis_cut.svg",E1:"vaxis_cut.svg",E2:"vaxis_cut.svg",N1:"vaxis_ends.svg",D3:"vaxis_ends.svg",L1:"vaxis_ends.svg"},sim:{tMax:180,tStep:.5,tUpdate:500}};function Jo(s,t,o=""){const e=_t(ls.partName+o);let n;const i=I(),r=I();e.logstr+=`${e.partName} simTime: ${s}
94
+ `;try{const l=t.D1/2,a=t.D2/2,h=t.D3/2;e.logstr+=`vaxis-height: ${L(t.H1)} mm
95
+ `;const d=J(l,0).addSegStrokeA(l,t.H1).addSegStrokeA(l-t.E1,t.H1).addSegStrokeA(l-t.E1,0).closeSegStroke();i.addMainO(d),n=function(_){return J(_*l,0).addSegStrokeA(_*l,t.H1).addSegStrokeA(_*a,t.H1).addSegStrokeA(_*a,t.H1-t.E2).addSegStrokeA(_*(l-t.E1),t.H1-t.E2).addSegStrokeA(_*(l-t.E1),t.E2).addSegStrokeA(_*a,t.E2).addSegStrokeA(_*a,0).closeSegStroke()},i.addSecond(n(1)),i.addSecond(n(-1));const u=[];u.push(x(0,0,l)),u.push(x(0,0,a));const f=a+t.L1,g=2*Math.PI/t.N1;for(let _=0;_<t.N1;_++){const P=f*Math.cos(_*g),A=f*Math.sin(_*g);u.push(x(P,A,h))}r.addSecond(x(0,0,l-t.E1)),r.addMainOI(u),e.fig={faceCut:i,faceBottom:r};const S=e.partName;e.vol={extrudes:[{outName:`subpax_${S}_pole`,face:`${S}_faceCut`,extrudeMethod:q.eRotate,rotate:[0,0,0],translate:[0,0,0]},{outName:`subpax_${S}_bottom`,face:`${S}_faceBottom`,extrudeMethod:q.eLinearOrtho,length:t.E2,rotate:[0,0,0],translate:[0,0,0]},{outName:`subpax_${S}_top`,face:`${S}_faceBottom`,extrudeMethod:q.eLinearOrtho,length:t.E2,rotate:[0,0,0],translate:[0,0,t.H1-t.E2]}],volumes:[{outName:`pax_${S}`,boolMethod:lt.eUnion,inList:[`subpax_${S}_pole`,`subpax_${S}_bottom`,`subpax_${S}_top`]}]},e.sub={},e.logstr+=`V-Axis drawn successfully!
96
+ `,e.calcErr=!1}catch(l){e.logstr+=l,console.log(l)}return e}var zo={pTitle:"Heliostat V-Axis",pDescription:"The vertical axis inside the pole of an heliostat",pDef:ls,pGeom:Jo},as={partName:"ring",params:[c("D1","mm",400,1,2e3,1),c("D3","mm",800,1,4e3,1),c("H1","mm",20,1,100,1),c("H2","mm",100,1,600,1),U("ring holes"),c("N2","",24,3,100,1),c("D2","mm",40,1,100,1),c("L1","mm",45,1,300,1),U("ring fake teeth"),c("N1","",100,3,1e4,1),c("L2","mm",30,1,200,1),c("L3","mm",30,1,200,1)],paramSvg:{D1:"ring_top.svg",D3:"ring_top.svg",H1:"ring_section.svg",H2:"ring_section.svg",N2:"ring_top.svg",D2:"ring_top.svg",L1:"ring_top.svg",N1:"ring_top.svg",L2:"ring_top.svg",L3:"ring_top.svg"},sim:{tMax:180,tStep:.5,tUpdate:500}};function Go(s,t,o=""){const e=_t(as.partName+o),n=I(),i=I(),r=I();e.logstr+=`${e.partName} simTime: ${s}
97
+ `;try{const l=t.D1/2,a=t.D2/2,h=t.D3/2,d=t.H1+t.H2;if(t.L1<a)throw`err203: L1 ${t.L1} too small compare to D2 ${t.D2}`;if(l+t.L1+a>h-t.L2-t.L3)throw`err204: D3 ${t.D3} too small compare to D1 ${t.D1}, L1 ${t.L1}, L2 ${t.L2}, L3 ${t.L3}`;if(2*Math.atan2(a,l+t.L1)>2*Math.PI/t.N2)throw`err205: D2 ${t.D2} too large compare to N2 ${t.N2}`;e.logstr+=`ring-height: ${L(d)} mm
98
+ `;const u=h-t.L3,f=u-t.L2,g=2*Math.PI/(2*t.N1),S=J(u,0);for(let b=0;b<t.N1;b++){const $=2*b+1,V=2*b+2,N=f*Math.cos($*g),v=f*Math.sin($*g),G=u*Math.cos(V*g),Y=u*Math.sin(V*g);S.addSegStrokeA(N,v).addSegStrokeA(G,Y)}const _=[];_.push(x(0,0,h)),_.push(x(0,0,l));const P=l+t.L1,A=2*Math.PI/t.N2;for(let b=0;b<t.N2;b++){const $=P*Math.cos(b*A),V=P*Math.sin(b*A);_.push(x($,V,a)),i.addSecond(x($,V,a))}n.addSecond(S),n.addMainOI(_);const D=[];D.push(x(0,0,h)),D.push(S),i.addSecond(x(0,0,l)),i.addMainOI(D);const H=J(l,0).addSegStrokeA(-l,0).addSegStrokeA(-l,-t.H1).addSegStrokeA(l,-t.H1).closeSegStroke(),k=function(b){return J(b*(l+t.L1)+a,0).addSegStrokeR(-2*a,0).addSegStrokeR(0,-t.H1).addSegStrokeR(2*a,0).closeSegStroke()},R=function(b){return J(b*(h-t.L3),-t.H1).addSegStrokeR(-b*t.L2,0).addSegStrokeR(0,-t.H2).addSegStrokeR(b*t.L2,0).closeSegStroke()},E=function(b){return J(b*h,0).addSegStrokeR(-b*(h-l),0).addSegStrokeR(0,-t.H1).addSegStrokeR(b*(h-t.L2-t.L3-l),0).addSegStrokeR(0,-t.H2).addSegStrokeR(b*(t.L2+t.L3),0).closeSegStroke()};r.addSecond(H),r.addSecond(k(1)),r.addSecond(k(-1)),r.addSecond(R(1)),r.addSecond(R(-1)),r.addMainO(E(1)),r.addSecond(E(-1)),e.fig={faceRingBase:n,faceRingTeeth:i,faceSection:r};const p=e.partName;e.vol={extrudes:[{outName:`subpax_${p}_base`,face:`${p}_faceRingBase`,extrudeMethod:q.eLinearOrtho,length:t.H1,rotate:[0,0,0],translate:[0,0,0]},{outName:`subpax_${p}_teeth`,face:`${p}_faceRingTeeth`,extrudeMethod:q.eLinearOrtho,length:d,rotate:[0,0,0],translate:[0,0,0]}],volumes:[{outName:`pax_${p}`,boolMethod:lt.eUnion,inList:[`subpax_${p}_base`,`subpax_${p}_teeth`]}]},e.sub={},e.logstr+=`ring drawn successfully!
99
+ `,e.calcErr=!1}catch(l){e.logstr+=l,console.log(l)}return e}var Uo={pTitle:"Heliostat ring",pDescription:"The gear ring for adjusting the azimuth of the heliostat",pDef:as,pGeom:Go},ds={partName:"ring_guidance",params:[c("D1","mm",700,5,2500,1),c("N1","legs",6,1,24,1),c("D2","mm",600,5,2e3,1),U("leg details"),c("D3","mm",30,1,200,1),c("D4","mm",50,1,200,1),c("L1","mm",90,1,900,1),c("R5","mm",20,0,500,1),U("inner"),c("D6","mm",300,1,1e3,1),c("N2","motors",8,1,200,1),c("L2","mm",50,1,200,1),c("D7","mm",80,1,200,1),U("thickness"),c("T1","mm",10,1,200,1)],paramSvg:{D1:"ring_guidance_top.svg",D2:"ring_guidance_top.svg",D3:"ring_guidance_top.svg",D4:"ring_guidance_top.svg",R5:"ring_guidance_top.svg",D6:"ring_guidance_top.svg",D7:"ring_guidance_top.svg",N1:"ring_guidance_top.svg",N2:"ring_guidance_top.svg",L1:"ring_guidance_top.svg",L2:"ring_guidance_top.svg",T1:"ring_guidance_top.svg"},sim:{tMax:100,tStep:.5,tUpdate:500}};function qo(s,t,o=""){const e=_t(ds.partName+o),n=I(),i=I();e.logstr+=`${e.partName} simTime: ${s}
100
+ `;try{const r=t.D1/2,l=t.D3/2,a=t.D4/2,h=t.D6/2,d=t.D7/2,u=2*Math.PI/t.N2;if(d>t.L2)throw`err461: D7 ${t.D7} is too large compare to L2 ${t.L2}`;if(t.N2*t.D7>(t.D6+2*t.L2)*Math.PI)throw`err462: N2 ${t.N2} is too large compare to D6 ${t.D6}, D7 ${t.D7} and L2 ${t.L2}`;if(t.D2<t.D6+2*t.L2+2*d)throw`err463: D2 ${t.D2} is too small compare to D6 ${t.D6}, L2 ${t.L2} and D7 ${t.D7}`;e.logstr+=`ring_guidance: Dmax ${L(t.D1+2*a)} mm
101
+ `;const f=[],[g,S,_]=es(t);e.logstr+=g,f.push(S),f.push(x(0,0,h));for(let k=0;k<t.N2;k++)f.push(x(h+t.L2,0,d).rotate(0,0,k*u));for(let k=0;k<t.N1;k++)f.push(x(r,0,l).rotate(0,0,k*_));n.addMainOI(f);const P=function(k,R,E,p){return J(k,R).addSegStrokeR(E,0).addSegStrokeR(0,p).addSegStrokeR(-E,0).closeSegStroke()},A=r-h+a;i.addMainO(P(h,0,A,t.T1)),i.addMainO(P(-h-A,0,A,t.T1)),i.addSecond(P(r-l,0,2*l,t.T1)),i.addSecond(P(-r-l,0,2*l,t.T1));const D=h+t.L2;i.addSecond(P(D-d,0,2*d,t.T1)),i.addSecond(P(-D-d,0,2*d,t.T1)),e.fig={faceTop:n,faceSection:i};const H=e.partName;e.vol={extrudes:[{outName:`subpax_${H}_top`,face:`${H}_faceTop`,extrudeMethod:q.eLinearOrtho,length:t.T1,rotate:[0,0,0],translate:[0,0,0]}],volumes:[{outName:`pax_${H}`,boolMethod:lt.eIdentity,inList:[`subpax_${H}_top`]}]},e.sub={},e.logstr+=`ring_guidance drawn successfully!
102
+ `,e.calcErr=!1}catch(r){e.logstr+=r,console.log(r)}return e}var Yo={pTitle:"Ring-guidance",pDescription:"The guidance of the gear-ring for the heliostat azimuth",pDef:ds,pGeom:qo},hs={partName:"vaxis_guidance",params:[c("D1","mm",700,5,2500,1),c("N1","legs",6,1,24,1),c("D2","mm",600,5,2e3,1),U("leg details"),c("D3","mm",30,1,200,1),c("D4","mm",50,1,200,1),c("L1","mm",90,1,900,1),c("R5","mm",20,0,500,1),U("inner"),c("D6","mm",540,1,1e3,1),c("N2","springs",6,1,24,1),Tt("orientation",["ccw","cw","alt"]),c("R7","mm",10,0,100,1),c("L2","mm",100,1,900,1),c("E2","mm",20,1,200,1),U("spring"),c("SA1","degree",0,-45,45,1),c("SE1","mm",10,.1,200,.1),c("SD1","mm",20,1,200,1),c("SD2","mm",10,1,200,1),c("SN1","loops",2,0,8,1),c("SL1","mm",40,1,900,1),c("SL2","mm",70,0,900,1),Tt("Send",["round","pike"]),U("thickness"),c("T1","mm",10,1,200,1),c("Dvaxis","mm",260,5,1e3,1)],paramSvg:{D1:"vaxis_guidance_top.svg",N1:"vaxis_guidance_top.svg",D2:"vaxis_guidance_top.svg",D3:"vaxis_guidance_top.svg",D4:"vaxis_guidance_top.svg",L1:"vaxis_guidance_top.svg",R5:"vaxis_guidance_top.svg",D6:"vaxis_guidance_top.svg",N2:"vaxis_guidance_top.svg",orientation:"vaxis_guidance_top.svg",R7:"vaxis_guidance_top.svg",L2:"vaxis_guidance_spring.svg",E2:"vaxis_guidance_spring.svg",SA1:"vaxis_guidance_spring.svg",SE1:"vaxis_guidance_spring.svg",SD1:"vaxis_guidance_spring.svg",SD2:"vaxis_guidance_spring.svg",SN1:"vaxis_guidance_spring.svg",SL1:"vaxis_guidance_spring.svg",SL2:"vaxis_guidance_spring.svg",Send:"vaxis_guidance_spring.svg",T1:"vaxis_guidance_top.svg",Dvaxis:"vaxis_guidance_top.svg"},sim:{tMax:100,tStep:.5,tUpdate:500}};function Xo(s,t,o=""){const e=_t(hs.partName+o),n=I(),i=I();e.logstr+=`${e.partName} simTime: ${s}
103
+ `;try{const r=t.D1/2,l=t.D2/2,a=t.D3/2,h=t.D4/2,d=t.D6/2;if(l<d)throw`err466: D6 ${t.D6} is too large compare to D2 ${t.D2}`;e.logstr+=`vaxis_guidance: Dmax ${L(t.D1+2*h)} mm
104
+ `;const u=[],[f,g,S]=es(t);e.logstr+=f,u.push(g);for(let H=0;H<t.N1;H++)u.push(x(r,0,a).rotate(0,0,H*S));const[_,P]=Ao(t);e.logstr+=_,u.push(P),n.addSecond(x(0,0,t.Dvaxis/2)),n.addMainOI(u);const A=r-d+h;i.addMainO(ht(d,0,A,t.T1)),i.addMainO(ht(-d-A,0,A,t.T1)),i.addSecond(ht(r-a,0,2*a,t.T1)),i.addSecond(ht(-r-a,0,2*a,t.T1)),e.fig={faceTop:n,faceSection:i};const D=e.partName;e.vol={extrudes:[{outName:`subpax_${D}_top`,face:`${D}_faceTop`,extrudeMethod:q.eLinearOrtho,length:t.T1,rotate:[0,0,0],translate:[0,0,0]}],volumes:[{outName:`pax_${D}`,boolMethod:lt.eIdentity,inList:[`subpax_${D}_top`]}]},e.sub={},e.logstr+=`vaxis_guidance drawn successfully!
105
+ `,e.calcErr=!1}catch(r){e.logstr+=r,console.log(r)}return e}var Wo={pTitle:"Vaxis-guidance",pDescription:"The guidance of the V-Axis for the heliostat azimuth",pDef:hs,pGeom:Xo},gs={partName:"haxis_guidance",params:[c("D5","mm",600,1,2e3,1),c("D8","mm",1e3,1,2e3,1),U("outer details"),c("E5","mm",1,0,200,1),c("E8","mm",20,1,200,1),c("L5","mm",20,1,200,1),c("R9","mm",20,0,500,1),U("inner spring"),c("SA1","degree",0,-45,45,1),c("SE1","mm",2,.1,100,.1),c("SD1","mm",20,1,200,1),c("SD2","mm",10,1,200,1),c("SN1","springs",7,1,24,1),c("SL1","mm",60,0,500,1),c("SL2","mm",100,0,500,1),Tt("Send",["round","pike"]),U("thickness"),c("L4","mm",400,1,2e3,1)],paramSvg:{D5:"haxis_guidance_outer.svg",D8:"haxis_guidance_outer.svg",E5:"haxis_guidance_outer.svg",E8:"haxis_guidance_outer.svg",L5:"haxis_guidance_outer.svg",R9:"haxis_guidance_outer.svg",SA1:"haxis_guidance_spring.svg",SE1:"haxis_guidance_spring.svg",SD1:"haxis_guidance_spring.svg",SD2:"haxis_guidance_spring.svg",SN1:"haxis_guidance_spring.svg",SL1:"haxis_guidance_spring.svg",SL2:"haxis_guidance_spring.svg",Send:"haxis_guidance_spring.svg",L4:"haxis_guidance_outer.svg"},sim:{tMax:100,tStep:.5,tUpdate:500}};function Zo(s,t,o=""){const e=_t(gs.partName+o),n=I(),i=I();e.logstr+=`${e.partName} simTime: ${s}
106
+ `;try{const r=t.D5/2,l=t.D8/2,a=t.SD1/2,h=r+t.E5,d=l-t.E8,u=2*Math.asin(t.L5/(2*h)),f=Math.PI/12+Et(t.SA1),g=Math.PI/2+u-f,S=Math.PI-f,_=Math.PI/2-Math.PI/6+f;if(h+a+t.SE1>d)throw`err411: D8 ${t.D8} is too small compare to D5 ${t.D5}, E5 ${t.E5}, E8 ${t.E8}`;if(2*Math.PI/3-2*u<t.R9/d)throw`err412: L5 ${t.L5} is too large compare to R9 ${t.R9}`;e.logstr+=`haxis_guidance: Dinner ${L(2*h)} mm
107
+ `,n.addSecond(x(0,0,r)),n.addSecond(x(0,0,l));const[P,A]=ce(t,!1),[,D]=ce(t,!0);e.logstr+=P;const H=Math.PI/2-u,k=-Math.PI/6+u,R=z(0,0),E=R.translatePolar(H,h+t.SE1+a),p=E.translatePolar(H-Math.PI/2,a),b=p.translatePolar(H+Math.PI,a+t.SE1),$=p.translatePolar(H+Math.PI,a),V=b.rotate(p,g),N=R.translatePolar(k,h+t.SE1+a),v=N.translatePolar(k+Math.PI/2,a),G=v.translatePolar(k+Math.PI,a+t.SE1),Y=v.translatePolar(k+Math.PI,a),B=Y.rotate(v,-g),O=J(0,h).addSegStrokeA(b.cx,b.cy).addPointA(V.cx,V.cy).addSegArc(a+t.SE1,!1,!0);O.addPartial(A.rotate(0,0,S).translate(V.cx,V.cy)),O.addPointA($.cx,$.cy).addPointA(E.cx,E.cy).addSegArc2().addSegStrokeAP(H,d).addCornerRounded(t.R9).addPointAP(k,d).addSegArc(d,!1,!1).addCornerRounded(t.R9).addSegStrokeA(N.cx,N.cy).addPointA(Y.cx,Y.cy).addPointA(B.cx,B.cy).addSegArc2(),O.addPartial(D.rotate(0,0,_).translate(B.cx,B.cy)),O.addPointA(G.cx,G.cy).addSegArc(a+t.SE1,!1,!0).addSegStrokeAP(-Math.PI/6,h).addSegStrokeAP(-Math.PI/6,l).addPointAP(Math.PI/2,l).addSegArc(l,!1,!0).closeSegStroke(),n.addMainO(O);const F=l*Math.sin(Math.PI/6);i.addMainO(ht(0,-F,t.L4,l+F)),i.addSecond(ht(0,-l,t.L4,2*l)),i.addSecond(ht(0,-r,t.L4,2*r)),e.fig={faceProfile:n,faceSide:i};const W=e.partName;e.vol={extrudes:[{outName:`subpax_${W}_profile`,face:`${W}_faceProfile`,extrudeMethod:q.eLinearOrtho,length:t.L4,rotate:[0,0,0],translate:[0,0,0]}],volumes:[{outName:`pax_${W}`,boolMethod:lt.eIdentity,inList:[`subpax_${W}_profile`]}]},e.sub={},e.logstr+=`haxis_guidance drawn successfully!
108
+ `,e.calcErr=!1}catch(r){e.logstr+=r,console.log(r)}return e}var Ko={pTitle:"Haxis-guidance",pDescription:"The guidance of the H-Axis for the heliostat inclination",pDef:gs,pGeom:Zo},us={partName:"rod",params:[c("L1","mm",1e4,100,4e4,10),c("L2","mm",100,2,400,1),c("L3","mm",400,10,1e3,1),c("L4","mm",600,10,1e3,1),c("N1","",10,2,50,1),U("section"),c("H1","mm",200,5,4e3,1),c("E1","mm",2,1,80,1),c("E2","mm",10,1,80,1),U("pad"),c("N3","",2,1,20,1),c("N4","",4,1,20,1),c("R3","mm",100,1,500,1),c("D2","mm",10,1,100,1),c("L7","mm",10,1,300,1)],paramSvg:{L1:"rod_top.svg",L2:"rod_top.svg",L3:"rod_top.svg",L4:"rod_top.svg",H1:"rod_cut.svg",E1:"rod_cut.svg",E2:"rod_cut.svg",N1:"rod_top.svg",N3:"rod_top.svg",N4:"rod_top.svg",R3:"rod_top.svg",D2:"rod_plate.svg",L7:"rod_plate.svg"},sim:{tMax:180,tStep:.5,tUpdate:500}};function Qo(s,t,o=""){const e=_t(us.partName+o),n=I(),i=I(),r=I();e.logstr+=`${e.partName} simTime: ${s}
109
+ `;try{const l=t.D2/2,a=t.L3/(t.N3+1),h=t.L4/(t.N4+1);e.logstr+=`rod-length: ${L(t.L1)} mm
110
+ `;const d=(t.L1-t.L3)/(t.N1-1);e.logstr+=`space-length: ${L(d)} mm
111
+ `;const u=function(p){const b=[],$=J(t.L4/2,p).addCornerRounded(t.R3).addSegStrokeA(t.L4/2,p+t.L3).addCornerRounded(t.R3).addSegStrokeA(-t.L4/2,p+t.L3).addCornerRounded(t.R3).addSegStrokeA(-t.L4/2,p).addCornerRounded(t.R3).closeSegStroke();b.push($);for(let V=1;V<t.N3+1;V++)b.push(x(t.L4/2-t.L7,p+V*a,l)),b.push(x(-t.L4/2+t.L7,p+V*a,l));for(let V=1;V<t.N4+1;V++)b.push(x(-t.L4/2+V*h,p+t.L7,l)),b.push(x(-t.L4/2+V*h,p+t.L3-t.L7,l));return b},f=function(p,b){return J(t.L2/2,p).addSegStrokeA(t.L2/2,p+b).addSegStrokeA(-t.L2/2,p+b).addSegStrokeA(-t.L2/2,p).closeSegStroke()},g=[],S=t.L2/2,_=t.L4/2,P=(t.L2-2*t.E1)/2,A=t.H1-t.E1,D=J(S,0).addSegStrokeA(S,t.H1).addSegStrokeA(-S,t.H1).addSegStrokeA(-S,0).closeSegStroke(),H=J(P,t.E1).addSegStrokeA(P,A).addSegStrokeA(-P,A).addSegStrokeA(-P,t.E1).closeSegStroke(),k=J(_,t.H1).addSegStrokeA(_,t.H1+t.E2).addSegStrokeA(-_,t.H1+t.E2).addSegStrokeA(-_,t.H1).closeSegStroke();g.push(D),g.push(H),n.addSecond(k),n.addMainOI(g),i.addMainOI(u(0)),i.addSecond(f(-t.L3/2,2*t.L3));const R=(t.L1-t.L3)/(t.N1-1);for(let p=0;p<t.N1;p++)r.addMainOI(u(p*R));r.addSecond(f(0,t.L1)),e.fig={faceCut:n,facePlate:i,faceTop:r};const E=e.partName;e.vol={extrudes:[{outName:`subpax_${E}_rod`,face:`${E}_faceCut`,extrudeMethod:q.eLinearOrtho,length:t.L1,rotate:[0,0,0],translate:[0,0,0]},{outName:`subpax_${E}_plates`,face:`${E}_faceTop`,extrudeMethod:q.eLinearOrtho,length:t.E2,rotate:[Math.PI/2,0,0],translate:[0,t.E2+t.H1,0]}],volumes:[{outName:`pax_${E}`,boolMethod:lt.eUnion,inList:[`subpax_${E}_rod`,`subpax_${E}_plates`]}]},e.sub={},e.logstr+=`heliostat-rod drawn successfully!
112
+ `,e.calcErr=!1}catch(l){e.logstr+=l,console.log(l)}return e}var jo={pTitle:"Heliostat rod",pDescription:"The rod of an heliostat-surface",pDef:us,pGeom:Qo},fs={partName:"trapeze",params:[c("L1","mm",1600,10,4e3,1),c("L2","mm",1e3,10,4e3,1),c("L3","mm",400,5,800,1),c("L4","mm",300,5,800,1),U("outer frame"),c("N1","",7,1,20,1),c("N2","",4,1,20,1),c("D1","mm",10,1,40,1),c("L5","mm",100,1,400,1),c("L6","mm",20,1,400,1),c("R1","mm",60,1,400,1),c("R2","mm",20,1,400,1),U("inner pad"),c("N3","",2,1,20,1),c("N4","",2,1,20,1),c("D2","mm",10,1,40,1),c("L7","mm",20,1,400,1),c("R3","mm",20,1,400,1),U("diagonal shaft"),c("D3","mm",30,1,100,1),c("D4","mm",26,1,100,1),c("H1","mm",300,.5,800,.5),c("H2","mm",2,.5,800,.5),c("H3","mm",5,.5,800,.5)],paramSvg:{L1:"trapeze_top.svg",L2:"trapeze_top.svg",L3:"trapeze_top.svg",L4:"trapeze_top.svg",N1:"trapeze_top.svg",N2:"trapeze_top.svg",N3:"trapeze_top.svg",N4:"trapeze_top.svg",L5:"trapeze_top.svg",L6:"trapeze_top.svg",L7:"trapeze_top.svg",D1:"trapeze_top.svg",D2:"trapeze_top.svg",D3:"trapeze_rod.svg",D4:"trapeze_rod.svg",R1:"trapeze_top.svg",R2:"trapeze_top.svg",R3:"trapeze_top.svg",H1:"trapeze_side.svg",H2:"trapeze_side.svg",H3:"trapeze_side.svg"},sim:{tMax:180,tStep:.5,tUpdate:500}};function tn(s,t,o=""){const e=_t(fs.partName+o);let n,i;const r=I(),l=I(),a=I(),h=I(),d=I();e.logstr+=`${e.partName} simTime: ${s}
113
+ `;try{if(t.L3>t.L1-t.L5)throw`err595: L3 ${t.L3} too large compare to L1 ${t.L1} and L5 ${t.L5}`;if(t.L4>t.L2-t.L5)throw`err596: L4 ${t.L4} too large compare to L2 ${t.L2} and L5 ${t.L5}`;if(t.H1-t.H2-t.H3<4*t.D3)throw`err597: H1 ${t.H1} too small compare to H2 ${t.H2}, H3 ${t.H3} and D3 ${t.D3}`;const u=t.R1*(1-1/Math.sqrt(2)),f=t.R3*(1-1/Math.sqrt(2)),g=t.L2/2-u-(t.L4/2-f),S=t.L1/2-u-(t.L3/2-f),_=Math.sqrt(g**2+S**2),P=t.H1-t.H2-t.H3,A=Math.sqrt(_**2+P**2),D=Math.atan2(P,_),H=Math.atan2(S,g);e.logstr+=`rod-slope: length: ${L(A)} mm, angle: ${L(ut(D))} degree
114
+ `,e.logstr+=`rod-xy-angle: ${L(ut(H))} degree
115
+ `;const k=t.D3/Math.cos(Math.PI/2-D);e.logstr+=`rod-footprint-length: ${L(k)} mm
116
+ `;const R=Math.sqrt((k/2)**2+(t.D3/2)**2),E=Math.atan2(t.D3,k);n=function(y,Q,K){return J(y,Q).addPointRP(K+Math.PI-E,R).addSeg2Arcs(K+Math.PI/2,K).addPointRP(K+Math.PI+E,R).addSeg2Arcs(K+Math.PI,K+Math.PI/2).addPointRP(K-E,R).addSeg2Arcs(K+3*Math.PI/2,K+Math.PI).addPointRP(K+E,R).addSeg2Arcs(K,K-Math.PI/2)},i=function(y,Q,K){const ft=y+R*Math.cos(K+Math.PI-E),at=Q+R*Math.sin(K+Math.PI-E);return J(ft,at).addSegStrokeRP(K+Math.PI,_).addSegStrokeRP(K-Math.PI/2,t.D3).addSegStrokeRP(K,_).closeSegStroke()};const p=[];if(t.R1>t.L1/4||t.R1>t.L2/4)throw`err614: R1 ${t.R1} too large compare to L1 ${t.L1} or L2 ${t.L2}`;const b=J(t.L2/2,t.L1/2).addSegStrokeA(-t.L2/2,t.L1/2).addCornerRounded(t.R1).addSegStrokeA(-t.L2/2,-t.L1/2).addCornerRounded(t.R1).addSegStrokeA(t.L2/2,-t.L1/2).addCornerRounded(t.R1).closeSegStroke().addCornerRounded(t.R1);if(t.R2>(t.L1-2*t.L5)/4||t.R2>(t.L2-2*t.L5)/4)throw`err627: R2 ${t.R2} too large compare to L1 ${t.L1}, L2 ${t.L2} and L5 ${t.L5}`;const $=J(t.L2/2-t.L5,t.L1/2-t.L5).addSegStrokeA(-t.L2/2+t.L5,t.L1/2-t.L5).addCornerRounded(t.R2).addSegStrokeA(-t.L2/2+t.L5,-t.L1/2+t.L5).addCornerRounded(t.R2).addSegStrokeA(t.L2/2-t.L5,-t.L1/2+t.L5).addCornerRounded(t.R2).closeSegStroke().addCornerRounded(t.R2);if(t.R3>t.L3/4||t.R3>t.L4/4)throw`err639: R3 ${t.R3} too large compare to L3 ${t.L3} or L4 ${t.L4}`;const V=J(t.L4/2,t.L3/2).addSegStrokeA(-t.L4/2,t.L3/2).addCornerRounded(t.R3).addSegStrokeA(-t.L4/2,-t.L3/2).addCornerRounded(t.R3).addSegStrokeA(t.L4/2,-t.L3/2).addCornerRounded(t.R3).closeSegStroke().addCornerRounded(t.R3);p.push(b),p.push($),r.addSecond(V);const N=t.L1/(t.N1+1),v=t.L2/(t.N2+1),G=t.L3/(t.N3+1),Y=t.L4/(t.N4+1);if(t.L5<t.D1/2+t.L6)throw`err658: L5 ${t.L5} too small compare to D1 ${t.D1} or L6 ${t.L6}`;if(G<t.D2/2+t.L7)throw`err661: D2 ${t.D2} or L7 ${t.L7} too large compare to L3 ${t.l3}`;if(Y<t.D2/2+t.L7)throw`err664: D2 ${t.D2} or L7 ${t.L7} too large compare to L4 ${t.l4}`;const B=[];for(let y=1;y<t.N1+1;y++)B.push(x(t.L2/2-t.L6,-t.L1/2+y*N,t.D1/2)),B.push(x(-t.L2/2+t.L6,-t.L1/2+y*N,t.D1/2));for(let y=1;y<t.N2+1;y++)B.push(x(-t.L2/2+y*v,t.L1/2-t.L6,t.D1/2)),B.push(x(-t.L2/2+y*v,-t.L1/2+t.L6,t.D1/2));const O=[];for(let y=1;y<t.N3+1;y++)O.push(x(t.L4/2-t.L7,-t.L3/2+y*G,t.D2/2)),O.push(x(-t.L4/2+t.L7,-t.L3/2+y*G,t.D2/2));for(let y=1;y<t.N4+1;y++)O.push(x(-t.L4/2+y*Y,t.L3/2-t.L7,t.D2/2)),O.push(x(-t.L4/2+y*Y,-t.L3/2+t.L7,t.D2/2));B.forEach(y=>{p.push(y)}),O.forEach(y=>{r.addSecond(y)}),r.addMainOI(p);const F=[];F.push(n(t.L2/2-u,t.L1/2-u,H)),F.push(n(t.L4/2-f,t.L3/2-f,H)),F.push(n(-t.L2/2+u,t.L1/2-u,Math.PI-H)),F.push(n(-t.L4/2+f,t.L3/2-f,Math.PI-H)),F.push(n(-t.L2/2+u,-t.L1/2+u,Math.PI+H)),F.push(n(-t.L4/2+f,-t.L3/2+f,Math.PI+H)),F.push(n(t.L2/2-u,-t.L1/2+u,-H)),F.push(n(t.L4/2-f,-t.L3/2+f,-H));const W=[];W.push(i(t.L2/2-u,t.L1/2-u,H)),W.push(i(-t.L2/2+u,t.L1/2-u,Math.PI-H)),W.push(i(-t.L2/2+u,-t.L1/2+u,Math.PI+H)),W.push(i(t.L2/2-u,-t.L1/2+u,-H)),F.forEach(y=>{r.addSecond(y)}),W.forEach(y=>{r.addSecond(y)});const T=[];if(T.push(V),O.forEach(y=>{T.push(y)}),l.addSecond(b),l.addSecond($),B.forEach(y=>{l.addSecond(y)}),F.forEach(y=>{l.addSecond(y)}),W.forEach(y=>{l.addSecond(y)}),l.addMainOI(T),t.D4>=t.D3)throw`err218: D4 ${t.D4} larger than D3 ${t.D3}`;a.addMainO(x(0,0,t.D3/2)),a.addSecond(x(0,0,t.D4/2)),h.addMainO(x(0,0,t.D4/2)),h.addSecond(x(0,0,t.D3/2));const tt=t.D3*Math.cos(D),rt=tt/Math.tan(D),C=f+(k/2+rt)*Math.cos(H),ot=f+(k/2+rt)*Math.sin(H),M=A+2*(k+rt+tt),X=M+t.L3+t.L4+tt,ct=J(X,X).addSegStrokeA(-X,X).addSegStrokeA(-X,-X).addSegStrokeA(X,-X).closeSegStroke();d.addMainO(ct),e.fig={faceFrame:r,facePlate:l,faceRod:a,faceRodHollow:h,faceCutRod:d};const m=e.partName;e.vol={extrudes:[{outName:`subpax_${m}_frame`,face:`${m}_faceFrame`,extrudeMethod:q.eLinearOrtho,length:t.H2,rotate:[0,0,0],translate:[0,0,t.H1-t.H2]},{outName:`subpax_${m}_plate`,face:`${m}_facePlate`,extrudeMethod:q.eLinearOrtho,length:t.H3,rotate:[0,0,0],translate:[0,0,0]},{outName:`subpax_${m}_rod1`,face:`${m}_faceRod`,extrudeMethod:q.eLinearOrtho,length:M,rotate:[0,Math.PI/2-D,H],translate:[t.L4/2-C,t.L3/2-ot,t.H3-tt]},{outName:`subpax_${m}_rod2`,face:`${m}_faceRod`,extrudeMethod:q.eLinearOrtho,length:M,rotate:[0,Math.PI/2-D,Math.PI-H],translate:[-t.L4/2+C,t.L3/2-ot,t.H3-tt]},{outName:`subpax_${m}_rod3`,face:`${m}_faceRod`,extrudeMethod:q.eLinearOrtho,length:M,rotate:[0,Math.PI/2-D,Math.PI+H],translate:[-t.L4/2+C,-t.L3/2+ot,t.H3-tt]},{outName:`subpax_${m}_rod4`,face:`${m}_faceRod`,extrudeMethod:q.eLinearOrtho,length:M,rotate:[0,Math.PI/2-D,-H],translate:[t.L4/2-C,-t.L3/2+ot,t.H3-tt]},{outName:`subpax_${m}_rodH1`,face:`${m}_faceRodHollow`,extrudeMethod:q.eLinearOrtho,length:M,rotate:[0,Math.PI/2-D,H],translate:[t.L4/2-C,t.L3/2-ot,t.H3-tt]},{outName:`subpax_${m}_rodH2`,face:`${m}_faceRodHollow`,extrudeMethod:q.eLinearOrtho,length:M,rotate:[0,Math.PI/2-D,Math.PI-H],translate:[-t.L4/2+C,t.L3/2-ot,t.H3-tt]},{outName:`subpax_${m}_rodH3`,face:`${m}_faceRodHollow`,extrudeMethod:q.eLinearOrtho,length:M,rotate:[0,Math.PI/2-D,Math.PI+H],translate:[-t.L4/2+C,-t.L3/2+ot,t.H3-tt]},{outName:`subpax_${m}_rodH4`,face:`${m}_faceRodHollow`,extrudeMethod:q.eLinearOrtho,length:M,rotate:[0,Math.PI/2-D,-H],translate:[t.L4/2-C,-t.L3/2+ot,t.H3-tt]},{outName:`subpax_${m}_cut1`,face:`${m}_faceCutRod`,extrudeMethod:q.eLinearOrtho,length:X,rotate:[0,0,0],translate:[0,0,-X]},{outName:`subpax_${m}_cut2`,face:`${m}_faceCutRod`,extrudeMethod:q.eLinearOrtho,length:X,rotate:[0,0,0],translate:[0,0,t.H1]}],volumes:[{outName:`ipax_${m}_rawRod`,boolMethod:lt.eUnion,inList:[`subpax_${m}_rod1`,`subpax_${m}_rod2`,`subpax_${m}_rod3`,`subpax_${m}_rod4`]},{outName:`ipax_${m}_rodHollow`,boolMethod:lt.eUnion,inList:[`subpax_${m}_rodH1`,`subpax_${m}_rodH2`,`subpax_${m}_rodH3`,`subpax_${m}_rodH4`]},{outName:`ipax_${m}_halfRods`,boolMethod:lt.eSubstraction,inList:[`ipax_${m}_rawRod`,`subpax_${m}_cut1`]},{outName:`ipax_${m}_rods`,boolMethod:lt.eSubstraction,inList:[`ipax_${m}_halfRods`,`subpax_${m}_cut2`]},{outName:`ipax_${m}_plus`,boolMethod:lt.eUnion,inList:[`subpax_${m}_frame`,`subpax_${m}_plate`,`ipax_${m}_rods`]},{outName:`pax_${m}`,boolMethod:lt.eSubstraction,inList:[`ipax_${m}_plus`,`ipax_${m}_rodHollow`]}]},e.sub={},e.logstr+=`trapeze drawn successfully!
117
+ `,e.calcErr=!1}catch(u){e.logstr+=u,console.log(u)}return e}var en={pTitle:"Heliostat trapeze",pDescription:"The support of one solar panel. Made out of aluminium for lightness and cooling",pDef:fs,pGeom:tn},Ss={partName:"surface",params:[c("LH","mm",1600,10,4e3,1),c("LV","mm",1e3,10,4e3,1),c("LZ","mm",40,0,100,1),c("nx","",9,1,40,1),c("ny","",9,1,40,1),U("main fantasia"),Tt("main_direction",["horizontal","vertical"]),Nt("crenel",!1),c("first_row","",9,1,40,1),c("second_row","",9,1,40,1),U("horizontal spacing"),c("EH","mm",10,0,1e3,1),Nt("EH_gradient",!1),c("EH_sup","mm",500,0,1e3,1),c("EH_cycle","",1,0,3,.05),c("EH_start","",0,0,1,.05),Tt("EH_shape",["sinusoid","triangle","sawUp","sawDown"]),U("vertical spacing"),c("EV","mm",10,0,1e3,1),Nt("EV_gradient",!1),c("EV_sup","mm",500,0,1e3,1),c("EV_cycle","",1,0,3,.05),c("EV_start","",0,0,1,.05),Tt("EV_shape",["sinusoid","triangle","sawUp","sawDown"]),U("solar power"),c("power_efficiency","%",16,0,100,.1),c("solar_power","W/m2",816,100,2e3,1)],paramSvg:{LH:"surface_main.svg",LV:"surface_main.svg",LZ:"surface_lz.svg",nx:"surface_main.svg",ny:"surface_main.svg",main_direction:"surface_crenel.svg",crenel:"surface_crenel.svg",first_row:"surface_extremities.svg",second_row:"surface_extremities.svg",EH:"surface_main.svg",EH_gradient:"surface_space_evolution.svg",EH_sup:"surface_space_evolution.svg",EH_cycle:"surface_space_evolution.svg",EH_start:"surface_space_evolution.svg",EH_shape:"surface_space_shape.svg",EV:"surface_main.svg",EV_gradient:"surface_space_evolution.svg",EV_sup:"surface_space_evolution.svg",EV_cycle:"surface_space_evolution.svg",EV_start:"surface_space_evolution.svg",EV_shape:"surface_space_shape.svg",power_efficiency:"surface_power.svg",solar_power:"surface_power.svg"},sim:{tMax:180,tStep:.5,tUpdate:500}};function sn(s,t,o=""){const e=_t(Ss.partName+o);let n;const i=I(),r=I();e.logstr+=`${e.partName} simTime: ${s}
118
+ `;try{const l=t.LH*t.LV/1e6,a=t.solar_power*l*t.power_efficiency/100;e.logstr+=`panel surface: ${L(l)} m2
119
+ `,e.logstr+=`panel power: ${L(a)} W
120
+ `;const h=t.nx*t.ny;e.logstr+=`max panel number: ${h}
121
+ `,e.logstr+=`max panel surface: ${L(h*l)} m2
122
+ `,e.logstr+=`max panel power: ${L(h*a)} W
123
+ `;const d=t.main_direction===1?t.ny:t.nx,u=t.main_direction===1?t.nx:t.ny,f=t.main_direction===1?t.EV:t.EH,g=t.main_direction===1?t.EV_gradient:t.EH_gradient,S=t.main_direction===1?t.EV_sup:t.EH_sup,_=t.main_direction===1?t.EV_cycle:t.EH_cycle,P=t.main_direction===1?t.EV_start:t.EH_start,A=t.main_direction===1?t.EV_shape:t.EH_shape,D=t.main_direction===0?t.EV:t.EH,H=t.main_direction===0?t.EV_gradient:t.EH_gradient,k=t.main_direction===0?t.EV_sup:t.EH_sup,R=t.main_direction===0?t.EV_cycle:t.EH_cycle,E=t.main_direction===0?t.EV_start:t.EH_start,p=t.main_direction===0?t.EV_shape:t.EH_shape,b=Math.max(u,t.first_row,t.second_row),$=[];for(let M=0;M<d;M++){const X=(M+1)%2,ct=t.crenel?u-X:u;$.push(ct)}$[0]=t.first_row,$[$.length-1]=t.first_row,d>2&&($[1]=t.second_row,$[$.length-2]=t.second_row);let V=0;$.forEach(M=>{V+=M}),e.logstr+=`actual panel number: ${V} (${L(100*V/h)} %)
124
+ `,e.logstr+=`actual panel surface: ${L(V*l)} m2
125
+ `,e.logstr+=`actual panel power: ${L(V*a)} W
126
+ `;const N=[];for(let M=0;M<d-1;M++){let X=f;if(g===1){const ct=d>2?d-2:1,m=(P+M*_/ct)%1;switch(A){case 0:X+=S*(1-Math.cos(m*2*Math.PI))/2;break;case 1:X+=S*(1-2*Math.abs(m-.5));break;case 2:X+=S*m;break;case 3:X+=S*(1-m);break;default:X+=S}}N.push(X)}let v=0;const G=[];G.push(0),N.forEach(M=>{v+=M,G.push(v)});const Y=[];for(let M=0;M<b-1;M++){let X=D;if(H===1){const ct=b>2?b-2:1,m=(E+M*R/ct)%1;switch(p){case 0:X+=k*(1-Math.cos(m*2*Math.PI))/2;break;case 1:X+=k*(1-2*Math.abs(m-.5));break;case 2:X+=k*m;break;case 3:X+=k*(1-m);break;default:X+=k}}Y.push(X)}let B=0;const O=[];O.push(0),Y.forEach(M=>{B+=M,O.push(B)});let F=0,W=0;t.main_direction===0?(F=d*t.LH+v,W=b*t.LV+B):(F=b*t.LH+B,W=d*t.LV+v);const T=F*W/10**6;e.logstr+=`global horizontal width: ${L(F/1e3)} m
127
+ `,e.logstr+=`global vertical height: ${L(W/1e3)} m
128
+ `,e.logstr+=`global area: ${L(T)} m2
129
+ `,e.logstr+=`area efficiency: ${L(100*V*l/T)} %
130
+ `;const tt=-F/2,rt=-W/2;n=function(M,X){return J(M,X).addSegStrokeA(M+t.LH,X).addSegStrokeA(M+t.LH,X+t.LV).addSegStrokeA(M,X+t.LV).closeSegStroke()};const C=[];$.forEach((M,X)=>{const ct=(b-M)%2,m=Math.floor((b-M)/2);for(let y=0;y<M;y++){let Q=0,K=0;t.main_direction===0?(Q=tt+X*t.LH+G[X],K=rt+(m+y)*t.LV+O[m+y],ct===1&&(K+=(t.LV+O[m+y+1]-O[m+y])/2)):(K=rt+X*t.LV+G[X],Q=tt+(m+y)*t.LH+O[m+y],ct===1&&(Q+=(t.LH+O[m+y+1]-O[m+y])/2)),C.push([Q,K])}});for(const M of C)i.addMainO(n(M[0],M[1]));r.addMainO(n(0,0)),e.fig={faceSurface:i,faceOnePanel:r};const ot=e.partName;e.vol={extrudes:C.map((M,X)=>({outName:`subpax_${ot}_panel_${X}`,face:`${ot}_faceOnePanel`,extrudeMethod:q.eLinearOrtho,length:t.LZ,rotate:[0,0,0],translate:[M[0],M[1],0]})),volumes:[{outName:`pax_${ot}`,boolMethod:lt.eUnion,inList:C.map((M,X)=>`subpax_${ot}_panel_${X}`)}]},e.sub={},e.logstr+=`panel-surface drawn successfully!
131
+ `,e.calcErr=!1}catch(l){e.logstr+=l,console.log(l)}return e}var on={pTitle:"Heliostat panel-surface",pDescription:"The surface collecting the solar power",pDef:Ss,pGeom:sn};const _s={"gear/gear_wheel":xo,"gear/gear_bar":$o,"gear/gear_ring":vo,"gear/gear_epicycloid":bo,"heliostat/heliostat":Io,"heliostat/heliostat_2":Oo,"heliostat/base":Fo,"heliostat/pole_static":Zt,"heliostat/vaxis":zo,"heliostat/ring":Uo,"heliostat/vaxis_holder":Ft,"heliostat/ring_guidance":Yo,"heliostat/vaxis_guidance":Wo,"heliostat/rake":Kt,"heliostat/rake_stopper":Me,"heliostat/haxis_guidance":Ko,"heliostat/spider":De,"heliostat/swing":Qt,"heliostat/rod":jo,"heliostat/trapeze":en,"heliostat/surface":on};function nn(s){const t=/^.*\//g;return s.replace(t,"")}function rn(s){const t={};for(const o of Object.keys(s)){const e=nn(o);t[e]=`/${o}`}return t}function cn(s){const t=[];for(const o of Object.keys(s))t.push(o);return t}const dn=rn(_s),hn=cn(_s);export{_s as a,dn as b,hn as d};
@@ -0,0 +1 @@
1
+ import{h,ac as L,ad as V,ae as C,af as b,a0 as N,ag as H,G as w,V as G,a9 as U,J as $,ah as S,ai as x,aj as J,g as f,N as P,K as W,ak as A,al as K,am as z,an as R,O as T,ao as Q,ap as X,aq as Z,ar as ee,as as re,d as te,p as ae,a as ne,k as ie}from"./C6gpjNdh.js";const oe=["touchstart","touchmove"];function se(e){return oe.includes(e)}function ve(e){h&&L(e)!==null&&V(e)}let k=!1;function ue(){k||(k=!0,document.addEventListener("reset",e=>{Promise.resolve().then(()=>{var r;if(!e.defaultPrevented)for(const t of e.target.elements)(r=t.__on_r)==null||r.call(t)})},{capture:!0}))}function he(e,r,t,i=!0){i&&t();for(var n of r)e.addEventListener(n,t);C(()=>{for(var a of r)e.removeEventListener(a,t)})}function q(e){var r=H,t=w;b(null),N(null);try{return e()}finally{b(r),N(t)}}function pe(e,r,t,i=t){e.addEventListener(r,()=>q(t));const n=e.__on_r;n?e.__on_r=()=>{n(),i(!0)}:e.__on_r=()=>i(!0),ue()}const B=new Set,M=new Set;function fe(e,r,t,i){function n(a){if(i.capture||y.call(r,a),!a.cancelBubble)return q(()=>t.call(this,a))}return e.startsWith("pointer")||e.startsWith("touch")||e==="wheel"?G(()=>{r.addEventListener(e,n,i)}):r.addEventListener(e,n,i),n}function me(e,r,t,i,n){var a={capture:i,passive:n},o=fe(e,r,t,a);(r===document.body||r===window||r===document)&&C(()=>{r.removeEventListener(e,o,a)})}function ge(e){for(var r=0;r<e.length;r++)B.add(e[r]);for(var t of M)t(e)}function y(e){var I;var r=this,t=r.ownerDocument,i=e.type,n=((I=e.composedPath)==null?void 0:I.call(e))||[],a=n[0]||e.target,o=0,_=e.__root;if(_){var c=n.indexOf(_);if(c!==-1&&(r===document||r===window)){e.__root=r;return}var m=n.indexOf(r);if(m===-1)return;c<=m&&(o=c)}if(a=n[o]||e.target,a!==r){U(e,"currentTarget",{configurable:!0,get(){return a||t}});var O=H,d=w;b(null),N(null);try{for(var s,u=[];a!==null;){var l=a.assignedSlot||a.parentNode||a.host||null;try{var p=a["__"+i];if(p!==void 0&&!a.disabled)if($(p)){var[j,...F]=p;j.apply(a,[e,...F])}else p.call(a,e)}catch(E){s?u.push(E):s=E}if(e.cancelBubble||l===r||l===null)break;a=l}if(s){for(let E of u)queueMicrotask(()=>{throw E});throw s}}finally{e.__root=r,delete e.currentTarget,b(O),N(d)}}}function de(e){var r=document.createElement("template");return r.innerHTML=e,r.content}function v(e,r){var t=w;t.nodes_start===null&&(t.nodes_start=e,t.nodes_end=r)}function ye(e,r){var t=(r&x)!==0,i=(r&J)!==0,n,a=!e.startsWith("<!>");return()=>{if(h)return v(f,null),f;n===void 0&&(n=de(a?e:"<!>"+e),t||(n=L(n)));var o=i?document.importNode(n,!0):n.cloneNode(!0);if(t){var _=L(o),c=o.lastChild;v(_,c)}else v(o,o);return o}}function we(e=""){if(!h){var r=S(e+"");return v(r,r),r}var t=f;return t.nodeType!==3&&(t.before(t=S()),P(t)),v(t,t),t}function Ee(){if(h)return v(f,null),f;var e=document.createDocumentFragment(),r=document.createComment(""),t=S();return e.append(r,t),v(r,t),e}function Te(e,r){if(h){w.nodes_end=f,W();return}e!==null&&e.before(r)}function Le(e,r){var t=r==null?"":typeof r=="object"?r+"":r;t!==(e.__t??(e.__t=e.nodeValue))&&(e.__t=t,e.nodeValue=t==null?"":t+"")}function ce(e,r){return Y(e,r)}function be(e,r){A(),r.intro=r.intro??!1;const t=r.target,i=h,n=f;try{for(var a=L(t);a&&(a.nodeType!==8||a.data!==K);)a=z(a);if(!a)throw R;T(!0),P(a),W();const o=Y(e,{...r,anchor:a});if(f===null||f.nodeType!==8||f.data!==Q)throw X(),R;return T(!1),o}catch(o){if(o===R)return r.recover===!1&&Z(),A(),V(t),T(!1),ce(e,r);throw o}finally{T(i),P(n)}}const g=new Map;function Y(e,{target:r,anchor:t,props:i={},events:n,context:a,intro:o=!0}){A();var _=new Set,c=d=>{for(var s=0;s<d.length;s++){var u=d[s];if(!_.has(u)){_.add(u);var l=se(u);r.addEventListener(u,y,{passive:l});var p=g.get(u);p===void 0?(document.addEventListener(u,y,{passive:l}),g.set(u,1)):g.set(u,p+1)}}};c(ee(B)),M.add(c);var m=void 0,O=re(()=>{var d=t??r.appendChild(S());return te(()=>{if(a){ae({});var s=ie;s.c=a}n&&(i.$$events=n),h&&v(d,null),m=e(d,i)||{},h&&(w.nodes_end=f),a&&ne()}),()=>{var l;for(var s of _){r.removeEventListener(s,y);var u=g.get(s);--u===0?(document.removeEventListener(s,y),g.delete(s)):g.set(s,u)}M.delete(c),d!==t&&((l=d.parentNode)==null||l.removeChild(d))}});return D.set(m,O),m}let D=new WeakMap;function Ne(e,r){const t=D.get(e);return t?(D.delete(e),t(r)):Promise.resolve()}const le="5";typeof window<"u"&&(window.__svelte||(window.__svelte={v:new Set})).v.add(le);export{Te as a,we as b,Ee as c,ue as d,he as e,ge as f,me as g,be as h,pe as l,ce as m,ve as r,Le as s,ye as t,Ne as u,q as w};
@@ -0,0 +1 @@
1
+ import{k as t,l as u,u as l,m as o}from"./C6gpjNdh.js";function c(e){throw new Error("https://svelte.dev/e/lifecycle_outside_component")}function a(e){t===null&&c(),u&&t.l!==null?i(t).m.push(e):l(()=>{const n=o(e);if(typeof n=="function")return n})}function f(e){t===null&&c(),a(()=>()=>o(e))}function i(e){var n=e.l;return n.u??(n.u={a:[],b:[],m:[]})}export{f as a,a as o};