component
NCD0402G1
Public Made by Adomby adom
Foshan NationStar Optoelectronics LED Indication - Discrete, 0402. Pinout cross-checked by two models against the datasheet, KiCad symbol/footprint/3D.
master
John Lauer
Add optional LED on/off STEP and emissive GLB variants with independent MPN group and provenance
9231724
1mo ago
<!doctype html><meta charset="utf-8"><title>LED states • Adom component library</title>
<link rel="stylesheet" href="https://wiki.adom.inc/static/vendor/adom-3d-viewer-babylon9/style.css">
<style>body{margin:0;background:#141b24;color:#edf4ff;font:16px system-ui}header{padding:16px;display:flex;gap:24px;align-items:center}button{padding:9px;background:#29425b;color:white;border:1px solid #61778c;border-radius:6px}#viewer{height:75vh}p{margin:12px 20px;color:#b8c8db}</style>
<header><b>Adom LED states</b><button id="green">NCD0402G1 · green</button><button id="blue">NCD0402B1 · blue</button><label><input id="led" type="checkbox" checked> LED on</label><label><input id="mpn" type="checkbox" checked> MPN on</label><span id="status">Loading</span></header><div id="viewer"></div><p>Illustrative emission color · MPN and light are separate groups · nearby matte card demonstrates cast light · not an electrical or photometric simulation</p>
<script type="module">
import 'https://wiki.adom.inc/static/vendor/adom-3d-viewer-babylon9/adom-3d-viewer-babylon9.esm.js?v=20260915a';
const viewer=window.Adom3DViewerBabylon9.init(document.querySelector('#viewer'),{zUp:true,showGround:false});window.ledDemo={ready:false};
const scene=viewer.getScene();
function nodes(){return [...scene.transformNodes,...scene.meshes]}
function toggle(){for(const n of [...nodes(),...scene.lights]){if(['Adom.LED.Emission','Adom.LED.State','Adom.LED.Light'].includes(n.name))n.setEnabled(document.querySelector('#led').checked);if(n.name==='Adom.LaserEtch.MPN')n.setEnabled(document.querySelector('#mpn').checked)}}
async function load(slug){window.ledDemo.ready=false;viewer.clearScene();for(const l of [...scene.lights])if(l.name.startsWith('Adom.LED.'))l.dispose();for(const m of [...scene.meshes])if(m.name==='__root__')m.dispose(false,true);await viewer.loadModel('https://wiki.adom.inc/api/pages/adom/'+slug+'/files/'+slug+'-mpn-led-on.glb');for(const m of scene.meshes){if(m.name==='cylinder')m.setEnabled(false);if(m.name==='__root__'){m.rotationQuaternion=(m.rotationQuaternion||BABYLON.Quaternion.Identity()).multiply(BABYLON.Quaternion.RotationAxis(BABYLON.Axis.Z,Math.PI));}}viewer.getCamera().alpha=-Math.PI/2+.35;for(const l of scene.lights)if(l.name==='spotLight')l.intensity=0;
if(!scene.getMeshByName('Light witness')){let w=BABYLON.MeshBuilder.CreatePlane('Light witness',{width:.003,height:.002,sideOrientation:BABYLON.Mesh.DOUBLESIDE},scene);w.position.set(0,.001,.0012);w.rotation.x=Math.PI/2;let m=new BABYLON.PBRMaterial('Matte light receiver',scene);m.albedoColor=new BABYLON.Color3(.45,.45,.45);m.metallic=0;m.roughness=1;m.maxSimultaneousLights=8;w.material=m;}
viewer.getCamera().setTarget(new BABYLON.Vector3(0,0,.0009));viewer.getCamera().lowerRadiusLimit=.0001;viewer.getCamera().upperRadiusLimit=.1;viewer.getCamera().minZ=.000001;viewer.getCamera().setPosition(new BABYLON.Vector3(.0015,-.003,.002));toggle();document.querySelector('#status').textContent=slug.toUpperCase();window.ledDemo.ready=true;window.ledDemo.slug=slug;}
window.ledDemo.load=load;window.ledDemo.toggle=(led,mpn)=>{document.querySelector('#led').checked=led;document.querySelector('#mpn').checked=mpn;toggle();return nodes().filter(n=>n.name.startsWith('Adom.')).map(n=>({name:n.name,enabled:n.isEnabled()}))};window.ledDemo.stats=()=>({ready:window.ledDemo.ready,slug:window.ledDemo.slug,vertices:scene.getTotalVertices(),nodes:nodes().filter(n=>n.name.startsWith('Adom.')).map(n=>({name:n.name,enabled:n.isEnabled()}))});window.ledDemo.shot=()=>viewer.getEngine().getRenderingCanvas().toDataURL('image/png');
for(const id of ['led','mpn'])document.querySelector('#'+id).onchange=toggle;document.querySelector('#green').onclick=()=>load('ncd0402g1');document.querySelector('#blue').onclick=()=>load('ncd0402b1');await load('ncd0402g1');
</script>