@typecad/typecad
Version:
🤖programmatically 💥create 🛰️hardware
1 lines • 12.1 kB
JavaScript
function a29_0x52dd16(_0x56d832,_0x55ac95){return a29_0x3e51(_0x56d832- -0x5f,_0x55ac95);}import*as a29_0x790ee8 from'fs';function a29_0x21fb(){const _0x49bf99=['getLayers','getBounds','fillRect','includes','track','segment','worldToGrid','floor','bounds','minY','drawRect','polygon','length','maxX','forEach','success','nodes','gridY','gridNodes','drawLine','max','getObstacleColor','setPixel','savePPM','P6\x0a','visualizeAllLayers','visualizeRouting'];a29_0x21fb=function(){return _0x49bf99;};return a29_0x21fb();}function a29_0x3e51(_0x21fbe6,_0x3e516e){const _0x4a847c=a29_0x21fb();return a29_0x3e51=function(_0x42a49a,_0x7bfcad){_0x42a49a=_0x42a49a-0x0;let _0x4fddd8=_0x4a847c[_0x42a49a];return _0x4fddd8;},a29_0x3e51(_0x21fbe6,_0x3e516e);}import*as a29_0x229977 from'path';export class DebugVisualizer{static['visualizeRouting'](_0x5386b2,_0x32a419,_0x3b120c,_0x141d53='routing_debug',_0xd65c3f,_0x5b43ba=0x1,_0x1bad5c,_0x14e96f=![]){const _0x11fdb1=_0x5386b2['getDimensions'](),_0x5b13d2=_0xd65c3f||_0x5386b2[_0x1f31e5(-0x6c,-0x64)]()[0x0],_0x5d6ac9=_0x5386b2[_0x1f31e5(-0x6b,-0x70)](),_0x8d51c2=_0x11fdb1['width'],_0x57df89=_0x11fdb1['height'],_0x186711=0xfa0,_0x230537=Math['min'](_0x8d51c2*_0x5b43ba,_0x186711),_0x29810b=Math['min'](_0x57df89*_0x5b43ba,_0x186711);(_0x8d51c2*_0x5b43ba>_0x186711||_0x57df89*_0x5b43ba>_0x186711)&&(_0x5b43ba=Math['max'](0x1,Math['floor'](_0x186711/Math['max'](_0x8d51c2,_0x57df89))));const _0x34946e=new Uint8Array(_0x230537*_0x29810b*0x3);_0x34946e['fill'](0xff);function _0x1f31e5(_0x1000c1,_0x5a1715){return a29_0x3e51(_0x1000c1- -0x6c,_0x5a1715);}for(let _0x1e06a8=0x0;_0x1e06a8<_0x57df89&&_0x1e06a8*_0x5b43ba<_0x29810b;_0x1e06a8++){for(let _0x3e4cde=0x0;_0x3e4cde<_0x8d51c2&&_0x3e4cde*_0x5b43ba<_0x230537;_0x3e4cde++){const _0x1cfb56=_0x5386b2['getCell'](_0x3e4cde,_0x1e06a8,_0x5b13d2);if(_0x1cfb56?.['occupied']){const _0x5ce5f7=this['getObstacleColor'](_0x1cfb56['net']);this[_0x1f31e5(-0x6a,-0x67)](_0x34946e,_0x230537,_0x29810b,_0x3e4cde*_0x5b43ba,_0x1e06a8*_0x5b43ba,_0x5b43ba,_0x5b43ba,_0x5ce5f7);}}}for(const _0x5c9eb3 of _0x32a419){const _0x2b92db=_0x5c9eb3['layers']['includes'](_0x5b13d2)||_0x5c9eb3['layers']['includes']('*.Cu')&&_0x5b13d2[_0x1f31e5(-0x69,-0x63)]('.Cu');if(!_0x2b92db)continue;const _0x631587=this['getObstacleTypeColor'](_0x5c9eb3['type'],_0x5c9eb3['net']);if(_0x5c9eb3['type']===_0x1f31e5(-0x68,-0x69)&&_0x5c9eb3[_0x1f31e5(-0x67,-0x75)]){const _0x2b088b=_0x5c9eb3[_0x1f31e5(-0x67,-0x66)],_0x237d0d=_0x5386b2['worldToGrid'](_0x2b088b['x1'],_0x2b088b['y1']),_0x301a7e=_0x5386b2[_0x1f31e5(-0x66,-0x68)](_0x2b088b['x2'],_0x2b088b['y2']);this['drawLine'](_0x34946e,_0x230537,_0x29810b,_0x237d0d['x']*_0x5b43ba+Math[_0x1f31e5(-0x65,-0x5c)](_0x5b43ba/0x2),_0x237d0d['y']*_0x5b43ba+Math['floor'](_0x5b43ba/0x2),_0x301a7e['x']*_0x5b43ba+Math['floor'](_0x5b43ba/0x2),_0x301a7e['y']*_0x5b43ba+Math['floor'](_0x5b43ba/0x2),_0x631587);}else{if(_0x5c9eb3['type']==='pad'&&_0x5c9eb3['padShape']){const _0x1f8169=_0x5386b2['worldToGrid'](_0x5c9eb3[_0x1f31e5(-0x64,-0x5d)]['minX'],_0x5c9eb3[_0x1f31e5(-0x64,-0x69)][_0x1f31e5(-0x63,-0x6e)]),_0x470277=_0x5386b2[_0x1f31e5(-0x66,-0x6b)](_0x5c9eb3[_0x1f31e5(-0x64,-0x6e)]['maxX'],_0x5c9eb3[_0x1f31e5(-0x64,-0x70)]['maxY']);this[_0x1f31e5(-0x62,-0x61)](_0x34946e,_0x230537,_0x29810b,_0x1f8169['x']*_0x5b43ba,_0x1f8169['y']*_0x5b43ba,(_0x470277['x']-_0x1f8169['x']+0x1)*_0x5b43ba,(_0x470277['y']-_0x1f8169['y']+0x1)*_0x5b43ba,_0x631587);}else{if(_0x5c9eb3[_0x1f31e5(-0x61,-0x63)]&&_0x5c9eb3['polygon']['points']&&_0x5c9eb3['polygon']['points']['length']>=0x3){const _0x30d58e=_0x5c9eb3['polygon'],_0x4ddf37=_0x30d58e['points']['map'](_0x244713=>_0x5386b2['worldToGrid'](_0x244713['x'],_0x244713['y']));for(let _0x3e5809=0x0;_0x3e5809<_0x4ddf37[_0x1f31e5(-0x60,-0x5f)];_0x3e5809++){const _0x426dd7=_0x4ddf37[_0x3e5809],_0x4381a7=_0x4ddf37[(_0x3e5809+0x1)%_0x4ddf37['length']];this['drawLine'](_0x34946e,_0x230537,_0x29810b,_0x426dd7['x']*_0x5b43ba+Math['floor'](_0x5b43ba/0x2),_0x426dd7['y']*_0x5b43ba+Math['floor'](_0x5b43ba/0x2),_0x4381a7['x']*_0x5b43ba+Math['floor'](_0x5b43ba/0x2),_0x4381a7['y']*_0x5b43ba+Math['floor'](_0x5b43ba/0x2),_0x631587);}}else{const _0x179938=_0x5386b2[_0x1f31e5(-0x66,-0x5d)](_0x5c9eb3[_0x1f31e5(-0x64,-0x5b)]['minX'],_0x5c9eb3['bounds']['minY']),_0xf89c75=_0x5386b2['worldToGrid'](_0x5c9eb3[_0x1f31e5(-0x64,-0x67)][_0x1f31e5(-0x5f,-0x5f)],_0x5c9eb3['bounds']['maxY']);this['drawRect'](_0x34946e,_0x230537,_0x29810b,_0x179938['x']*_0x5b43ba,_0x179938['y']*_0x5b43ba,(_0xf89c75['x']-_0x179938['x']+0x1)*_0x5b43ba,(_0xf89c75['y']-_0x179938['y']+0x1)*_0x5b43ba,_0x631587);}}}}const _0x349ba7=[{'r':0xff,'g':0x0,'b':0x0},{'r':0x0,'g':0x0,'b':0xff},{'r':0x0,'g':0xff,'b':0x0},{'r':0xff,'g':0x0,'b':0xff},{'r':0xff,'g':0xa5,'b':0x0},{'r':0x0,'g':0xff,'b':0xff}];_0x3b120c[_0x1f31e5(-0x5e,-0x63)]((_0x544668,_0x480698)=>{if(!_0x544668[_0x2397b2(0xcc,0xd4)])return;function _0x2397b2(_0x173bd9,_0x24a26e){return a29_0x3e51(_0x173bd9-0xbd,_0x24a26e);}const _0x1f9576=_0x349ba7[_0x480698%_0x349ba7[_0x2397b2(0xc9,0xd7)]],_0x418b9d=_0x544668['gridNodes']&&_0x544668['gridNodes']['length']===_0x544668[_0x2397b2(0xcd,0xcc)][_0x2397b2(0xc9,0xbe)];for(let _0x48ad37=0x0;_0x48ad37<_0x544668['nodes']['length'];_0x48ad37++){const _0x1e1199=_0x544668[_0x2397b2(0xcd,0xda)][_0x48ad37];if(_0x1e1199['layer']!==_0x5b13d2)continue;const _0x2e1c46=_0x418b9d?{'x':_0x544668['gridNodes'][_0x48ad37]['gridX'],'y':_0x544668['gridNodes'][_0x48ad37][_0x2397b2(0xce,0xda)]}:_0x5386b2[_0x2397b2(0xc3,0xce)](_0x1e1199['x'],_0x1e1199['y']);this['fillCircle'](_0x34946e,_0x230537,_0x29810b,_0x2e1c46['x']*_0x5b43ba+Math['floor'](_0x5b43ba/0x2),_0x2e1c46['y']*_0x5b43ba+Math['floor'](_0x5b43ba/0x2),Math['max'](0x1,Math['floor'](_0x5b43ba/0x2)),_0x1f9576);if(_0x48ad37<_0x544668['nodes'][_0x2397b2(0xc9,0xc8)]-0x1){const _0x54c03b=_0x544668['nodes'][_0x48ad37+0x1];if(_0x54c03b['layer']===_0x5b13d2){const _0x58acb0=_0x418b9d?{'x':_0x544668[_0x2397b2(0xcf,0xd2)][_0x48ad37+0x1]['gridX'],'y':_0x544668[_0x2397b2(0xcf,0xc8)][_0x48ad37+0x1]['gridY']}:_0x5386b2[_0x2397b2(0xc3,0xcd)](_0x54c03b['x'],_0x54c03b['y']);this[_0x2397b2(0xd0,0xce)](_0x34946e,_0x230537,_0x29810b,_0x2e1c46['x']*_0x5b43ba+Math['floor'](_0x5b43ba/0x2),_0x2e1c46['y']*_0x5b43ba+Math['floor'](_0x5b43ba/0x2),_0x58acb0['x']*_0x5b43ba+Math['floor'](_0x5b43ba/0x2),_0x58acb0['y']*_0x5b43ba+Math['floor'](_0x5b43ba/0x2),_0x1f9576);}}}});if(_0x1bad5c?.['length']){const _0xefd0b={'r':0xff,'g':0xff,'b':0x0};for(const _0x39e95d of _0x1bad5c){if(_0x39e95d['layer']!==_0x5b13d2)continue;const _0x505fff=_0x5386b2['worldToGrid'](_0x39e95d['x'],_0x39e95d['y']),_0x4e815e=_0x505fff['x']*_0x5b43ba+Math['floor'](_0x5b43ba/0x2),_0x28be38=_0x505fff['y']*_0x5b43ba+Math['floor'](_0x5b43ba/0x2),_0x36af55=Math[_0x1f31e5(-0x58,-0x4a)](0x2,Math['floor'](_0x5b43ba*1.5));this['fillCircle'](_0x34946e,_0x230537,_0x29810b,_0x4e815e,_0x28be38,_0x36af55,_0xefd0b);const _0x59925c=_0x36af55+0x2;this['drawLine'](_0x34946e,_0x230537,_0x29810b,_0x4e815e-_0x59925c,_0x28be38,_0x4e815e+_0x59925c,_0x28be38,{'r':0x0,'g':0x0,'b':0x0}),this[_0x1f31e5(-0x59,-0x52)](_0x34946e,_0x230537,_0x29810b,_0x4e815e,_0x28be38-_0x59925c,_0x4e815e,_0x28be38+_0x59925c,{'r':0x0,'g':0x0,'b':0x0});}}if(_0x14e96f){const _0x390e35=a29_0x229977['resolve'](_0x141d53+'.ppm');this['savePPM'](_0x34946e,_0x230537,_0x29810b,_0x390e35);}}static[a29_0x52dd16(-0x4a,-0x55)](_0x3b7a12){if(!_0x3b7a12)return{'r':0xc8,'g':0xc8,'b':0xc8};let _0x366895=0x0;for(let _0x30494d=0x0;_0x30494d<_0x3b7a12['length'];_0x30494d++){_0x366895=_0x3b7a12['charCodeAt'](_0x30494d)+((_0x366895<<0x5)-_0x366895);}return{'r':0x96+_0x366895%0x6a,'g':0x96+(_0x366895>>0x8)%0x6a,'b':0x96+(_0x366895>>0x10)%0x6a};}static['getObstacleTypeColor'](_0x5c0984,_0x269922){switch(_0x5c0984){case'pad':return _0x269922?{'r':0x64,'g':0x96,'b':0xff}:{'r':0xb4,'g':0xb4,'b':0xb4};case'track':return{'r':0x32,'g':0x32,'b':0x32};case'component':return{'r':0x96,'g':0x96,'b':0x96};case'zone':return{'r':0xc8,'g':0xc8,'b':0x64};case'keepout':return{'r':0xff,'g':0x64,'b':0x64};case'outline':return{'r':0x64,'g':0x64,'b':0x64};default:return{'r':0x80,'g':0x80,'b':0x80};}}static['fillRect'](_0x223de3,_0x28938d,_0x49c414,_0x13879c,_0x2805d0,_0x4a9a25,_0x1c0b93,_0x14cd8f){for(let _0x42dd36=0x0;_0x42dd36<_0x1c0b93;_0x42dd36++){for(let _0xd816c8=0x0;_0xd816c8<_0x4a9a25;_0xd816c8++){const _0x2ef4b7=Math['floor'](_0x13879c+_0xd816c8),_0x17c0d4=Math['floor'](_0x2805d0+_0x42dd36);this['setPixel'](_0x223de3,_0x28938d,_0x49c414,_0x2ef4b7,_0x17c0d4,_0x14cd8f);}}}static['drawRect'](_0x1535a4,_0x2f7f57,_0x43f63d,_0x4c6654,_0xf6656a,_0x193965,_0x2da5db,_0x4ea4a9){for(let _0x3ed669=0x0;_0x3ed669<_0x193965;_0x3ed669++){this[_0xe92e73(0x2d,0x26)](_0x1535a4,_0x2f7f57,_0x43f63d,_0x4c6654+_0x3ed669,_0xf6656a,_0x4ea4a9),this['setPixel'](_0x1535a4,_0x2f7f57,_0x43f63d,_0x4c6654+_0x3ed669,_0xf6656a+_0x2da5db-0x1,_0x4ea4a9);}function _0xe92e73(_0x2fcb02,_0x4ba82c){return a29_0x3e51(_0x2fcb02-0x17,_0x4ba82c);}for(let _0x30dcb3=0x0;_0x30dcb3<_0x2da5db;_0x30dcb3++){this['setPixel'](_0x1535a4,_0x2f7f57,_0x43f63d,_0x4c6654,_0xf6656a+_0x30dcb3,_0x4ea4a9),this['setPixel'](_0x1535a4,_0x2f7f57,_0x43f63d,_0x4c6654+_0x193965-0x1,_0xf6656a+_0x30dcb3,_0x4ea4a9);}}static['fillCircle'](_0x32ec46,_0x27dad0,_0x346e01,_0x1cbee0,_0x17e2e8,_0x19adb3,_0x2da5b1){for(let _0x3e14dc=-_0x19adb3;_0x3e14dc<=_0x19adb3;_0x3e14dc++){for(let _0x50404b=-_0x19adb3;_0x50404b<=_0x19adb3;_0x50404b++){_0x50404b*_0x50404b+_0x3e14dc*_0x3e14dc<=_0x19adb3*_0x19adb3&&this['setPixel'](_0x32ec46,_0x27dad0,_0x346e01,_0x1cbee0+_0x50404b,_0x17e2e8+_0x3e14dc,_0x2da5b1);}}}static[a29_0x52dd16(-0x4c,-0x47)](_0x144491,_0x1b1c23,_0x7eab85,_0x5ad3f2,_0x3359dd,_0x5a9a67,_0xffc754,_0x463080){_0x5ad3f2=Math['floor'](_0x5ad3f2),_0x3359dd=Math['floor'](_0x3359dd),_0x5a9a67=Math['floor'](_0x5a9a67),_0xffc754=Math['floor'](_0xffc754);const _0x44614c=Math['abs'](_0x5a9a67-_0x5ad3f2),_0x326c3e=Math['abs'](_0xffc754-_0x3359dd),_0x50191b=_0x5ad3f2<_0x5a9a67?0x1:-0x1,_0x5690aa=_0x3359dd<_0xffc754?0x1:-0x1;let _0x10c1e4=_0x44614c-_0x326c3e;while(!![]){this['setPixel'](_0x144491,_0x1b1c23,_0x7eab85,_0x5ad3f2,_0x3359dd,_0x463080);if(_0x5ad3f2===_0x5a9a67&&_0x3359dd===_0xffc754)break;const _0x3383c6=0x2*_0x10c1e4;_0x3383c6>-_0x326c3e&&(_0x10c1e4-=_0x326c3e,_0x5ad3f2+=_0x50191b),_0x3383c6<_0x44614c&&(_0x10c1e4+=_0x44614c,_0x3359dd+=_0x5690aa);}}static[a29_0x52dd16(-0x49,-0x3b)](_0x4ee49d,_0x4811e6,_0x57c8bd,_0x4c0019,_0x142ad7,_0x4a85e3){_0x4c0019=Math[_0x3aed7b(0x378,0x383)](_0x4c0019);function _0x3aed7b(_0x15c04b,_0x460f31){return a29_0x3e51(_0x15c04b-0x371,_0x460f31);}_0x142ad7=Math['floor'](_0x142ad7);if(_0x4c0019>=0x0&&_0x4c0019<_0x4811e6&&_0x142ad7>=0x0&&_0x142ad7<_0x57c8bd){const _0x14c62b=(_0x142ad7*_0x4811e6+_0x4c0019)*0x3;_0x4ee49d[_0x14c62b]=_0x4a85e3['r'],_0x4ee49d[_0x14c62b+0x1]=_0x4a85e3['g'],_0x4ee49d[_0x14c62b+0x2]=_0x4a85e3['b'];}}static[a29_0x52dd16(-0x48,-0x4f)](_0x1e4578,_0x58a200,_0x5e2f1c,_0x182698){const _0x306aef=_0x578130(0x327,0x323)+_0x58a200+'\x20'+_0x5e2f1c+'\x0a255\x0a',_0x4469ff=Buffer['from'](_0x306aef,'ascii'),_0x2a892e=Buffer['concat']([_0x4469ff,Buffer['from'](_0x1e4578)]);function _0x578130(_0x3d348f,_0x163e4e){return a29_0x3e51(_0x163e4e-0x30b,_0x3d348f);}a29_0x790ee8['writeFileSync'](_0x182698,_0x2a892e);}static[a29_0x52dd16(-0x46,-0x3d)](_0x203648,_0x8251c7,_0x118d16,_0x32637f='routing_debug_all_layers',_0xac9522=0x2,_0xea8ed9,_0x1d84d4=![]){const _0x541ab4=_0x203648['getLayers']();function _0x54936f(_0x1b5bae,_0x4bf6ed){return a29_0x3e51(_0x4bf6ed- -0x166,_0x1b5bae);}if(_0x541ab4[_0x54936f(-0x150,-0x15a)]===0x0)return;if(_0x541ab4['length']===0x1){this['visualizeRouting'](_0x203648,_0x8251c7,_0x118d16,_0x32637f,_0x541ab4[0x0],_0xac9522,_0xea8ed9,_0x1d84d4);return;}_0x541ab4['forEach']((_0x79f412,_0x223bc5)=>{function _0x4e7985(_0x3b5251,_0x2844ed){return a29_0x3e51(_0x3b5251- -0xba,_0x2844ed);}const _0x500065=_0x32637f+'_'+_0x79f412['replace']('.','_');this[_0x4e7985(-0xa0,-0x92)](_0x203648,_0x8251c7,_0x118d16,_0x500065,_0x79f412,_0xac9522,_0xea8ed9,_0x1d84d4);});}}