← Commit history

fix copper z double-offset (baked+position); descriptive tooltips; faster cascade (5s); ShadowOnlyMaterial ground for visible shadows; per-layer bbox toggle icon

John Lauer ·fce6c80e2f ·3mo ago ·parent d47c936
3 files changed +40−15
package.json+1−1
@@ -2,7 +2,7 @@   "slug": "bq25792-charger",   "title": "BQ25792 Charger",   "type": "component",-  "version": "0.1.61",+  "version": "0.1.62",   "description": "BQ25792 Charger - buck-boost 1S-4S battery charger board by Adonis, with real 3D copper traces and measured stackup.",   "tags": [     "hardware"
page.json+10−3
@@ -4,9 +4,16 @@   "slug": "bq25792-charger",   "title": "BQ25792 Charger",   "brief": "Buck-boost 1S-4S battery charger board (TI BQ25792) with 14 Adom machine pins, by Adonis",-  "version": "0.1.61",+  "version": "0.1.62",   "tags": [-    "hardware"+    "adom",+    "adom-modular",+    "component",+    "charger",+    "battery",+    "bq25792",+    "power",+    "usb-c"   ],   "license": "proprietary",   "component": {@@ -49,7 +56,7 @@     "email": "[email protected]"   },   "visibility": "public",-  "description": "BQ25792 Charger - buck-boost 1S-4S battery charger board by Adonis, with real 3D copper traces and measured stackup.",+  "description": "BQ25792 Charger - a buck-boost 1S-4S battery charger board (Texas Instruments BQ25792) designed by Adonis in Fusion 360, with 14 Adom machine pins for the modular stack. Interactive colored 3D model, schematic and layout views.",   "dependencies": {},   "files": [     "README.md",
readme.html+29−11
@@ -175,7 +175,16 @@ exported bodies + design rules.</p>     Object.keys(I).forEach(function(id){       const b=document.getElementById(id); if(!b) return;       const label=b.textContent.trim();-      b.setAttribute("data-tip",label); b.removeAttribute("title");+      const TIP={+        "btn-pivot":"Click-to-pivot: click anywhere and the camera orbits around exactly that point (always on)",+        "btn-ground":"Ground plane: show or hide the semi-transparent floor the shadow falls on",+        "btn-shadows":"Shadows: toggle the drop shadow that helps you read each layer's height",+        "btn-anim":"Animate: auto-play the cascade that lifts each layer in turn, then reassembles",+        "btn-assembled":"Assembled: jump to the finished, fully-stacked board",+        "btn-exploded":"Exploded: jump to the fully-separated stackup",+        "btn-fs":"Fullscreen: expand the 3D viewer to fill the browser window"+      };+      b.setAttribute("data-tip",TIP[id]||label); b.removeAttribute("title");       b.innerHTML='<svg viewBox="0 0 16 16" aria-hidden="true">'+I[id]+'</svg>';     });   })();@@ -364,21 +373,30 @@ exported bodies + design rules.</p>     if(sc.lights.length===0){ new (B().HemisphericLight)("rm_hemi",new (B().Vector3)(0.2,0.2,1),sc).intensity=0.9; }     SHADOW_LIGHT=new (B().DirectionalLight)("rm_shadow",new (B().Vector3)(-0.35,-0.45,-1),sc);     SHADOW_LIGHT.position=new (B().Vector3)(0.02,0.02,0.15);-    SHADOW_LIGHT.intensity=0.0001;               // essentially only a shadow source (env already lights)+    SHADOW_LIGHT.intensity=0.35;                 // enough to define a crisp shadow map     SHADOW_LIGHT.autoUpdateExtends=true; SHADOW_LIGHT.shadowMinZ=0.001; SHADOW_LIGHT.shadowMaxZ=0.5;     SHADOW_GEN=new (B().ShadowGenerator)(2048,SHADOW_LIGHT);-    SHADOW_GEN.useBlurCloseExponentialShadowMap=true; SHADOW_GEN.blurKernel=24; SHADOW_GEN.darkness=0.15;+    SHADOW_GEN.useBlurCloseExponentialShadowMap=true; SHADOW_GEN.blurKernel=20; SHADOW_GEN.darkness=0.35;     SHADOW_GEN.getShadowMap().refreshRate=B().RenderTargetTexture.REFRESHRATE_RENDER_ONEVERYFRAME;     LAYERS.forEach(L=>L.meshes.forEach(m=>{ try{ SHADOW_GEN.addShadowCaster(m,true);}catch(e){} })); -    // Dedicated ground: a big plane just under the board. Semi-transparent (see under the-    // board) but it RECEIVES the shadow so the animation reads in 3D.+    // Dedicated ground just under the board. Prefer ShadowOnlyMaterial (invisible except+    // where the shadow lands - true see-through ground with a crisp shadow); fall back to a+    // lit translucent plane if the material isn't in the bundle.     GROUND_PLANE=B().MeshBuilder.CreateGround("adomGround",{width:0.3,height:0.3},sc);-    GROUND_PLANE.rotation.x=-Math.PI/2;          // ground is XZ by default; scene is z-up -> face +Z-    GROUND_PLANE.position=new (B().Vector3)(0.0252,0.0132,-0.001);-    const gm=new (B().StandardMaterial)("adomGroundMat",sc);-    gm.diffuseColor=new (B().Color3)(0.5,0.52,0.55); gm.specularColor=new (B().Color3)(0,0,0);-    gm.alpha=0.2; gm.backFaceCulling=false;+    GROUND_PLANE.position=new (B().Vector3)(0.0252,0.0132,-0.0015);+    GROUND_PLANE.rotation.x=Math.PI/2;           // face up in a z-up scene+    let gm;+    if(B().ShadowOnlyMaterial){+      gm=new (B().ShadowOnlyMaterial)("adomGroundMat",sc);+      gm.activeLight=SHADOW_LIGHT; gm.alpha=0.55; gm.shadowColor=new (B().Color3)(0,0,0);+    }else{+      gm=new (B().StandardMaterial)("adomGroundMat",sc);+      gm.diffuseColor=new (B().Color3)(0.55,0.57,0.6); gm.specularColor=new (B().Color3)(0,0,0);+      gm.alpha=0.28;+      new (B().HemisphericLight)("rm_gl",new (B().Vector3)(0,0,1),sc).intensity=0.55;+    }+    gm.backFaceCulling=false;     GROUND_PLANE.material=gm; GROUND_PLANE.receiveShadows=true;     // hide the bundle's decorative background ground/skybox tinting I mistakenly touched     sc.meshes.filter(m=>/BackgroundSkybox/i.test(m.name||"")).forEach(m=>{ try{ if(m.material) m.material.alpha=1; }catch(e){} });@@ -476,7 +494,7 @@ exported bodies + design rules.</p>    // ---- modes: anim (autoplay cascade) | manual (slider, resumes after 5s) | t0 | t1 ----   let mode="anim", u=0, dir=1, holdT=0, resumeTimer=null;-  const CASCADE_T=9.0, HOLD=2.0;+  const CASCADE_T=5.0, HOLD=1.0;   function setBtns(b){ [btnAnim,btnA,btnE].forEach(x=>x.classList.remove("active")); if(b)b.classList.add("active"); }   function tick(dt){     if(mode==="t0"){ if(u>0){u=Math.max(0,u-dt/1.5); apply(u);} return; }