{"version":3,"sources":["../src/Plane.js"],"names":[],"mappings":"AAAA;;;;;;;;;AAEA;;AACA;;AACA;;AACA;;;;IAEa,K,WAAA,K;AAET,mBAAa,MAAb,EAAqB,EAArB,EAAyB,EAAzB,EACA;AAAA;;AACI,aAAK,UAAL,CAAgB,MAAhB,EAAwB,EAAxB,EAA4B,EAA5B;AACH;;;;4BAEI,K,EACL;AACI,mBAAQ,KAAK,QAAL,CAAc,MAAM,MAApB,KAA+B,KAAK,YAAL,CAAkB,KAAlB,CAAvC;AACH;;;8BAGD;AACI,mBAAO,IAAI,KAAJ,CAAU,KAAK,MAAf,EAAuB,KAAK,MAA5B,CAAP;AACH;;;kCAEU,M,EACX;AACI,gBAAI,IAAI,OAAO,QAAP,IAAmB,MAA3B;AACA,mBAAO,IAAI,KAAJ,CAAU,CACb,KAAK,MAAL,CAAY,QAAZ,CAAqB,CAArB,IAA0B,EAAE,CAAF,CADb,EAEb,KAAK,MAAL,CAAY,QAAZ,CAAqB,CAArB,IAA0B,EAAE,CAAF,CAFb,EAGb,KAAK,MAAL,CAAY,QAAZ,CAAqB,CAArB,KAA2B,EAAE,CAAF,KAAQ,CAAnC,CAHa,CAAV,EAIJ,KAAK,MAJD,CAAP;AAKH;;;qCAEa,G,EACd;AACI,gBAAI,KAAJ;AACA,gBAAI,IAAI,MAAR,EACA;;AAEI,wBAAQ,KAAK,MAAL,CAAY,SAAZ,CAAsB,IAAI,MAA1B,CAAR;AACA,uBAAQ,KAAK,GAAL,CAAS,KAAT,6BAAgC,KAAK,GAAL,CAAS,KAAK,EAAL,GAAU,KAAnB,yBAAxC;AACH,aALD,MAMK,IAAI,IAAI,SAAR,EACL;;AAEI,uBAAO,KAAK,MAAL,CAAY,iBAAZ,CAA8B,IAAI,SAAlC,CAAP;AACH;AACD,mBAAO,IAAP;AACH;;;0CAEkB,K,EACnB;AACI,gBAAI,QAAQ,KAAK,MAAL,CAAY,SAAZ,CAAsB,MAAM,MAA5B,CAAZ;AACA,mBAAQ,KAAK,GAAL,CAAS,KAAK,EAAL,GAAQ,CAAR,GAAY,KAArB,yBAAR;AACH;;;qCAEa,G,EACd;AACI,gBAAI,KAAK,UAAL,CAAgB,GAAhB,KAAwB,KAAK,QAAL,CAAc,GAAd,CAA5B,EACA;AACI,uBAAO,CAAP;AACH;AACD,gBAAI,IAAI,MAAR,EACA;;AAEI,oBAAI,IAAI,KAAK,MAAL,CAAY,QAApB;oBAA8B,IAAI,IAAI,MAAJ,CAAW,QAA7C;oBAAuD,IAAI,KAAK,MAAL,CAAY,QAAvE;AACA,uBAAO,KAAK,GAAL,CAAS,CAAC,EAAE,CAAF,IAAO,EAAE,CAAF,CAAR,IAAgB,EAAE,CAAF,CAAhB,GAAuB,CAAC,EAAE,CAAF,IAAO,EAAE,CAAF,CAAR,IAAgB,EAAE,CAAF,CAAvC,GAA8C,CAAC,EAAE,CAAF,IAAO,EAAE,CAAF,CAAR,IAAgB,EAAE,CAAF,CAAvE,CAAP;AACH,aALD,MAOA;;AAEI,oBAAI,IAAI,IAAI,QAAJ,IAAgB,GAAxB;AACA,oBAAI,IAAI,KAAK,MAAL,CAAY,QAApB;oBAA8B,IAAI,KAAK,MAAL,CAAY,QAA9C;AACA,uBAAO,KAAK,GAAL,CAAS,CAAC,EAAE,CAAF,IAAO,EAAE,CAAF,CAAR,IAAgB,EAAE,CAAF,CAAhB,GAAuB,CAAC,EAAE,CAAF,IAAO,EAAE,CAAF,CAAR,IAAgB,EAAE,CAAF,CAAvC,GAA8C,CAAC,EAAE,CAAF,KAAQ,EAAE,CAAF,KAAQ,CAAhB,CAAD,IAAuB,EAAE,CAAF,CAA9E,CAAP;AACH;AACJ;;;iCAES,G,EACV;AACI,gBAAI,IAAI,MAAR,EACA;AACI,uBAAO,IAAP;AACH;AACD,gBAAI,IAAI,SAAR,EACA;AACI,uBAAQ,KAAK,QAAL,CAAc,IAAI,MAAlB,KAA6B,KAAK,QAAL,CAAc,IAAI,MAAJ,CAAW,GAAX,CAAe,IAAI,SAAnB,CAAd,CAArC;AACH,aAHD,MAKA;AACI,oBAAI,IAAI,IAAI,QAAJ,IAAgB,GAAxB;AACA,oBAAI,IAAI,KAAK,MAAL,CAAY,QAApB;oBAA8B,IAAI,KAAK,MAAL,CAAY,QAA9C;AACA,oBAAI,OAAO,KAAK,GAAL,CAAS,EAAE,CAAF,KAAM,EAAE,CAAF,IAAO,EAAE,CAAF,CAAb,IAAqB,EAAE,CAAF,KAAM,EAAE,CAAF,IAAO,EAAE,CAAF,CAAb,CAArB,GAA0C,EAAE,CAAF,KAAM,EAAE,CAAF,KAAQ,EAAE,CAAF,KAAQ,CAAhB,CAAN,CAAnD,CAAX;AACA,uBAAQ,4BAAR;AACH;AACJ;;;mCAEW,G,EACZ;AACI,gBAAI,OAAO,IAAI,SAAX,KAA0B,WAA1B,IAAyC,OAAO,IAAI,MAAX,KAAuB,WAApE,EACA;AACI,uBAAO,IAAP;AACH;AACD,mBAAO,CAAC,KAAK,YAAL,CAAkB,GAAlB,CAAR;AACH;;;yCAEiB,G,EAClB;AACI,gBAAI,CAAC,KAAK,UAAL,CAAgB,GAAhB,CAAL,EACA;AACI,uBAAO,IAAP;AACH;AACD,gBAAI,IAAI,SAAR,EACA;;AAEI,oBAAI,IAAI,IAAI,MAAJ,CAAW,QAAnB;oBACI,IAAI,IAAI,SAAJ,CAAc,QADtB;oBAEI,IAAI,KAAK,MAAL,CAAY,QAFpB;oBAGI,IAAI,KAAK,MAAL,CAAY,QAHpB;AAIA,oBAAI,aAAa,CAAC,EAAE,CAAF,KAAM,EAAE,CAAF,IAAK,EAAE,CAAF,CAAX,IAAmB,EAAE,CAAF,KAAM,EAAE,CAAF,IAAK,EAAE,CAAF,CAAX,CAAnB,GAAsC,EAAE,CAAF,KAAM,EAAE,CAAF,IAAK,EAAE,CAAF,CAAX,CAAvC,KAA4D,EAAE,CAAF,IAAK,EAAE,CAAF,CAAL,GAAY,EAAE,CAAF,IAAK,EAAE,CAAF,CAAjB,GAAwB,EAAE,CAAF,IAAK,EAAE,CAAF,CAAzF,CAAjB;AACA,uBAAO,mBAAW,CAAC,EAAE,CAAF,IAAO,EAAE,CAAF,IAAK,UAAb,EAAyB,EAAE,CAAF,IAAO,EAAE,CAAF,IAAK,UAArC,EAAiD,EAAE,CAAF,IAAO,EAAE,CAAF,IAAK,UAA7D,CAAX,CAAP;AACH,aATD,MAUK,IAAI,IAAI,MAAR,EACL;;AAEI,oBAAI,YAAY,KAAK,MAAL,CAAY,KAAZ,CAAkB,IAAI,MAAtB,EAA8B,YAA9B,EAAhB;;;AAGA,oBAAI,IAAI,KAAK,MAAL,CAAY,QAApB;oBACI,IAAI,KAAK,MAAL,CAAY,QADpB;oBAEI,IAAI,IAAI,MAAJ,CAAW,QAFnB;oBAGI,IAAI,IAAI,MAAJ,CAAW,QAHnB;AAIA,oBAAI,SAAS,eAAO,IAAP,CAAY,CAAZ,EAAc,CAAd,CAAb;oBAA+B,IAAI,CAAnC;AACA,uBAAO,OAAO,UAAP,EAAP,EACA;AACI;AACA,6BAAS,mBAAW,CAChB,CAAE,EAAE,IAAE,CAAJ,CAAF,EAAU,EAAE,CAAC,IAAE,CAAH,IAAM,CAAR,CAAV,CADgB,EAEhB,CAAE,EAAE,IAAE,CAAJ,CAAF,EAAU,EAAE,CAAC,IAAE,CAAH,IAAM,CAAR,CAAV,CAFgB,CAAX,CAAT;AAIH;;AAED,oBAAI,UAAU,OAAO,OAAP,GAAiB,QAA/B;AACA,oBAAI,IAAI,EAAE,CAAF,IAAK,EAAE,CAAF,CAAL,GAAY,EAAE,CAAF,IAAK,EAAE,CAAF,CAAjB,GAAwB,EAAE,CAAF,IAAK,EAAE,CAAF,CAArC;AACA,oBAAI,IAAI,EAAE,CAAF,IAAK,EAAE,CAAF,CAAL,GAAY,EAAE,CAAF,IAAK,EAAE,CAAF,CAAjB,GAAwB,EAAE,CAAF,IAAK,EAAE,CAAF,CAArC;AACA,oBAAI,eAAe,CACf,QAAQ,CAAR,EAAW,CAAX,IAAgB,CAAhB,GAAoB,QAAQ,CAAR,EAAW,CAAX,IAAgB,CADrB,EAEf,QAAQ,CAAR,EAAW,CAAX,IAAgB,CAAhB,GAAoB,QAAQ,CAAR,EAAW,CAAX,IAAgB,CAFrB,CAAnB;AAIA,oBAAI,SAAS,EAAb;AACA,qBAAK,IAAI,IAAI,CAAb,EAAgB,KAAK,CAArB,EAAwB,GAAxB,EACA;;;AAGI,2BAAO,IAAP,CAAa,MAAM,CAAP,GAAY,CAAZ,GAAgB,aAAa,CAAC,IAAI,CAAC,IAAI,CAAL,IAAQ,CAAb,IAAgB,CAA7B,CAA5B;AACH;AACD,uBAAO,eAAS,MAAT,EAAiB,SAAjB,CAAP;AACH;AACJ;;;uCAEe,K,EAChB;AACI,gBAAI,IAAI,MAAM,QAAN,IAAkB,KAA1B;AACA,gBAAI,IAAI,KAAK,MAAL,CAAY,QAApB;gBAA8B,IAAI,KAAK,MAAL,CAAY,QAA9C;AACA,gBAAI,MAAM,CAAC,EAAE,CAAF,IAAO,EAAE,CAAF,CAAR,IAAgB,EAAE,CAAF,CAAhB,GAAuB,CAAC,EAAE,CAAF,IAAO,EAAE,CAAF,CAAR,IAAgB,EAAE,CAAF,CAAvC,GAA8C,CAAC,EAAE,CAAF,KAAQ,EAAE,CAAF,KAAQ,CAAhB,CAAD,IAAuB,EAAE,CAAF,CAA/E;AACA,mBAAO,mBAAW,CAAC,EAAE,CAAF,IAAO,EAAE,CAAF,IAAO,GAAf,EAAoB,EAAE,CAAF,IAAO,EAAE,CAAF,IAAO,GAAlC,EAAuC,CAAC,EAAE,CAAF,KAAQ,CAAT,IAAc,EAAE,CAAF,IAAO,GAA5D,CAAX,CAAP;AACH;;;+BAEO,C,EAAG,I,EACX;AACI,gBAAI,IAAI,EAAE,WAAF,GAAgB,EAAE,QAAlB,GAA6B,eAAO,QAAP,CAAgB,CAAhB,EAAmB,KAAK,SAAxB,EAAmC,QAAxE;AACA,gBAAI,IAAI,KAAK,cAAL,CAAoB,KAAK,MAAzB,EAAiC,QAAzC;AACA,gBAAI,IAAI,KAAK,MAAL,CAAY,QAApB;gBAA8B,IAAI,KAAK,MAAL,CAAY,QAA9C;AACA,gBAAI,KAAK,EAAE,CAAF,CAAT;gBAAe,KAAK,EAAE,CAAF,CAApB;gBAA0B,KAAK,EAAE,CAAF,CAA/B;gBAAqC,KAAK,EAAE,CAAF,CAA1C;gBAAgD,KAAK,EAAE,CAAF,CAArD;gBAA2D,KAAK,EAAE,CAAF,CAAhE;AACA,gBAAI,IAAI,KAAK,EAAb;gBAAiB,IAAI,KAAK,EAA1B;gBAA8B,IAAI,KAAK,EAAvC;AACA,mBAAO,IAAI,KAAJ,CACH,CACI,KAAK,EAAE,CAAF,EAAK,CAAL,IAAU,CAAf,GAAmB,EAAE,CAAF,EAAK,CAAL,IAAU,CAA7B,GAAiC,EAAE,CAAF,EAAK,CAAL,IAAU,CAD/C,EAEI,KAAK,EAAE,CAAF,EAAK,CAAL,IAAU,CAAf,GAAmB,EAAE,CAAF,EAAK,CAAL,IAAU,CAA7B,GAAiC,EAAE,CAAF,EAAK,CAAL,IAAU,CAF/C,EAGI,KAAK,EAAE,CAAF,EAAK,CAAL,IAAU,CAAf,GAAmB,EAAE,CAAF,EAAK,CAAL,IAAU,CAA7B,GAAiC,EAAE,CAAF,EAAK,CAAL,IAAU,CAH/C,CADG,EAMH,CACI,EAAE,CAAF,EAAK,CAAL,IAAU,EAAE,CAAF,CAAV,GAAiB,EAAE,CAAF,EAAK,CAAL,IAAU,EAAE,CAAF,CAA3B,GAAkC,EAAE,CAAF,EAAK,CAAL,IAAU,EAAE,CAAF,CADhD,EAEI,EAAE,CAAF,EAAK,CAAL,IAAU,EAAE,CAAF,CAAV,GAAiB,EAAE,CAAF,EAAK,CAAL,IAAU,EAAE,CAAF,CAA3B,GAAkC,EAAE,CAAF,EAAK,CAAL,IAAU,EAAE,CAAF,CAFhD,EAGI,EAAE,CAAF,EAAK,CAAL,IAAU,EAAE,CAAF,CAAV,GAAiB,EAAE,CAAF,EAAK,CAAL,IAAU,EAAE,CAAF,CAA3B,GAAkC,EAAE,CAAF,EAAK,CAAL,IAAU,EAAE,CAAF,CAHhD,CANG,CAAP;AAYH;;;qCAEa,G,EACd;AACI,gBAAI,IAAI,MAAR,EACA;;AAEI,oBAAI,IAAI,KAAK,MAAL,CAAY,QAApB;oBAA8B,IAAI,KAAK,MAAL,CAAY,QAA9C;AACA,oBAAI,KAAK,EAAE,CAAF,CAAT;oBAAe,KAAK,EAAE,CAAF,CAApB;oBAA0B,KAAK,EAAE,CAAF,CAA/B;oBAAqC,KAAK,EAAE,CAAF,CAA1C;oBAAgD,KAAK,EAAE,CAAF,CAArD;oBAA2D,KAAK,EAAE,CAAF,CAAhE;AACA,oBAAI,OAAO,KAAK,MAAL,CAAY,YAAZ,CAAyB,GAAzB,EAA8B,QAAzC;;AAEA,oBAAI,MAAM,KAAK,EAAf;oBAAmB,MAAM,KAAK,EAA9B;oBAAkC,MAAM,KAAK,EAA7C;AACA,oBAAI,IAAI,IAAI,cAAJ,CAAmB,CAAC,GAAD,EAAM,GAAN,EAAW,GAAX,CAAnB,EAAoC,QAA5C;AACA,oBAAI,OAAO,CAAC,EAAE,CAAF,KAAQ,EAAE,CAAF,IAAO,GAAf,IAAsB,KAAK,CAAL,CAAvB,EAAgC,EAAE,CAAF,KAAQ,EAAE,CAAF,IAAO,GAAf,IAAsB,KAAK,CAAL,CAAtD,EAA+D,EAAE,CAAF,KAAQ,EAAE,CAAF,IAAO,GAAf,IAAsB,KAAK,CAAL,CAArF,CAAX;AACA,uBAAO,IAAI,KAAJ,CAAU,IAAV,EAAgB,IAAhB,CAAP;AACH,aAXD,MAYK,IAAI,IAAI,SAAR,EACL;;AAEI,uBAAO,KAAK,MAAL,CAAY,KAAK,EAAjB,EAAqB,GAArB,CAAP;AACH,aAJI,MAML;;AAEI,oBAAI,IAAI,IAAI,QAAJ,IAAgB,GAAxB;AACA,uBAAO,IAAI,KAAJ,CAAU,KAAK,MAAL,CAAY,YAAZ,CAAyB,CAAC,EAAE,CAAF,CAAD,EAAO,EAAE,CAAF,CAAP,EAAc,EAAE,CAAF,KAAQ,CAAtB,CAAzB,CAAV,EAA+D,KAAK,MAApE,CAAP;AACH;AACJ;;;mCAEW,M,EAAQ,E,EAAI,E,EACxB;AACI,qBAAS,mBAAW,MAAX,CAAT;AACA,qBAAS,OAAO,IAAP,EAAT,CAAwB,IAAI,WAAW,IAAf,EAAqB;AAAE,uBAAO,IAAP;AAAc;AAC7D,iBAAK,mBAAW,EAAX,CAAL;AACA,iBAAK,GAAG,IAAH,EAAL,CAAgB,IAAI,OAAO,IAAX,EAAiB;AAAE,uBAAO,IAAP;AAAc;AACjD,gBAAI,OAAO,EAAP,KAAe,WAAnB,EACA;AACI,qBAAK,IAAL;AACH,aAHD,MAKA;AACI,qBAAK,mBAAW,EAAX,CAAL;AACA,qBAAK,GAAG,IAAH,EAAL;AACA,oBAAI,OAAO,IAAX,EACA;AACI,2BAAO,IAAP;AACH;AACJ;AACD,gBAAI,KAAK,OAAO,QAAP,CAAgB,CAAhB,CAAT;gBAA6B,KAAK,OAAO,QAAP,CAAgB,CAAhB,CAAlC;gBAAsD,KAAK,OAAO,QAAP,CAAgB,CAAhB,CAA3D;AACA,gBAAI,MAAM,GAAG,QAAH,CAAY,CAAZ,CAAV;gBAA0B,MAAM,GAAG,QAAH,CAAY,CAAZ,CAAhC;gBAAgD,MAAM,GAAG,QAAH,CAAY,CAAZ,CAAtD;AACA,gBAAI,MAAJ,EAAY,GAAZ;AACA,gBAAI,OAAO,IAAX,EACA;AACI,oBAAI,MAAM,GAAG,QAAH,CAAY,CAAZ,CAAV;oBAA0B,MAAM,GAAG,QAAH,CAAY,CAAZ,CAAhC;oBAAgD,MAAM,GAAG,QAAH,CAAY,CAAZ,CAAtD;AACA,yBAAS,mBAAW,CAChB,CAAC,MAAM,EAAP,KAAc,MAAM,EAApB,IAA0B,CAAC,MAAM,EAAP,KAAc,MAAM,EAApB,CADV,EAEhB,CAAC,MAAM,EAAP,KAAc,MAAM,EAApB,IAA0B,CAAC,MAAM,EAAP,KAAc,MAAM,EAApB,CAFV,EAGhB,CAAC,MAAM,EAAP,KAAc,MAAM,EAApB,IAA0B,CAAC,MAAM,EAAP,KAAc,MAAM,EAApB,CAHV,CAAX,CAAT;AAKA,sBAAM,OAAO,OAAP,EAAN;AACA,oBAAI,QAAQ,CAAZ,EACA;AACI,2BAAO,IAAP;AACH;AACD,yBAAS,mBAAW,CAAC,OAAO,QAAP,CAAgB,CAAhB,IAAqB,GAAtB,EAA2B,OAAO,QAAP,CAAgB,CAAhB,IAAqB,GAAhD,EAAqD,OAAO,QAAP,CAAgB,CAAhB,IAAqB,GAA1E,CAAX,CAAT;AACH,aAdD,MAgBA;AACI,sBAAM,KAAK,IAAL,CAAU,MAAI,GAAJ,GAAU,MAAI,GAAd,GAAoB,MAAI,GAAlC,CAAN;AACA,oBAAI,QAAQ,CAAZ,EACA;AACI,2BAAO,IAAP;AACH;AACD,yBAAS,mBAAW,CAAC,GAAG,QAAH,CAAY,CAAZ,IAAiB,GAAlB,EAAuB,GAAG,QAAH,CAAY,CAAZ,IAAiB,GAAxC,EAA6C,GAAG,QAAH,CAAY,CAAZ,IAAiB,GAA9D,CAAX,CAAT;AACH;AACD,iBAAK,MAAL,GAAc,MAAd;AACA,iBAAK,MAAL,GAAc,MAAd;AACA,mBAAO,IAAP;AACH;;;;;;AAGL,MAAM,EAAN,GAAW,IAAI,KAAJ,CAAU,eAAO,IAAP,CAAY,CAAZ,CAAV,EAA0B,eAAO,CAAjC,CAAX;AACA,MAAM,EAAN,GAAW,IAAI,KAAJ,CAAU,eAAO,IAAP,CAAY,CAAZ,CAAV,EAA0B,eAAO,CAAjC,CAAX;AACA,MAAM,EAAN,GAAW,IAAI,KAAJ,CAAU,eAAO,IAAP,CAAY,CAAZ,CAAV,EAA0B,eAAO,CAAjC,CAAX;AACA,MAAM,EAAN,GAAW,MAAM,EAAjB,CAAqB,MAAM,EAAN,GAAW,MAAM,EAAjB,CAAqB,MAAM,EAAN,GAAW,MAAM,EAAjB;;AAE1C,MAAM,UAAN,GAAmB,UAAS,MAAT,EACnB;AACI,QAAI,KAAK,OAAO,MAAhB;QACI,OAAO,EADX;QAEI,CAFJ;QAEO,CAFP;QAEU,CAFV;QAEa,CAFb;QAEgB,CAFhB;QAEmB,CAFnB;QAEsB,CAFtB;QAEyB,CAFzB;QAE4B,KAF5B;QAEmC,KAFnC;QAGI,SAAS,eAAO,IAAP,CAAY,CAAZ,CAHb;AAIA,SAAK,IAAI,CAAT,EAAY,IAAI,EAAhB,EAAoB,GAApB,EACA;AACI,YAAI,mBAAW,OAAO,CAAP,CAAX,EAAsB,IAAtB,EAAJ;AACA,YAAI,MAAM,IAAV,EACA;AACI,mBAAO,IAAP;AACH;AACD,aAAK,IAAL,CAAU,CAAV;AACA,YAAI,KAAK,MAAT;AACA,YAAI,IAAI,CAAR,EACA;;AAEI,gBAAI,KAAK,IAAE,CAAP,EAAU,QAAd,CAAwB,IAAI,KAAK,IAAE,CAAP,EAAU,QAAd,CAAwB,IAAI,KAAK,IAAE,CAAP,EAAU,QAAd;AAChD,gBAAI,mBAAW,CACX,CAAC,EAAE,CAAF,IAAO,EAAE,CAAF,CAAR,KAAiB,EAAE,CAAF,IAAO,EAAE,CAAF,CAAxB,IAAgC,CAAC,EAAE,CAAF,IAAO,EAAE,CAAF,CAAR,KAAiB,EAAE,CAAF,IAAO,EAAE,CAAF,CAAxB,CADrB,EAEX,CAAC,EAAE,CAAF,IAAO,EAAE,CAAF,CAAR,KAAiB,EAAE,CAAF,IAAO,EAAE,CAAF,CAAxB,IAAgC,CAAC,EAAE,CAAF,IAAO,EAAE,CAAF,CAAR,KAAiB,EAAE,CAAF,IAAO,EAAE,CAAF,CAAxB,CAFrB,EAGX,CAAC,EAAE,CAAF,IAAO,EAAE,CAAF,CAAR,KAAiB,EAAE,CAAF,IAAO,EAAE,CAAF,CAAxB,IAAgC,CAAC,EAAE,CAAF,IAAO,EAAE,CAAF,CAAR,KAAiB,EAAE,CAAF,IAAO,EAAE,CAAF,CAAxB,CAHrB,CAAX,EAID,YAJC,EAAJ;AAKA,gBAAI,IAAI,CAAR,EACA;;;;;;AAMI,wBAAQ,EAAE,SAAF,CAAY,KAAZ,CAAR;AACA,oBAAI,UAAU,IAAd,EACA;AACI,wBAAI,EAAE,KAAK,GAAL,CAAS,KAAT,6BAAgC,KAAK,GAAL,CAAS,QAAQ,KAAK,EAAtB,yBAAlC,CAAJ,EAA+E;AAAE,+BAAO,IAAP;AAAc;AAClG;AACJ;AACD,qBAAS,OAAO,GAAP,CAAW,CAAX,CAAT;AACA,oBAAQ,CAAR;AACH;AACJ;;;AAGD,QAAI,KAAK,CAAL,EAAQ,QAAZ,CAAsB,IAAI,KAAK,CAAL,EAAQ,QAAZ,CAAsB,IAAI,KAAK,IAAE,CAAP,EAAU,QAAd,CAAwB,IAAI,KAAK,IAAE,CAAP,EAAU,QAAd;AACpE,aAAS,OAAO,GAAP,CAAW,mBAAW,CAC3B,CAAC,EAAE,CAAF,IAAO,EAAE,CAAF,CAAR,KAAiB,EAAE,CAAF,IAAO,EAAE,CAAF,CAAxB,IAAgC,CAAC,EAAE,CAAF,IAAO,EAAE,CAAF,CAAR,KAAiB,EAAE,CAAF,IAAO,EAAE,CAAF,CAAxB,CADL,EAE3B,CAAC,EAAE,CAAF,IAAO,EAAE,CAAF,CAAR,KAAiB,EAAE,CAAF,IAAO,EAAE,CAAF,CAAxB,IAAgC,CAAC,EAAE,CAAF,IAAO,EAAE,CAAF,CAAR,KAAiB,EAAE,CAAF,IAAO,EAAE,CAAF,CAAxB,CAFL,EAG3B,CAAC,EAAE,CAAF,IAAO,EAAE,CAAF,CAAR,KAAiB,EAAE,CAAF,IAAO,EAAE,CAAF,CAAxB,IAAgC,CAAC,EAAE,CAAF,IAAO,EAAE,CAAF,CAAR,KAAiB,EAAE,CAAF,IAAO,EAAE,CAAF,CAAxB,CAHL,CAAX,EAIjB,YAJiB,EAAX,EAIU,GAJV,CAIc,mBAAW,CAC9B,CAAC,EAAE,CAAF,IAAO,EAAE,CAAF,CAAR,KAAiB,EAAE,CAAF,IAAO,EAAE,CAAF,CAAxB,IAAgC,CAAC,EAAE,CAAF,IAAO,EAAE,CAAF,CAAR,KAAiB,EAAE,CAAF,IAAO,EAAE,CAAF,CAAxB,CADF,EAE9B,CAAC,EAAE,CAAF,IAAO,EAAE,CAAF,CAAR,KAAiB,EAAE,CAAF,IAAO,EAAE,CAAF,CAAxB,IAAgC,CAAC,EAAE,CAAF,IAAO,EAAE,CAAF,CAAR,KAAiB,EAAE,CAAF,IAAO,EAAE,CAAF,CAAxB,CAFF,EAG9B,CAAC,EAAE,CAAF,IAAO,EAAE,CAAF,CAAR,KAAiB,EAAE,CAAF,IAAO,EAAE,CAAF,CAAxB,IAAgC,CAAC,EAAE,CAAF,IAAO,EAAE,CAAF,CAAR,KAAiB,EAAE,CAAF,IAAO,EAAE,CAAF,CAAxB,CAHF,CAAX,EAIpB,YAJoB,EAJd,CAAT;AASA,WAAO,IAAI,KAAJ,CAAU,KAAK,CAAL,CAAV,EAAmB,MAAnB,CAAP;AACH,CAtDD","file":"Plane.js","sourcesContent":["\"use strict\";\r\n\r\nimport { PRECISION } from \"./PRECISION\";\r\nimport { Matrix } from \"./Matrix\";\r\nimport { Vector } from \"./Vector\";\r\nimport { Line } from \"./Line\";\r\n\r\nexport class Plane\r\n{\r\n constructor (anchor, v1, v2)\r\n {\r\n this.setVectors(anchor, v1, v2);\r\n }\r\n\r\n eql (plane)\r\n {\r\n return (this.contains(plane.anchor) && this.isParallelTo(plane));\r\n }\r\n\r\n dup ()\r\n {\r\n return new Plane(this.anchor, this.normal);\r\n }\r\n\r\n translate (vector)\r\n {\r\n var V = vector.elements || vector;\r\n return new Plane([\r\n this.anchor.elements[0] + V[0],\r\n this.anchor.elements[1] + V[1],\r\n this.anchor.elements[2] + (V[2] || 0)\r\n ], this.normal);\r\n }\r\n\r\n isParallelTo (obj)\r\n {\r\n var theta;\r\n if (obj.normal)\r\n {\r\n // obj is a plane\r\n theta = this.normal.angleFrom(obj.normal);\r\n return (Math.abs(theta) <= PRECISION || Math.abs(Math.PI - theta) <= PRECISION);\r\n }\r\n else if (obj.direction)\r\n {\r\n // obj is a line\r\n return this.normal.isPerpendicularTo(obj.direction);\r\n }\r\n return null;\r\n }\r\n\r\n isPerpendicularTo (plane)\r\n {\r\n var theta = this.normal.angleFrom(plane.normal);\r\n return (Math.abs(Math.PI/2 - theta) <= PRECISION);\r\n }\r\n\r\n distanceFrom (obj)\r\n {\r\n if (this.intersects(obj) || this.contains(obj))\r\n {\r\n return 0;\r\n }\r\n if (obj.anchor)\r\n {\r\n // obj is a plane or line\r\n var A = this.anchor.elements, B = obj.anchor.elements, N = this.normal.elements;\r\n return Math.abs((A[0] - B[0]) * N[0] + (A[1] - B[1]) * N[1] + (A[2] - B[2]) * N[2]);\r\n }\r\n else\r\n {\r\n // obj is a point\r\n var P = obj.elements || obj;\r\n var A = this.anchor.elements, N = this.normal.elements;\r\n return Math.abs((A[0] - P[0]) * N[0] + (A[1] - P[1]) * N[1] + (A[2] - (P[2] || 0)) * N[2]);\r\n }\r\n }\r\n\r\n contains (obj)\r\n {\r\n if (obj.normal)\r\n {\r\n return null;\r\n }\r\n if (obj.direction)\r\n {\r\n return (this.contains(obj.anchor) && this.contains(obj.anchor.add(obj.direction)));\r\n }\r\n else\r\n {\r\n var P = obj.elements || obj;\r\n var A = this.anchor.elements, N = this.normal.elements;\r\n var diff = Math.abs(N[0]*(A[0] - P[0]) + N[1]*(A[1] - P[1]) + N[2]*(A[2] - (P[2] || 0)));\r\n return (diff <= PRECISION);\r\n }\r\n }\r\n\r\n intersects (obj)\r\n {\r\n if (typeof(obj.direction) === 'undefined' && typeof(obj.normal) === 'undefined')\r\n {\r\n return null;\r\n }\r\n return !this.isParallelTo(obj);\r\n }\r\n\r\n intersectionWith (obj)\r\n {\r\n if (!this.intersects(obj))\r\n {\r\n return null;\r\n }\r\n if (obj.direction)\r\n {\r\n // obj is a line\r\n var A = obj.anchor.elements,\r\n D = obj.direction.elements,\r\n P = this.anchor.elements,\r\n N = this.normal.elements;\r\n var multiplier = (N[0]*(P[0]-A[0]) + N[1]*(P[1]-A[1]) + N[2]*(P[2]-A[2])) / (N[0]*D[0] + N[1]*D[1] + N[2]*D[2]);\r\n return new Vector([A[0] + D[0]*multiplier, A[1] + D[1]*multiplier, A[2] + D[2]*multiplier]);\r\n }\r\n else if (obj.normal)\r\n {\r\n // obj is a plane\r\n var direction = this.normal.cross(obj.normal).toUnitVector();\r\n // To find an anchor point, we find one co-ordinate that has a value of\r\n // zero somewhere on the intersection, and remember which one we picked\r\n var N = this.normal.elements,\r\n A = this.anchor.elements,\r\n O = obj.normal.elements,\r\n B = obj.anchor.elements;\r\n var solver = Matrix.Zero(2,2), i = 0;\r\n while (solver.isSingular())\r\n {\r\n i++;\r\n solver = new Matrix([\r\n [ N[i%3], N[(i+1)%3] ],\r\n [ O[i%3], O[(i+1)%3] ]\r\n ]);\r\n }\r\n // Then we solve the simultaneous equations in the remaining dimensions\r\n var inverse = solver.inverse().elements;\r\n var x = N[0]*A[0] + N[1]*A[1] + N[2]*A[2];\r\n var y = O[0]*B[0] + O[1]*B[1] + O[2]*B[2];\r\n var intersection = [\r\n inverse[0][0] * x + inverse[0][1] * y,\r\n inverse[1][0] * x + inverse[1][1] * y\r\n ];\r\n var anchor = [];\r\n for (var j = 1; j <= 3; j++)\r\n {\r\n // This formula picks the right element from intersection by cycling\r\n // depending on which element we set to zero above\r\n anchor.push((i === j) ? 0 : intersection[(j + (5 - i)%3)%3]);\r\n }\r\n return new Line(anchor, direction);\r\n }\r\n }\r\n\r\n pointClosestTo (point)\r\n {\r\n var P = point.elements || point;\r\n var A = this.anchor.elements, N = this.normal.elements;\r\n var dot = (A[0] - P[0]) * N[0] + (A[1] - P[1]) * N[1] + (A[2] - (P[2] || 0)) * N[2];\r\n return new Vector([P[0] + N[0] * dot, P[1] + N[1] * dot, (P[2] || 0) + N[2] * dot]);\r\n }\r\n\r\n rotate (t, line)\r\n {\r\n var R = t.determinant ? t.elements : Matrix.Rotation(t, line.direction).elements;\r\n var C = line.pointClosestTo(this.anchor).elements;\r\n var A = this.anchor.elements, N = this.normal.elements;\r\n var C1 = C[0], C2 = C[1], C3 = C[2], A1 = A[0], A2 = A[1], A3 = A[2];\r\n var x = A1 - C1, y = A2 - C2, z = A3 - C3;\r\n return new Plane(\r\n [\r\n C1 + R[0][0] * x + R[0][1] * y + R[0][2] * z,\r\n C2 + R[1][0] * x + R[1][1] * y + R[1][2] * z,\r\n C3 + R[2][0] * x + R[2][1] * y + R[2][2] * z\r\n ],\r\n [\r\n R[0][0] * N[0] + R[0][1] * N[1] + R[0][2] * N[2],\r\n R[1][0] * N[0] + R[1][1] * N[1] + R[1][2] * N[2],\r\n R[2][0] * N[0] + R[2][1] * N[1] + R[2][2] * N[2]\r\n ]\r\n );\r\n }\r\n\r\n reflectionIn (obj)\r\n {\r\n if (obj.normal)\r\n {\r\n // obj is a plane\r\n var A = this.anchor.elements, N = this.normal.elements;\r\n var A1 = A[0], A2 = A[1], A3 = A[2], N1 = N[0], N2 = N[1], N3 = N[2];\r\n var newA = this.anchor.reflectionIn(obj).elements;\r\n // Add the plane's normal to its anchor, then mirror that in the other plane\r\n var AN1 = A1 + N1, AN2 = A2 + N2, AN3 = A3 + N3;\r\n var Q = obj.pointClosestTo([AN1, AN2, AN3]).elements;\r\n var newN = [Q[0] + (Q[0] - AN1) - newA[0], Q[1] + (Q[1] - AN2) - newA[1], Q[2] + (Q[2] - AN3) - newA[2]];\r\n return new Plane(newA, newN);\r\n }\r\n else if (obj.direction)\r\n {\r\n // obj is a line\r\n return this.rotate(Math.PI, obj);\r\n }\r\n else\r\n {\r\n // obj is a point\r\n var P = obj.elements || obj;\r\n return new Plane(this.anchor.reflectionIn([P[0], P[1], (P[2] || 0)]), this.normal);\r\n }\r\n }\r\n\r\n setVectors (anchor, v1, v2)\r\n {\r\n anchor = new Vector(anchor);\r\n anchor = anchor.to3D(); if (anchor === null) { return null; }\r\n v1 = new Vector(v1);\r\n v1 = v1.to3D(); if (v1 === null) { return null; }\r\n if (typeof(v2) === 'undefined')\r\n {\r\n v2 = null;\r\n }\r\n else\r\n {\r\n v2 = new Vector(v2);\r\n v2 = v2.to3D();\r\n if (v2 === null)\r\n {\r\n return null;\r\n }\r\n }\r\n var A1 = anchor.elements[0], A2 = anchor.elements[1], A3 = anchor.elements[2];\r\n var v11 = v1.elements[0], v12 = v1.elements[1], v13 = v1.elements[2];\r\n var normal, mod;\r\n if (v2 !== null)\r\n {\r\n var v21 = v2.elements[0], v22 = v2.elements[1], v23 = v2.elements[2];\r\n normal = new Vector([\r\n (v12 - A2) * (v23 - A3) - (v13 - A3) * (v22 - A2),\r\n (v13 - A3) * (v21 - A1) - (v11 - A1) * (v23 - A3),\r\n (v11 - A1) * (v22 - A2) - (v12 - A2) * (v21 - A1)\r\n ]);\r\n mod = normal.modulus();\r\n if (mod === 0)\r\n {\r\n return null;\r\n }\r\n normal = new Vector([normal.elements[0] / mod, normal.elements[1] / mod, normal.elements[2] / mod]);\r\n }\r\n else\r\n {\r\n mod = Math.sqrt(v11*v11 + v12*v12 + v13*v13);\r\n if (mod === 0)\r\n {\r\n return null;\r\n }\r\n normal = new Vector([v1.elements[0] / mod, v1.elements[1] / mod, v1.elements[2] / mod]);\r\n }\r\n this.anchor = anchor;\r\n this.normal = normal;\r\n return this;\r\n }\r\n}\r\n\r\nPlane.XY = new Plane(Vector.Zero(3), Vector.k);\r\nPlane.YZ = new Plane(Vector.Zero(3), Vector.i);\r\nPlane.ZX = new Plane(Vector.Zero(3), Vector.j);\r\nPlane.YX = Plane.XY; Plane.ZY = Plane.YZ; Plane.XZ = Plane.ZX;\r\n\r\nPlane.fromPoints = function(points)\r\n{\r\n var np = points.length,\r\n list = [],\r\n i, P, n, N, A, B, C, D, theta, prevN,\r\n totalN = Vector.Zero(3);\r\n for (i = 0; i < np; i++)\r\n {\r\n P = new Vector(points[i]).to3D();\r\n if (P === null)\r\n {\r\n return null;\r\n }\r\n list.push(P);\r\n n = list.length;\r\n if (n > 2)\r\n {\r\n // Compute plane normal for the latest three points\r\n A = list[n-1].elements; B = list[n-2].elements; C = list[n-3].elements;\r\n N = new Vector([\r\n (A[1] - B[1]) * (C[2] - B[2]) - (A[2] - B[2]) * (C[1] - B[1]),\r\n (A[2] - B[2]) * (C[0] - B[0]) - (A[0] - B[0]) * (C[2] - B[2]),\r\n (A[0] - B[0]) * (C[1] - B[1]) - (A[1] - B[1]) * (C[0] - B[0])\r\n ]).toUnitVector();\r\n if (n > 3)\r\n {\r\n // If the latest normal is not (anti)parallel to the previous one, we've\r\n // strayed off the plane. This might be a slightly long-winded way of\r\n // doing things, but we need the sum of all the normals to find which\r\n // way the plane normal should point so that the points form an\r\n // anticlockwise list.\r\n theta = N.angleFrom(prevN);\r\n if (theta !== null)\r\n {\r\n if (!(Math.abs(theta) <= PRECISION || Math.abs(theta - Math.PI) <= PRECISION)) { return null; }\r\n }\r\n }\r\n totalN = totalN.add(N);\r\n prevN = N;\r\n }\r\n }\r\n // We need to add in the normals at the start and end points, which the above\r\n // misses out\r\n A = list[1].elements; B = list[0].elements; C = list[n-1].elements; D = list[n-2].elements;\r\n totalN = totalN.add(new Vector([\r\n (A[1] - B[1]) * (C[2] - B[2]) - (A[2] - B[2]) * (C[1] - B[1]),\r\n (A[2] - B[2]) * (C[0] - B[0]) - (A[0] - B[0]) * (C[2] - B[2]),\r\n (A[0] - B[0]) * (C[1] - B[1]) - (A[1] - B[1]) * (C[0] - B[0])\r\n ]).toUnitVector()).add(new Vector([\r\n (B[1] - C[1]) * (D[2] - C[2]) - (B[2] - C[2]) * (D[1] - C[1]),\r\n (B[2] - C[2]) * (D[0] - C[0]) - (B[0] - C[0]) * (D[2] - C[2]),\r\n (B[0] - C[0]) * (D[1] - C[1]) - (B[1] - C[1]) * (D[0] - C[0])\r\n ]).toUnitVector());\r\n return new Plane(list[0], totalN);\r\n};\r\n"]}