1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401 |
- /**
- * utils/penDataHandle.js
- * create: kimswang
- * date: 2018-10-18
- */
- import PatchOffset from './PatchOffset'
- var utils = require('./utils.js');
- var bleConstants = require('./bleConstants.js');
- var dotDataCorrector = require('./dotDataCorrector.js');
- // var receivedPenData = require('../utils/receivePenData.js');
- var event = require('./event.js');
- //var edit = require('../page/edit/edit.js');
- // global common variable
- //2022-06-09 chende
- //是否偏移
- let isOffset = true
- let patchOffset = null
- event.on('isOffset', null, (data) => {
- isOffset = data.offset
- patchOffset = new PatchOffset(130, data.codeType)
- console.log('sdk是否修偏移', isOffset)
- console.log('12*12 | 16*16', data.codeType)
- })
- // 存储最有一个move点
- var gLastMoveDot = {
- counter: 0, // 点计数
- sectionID: 0, // 区域ID
- ownerID: 0, // 客户ID
- bookID: 0, // 书号
- pageID: 0, // 页号
- timeLong: '2010-01-01 00:00:00,000', // 当前点的RTC 时间,返回时间戳 ms(起止时间是2018-01-01 00:00:00,000)
- x: 0, // 点横坐标,整数部分
- y: 0, // 点纵坐标,整数部分
- fx: 0.0, // 点横坐标,小数部分
- fy: 0.0, // 点纵坐标,小数部分
- ab_x: 0.0, // 点横坐标,整数+小数部分
- ab_y: 0.0, // 点纵坐标,整数+小数部分
- dotType: "",
- force: 0, // 点的压力值
- angle: 0, // 点的角度值
- color: 0, // 笔的颜色值
- };
- // 存储最有一个倒数第二个move点
- var gpreMoveDot = {
- counter: 0, // 点计数
- sectionID: 0, // 区域ID
- ownerID: 0, // 客户ID
- bookID: 0, // 书号
- pageID: 0, // 页号
- timeLong: '2010-01-01 00:00:00,000', // 当前点的RTC 时间,返回时间戳 ms(起止时间是2018-01-01 00:00:00,000)
- x: 0, // 点横坐标,整数部分
- y: 0, // 点纵坐标,整数部分
- fx: 0.0, // 点横坐标,小数部分
- fy: 0.0, // 点纵坐标,小数部分
- ab_x: 0.0, // 点横坐标,整数+小数部分
- ab_y: 0.0, // 点纵坐标,整数+小数部分
- dotType: "",
- force: 0, // 点的压力值
- angle: 0, // 点的角度值
- color: 0, // 笔的颜色值
- };
- // split data
- var gAbsX, gAbsY, gAbsfx, gAbsfy;
- var gPreCX, gPreCY, gPreCfx, gPreCfy;
- var gx1, gx2, gx3;
- var gy1, gy2, gy3;
- var gAbsXM, gAbsYM;
- var gbPenUpGot = false;
- var gPenUpPtNo = 0;
- var g_CompressData = new Array(62);
- var gxSID, gxOID, gxBID, gxPID;
- var gySID, gyOID, gyBID, gyPID;
- var gAbsXT, gAbsYT;
- var gSID, gOID, gBID, gPID;
- var gbFirstMove = false;
- var gbLastMove = false;
- var gbAddUpPt = false;
- var gLastMoveX;
- var gLastMoveY;
- var gLastMoveDist;
- var gMUpX, gMUpY;
- var gUpCnt = 0;
- var gbPrePtExist = false;
- var gbPreAngleExist = false;
- var gColorIndex;
- var gMPrevCounter, gMCurCounter;
- var bOID4 = false; // true-OID4;false-OID3;
- var gXYDataFormat = 1; // 0-free format;1-for A4
- var systemTime = 0;
- var lastUpTime = 0;
- var gbFirst3DotsChecked = false;
- var gbUpInvalid = false;
- var offlineDataTimeOffset = 0; //离线数据偏移校正变量
- /*************** 过滤飞笔 ******************/
- // 2018-10-19 kimswang
- var gSPtCnt;
- var gSPtX = new Array(4);
- var gSPtY = new Array(4);
- var gAngleDiff = new Array(2);
- var gbPt3Remain = false;
- var gPt3X, gPt3Y, gPt3fx, gPt3fy, gPt3Force, gPt3Angle;
- var gPt3Counter;
- var gPt3TimeLong;
- var gThresholdAngle = 30;
- var mPenType = bleConstants.BleConstants.PEN_T111;
- //var gbPt1Fly = false;
- //var gbPt2Fly = false;
- var gThresholdTimes = 6;
- var gThresholdDist = 10;
- var gPtPos = 0;
- var gPreStatus;
- var gbReceiveThreadStart = false;
- var gCount = 0;
- var pointZ;
- var gAngleOffsetX;
- var gAngleOffsetY;
- var gPreForce, gCurForce, gPreOfflineForce;
- var gbUpGot = false;
- var gbDownGot = false;
- //var lastDistence = 1; // 上一个距离
- //var distence = 1; // 当前距离
- // 2018-10-19 kimswang
- // common variable
- const DOT_LEN = 40960;
- var gDotBuffer = new Array(DOT_LEN); // dot buffer save point
- for (let d = 0; d < gDotBuffer.length; d++) {
- gDotBuffer[d] = new Array();
- }
- var gSplitBuffer = new Array(2048); // 解压缩点的buffer
- for (let s = 0; s < gSplitBuffer.length; s++) {
- gSplitBuffer[s] = new Array();
- }
- var mendUpArray = new Array(); // 如果没有产生up点,自行补一个up点上去
- var goxa, goxb, goya, goyb;
- var gCurAngle = 0; // 当前笔的角度值
- var gPAngle = 0;
- var gInitAngle;
- //var gbNormal = false;
- // 创建一个存储三个点的二维数组
- var gMCounter, gUCounter;
- var gMCounterDiff;
- var gFirstPtTotalCount = 0;
- var gSplitIndex = 0;
- var gSProcessIndex = -1;
- var gReceiveIndex = 0;
- //var gFirstPtIndex = 0;
- var gFirstPtCount = 0;
- var gProcessIndex = -1;
- var gbSplitThreadStart = false;
- // 角度修正
- var g2ndAngle;
- var firstDot = false;
- var gCurPageID = -1;
- var gCurBookID = -1;
- var dotAngleList = [
- []
- ];
- var gLongFlyState = 0;
- //20181004
- var gCounter;
- var gForce;
- var gAngle;
- var gFirstDots = new Array();
- function Mydot() {
- this.counter = 0; // 点计数
- this.sectionID = 0; // 区域ID
- this.ownerID = 0; // 客户ID
- this.bookID = 0; // 书号
- this.pageID = 0; // 页号
- this.timeLong = 0; // 当前点的RTC 时间,返回时间戳 ms(起止时间是2018-01-01 00:00:00,000)
- this.x = 0; // 点横坐标,整数部分
- this.y = 0; // 点纵坐标,整数部分
- this.fx = 0.0; // 点横坐标,小数部分
- this.fy = 0.0; // 点纵坐标,小数部分
- this.ab_x = 0.0; // 点横坐标,整数+小数部分
- this.ab_y = 0.0; // 点纵坐标,整数+小数部分
- this.dotType = 0;
- this.force = 0; // 点的压力值
- this.angle = 0; // 点的角度值
- this.color = 0; // 笔的颜色值
- };
- for (var i = 0; i < 4; i++) {
- gFirstDots[i] = new Mydot();
- gFirstDots[i].counter = i;
- gFirstDots[i].sectionID = i;
- }
- var pointX123 = new Array(5);
- var pointY123 = new Array(5);
- var gbFirstDotsFly = new Array(5);
- var gFirstDotsCnt = 0;
- var gFirstDotsCheckState = 0;
- var gbFirstDotsUp = false;
- //20181025
- var gbTurnBackPt = false;
- var gTurnBackX, gTurnBackY;
- //20181012
- var gbStartSecondDataFilter = false;
- var g2x1, g2x2, g2x3;
- var g2y1, g2y2, g2y3;
- var g2SPtCnt;
- var g2SPtX = new Array(5);
- var g2SPtY = new Array(5);
- var g2AngleDiff = new Array(5);
- var gb2Pt3Remain = false;
- var g2Pt3X, g2Pt3Y, g2Pt3fx, g2Pt3fy, g2Pt3Force, g2Pt3Angle;
- var g2Pt3Counter;
- var g2Pt3TimeLong;
- var g2ThresholdAngle = 30;
- var g2ThresholdTimes = 6;
- var g2ThresholdDist = 10;
- var g2PtPos = 0;
- var g2bUpGot = false;
- var gb2DownGot = false;
- var g2LongFlyState = 0;
- var g2LongFlyState1 = 0;
- var g2MCounter, g2UCounter;
- var g2MPrevCounter, g2MCurCounter;
- var g2MCounterDiff;
- var gb2Debug = false;
- var gb2Debug1 = false;
- var gbLastMove = false;
- var isNeedFiveCheck = false;
- // controller lang line no break
- var lastDownX = 0;
- var lastDownY = 0;
- var firstLine = true;
- //20181101
- var gThresholdUpAngle = 65;
- var gFlyDist = 8.0;
- //20190717
- var gPreAbsX, gPreAbsY;
- var gbAbsXYSet = false;
- // function hexConvertDecimal(hexArray) {
- // let decimalVal = parseInt(hexArray, 16);
- // return decimalVal;
- // }
- function changeOffset(offineset) {
- offlineDataTimeOffset = offineset;
- }
- /**
- * Auther: kims wang
- * Describe: 解压缩蓝牙发送过来的数据
- * Date: 2018-10-20
- */
- function splitData(lpData, bIsOnline = true) {
- if (lpData.length != 10) {
- return;
- }
- var bValidate = false;
- var angle = 0;
- var force = 0;
- var counter = 0;
- var angleDiff = 0;
- var status = "";
- var dist1, dist2, dist3;
- var dtimes = 0,
- time = 0;
- // switch (utils.hexConvertDecimal(lpData[0]) & utils.hexConvertDecimal('ff'))
- switch (lpData[0] & 0xff) {
- case 254: {
- switch (lpData[1] & 0x0f) {
- case 1: //down第一点
- bValidate = true;
- //color = utils.hexConvertDecimal(lpData[1]) >> 4;
- //Log.i(TAG, "lpData[1]=" + lpData[1] + ",color=" + color);
- gSPtX = new Array(4);
- gSPtY = new Array(4);
- for (let i = 0; i < 4; i++) {
- gSPtX[i] = 0;
- gSPtY[i] = 0;
- }
- gAngleDiff = new Array(2);
- for (let i = 0; i < 2; i++) {
- gAngleDiff[i] = 0;
- }
- gbPt3Remain = false;
- if ((lpData[2] & 0xF0) == 0x60) //OID3 valid position code
- {
- bOID4 = false;
- gAbsX = (int)(((lpData[4] & 0x3F) << 8) + (lpData[5] & 0xFF));
- gAbsfx = (int)(((lpData[6] & 0xFE) >> 1));
- gAbsY = (int)(((lpData[8] & 0xFF) << 6) + ((lpData[9] & 0xFC) >> 2)); //Edit
- gAbsfy = (int)((lpData[9] & 0x03) << 5);
- gAbsXM = gAbsX;
- gAbsYM = gAbsY;
- bValidate = false;
- } else if ((lpData[2] & 0xF0) == 0x40) //OID3 valid element code
- {
- bOID4 = false;
- } else if ((lpData[2] & 0xf0) == 0x80) //OID4 valid element code
- {
- bOID4 = true;
- } else if ((lpData[2] & 0xf0) == 0xa0) //OID4 valid position code
- {
- bOID4 = true;
- gAbsXT = (((lpData[3] & 0x7f) << 16) + ((lpData[4] & 0xff) << 8) + (lpData[5] & 0xff));
- gAbsYT = (((lpData[6] & 0x01) << 22) + ((lpData[7] & 0xFF) << 14) + ((lpData[8] & 0xFF) << 6) + ((lpData[9] & 0xFC) >> 2)); // Edit
- gxSID = (lpData[3] & 0x40) >> 6;
- gySID = (lpData[6] & 0x01);
- gxOID = ((lpData[3] & 0x3C) >> 2);
- gyOID = ((lpData[7] & 0xF0) >> 4);
- gOID = gyOID * 16 + gxOID;
- gSID = gySID * 2 + gxSID;
- switch (gSID) {
- case 0:
- case 1:
- //20180906
- case 2:
- if (gSID == 1 && gOID >= 200) // for WhiteBoard
- {
- gxBID = (((lpData[3] & 0x03) << 1) + ((lpData[4] & 0x80) >> 7));
- gyBID = ((lpData[7] & 0x0E) >> 1);
- gxPID = ((lpData[4] & 0x78) >> 3);
- gyPID = (((lpData[7] & 0x01) << 3) + ((lpData[8] & 0xE0) >> 5));
- gBID = gyBID * 8 + gxBID;
- gPID = gyPID * 16 + gxPID;
- gAbsX = (((lpData[4] & 0x07) << 8) + (lpData[5] & 0xFF));
- gAbsY = (((lpData[8] & 0x1F) << 6) + ((lpData[9] & 0xFC) >> 2)); //Edit
- } else {
- gxBID = (((lpData[3] & 0x03) << 3) + ((lpData[4] & 0xE0) >> 5));
- gyBID = (((lpData[7] & 0x0F) << 1) + ((lpData[8] & 0x80) >> 7));
- gxPID = ((lpData[4] & 0x1E) >> 1);
- gyPID = ((lpData[8] & 0x78) >> 3);
- gBID = gyBID * 32 + gxBID;
- gPID = gyPID * 16 + gxPID;
- gAbsX = (((lpData[4] & 0x01) << 8) + (lpData[5] & 0xFF));
- gAbsY = (((lpData[8] & 0x07) << 6) + ((lpData[9] & 0xFC) >> 2)); //Edit
- }
- break;
- // case 2:
- // gxBID =((lpData[3] & 0x03) << 3) + ((lpData[4] & 0xE0) >> 5);
- // gyBID = ((lpData[7] & 0x0F) << 1) + ((lpData[8] & 0x80) >> 7);
- // gxPID = ((lpData[4] & 0x1E) >> 1);
- // gyPID = ((lpData[8] & 0x78) >> 3);
- // gBID = gyBID * 32 + gxBID;
- // gPID = gyPID * 16 + gxPID;
- // gAbsX = ((lpData[4] & 0x01) << 8) + (lpData[5] & 0xFF);
- // gAbsY = ((lpData[8] & 0x07) << 6) + ((lpData[9] & 0xFC) >> 2); //Edit
- // break;
- /* case 2: 20170906 修改section 2 和section 1 一样的形式进行分割数据
- gxBID = ((utils.hexConvertDecimal(lpData[3]) << 1) + (utils.hexConvertDecimal(lpData[4]) >> 7));
- gyBID = (utils.hexConvertDecimal(lpData[7]) >> 1);
- gxPID = (utils.hexConvertDecimal(lpData[4]) >> 3);
- gyPID = ((utils.hexConvertDecimal(lpData[7]) << 3) + (utils.hexConvertDecimal(lpData[8]) >> 5));
- gBID = gyBID * 8 + gxBID;
- gPID = gyPID * 16 + gxPID;
- gAbsX = ((utils.hexConvertDecimal(lpData[4]) << 8) + utils.hexConvertDecimal(lpData[5]));
- gAbsY = ((utils.hexConvertDecimal(lpData[8]) << 6) + (utils.hexConvertDecimal(lpData[9]) >> 2)); //Edit
- break;*/
- case 3:
- gxBID = (lpData[3] & 0x03);
- gyBID = ((lpData[7] & 0x0C) >> 2);
- gxPID = ((lpData[4] & 0xF0) >> 4);
- gyPID = ((lpData[7] & 0x03) << 2) + ((lpData[8] & 0xC0) >> 6);
- gBID = gyBID * 4 + gxBID;
- gPID = gyPID * 16 + gxPID;
- gAbsX = ((lpData[4] & 0x0F) << 8) + (lpData[5] & 0xFF);
- gAbsY = ((lpData[8] & 0x3F) << 6) + ((lpData[9] & 0xFC) >> 2); //Edit
- break;
- default:
- break;
- }
- gAbsfx = ((lpData[6] & 0xFE) >> 1);
- gAbsfy = ((lpData[9] & 0x03) << 5);
- gAbsXM = gAbsX;
- gAbsYM = gAbsY;
- bValidate = false;
- //20190717
- gbAbsXYSet = false;
- }
- break;
- case 2: //down第二点
- bValidate = true;
- gAbsfy = (gAbsfy + ((lpData[2] & 0xF8) >> 3)); //Edit
- angle = ((lpData[2] & 0x07) << 6) + ((lpData[3] & 0xFC) >> 2); //Edit
- force = ((lpData[3] & 0x03) << 8) + (lpData[4] & 0xFF);
- counter = lpData[5];
- status = "Pen Down";
- // = "Pen Down";
- gbPenUpGot = false;
- gPenUpPtNo = 0;
- gbUpInvalid = false;
- /***********************数据时间修改***********************/
- if (bIsOnline) {
- // systemTime = utils.Dot.timeLong;
- // console.log(utils.Dot.timeLong)
- // let nowDate = (new Date()).valueOf();
- // let strFormat = '2010-01-01 00:00:00:000';
- // let startDate = new Date(strFormat).valueOf();
- // systemTime = nowDate - startDate;
- let nowDate = Date.now();
- // 起始时间 2010-01-01
- let startDate = 1262304000000;
- systemTime = nowDate - startDate;
- // systemTime = ((lpData[6] & 0xff) + ((lpData[7] << 8) & 0xff00) + ((lpData[8] << 16) & 0xff0000) + ((lpData[9] << 24) & 0xff000000));
- // systemTime = systemTime * 1000;
- // if (systemTime <= lastUpTime && (lastUpTime - systemTime < 1000)) {
- // systemTime = lastUpTime + 8;
- // }
- } else {
- systemTime = ((lpData[6] & 0xff) + ((lpData[7] << 8) & 0xff00) + ((lpData[8] << 16) & 0xff0000) + ((lpData[9] << 24) & 0xff000000));
- systemTime += offlineDataTimeOffset; //离线数据偏移校正变量 ;
- // console.log("离线数据偏移校正变量" + offlineDataTimeOffset);
- systemTime = systemTime * 1000;
- if (systemTime <= lastUpTime && (lastUpTime - systemTime < 1000)) {
- systemTime = lastUpTime + 8;
- }
- }
- break;
- default:
- break;
- }
- }
- break;
- case 252: { //move点
- bValidate = true;
- time = (lpData[1] & 0xff);
- systemTime += time;
- if (!bIsOnline) {
- lastUpTime = systemTime;
- }
- lastUpTime = systemTime;
- if ((lpData[2] & 0xF0) == 0x60) //OID3 valid position code
- {
- bOID4 = false;
- if ((lpData[2] & 0x04) == 4) {
- gAbsXM = (gAbsX + ((lpData[2] & 0x03) << 6) + ((lpData[3] & 0xFC) >> 2));
- } else if ((lpData[2] & 0x04) == 0) {
- gAbsXM = (gAbsX - (((lpData[2] & 0x03) << 6) + ((lpData[3] & 0xFC) >> 2)));
- }
- gAbsfx = ((lpData[3] & 0x03) << 5) + ((lpData[4] & 0xF8) >> 3);
- if ((lpData[4] & 0x04) == 4) {
- gAbsYM = (gAbsY + ((lpData[4] & 0x03) << 6) + ((lpData[5] & 0xFC) >> 2));
- } else if ((lpData[4] & 0x04) == 0) {
- gAbsYM = (gAbsY - (((lpData[4] & 0x03) << 6) + ((lpData[5] & 0xFC) >> 2)));
- }
- gAbsfy = ((lpData[5] & 0x03) << 5) + ((lpData[6] & 0xF8) >> 3);
- angle = ((lpData[6] & 0x07) << 6) + ((lpData[7] & 0xFC) >> 2);
- force = ((lpData[7] & 0x03) << 8) + (lpData[8] & 0xFF);
- counter = lpData[9];
- if (force == 0) {
- if (gbPenUpGot == false) {
- gbPenUpGot = true;
- gPenUpPtNo = 3;
- } else {
- bValidate = false;
- break;
- }
- status = "Pen Up";
- } else {
- gPreCX = gAbsXM;
- gPreCY = gAbsYM;
- gPreCfx = gAbsfx;
- gPreCfy = gAbsfy;
- status = "Pen Move";
- }
- } else if ((lpData[2] & 0xF0) == 0x70) //OID3 invalid position code
- {
- bOID4 = false;
- counter = lpData[9];
- angle = ((lpData[6] & 0x07) << 6) + ((lpData[7] & 0xFC) >> 2);
- force = ((lpData[7] & 0x03) << 8) + (lpData[8] & 0xFF);
- if (force > 0) {
- bValidate = false;
- break;
- } else if (force == 0) {
- status = "Pen Up 000";
- if (!gbPenUpGot) {
- gbPenUpGot = true;
- gPenUpPtNo = 3;
- status = "Pen Up";
- bValidate = true;
- gMUpX = (2 * gx2) - gx1;
- gMUpY = (2 * gy2) - gy1;
- var XM = (gMUpX * 100);
- gAbsXM = XM / 100;
- gAbsfx = (XM % 100) * 128 / 100;
- var YM = (gMUpY * 100);
- gAbsYM = YM / 100;
- gAbsfy = (YM % 100) * 128 / 100;
- } else {
- bValidate = false;
- break;
- }
- }
- } else if ((lpData[2] & 0xF0) == 0x40) //OID3 valid element code
- {
- bOID4 = false;
- } else if ((lpData[2] & 0xF0) == 0xA0) //OID4 valid position code
- {
- bOID4 = true;
- if ((lpData[2] & 0x04) == 4) {
- gAbsXM = (gAbsX + ((lpData[2] & 0x03) << 6) + ((lpData[3] & 0xFC) >> 2));
- } else if ((lpData[2] & 0x04) == 0) {
- gAbsXM = (gAbsX - (((lpData[2] & 0x03) << 6) + ((lpData[3] & 0xFC) >> 2)));
- }
- gAbsfx = ((lpData[3] & 0x03) << 5) + ((lpData[4] & 0xF8) >> 3);
- if ((lpData[4] & 0x04) == 4) {
- gAbsYM = (gAbsY + ((lpData[4] & 0x03) << 6) + ((lpData[5] & 0xFC) >> 2));
- } else if ((lpData[4] & 0x04) == 0) {
- gAbsYM = (gAbsY - (((lpData[4] & 0x03) << 6) + ((lpData[5] & 0xFC) >> 2)));
- }
- if (gbAbsXYSet == false) {
- gPreAbsX = gAbsX;
- gPreAbsY = gAbsY;
- gbAbsXYSet = true;
- }
- gAbsfy = (((lpData[5] & 0x03) << 5) + ((lpData[6] & 0xF8) >> 3));
- angle = ((lpData[6] & 0x07) << 6) + ((lpData[7] & 0xFC) >> 2);
- force = (((lpData[7] & 0x03) << 8) + (lpData[8] & 0xFF));
- //console.log("pen is " + gAbsXM + ", " + ", " + gAbsYM + ',' + force)
- // if (gPreStatus == "Pen Up" && force > 0) {
- // bValidate = true;
- // gAbsfy = ((gAbsfy + ((lpData[2] & 0xF8) >> 3))); //Edit
- // angle = (((lpData[2] & 0x07) << 6) + ((lpData[3] & 0xFC) >> 2)); //Edit
- // force = (((lpData[3] & 0x03) << 8) + (lpData[4] & 0xFF));
- // counter = lpData[5];
- // status = "Pen Down";
- // gbPenUpGot = false;
- // gPenUpPtNo = 0;
- // gbPenUpGot = false;
- // console.log("No Pen Down !!!==" + status);
- // break;
- // }
- counter = lpData[9];
- if (gPreStatus == "Pen Up" && force > 0) {
- return;
- }
- if (force == 0) {
- if (gbPenUpGot == false) {
- gbPenUpGot = true;
- gPenUpPtNo = 3;
- } else {
- bValidate = false;
- break;
- }
- status = "Pen Up";
- } else {
- gPreCX = gAbsXM;
- gPreCY = gAbsYM;
- gPreCfx = gAbsfx;
- gPreCfy = gAbsfy;
- status = "Pen Move";
- }
- } else if ((lpData[2] & 0xF0) == 0xB0) { // OID4 invalid position code
- bOID4 = true;
- counter = lpData[9];
- angle = ((lpData[6] & 0x07) << 6) + ((lpData[7] & 0xFC) >> 2);
- force = ((lpData[7] & 0x03) << 8) + (lpData[8] & 0xFF);
- if (force > 0) {
- bValidate = false;
- break;
- } else if (force == 0) {
- status = "Pen Up 000";
- if (!gbPenUpGot && gPenUpPtNo == 2) {
- gbPenUpGot = true;
- gPenUpPtNo = 3;
- gbUpInvalid = true;
- status = "Pen Up";
- bValidate = true;
- /* gMUpX = (2 * gx2) - gx1;
- gMUpY = (2 * gy2) - gy1;*/
- gMUpX = gx2;
- gMUpY = gy2;
- let XM = (gMUpX * 100);
- gAbsXM = XM / 100;
- gAbsfx = (XM % 100) * 128 / 100;
- let YM = (gMUpY * 100);
- gAbsYM = YM / 100;
- gAbsfy = (YM % 100) * 128 / 100;
- } else {
- gPenUpPtNo++;
- bValidate = false;
- break;
- }
- }
- }
- }
- break;
- default:
- break;
- }
- if (bValidate) {
- //console.log("xxxx = " + systemTime + "lydata"+lpData);
- switch (status) {
- case "Pen Down":
- gPtPos = 0;
- gMPrevCounter = -1;
- gMCurCounter = counter;
- gMCounter = counter;
- gx2 = gAbsXM + gAbsfx / 128.0;
- gy2 = gAbsYM + gAbsfy / 128.0;
- gx1 = gx2;
- gy1 = gy2;
- if (firstLine) {
- lastDownX = gx1;
- lastDownY = gy1;
- firstLine = false;
- }
- //if (gbDownGot && !gbUpGot && Math.abs(lastDownX - gx1) < 127 && Math.abs(lastDownY - gy1) < 127) {
- //20190717
- if (gbDownGot && !gbUpGot && (Math.abs(gAbsX - gPreAbsX) < 127 && Math.abs(gAbsY - gPreAbsY) < 127)) {
- // Receive 2nd Down Pt before Up pt arrived
- // force = 0
- g_CompressData[11] = 0;
- g_CompressData[12] = 0;
- // Counter ++
- g_CompressData[0]++;
- if (g_CompressData[0] > 246)
- g_CompressData[0] = 0;
- processDots(g_CompressData, bIsOnline, bOID4);
- }
- //20181004
- gFirstDotsCnt = 0;
- gFirstDotsCheckState = 0;
- gbFirstDotsUp = false;
- for (var i = 0; i < 5; i++) {
- gbFirstDotsFly[i] = false;
- }
- gFirstDots[0].counter = counter;
- gFirstDots[0].x = gAbsXM;
- gFirstDots[0].fx = gAbsfx;
- gFirstDots[0].y = gAbsYM;
- gFirstDots[0].fy = gAbsfy;
- gFirstDots[0].force = force;
- gFirstDots[0].angle = angle;
- // console.log('downangle = '+angle)
- gFirstDots[0].timelong = systemTime;
- gFirstDotsCnt++;
- gbDownGot = true;
- gbUpGot = false;
- // gx2 = gAbsXM + (gAbsfx / 128.0);
- // gy2 = gAbsYM + (gAbsfy / 128.0);
- // gx1 = gx2;
- // gy1 = gy2;
- lastDownX = gx1;
- lastDownY = gy1;
- gSPtCnt = 1;
- gbPt3Remain = false;
- gSPtX[gSPtCnt - 1] = gx2;
- gSPtY[gSPtCnt - 1] = gy2;
- gPreStatus = "Pen Down";
- //2018.12.13
- isNeedFiveCheck = false;
- break;
- case "Pen Move":
- if (gbUpGot) {
- return;
- }
- gPtPos++;
- gMCounter = counter;
- // 20180929
- gMPrevCounter = gMCurCounter;
- gMCurCounter = counter;
- if (gMCurCounter > gMPrevCounter)
- gMCounterDiff = gMCurCounter - gMPrevCounter;
- else
- gMCounterDiff = 247 + gMCurCounter - gMPrevCounter;
- gx1 = gx2;
- gy1 = gy2;
- gx2 = gAbsXM + (gAbsfx / 128.0);
- gy2 = gAbsYM + (gAbsfy / 128.0);
- dist3 = Math.sqrt(((gx2 - gx1) * (gx2 - gx1)) + ((gy2 - gy1) * (gy2 - gy1)));
- if (dist3 == 0.0) dist3 = 0.000001;
- if (dist3 > 3.2) {
- gThresholdAngle = 60;
- } else if (dist3 > 1.6) {
- gThresholdAngle = 45;
- } else {
- //201809
- gThresholdAngle = 30;
- }
- //2018.12.13
- if (isNeedFiveCheck) {
- isNeedFiveCheck = false;
- var secX = gSPtX[1];
- var secY = gSPtY[1];
- var dist25 = Math.sqrt(((gx2 - secX) * (gx2 - secX)) + ((gy2 - secY) * (gy2 - secY)));
- if (dist3 > dist25) {
- gbFirstDotsFly[2] = true;
- gbFirstDotsFly[3] = true;
- gSPtCnt = 3;
- gx1 = gSPtX[0];
- gy1 = gSPtY[0];
- gx2 = gSPtX[1];
- gy2 = gSPtY[1];
- } else {
- gbFirstDotsFly[0] = true;
- gbFirstDotsFly[1] = true;
- gSPtX[0] = gSPtX[2];
- gSPtY[0] = gSPtY[2];
- gSPtX[1] = gSPtX[3];
- gSPtY[1] = gSPtY[3];
- gSPtCnt = 3;
- gx1 = gSPtX[0];
- gy1 = gSPtY[0];
- gx2 = gSPtX[1];
- gy2 = gSPtY[1];
- }
- }
- gSPtCnt++;
- gSPtX[gSPtCnt - 1] = gx2;
- gSPtY[gSPtCnt - 1] = gy2;
- //20181025
- if (gPtPos <= 3) {
- //var dotData = gFirstDots[i];
- gFirstDots[gPtPos].counter = counter;
- gFirstDots[gPtPos].x = gAbsXM;
- gFirstDots[gPtPos].fx = gAbsfx;
- gFirstDots[gPtPos].y = gAbsYM;
- gFirstDots[gPtPos].fy = gAbsfy;
- gFirstDots[gPtPos].force = force;
- gFirstDots[gPtPos].angle = angle;
- gFirstDots[gPtPos].timelong = systemTime;
- gFirstDotsCnt++;
- //if (gFirstDotsCnt == 3)
- if (gFirstDotsCnt == 4) {
- gbFirstDotsUp = false;
- gFirstDotsCheckState = 1;
- checkFirstPtValidate_SplitData_4P();
- gbFirstDotsFly[3] = true; // keep 4th pt to check later
- } else {
- return;
- }
- //2018.12.13
- if (isNeedFiveCheck) {
- return;
- }
- }
- if (gSPtCnt > 2 && gPtPos >= 3 && dist3 > 1.5 || gSPtCnt == 4) {
- if (gSPtCnt == 3) // 三点判断
- {
- //1,2,3 Angle Diff
- gAngleDiff[0] = utils.angleDifferent(utils.pointsAngle(gSPtX[0], gSPtY[0], gSPtX[1], gSPtY[1]), utils.pointsAngle(gSPtX[1], gSPtY[1], gSPtX[2], gSPtY[2]));
- dist1 = Math.sqrt(((gSPtX[1] - gSPtX[0]) * (gSPtX[1] - gSPtX[0])) + ((gSPtY[1] - gSPtY[0]) * (gSPtY[1] - gSPtY[0])));
- if (dist1 == 0.0) dist1 = 0.000001;
- dist2 = Math.sqrt(((gSPtX[2] - gSPtX[1]) * (gSPtX[2] - gSPtX[1])) + ((gSPtY[2] - gSPtY[1]) * (gSPtY[2] - gSPtY[1])));
- dist2 = dist2 / gMCounterDiff;
- if (dist2 == 0.0) dist2 = 0.000001;
- dtimes = dist2 / dist1;
- // gAngleDiff[0] >= 30 还会有飞笔, gAngleDiff[0] >= 20 暂时未发现飞笔
- if ((dtimes > 60 && dist1 > 0.000001 && gAngleDiff[0] >= 20) || (dtimes > 2000000 && dist1 >= 0.000001)) {
- // 20181108
- gx1 = gSPtX[0];
- gy1 = gSPtY[0];
- gx2 = gSPtX[1];
- gy2 = gSPtY[1];
- // 20181010
- gSPtX[0] = gSPtX[1];
- gSPtY[0] = gSPtY[1];
- gSPtX[1] = gSPtX[2];
- gSPtY[1] = gSPtY[2];
- // 20181108
- gSPtCnt = 2;
- // console.log("split: remove 1");
- return;
- }
- //20181025
- if ((dtimes > 15 && dist1 > 0.1 && gAngleDiff[0] >= 150) || (dtimes > 30 && dist1 > 0.05 && gAngleDiff[0] >= 150)) {
- //20181108
- gx1 = gSPtX[0];
- gy1 = gSPtY[0];
- gx2 = gSPtX[1];
- gy2 = gSPtY[1];
- // 20181010
- gSPtX[0] = gSPtX[1];
- gSPtY[0] = gSPtY[1];
- gSPtX[1] = gSPtX[2];
- gSPtY[1] = gSPtY[2];
- //20181108
- //gx2 = gSPtX[1];
- //gy2 = gSPtY[1];
- gSPtCnt = 2;
- return;
- }
- //20181101
- if ((dtimes > 20 && dist1 > 0.1) || (dtimes > 40 && dist1 > 0.05)) {
- //20181108
- gx1 = gSPtX[0];
- gy1 = gSPtY[0];
- gx2 = gSPtX[1];
- gy2 = gSPtY[1];
- // 20181010
- gSPtX[0] = gSPtX[1];
- gSPtY[0] = gSPtY[1];
- gSPtX[1] = gSPtX[2];
- gSPtY[1] = gSPtY[2];
- //20181108
- //gx2 = gSPtX[1];
- //gy2 = gSPtY[1];
- gSPtCnt = 2;
- return;
- }
- if (gAngleDiff[0] < gThresholdAngle) // 第一,二,三点的角度差,在范围内,第三点角度合理
- {
- if (dtimes < gThresholdTimes || dist2 < gThresholdDist) // 第三点距离合理,第三点不飞
- {
- //201809
- if (dtimes > (gThresholdTimes * 2) && dist1 > 0.1) // 第三点距离不合理,第三点飞
- {
- gSPtCnt = 2;
- // 20180929
- gSPtX[2] = 2 * gSPtX[1] - gSPtX[0];
- gSPtY[2] = 2 * gSPtY[1] - gSPtY[0];
- gSPtX[0] = gSPtX[1];
- gSPtY[0] = gSPtY[1];
- gSPtX[1] = gSPtX[2];
- gSPtY[1] = gSPtY[2];
- gx2 = gSPtX[1];
- gy2 = gSPtY[1];
- //console.log("split: remove 2");
- return;
- }
- //20181011
- //if ((dtimes <= gThresholdTimes && dist1 > 0.3 && dtimes > 1)||(dtimes > gThresholdTimes)) {
- //20181211
- //if (dtimes > gThresholdTimes) {
- //if((dtimes > gThresholdTimes && dist1 > 0.3)||(dtimes > 4 && dist1 > 0.5) || (dtimes > gThresholdTimes * 2)){
- if ((dtimes <= gThresholdTimes && dtimes >= 1 && dist1 > 0.3) || (dtimes > gThresholdTimes)) {
- gPt3Counter = counter;
- gPt3X = gAbsXM;
- gPt3fx = gAbsfx;
- gPt3Y = gAbsYM;
- gPt3fy = gAbsfy;
- gPt3Force = force;
- gPt3Angle = angle;
- gPt3TimeLong = systemTime;
- return;
- } else {
- //201809
- gSPtX[0] = gSPtX[1];
- gSPtY[0] = gSPtY[1];
- gSPtX[1] = gSPtX[2];
- gSPtY[1] = gSPtY[2];
- gSPtCnt = 2;
- }
- } else // 第三点飞
- {
- gSPtCnt = 2;
- // 20180929
- gSPtX[2] = 2 * gSPtX[1] - gSPtX[0];
- gSPtY[2] = 2 * gSPtY[1] - gSPtY[0];
- gSPtX[0] = gSPtX[1];
- gSPtY[0] = gSPtY[1];
- gSPtX[1] = gSPtX[2];
- gSPtY[1] = gSPtY[2];
- gx2 = gSPtX[1];
- gy2 = gSPtY[1];
- //console.log("split: remove 3");
- return;
- }
- } else // 第三点的角度不合理
- {
- //20181011
- dtimes *= gMCounterDiff;
- if (dtimes < gThresholdTimes || dist2 < gThresholdDist) // 第三点距离合理,暂存第三点
- {
- // Pt3 seems a fly point
- gPt3Counter = counter;
- gPt3X = gAbsXM;
- gPt3fx = gAbsfx;
- gPt3Y = gAbsYM;
- gPt3fy = gAbsfy;
- gPt3Force = force;
- gPt3Angle = angle;
- gPt3TimeLong = systemTime;
- //console.log("split: remove 4");
- return;
- } else // 第三点距离不合理,第三点飞
- {
- gSPtCnt = 2;
- // 20180929
- gSPtX[2] = 2 * gSPtX[1] - gSPtX[0];
- gSPtY[2] = 2 * gSPtY[1] - gSPtY[0];
- gSPtX[0] = gSPtX[1];
- gSPtY[0] = gSPtY[1];
- gSPtX[1] = gSPtX[2];
- gSPtY[1] = gSPtY[2];
- gx2 = gSPtX[1];
- gy2 = gSPtY[1];
- //console.log("split: remove 5");
- return;
- }
- }
- } else if (gSPtCnt == 4) // 四点判断
- {
- // 1,2,4 Angle Diff
- gAngleDiff[1] = utils.angleDifferent(utils.pointsAngle(gSPtX[1], gSPtY[1], gSPtX[2], gSPtY[2]), utils.pointsAngle(gSPtX[2], gSPtY[2], gSPtX[3], gSPtY[3]));
- // 第三点与第二点的距离
- dist1 = Math.sqrt(((gSPtX[2] - gSPtX[1]) * (gSPtX[2] - gSPtX[1])) + ((gSPtY[2] - gSPtY[1]) * (gSPtY[2] - gSPtY[1])));
- if (dist1 == 0.0) dist1 = 0.000001;
- // 第四点与第三点的距离
- dist2 = Math.sqrt(((gSPtX[3] - gSPtX[2]) * (gSPtX[3] - gSPtX[2])) + ((gSPtY[3] - gSPtY[2]) * (gSPtY[3] - gSPtY[2])));
- dist2 = dist2 / gMCounterDiff;
- if (dist2 == 0.0) dist2 = 0.000001;
- dtimes = dist2 / dist1;
- // 第三点保留,第四点都飞
- if ((dtimes > 60 && dist1 > 0.000001 && gAngleDiff[1] >= 20) || (dtimes > 2000000 && dist1 >= 0.000001) || (dtimes > 12 && dist1 >= 0.1 && gAngleDiff[1] >= 60)) {
- gSPtCnt = 3;
- gLongFlyState = 1;
- //console.log("split: remove 66");
- return;
- }
- gLongFlyState = 0;
- // 20181025
- if ((dtimes > 15 && dist1 > 0.1 && gAngleDiff[1] >= 150) || (dtimes > 30 && dist1 > 0.05 && gAngleDiff[1] >= 150)) {
- gSPtCnt = 3;
- return;
- }
- //20181101
- if ((dtimes > 20 && dist1 > 0.1) || (dtimes > 40 && dist1 > 0.05)) {
- gSPtCnt = 3;
- return;
- }
- if (gAngleDiff[1] >= gThresholdAngle) {
- //20181011
- dtimes *= gMCounterDiff;
- if (dtimes < gThresholdTimes || dist2 < gThresholdDist) {
- // console.log("split: remove 77 dtimes=" + dtimes + ",dist2=" + dist2 + ",gAngleDiff[1]=" + gAngleDiff[1] + ",gThresholdAngle=" + gThresholdAngle);
- if (dtimes > (gThresholdTimes * 2) && dist1 > 0.1) {
- gSPtCnt = 3;
- return;
- }
- gbPt3Remain = false;
- gSPtX[2] = 2 * gSPtX[1] - gSPtX[0];
- gSPtY[2] = 2 * gSPtY[1] - gSPtY[0];
- gSPtX[0] = gSPtX[2];
- gSPtY[0] = gSPtY[2];
- gSPtX[1] = gSPtX[3];
- gSPtY[1] = gSPtY[3];
- gSPtCnt = 2;
- } else {
- gSPtCnt = 3;
- //console.log("split: remove 88");
- return;
- }
- } else {
- if (dtimes < gThresholdTimes || dist2 < gThresholdDist) {
- gSPtX[0] = gSPtX[2];
- gSPtY[0] = gSPtY[2];
- gSPtX[1] = gSPtX[3];
- gSPtY[1] = gSPtY[3];
- gbPt3Remain = true;
- gSPtCnt = 2;
- } else {
- gSPtCnt = 3;
- //console.log("split: remove 99");
- return;
- }
- }
- }
- } else {
- if (gSPtCnt == 3) {
- gSPtX[0] = gSPtX[1];
- gSPtY[0] = gSPtY[1];
- gSPtX[1] = gSPtX[2];
- gSPtY[1] = gSPtY[2];
- gSPtCnt = 2;
- }
- }
- break;
- case "Pen Up":
- gPtPos++;
- //console.log("gbDownGot = " + gbDownGot + "gbUpGot" + gbUpGot+"xxxxxx"+lpData);
- //20181007 only Pen Down & Pen Up 2 points
- if (gPtPos == 1) {
- gbUpGot = true;
- gFirstDotsCheckState = 1;
- gbFirstDotsFly[2] = true;
- gbFirstDotsFly[3] = true;
- break;
- }
- // console.log("pen up is " + gAbsXM + ", " + gAbsfx + ", " + gAbsYM + ", " + gAbsfy);
- if (gPtPos <= 3) {
- gbUpGot = true;
- gFirstDots[gPtPos].counter = counter;
- gFirstDots[gPtPos].x = gAbsXM;
- gFirstDots[gPtPos].fx = gAbsfx;
- gFirstDots[gPtPos].y = gAbsYM;
- gFirstDots[gPtPos].fy = gAbsfy;
- gFirstDots[gPtPos].force = force;
- gFirstDots[gPtPos].angle = angle;
- gFirstDots[gPtPos].timelong = systemTime;
- gFirstDotsCheckState = 1;
- gbFirstDotsUp = true;
- gFirstDotsCnt++;
- if (gFirstDotsCnt == 3)
- checkFirstPtValidate_SplitData();
- else if (gFirstDotsCnt == 4) {
- checkFirstPtValidate_SplitData_4P();
- }
- gbFirstDotsFly[3] = true;
- } else {
- gbUpGot = true;
- gUCounter = counter;
- gx3 = gAbsXM + (gAbsfx / 128.0);
- gy3 = gAbsYM + (gAbsfy / 128.0);
- dist3 = Math.sqrt(((gx3 - gx2) * (gx3 - gx2)) + ((gy3 - gy2) * (gy3 - gy2)));
- if (gSPtCnt == 3 && dist3 > 1.5) {
- gSPtX[3] = gx3;
- gSPtY[3] = gy3;
- //1,2,4 Angle Diff
- gAngleDiff[1] = utils.angleDifferent(utils.pointsAngle(gSPtX[1], gSPtY[1], gSPtX[2], gSPtY[2]), utils.pointsAngle(gSPtX[2], gSPtY[2], gSPtX[3], gSPtY[3]));
- // console.log("Pen Up gAngleDiff[1] --gThresholdAngle: " + gAngleDiff[1] + "-----" + gThresholdAngle);
- //if (gAngleDiff[1] < 10 && Math.Abs((decimal)(gAngleDiff[0]-gAngleDiff[1])) > 20)
- if (gAngleDiff[1] >= gThresholdAngle) {
- gx1 = gSPtX[0];
- gy1 = gSPtY[0];
- gx2 = gSPtX[1];
- gy2 = gSPtY[1];
- gbPt3Remain = false;
- gSPtX[0] = gSPtX[1];
- gSPtY[0] = gSPtY[1];
- gSPtX[1] = gSPtX[3];
- gSPtY[1] = gSPtY[3];
- } else {
- gSPtX[0] = gSPtX[2];
- gSPtY[0] = gSPtY[2];
- gSPtX[1] = gSPtX[3];
- gSPtY[1] = gSPtY[3];
- gbPt3Remain = true;
- //gSPtCnt = 2;
- }
- }
- if ((gSPtCnt >= 3 && gbPt3Remain == false) || (gLongFlyState == 1)) {
- // 20181025
- // gx2 = (gx1 + gx3) / 2;
- // gy2 = (gy1 + gy3) / 2;
- gLongFlyState = 0;
- }
- angleDiff = utils.angleDifferent(utils.pointsAngle(gx1, gy1, gx2, gy2), utils.pointsAngle(gx1, gy1, gx3, gy3));
- dist1 = Math.sqrt(((gx2 - gx1) * (gx2 - gx1)) + ((gy2 - gy1) * (gy2 - gy1)));
- if (dist1 == 0.0) dist1 = 0.000001;
- dist2 = Math.sqrt(((gx3 - gx2) * (gx3 - gx2)) + ((gy3 - gy2) * (gy3 - gy2)));
- if (dist2 == 0.0) dist2 = 0.000001;
- dtimes = dist2 / dist1;
- var CounterDiff;
- if (gUCounter > gMCounter)
- CounterDiff = gUCounter - gMCounter;
- else
- CounterDiff = 247 + gUCounter - gMCounter;
- dtimes = dist2 / CounterDiff / dist1;
- //20180929
- /* if (dtimes > 15 && angleDiff < 30 && dist1 > 0.18)*/
- if ((dtimes > 15 && angleDiff < 30 && dist1 > 0.1 && dist2 > 1.5) || (dtimes > 6 && angleDiff < gThresholdAngle && dist2 > 3)) // 20181005 add dtimes >6 and dist2 > 3 for Up Point
- {
- gMUpX = ((CounterDiff + 1) * gx2) - CounterDiff * gx1;
- gMUpY = ((CounterDiff + 1) * gy2) - CounterDiff * gy1;
- let XM = (gMUpX * 100);
- gAbsXM = XM / 100;
- gAbsfx = (XM % 100) * 128 / 100;
- let YM = (gMUpY * 100);
- gAbsYM = YM / 100;
- gAbsfy = (YM % 100) * 128 / 100;
- }
- if (angleDiff >= gThresholdUpAngle && CounterDiff == 1 && dist2 > 1.5) {
- gMUpX = gx2;
- gMUpY = gy2;
- let XM = (gMUpX * 100);
- gAbsXM = XM / 100;
- gAbsfx = (XM % 100) * 128 / 100;
- let YM = (gMUpY * 100);
- gAbsYM = YM / 100;
- gAbsfy = (YM % 100) * 128 / 100;
- }
- }
- break;
- default:
- break;
- }
- let MS;
- let SS;
- let SBID;
- //20181004
- if (gFirstDotsCheckState == 0) return;
- else if (gFirstDotsCheckState == 1) {
- for (i = 0; i < gFirstDotsCnt; i++) {
- if (gbFirstDotsFly[i] == false) {
- MS = (gFirstDots[i].timelong % 1000);
- SS = gFirstDots[i].timelong / 1000;
- SBID = gSID * 1024 + gBID;
- g_CompressData[0] = gFirstDots[i].counter;
- //g_CompressData[1] = gSID;
- g_CompressData[1] = (SBID / 256);
- g_CompressData[2] = gOID;
- //g_CompressData[3] = gBID;
- g_CompressData[3] = (SBID % 256);
- g_CompressData[4] = gPID;
- g_CompressData[5] = (gFirstDots[i].x % 256);
- g_CompressData[6] = (gFirstDots[i].x / 256);
- g_CompressData[7] = (gFirstDots[i].fx);
- g_CompressData[8] = (gFirstDots[i].y % 256);
- g_CompressData[9] = (gFirstDots[i].y / 256);
- g_CompressData[10] = (gFirstDots[i].fy);
- g_CompressData[11] = (gFirstDots[i].force % 256);
- g_CompressData[12] = (gFirstDots[i].force / 256);
- g_CompressData[13] = (SS % 256);
- SS = SS / 256;
- g_CompressData[14] = (SS % 256);
- SS = SS / 256;
- g_CompressData[15] = (SS % 256);
- g_CompressData[16] = (SS / 256);
- g_CompressData[17] = (MS % 256);
- g_CompressData[18] = (MS / 256);
- g_CompressData[19] = (gFirstDots[i].angle % 256);
- g_CompressData[20] = (gFirstDots[i].angle / 256);
- gPreStatus = status;
- // console.log('gbFirstDotsFly ========= ' + gbFirstDotsFly[i] + 'gFirstDots[i].x = ' + gFirstDots[i].x + 'gFirstDots[i].fx =' + gFirstDots[i].fx + 'gFirstDots[i].counter' + gFirstDots[i].counter);
- // console.log('++++++++' + parseInt(gFirstDots[i].angle / 256));
- processDots(g_CompressData, bIsOnline, bOID4);
- }
- }
- gFirstDotsCheckState = 2;
- }
- if (gbPt3Remain == true && bOID4) {
- MS = (gPt3TimeLong % 1000);
- SS = gPt3TimeLong / 1000;
- SBID = gSID * 1024 + gBID;
- g_CompressData[0] = gPt3Counter;
- //g_CompressData[1] = gSID;
- g_CompressData[1] = (SBID / 256);
- g_CompressData[2] = gOID;
- //g_CompressData[3] = gBID;
- g_CompressData[3] = (SBID % 256);
- g_CompressData[4] = gPID;
- g_CompressData[5] = (gPt3X % 256);
- g_CompressData[6] = (gPt3X / 256);
- g_CompressData[7] = (gPt3fx);
- g_CompressData[8] = (gPt3Y % 256);
- g_CompressData[9] = (gPt3Y / 256);
- g_CompressData[10] = (gPt3fy);
- g_CompressData[11] = (gPt3Force % 256);
- g_CompressData[12] = (gPt3Force / 256);
- g_CompressData[13] = (SS % 256);
- SS = SS / 256;
- g_CompressData[14] = (SS % 256);
- SS = SS / 256;
- g_CompressData[15] = (SS % 256);
- g_CompressData[16] = (SS / 256);
- g_CompressData[17] = (MS % 256);
- g_CompressData[18] = (MS / 256);
- g_CompressData[19] = (gPt3Angle % 256);
- g_CompressData[20] = (gPt3Angle / 256);
- gPreStatus = "Pen Move";
- processDots(g_CompressData, bIsOnline, bOID4);
- //penOnlineStrokeDot(g_CompressData, bIsOnline, bOID4);
- gbPt3Remain = false;
- }
- MS = (systemTime % 1000);
- SS = systemTime / 1000;
- if (bOID4) {
- SBID = gSID * 1024 + gBID;
- g_CompressData[0] = counter;
- g_CompressData[1] = (SBID / 256);
- g_CompressData[2] = gOID;
- g_CompressData[3] = (SBID % 256);
- g_CompressData[4] = gPID;
- g_CompressData[5] = (gAbsXM % 256);
- g_CompressData[6] = (gAbsXM / 256);
- g_CompressData[7] = (gAbsfx);
- g_CompressData[8] = (gAbsYM % 256);
- g_CompressData[9] = (gAbsYM / 256);
- g_CompressData[10] = gAbsfy;
- g_CompressData[11] = (force % 256);
- g_CompressData[12] = (force / 256);
- g_CompressData[13] = (SS % 256);
- SS = SS / 256;
- g_CompressData[14] = (SS % 256);
- SS = SS / 256;
- g_CompressData[15] = (SS % 256);
- g_CompressData[16] = (SS / 256);
- g_CompressData[17] = (MS % 256);
- g_CompressData[18] = (MS / 256);
- g_CompressData[19] = (angle % 256);
- g_CompressData[20] = (angle / 256);
- }
- gPreStatus = status;
- processDots(g_CompressData, bIsOnline, bOID4);
- } else {
- return;
- }
- }
- /**
- * Auther: kims wang
- * Describe: 四点过滤算法
- * Date: 2018-10-20
- */
- function checkFirstPtValidate_SplitData_4P() {
- var i, j;
- //var tangle = new Array(4);
- //var InitAngle;
- //var adiff12, adiff23, adiff31, adiff34;
- var dist1, dist2, dist3;
- var dist12, dist13, dist14, dist23, dist24, dist34;
- var d12Times, d23Times, d31Times;
- var Angle123, Angle124, Angle134, Angle234;
- //201809
- var d32Times, d13Times;
- var countDiff;
- for (i = 0; i < 4; i++) {
- // console.log('1111111111111111111');
- pointX123[i] = (gFirstDots[i].x) + (gFirstDots[i].fx) / 128.0;
- pointY123[i] = (gFirstDots[i].y) + (gFirstDots[i].fy) / 128.0;
- // tangle[i] = gFirstDots[i].angle;
- //console.log('i==='+ i + 'counter ===' + gFirstDots[i].counter + 'x = ' + gFirstDots[i].x +'fx = '+ gFirstDots[i].fx);
- gbFirstDotsFly[i] = false;
- }
- //20181025 Resolve Special case
- // adiff12 = utils.angleDifferent(tangle[0], tangle[1]);
- // adiff23 = utils.angleDifferent(tangle[1], tangle[2]);
- // adiff34 = utils.angleDifferent(tangle[2], tangle[3]);
- // if (adiff12 <= adiff23) {
- // if (adiff12 <= adiff34) {
- // InitAngle = tangle[0];
- // } else {
- // InitAngle = tangle[3];
- // }
- // } else {
- // if (adiff23 <= adiff34) {
- // InitAngle = tangle[1];
- // } else {
- // InitAngle = tangle[3];
- // }
- // }
- Angle123 = utils.angleDifferent(utils.pointsAngle(pointX123[0], pointY123[0], pointX123[1], pointY123[1]), utils.pointsAngle(pointX123[1], pointY123[1], pointX123[2], pointY123[2]));
- Angle124 = utils.angleDifferent(utils.pointsAngle(pointX123[0], pointY123[0], pointX123[1], pointY123[1]), utils.pointsAngle(pointX123[1], pointY123[1], pointX123[3], pointY123[3]));
- Angle134 = utils.angleDifferent(utils.pointsAngle(pointX123[0], pointY123[0], pointX123[2], pointY123[2]), utils.pointsAngle(pointX123[2], pointY123[2], pointX123[3], pointY123[3]));
- Angle234 = utils.angleDifferent(utils.pointsAngle(pointX123[1], pointY123[1], pointX123[2], pointY123[2]), utils.pointsAngle(pointX123[2], pointY123[2], pointX123[3], pointY123[3]));
- //20181027
- dist12 = Math.sqrt(((pointX123[1] - pointX123[0]) * (pointX123[1] - pointX123[0])) + ((pointY123[1] - pointY123[0]) * (pointY123[1] - pointY123[0])));
- if (dist12 == 0.0)
- dist12 = 0.000001;
- dist13 = Math.sqrt(((pointX123[2] - pointX123[0]) * (pointX123[2] - pointX123[0])) + ((pointY123[2] - pointY123[0]) * (pointY123[2] - pointY123[0])));
- if (dist13 == 0.0)
- dist13 = 0.000001;
- dist14 = Math.sqrt(((pointX123[3] - pointX123[0]) * (pointX123[3] - pointX123[0])) + ((pointY123[3] - pointY123[0]) * (pointY123[3] - pointY123[0])));
- if (dist14 == 0.0)
- dist14 = 0.000001;
- dist23 = Math.sqrt(((pointX123[2] - pointX123[1]) * (pointX123[2] - pointX123[1])) + ((pointY123[2] - pointY123[1]) * (pointY123[2] - pointY123[1])));
- if (dist23 == 0.0)
- dist23 = 0.000001;
- dist24 = Math.sqrt(((pointX123[3] - pointX123[1]) * (pointX123[3] - pointX123[1])) + ((pointY123[3] - pointY123[1]) * (pointY123[3] - pointY123[1])));
- if (dist24 == 0.0)
- dist24 = 0.000001;
- dist34 = Math.sqrt(((pointX123[3] - pointX123[2]) * (pointX123[3] - pointX123[2])) + ((pointY123[3] - pointY123[2]) * (pointY123[3] - pointY123[2])));
- if (dist34 == 0.0)
- dist34 = 0.000001;
- // 20181025 p2, p3 fly case
- if (Angle124 > 135 && Angle134 > 135 && (dist14 < dist12) && (dist14 < dist13) && (dist34 / dist23 >= 3.0) && (dist24 / dist23 >= 3.0)) {
- gbFirstDotsFly[1] = true;
- gbFirstDotsFly[2] = true;
- gSPtX[1] = gSPtX[3];
- gSPtY[1] = gSPtY[3];
- gSPtCnt = 2;
- //gFirstDots[0].angle = InitAngle;
- gx1 = gSPtX[0];
- gy1 = gSPtY[0];
- gx2 = gSPtX[3];
- gy2 = gSPtY[3];
- return;
- }
- // 20181028 p1, p2 fly case
- var dtimes1312, dtimes1412, dtimes2312, dtimes2412;
- var dtimes1334, dtimes1434, dtimes2334, dtimes2434;
- dtimes1312 = dist13 / dist12;
- dtimes1412 = dist14 / dist12;
- dtimes2312 = dist23 / dist12;
- dtimes2412 = dist24 / dist12;
- dtimes1334 = dist13 / dist34;
- dtimes1434 = dist14 / dist34;
- dtimes2334 = dist23 / dist34;
- dtimes2434 = dist24 / dist34;
- // 2018.12.13
- if ((dtimes1312 > gFlyDist) && (dtimes1412 > gFlyDist) && (dtimes2312 > gFlyDist) && (dtimes2412 > gFlyDist) && (dtimes1334 > gFlyDist) && (dtimes1434 > gFlyDist) && (dtimes2334 > gFlyDist) && (dtimes2434 > gFlyDist) && (dist12 > 0.001) && (dist34 > 0.001)) {
- if (dist23 > 3.0) //20181110
- {
- // gbFirstDotsFly[0] = true;
- // gbFirstDotsFly[1] = true;
- // gSPtX[0] = gSPtX[2];
- // gSPtY[0] = gSPtY[2];
- // gSPtX[1] = gSPtX[3];
- // gSPtY[1] = gSPtY[3];
- // gSPtCnt = 2;
- // gFirstDots[2].angle = InitAngle;
- // gx1 = gSPtX[0];
- // gy1 = gSPtY[0];
- // gx2 = gSPtX[1];
- // gy2 = gSPtY[1];
- isNeedFiveCheck = true;
- return;
- }
- }
- // 20181025 p1 fly case
- if (Angle124 > 135 && Angle134 > 135 && (dist14 < dist12) && (dist14 < dist13) && (dist34 / dist23 < 3.0) && (dist24 / dist23 < 3.0) && (dist23 / dist13 < 3.0) && dist12 > 1.5) {
- if ((pointX123[0] == pointX123[1] && pointX123[1] == pointX123[2]) || (pointY123[0] == pointY123[1] && pointY123[1] == pointY123[2]) || (pointX123[1] == pointX123[2] && pointY123[1] == pointY123[2]) || ((Angle123 < 20) || (Angle123 > 160))) {
- gbFirstDotsFly[0] = true;
- gSPtX[0] = gSPtX[1];
- gSPtY[0] = gSPtY[1];
- gSPtX[1] = gSPtX[2];
- gSPtY[1] = gSPtY[2];
- gSPtX[2] = gSPtX[3];
- gSPtY[2] = gSPtY[3];
- gSPtCnt = 3;
- if (gbFirstDotsUp) {
- gx1 = gSPtX[0];
- gy1 = gSPtY[0];
- gx2 = gSPtX[1];
- gy2 = gSPtY[1];
- gx3 = gSPtX[2];
- gy3 = gSPtY[2];
- } else {
- gx1 = gSPtX[1];
- gy1 = gSPtY[1];
- gx2 = gSPtX[2];
- gy2 = gSPtY[2];
- }
- //gbFirst3DotsChecked = true;
- } else {
- //20181017 y = ax + b
- var a, b;
- if (pointX123[1] == pointX123[2])
- a = (pointY123[2] - pointY123[1]) / 0.000001;
- else
- a = (pointY123[2] - pointY123[1]) / (pointX123[2] - pointX123[1]);
- b = pointY123[1] - (a * pointX123[1]);
- var Rx, Ry;
- Ry = (a * pointX123[0]) + b;
- Rx = (pointY123[0] - b) / a;
- if (Math.abs(pointX123[0] - Rx) > Math.abs(pointY123[0] - Ry)) // Y diecrtion fly away, use Ry to be the Y coordinate of first pt
- {
- var iy, fy;
- //iy = (int)Math.round(Ry);
- //fy = (int)Math.round((Ry - (float)iy) * (float)128.0);
- iy = (Ry);
- fy = ((Ry - iy) * 128.0);
- gFirstDots[0].y = iy;
- gFirstDots[0].fy = fy;
- } else // X direction fly away, use Rx to be the X coordinate of first pt
- {
- var ix, fx;
- //ix = (int)Math.round(Rx);
- //fx = (int)Math.round((Rx - (float)ix) * (float)128.0);
- ix = (Rx);
- fx = ((Rx - ix) * 128.0);
- gFirstDots[0].x = ix;
- gFirstDots[0].fx = fx;
- }
- var pointXX = (gFirstDots[0].x) + (gFirstDots[0].fx) / 128.0;
- var pointYY = (gFirstDots[0].y) + (gFirstDots[0].fy) / 128.0;
- var dist12C = Math.sqrt(((pointX123[1] - pointXX) * (pointX123[1] - pointXX)) + ((pointY123[1] - pointYY) * (pointY123[1] - pointYY)));
- if ((dist12C / dist23) > 3) {
- gbFirstDotsFly[0] = true;
- } else {}
- }
- gSPtCnt = 3;
- if (gbFirstDotsUp) {
- gx1 = gSPtX[1];
- gy1 = gSPtY[1];
- gx2 = gSPtX[2];
- gy2 = gSPtY[2];
- gx3 = gSPtX[3];
- gy3 = gSPtY[3];
- } else {
- gx1 = gSPtX[2];
- gy1 = gSPtY[2];
- gx2 = gSPtX[3];
- gy2 = gSPtY[3];
- }
- gSPtX[0] = gSPtX[1];
- gSPtY[0] = gSPtY[1];
- gSPtX[1] = gSPtX[2];
- gSPtY[1] = gSPtY[2];
- gSPtX[2] = gSPtX[3];
- gSPtY[2] = gSPtY[3];
- return;
- }
- //20181025
- // adiff12 = utils.angleDifferent(tangle[0], tangle[1]);
- // adiff23 = utils.angleDifferent(tangle[1], tangle[2]);
- // adiff31 = utils.angleDifferent(tangle[2], tangle[0]);
- g2ndAngle = utils.angleDifferent(utils.pointsAngle(pointX123[0], pointY123[0], pointX123[1], pointY123[1]), utils.pointsAngle(pointX123[1], pointY123[1], pointX123[2], pointY123[2]));
- //20181017 added for getting counter difference of first pt & second pt
- countDiff = (247 + gFirstDots[1].counter - gFirstDots[0].counter) % 247;
- dist1 = Math.sqrt(((pointX123[1] - pointX123[0]) * (pointX123[1] - pointX123[0])) + ((pointY123[1] - pointY123[0]) * (pointY123[1] - pointY123[0])));
- dist2 = Math.sqrt(((pointX123[2] - pointX123[1]) * (pointX123[2] - pointX123[1])) + ((pointY123[2] - pointY123[1]) * (pointY123[2] - pointY123[1])));
- dist3 = Math.sqrt(((pointX123[2] - pointX123[0]) * (pointX123[2] - pointX123[0])) + ((pointY123[2] - pointY123[0]) * (pointY123[2] - pointY123[0])));
- if (dist1 == 0.0)
- dist1 = 0.000001;
- if (dist2 == 0.0)
- dist2 = 0.000001;
- if (dist3 == 0.0)
- dist3 = 0.000001;
- //20181017 added
- dist1 /= countDiff;
- d12Times = dist1 / dist2;
- d23Times = dist3 / dist2;
- d31Times = dist1 / dist3;
- //201809
- d32Times = dist2 / dist3;
- // 20181011
- //20181108
- var dtimes1234;
- dtimes1234 = dist12 / dist34;
- if ((d12Times > 3.0 && d23Times > 3.0 && g2ndAngle > 45 && dist2 > 0.08) || (d12Times > 15.0 && d23Times > 15.0 && dist2 > 0.08) || (d12Times > 10.0 && d23Times > 10.0 && dist2 > 0.6) || (d12Times > 3.0 && d23Times > 3.0 && dtimes1234 > 3.0)) {
- if ((pointX123[0] == pointX123[1] && pointX123[1] == pointX123[2]) || (pointY123[0] == pointY123[1] && pointY123[1] == pointY123[2]) || (pointX123[1] == pointX123[2] && pointY123[1] == pointY123[2]) || ((g2ndAngle < 20) || (g2ndAngle > 160))) {
- gbFirstDotsFly[0] = true;
- if (gbFirstDotsUp) {
- gx1 = gSPtX[1];
- gy1 = gSPtY[1];
- gx2 = gSPtX[2];
- gy2 = gSPtY[2];
- gx3 = gSPtX[3];
- gy3 = gSPtY[3];
- } else {
- gx1 = gSPtX[2];
- gy1 = gSPtY[2];
- gx2 = gSPtX[3];
- gy2 = gSPtY[3];
- }
- gSPtX[0] = gSPtX[1];
- gSPtY[0] = gSPtY[1];
- gSPtX[1] = gSPtX[2];
- gSPtY[1] = gSPtY[2];
- gSPtX[2] = gSPtX[3];
- gSPtY[2] = gSPtY[3];
- gSPtCnt = 3;
- } else {
- //20181017 y = ax + b
- var a, b;
- if (pointX123[1] == pointX123[2])
- a = (pointY123[2] - pointY123[1]) / 0.000001;
- else
- a = (pointY123[2] - pointY123[1]) / (pointX123[2] - pointX123[1]);
- b = pointY123[1] - (a * pointX123[1]);
- var Rx, Ry;
- Ry = (a * pointX123[0]) + b;
- Rx = (pointY123[0] - b) / a;
- if (Math.abs(pointX123[0] - Rx) > Math.abs(pointY123[0] - Ry)) // Y diecrtion fly away, use Ry to be the Y coordinate of first pt
- {
- var iy, fy;
- //iy = (int)Math.round(Ry);
- //fy = (int)Math.round((Ry - (float)iy) * (float)128.0);
- iy = (Ry);
- fy = ((Ry - iy) * 128.0);
- gFirstDots[0].y = iy;
- gFirstDots[0].fy = fy;
- } else // X direction fly away, use Rx to be the X coordinate of first pt
- {
- var ix, fx;
- //ix = (int)Math.round(Rx);
- //fx = (int)Math.round((Rx - (float)ix) * (float)128.0);
- ix = (Rx);
- fx = ((Rx - ix) * 128.0);
- gFirstDots[0].x = ix;
- gFirstDots[0].fx = fx;
- }
- var pointXX = (gFirstDots[0].x) + (gFirstDots[0].fx) / 128.0;
- var pointYY = (gFirstDots[0].y) + (gFirstDots[0].fy) / 128.0;
- var dist12C = Math.sqrt(((pointX123[1] - pointXX) * (pointX123[1] - pointXX)) + ((pointY123[1] - pointYY) * (pointY123[1] - pointYY)));
- if ((dist12C / dist23) > 3) {
- gbFirstDotsFly[0] = true;
- // gFirstDots[1].angle = InitAngle;
- } else {
- // gFirstDots[0].angle = InitAngle;
- }
- gbFirst3DotsChecked = true;
- gSPtCnt = 3;
- if (gbFirstDotsUp) {
- gx1 = gSPtX[1];
- gy1 = gSPtY[1];
- gx2 = gSPtX[2];
- gy2 = gSPtY[2];
- gx3 = gSPtX[3];
- gy3 = gSPtY[3];
- } else {
- gx1 = gSPtX[2];
- gy1 = gSPtY[2];
- gx2 = gSPtX[3];
- gy2 = gSPtY[3];
- }
- gSPtX[0] = gSPtX[1];
- gSPtY[0] = gSPtY[1];
- gSPtX[1] = gSPtX[2];
- gSPtY[1] = gSPtY[2];
- gSPtX[2] = gSPtX[3];
- gSPtY[2] = gSPtY[3];
- return;
- }
- }
- d12Times = dist2 / dist1;
- d23Times = dist2 / dist3;
- d31Times = dist1 / dist3;
- //if (d23Times > 15.0 && d13Times > 15.0)
- //if ((d23Times > 3.0 && d31Times > 3.0 && g2ndAngle > 45 && dist3 > 0.08) || (d23Times > 15.0 && d31Times > 15.0 && dist3 > 0.06)) {
- //20181108
- //if ((d23Times > 3.0 && d31Times > 3.0 && g2ndAngle > 45 && dist3 > 0.08) || (d23Times > 15.0 && d31Times > 15.0 && dist3 > 0.06) || (d23Times > 15.0 && d31Times > 15.0 && (Math.max(dist1,dist2) > 1.5))) {
- //20181108
- if ((d23Times > 3.0 && d31Times > 3.0 && g2ndAngle > 45 && dist3 > 0.08) || (d23Times > 15.0 && d31Times > 15.0 && dist3 > 0.06) || ((Math.max(d23Times, d31Times) * dist3) > 1.5 && d23Times > 15.0 && d31Times > 15.0)) {
- gbFirstDotsFly[1] = true;
- }
- //
- //201809
- //if (gbFirstDotsFly[0] == false && gbFirstDotsFly[1] == false && gbFirstDotsFly[2] == false)
- if (gbFirstDotsFly[0] == false && gbFirstDotsFly[1] == false) {
- //20180926
- d12Times = dist1 / dist2;
- d32Times = dist3 / dist2;
- d23Times = dist2 / dist3;
- d13Times = dist1 / dist3;
- g2ndAngle = utils.angleDifferent(utils.pointsAngle(pointX123[0], pointY123[0], pointX123[1], pointY123[1]), utils.pointsAngle(pointX123[1], pointY123[1], pointX123[2], pointY123[2]));
- if (g2ndAngle > 135) {
- if (d12Times > 3 && d23Times > 3 && dist2 > 0.08) {
- gbFirstDotsFly[0] = true;
- } else if (d23Times > 3 && d13Times > 3 && dist3 > 0.08) {
- gbFirstDotsFly[1] = true;
- }
- }
- }
- //20181025
- d23Times = dist23 / dist12;
- d13Times = dist13 / dist12;
- //if (((d23Times > 3.0 && d13Times > 3.0 && Angle123 > 45 && dist12 > 0.2) || (d23Times > 15.0 && d13Times > 15.0 && dist12 > 0.02))) {
- //20181108
- if (((d23Times > 3.0 && d13Times > 3.0 && Angle123 > 45 && dist23 > 1.5) || (d23Times > 15.0 && d13Times > 15.0 && dist23 > 1.5))) {
- if (dtimes2334 > 0.66 && dtimes2334 < 1.5 && Angle234 < 20) {
- } else {
- gbFirstDotsFly[2] = true;
- gSPtCnt = 3;
- if (gbFirstDotsUp) {
- gx1 = gSPtX[0];
- gy1 = gSPtY[0];
- gx2 = gSPtX[1];
- gy2 = gSPtY[1];
- gx3 = gSPtX[3];
- gy3 = gSPtY[3];
- } else {
- gx1 = gSPtX[1];
- gy1 = gSPtY[1];
- gx2 = gSPtX[3];
- gy2 = gSPtY[3];
- }
- gSPtX[2] = gSPtX[3];
- gSPtY[2] = gSPtY[3];
- }
- }
- //20181004
- if (gbFirstDotsFly[0] == true) {
- gSPtX[0] = gSPtX[1];
- gSPtY[0] = gSPtY[1];
- gSPtX[1] = gSPtX[2];
- gSPtY[1] = gSPtY[2];
- gSPtX[2] = gSPtX[3];
- gSPtY[2] = gSPtY[3];
- gSPtCnt = 3;
- if (gbFirstDotsUp) {
- gx1 = gSPtX[0];
- gy1 = gSPtY[0];
- gx2 = gSPtX[1];
- gy2 = gSPtY[1];
- gx3 = gSPtX[2];
- gy3 = gSPtY[2];
- } else {
- gx1 = gSPtX[1];
- gy1 = gSPtY[1];
- gx2 = gSPtX[2];
- gy2 = gSPtY[2];
- }
- }
- if (gbFirstDotsFly[1] == true) {
- gSPtX[1] = gSPtX[2];
- gSPtY[1] = gSPtY[2];
- gSPtX[2] = gSPtX[3];
- gSPtY[2] = gSPtY[3];
- if (gbFirstDotsUp) {
- gx1 = gSPtX[0];
- gy1 = gSPtY[0];
- gx2 = gSPtX[1];
- gy2 = gSPtY[1];
- gx3 = gSPtX[2];
- gy3 = gSPtY[2];
- } else {
- gx1 = gSPtX[1];
- gy1 = gSPtY[1];
- gx2 = gSPtX[2];
- gy2 = gSPtY[2];
- }
- gSPtCnt = 3;
- }
- if (gbFirstDotsFly[2] == true) {
- gSPtX[2] = gSPtX[3];
- gSPtY[2] = gSPtY[3];
- gSPtCnt = 3;
- if (gbFirstDotsUp) {
- gx1 = gSPtX[0];
- gy1 = gSPtY[0];
- gx2 = gSPtX[1];
- gy2 = gSPtY[1];
- gx3 = gSPtX[2];
- gy3 = gSPtY[2];
- } else {
- gx1 = gSPtX[1];
- gy1 = gSPtY[1];
- gx2 = gSPtX[2];
- gy2 = gSPtY[2];
- }
- }
- //
- // for (i = 0; i < 4; i++) {
- // if (gbFirstDotsFly[i] == false) {
- // gFirstDots[i].angle = InitAngle;
- // break;
- // }
- // }
- //20181025
- if (gbFirstDotsFly[0] == false && gbFirstDotsFly[1] == false && gbFirstDotsFly[2] == false) {
- gSPtCnt = 3;
- gSPtX[0] = gSPtX[1];
- gSPtY[0] = gSPtY[1];
- gSPtX[1] = gSPtX[2];
- gSPtY[1] = gSPtY[2];
- gSPtX[2] = gSPtX[3];
- gSPtY[2] = gSPtY[3];
- if (gbFirstDotsUp) {
- gx1 = gSPtX[0];
- gy1 = gSPtY[0];
- gx2 = gSPtX[1];
- gy2 = gSPtY[1];
- gx3 = gSPtX[2];
- gy3 = gSPtY[2];
- } else {
- gx1 = gSPtX[1];
- gy1 = gSPtY[1];
- gx2 = gSPtX[2];
- gy2 = gSPtY[2];
- }
- }
- if (gbFirstDotsUp) {
- var x1, y1, x2, y2, x3, y3;
- var UCounter, MCounter;
- var MUpX, MUpY;
- x1 = pointX123[1];
- y1 = pointY123[1];
- x2 = pointX123[2];
- y2 = pointY123[2];
- x3 = pointX123[3];
- y3 = pointY123[3];
- UCounter = gFirstDots[3].counter;
- MCounter = gFirstDots[2].counter;
- if (gbFirstDotsFly[2] == true) {
- x1 = pointX123[0];
- y1 = pointY123[0];
- x2 = pointX123[1];
- y2 = pointY123[1];
- x3 = pointX123[3];
- y3 = pointY123[3];
- MCounter = gFirstDots[1].counter;
- } else if (gbFirstDotsFly[1] == true) {
- x1 = pointX123[0];
- y1 = pointY123[0];
- x2 = pointX123[2];
- y2 = pointY123[2];
- x3 = pointX123[3];
- y3 = pointY123[3];
- MCounter = gFirstDots[2].counter;
- }
- var angleDiff = utils.angleDifferent(utils.pointsAngle(x1, y1, x2, y2), utils.pointsAngle(x1, y1, x3, y3));
- //cb.onReceiveDotTest("AngleDifferent=" + angleDiff.ToString());
- dist1 = Math.sqrt(((x2 - x1) * (x2 - x1)) + ((y2 - y1) * (y2 - y1)));
- if (dist1 == 0.0) dist1 = 0.000001;
- dist2 = Math.sqrt(((x3 - x2) * (x3 - x2)) + ((y3 - y2) * (y3 - y2)));
- if (dist2 == 0.0) dist2 = 0.000001;
- var dtimes = dist2 / dist1;
- //
- var CounterDiff;
- if (UCounter > MCounter)
- CounterDiff = UCounter - MCounter;
- else
- CounterDiff = 247 + UCounter - MCounter;
- dtimes = dist2 / CounterDiff / dist1;
- if ((dtimes > 15 && angleDiff < 30 && dist1 > 0.1) || (dtimes > 6 && angleDiff < 30 && dist2 > 3)) // 20181005 add dtimes >6 and dist2 > 3 for Up Point
- {
- MUpX = ((CounterDiff + 1) * x2) - CounterDiff * x1;
- MUpY = ((CounterDiff + 1) * y2) - CounterDiff * y1;
- var XM = (MUpX * 100);
- gAbsXM = XM / 100;
- gAbsfx = (XM % 100) * 128 / 100;
- var YM = (MUpY * 100);
- gAbsYM = YM / 100;
- gAbsfy = (YM % 100) * 128 / 100;
- }
- //20181111
- //if (angleDiff >= gThresholdUpAngle)
- if (angleDiff >= gThresholdUpAngle && CounterDiff == 1) {
- MUpX = x2;
- MUpY = y2;
- var XM = (MUpX * 100);
- gAbsXM = XM / 100;
- gAbsfx = (XM % 100) * 128 / 100;
- var YM = (MUpY * 100);
- gAbsYM = YM / 100;
- gAbsfy = (YM % 100) * 128 / 100;
- }
- }
- gbFirst3DotsChecked = true;
- }
- /**
- * Auther: kims wang
- * Describe: 标准数据校验,无异常则将正常数据输出
- * Date: 2018-10-20
- */
- function checkFirstPtValidate_SplitData() {
- //console.log("checkFirstPtValidate_SplitData -------");
- //var txValue = new Array(30);
- var i, j;
- var tangle = new Array(3);
- var InitAngle;
- // var adiff12, adiff23, adiff31;
- var dist1, dist2, dist3;
- var d12Times, d23Times, d31Times;
- //201809
- var d21Times, d32Times, d13Times;
- var countDiff;
- //20181025 Not to check 4th Pt
- gbFirstDotsFly[3] = true;
- for (i = 0; i < 3; i++) {
- pointX123[i] = (gFirstDots[i].x) + (gFirstDots[i].fx) / 128.0;
- pointY123[i] = (gFirstDots[i].y) + (gFirstDots[i].fy) / 128.0;
- //tangle[i] = gFirstDots[i].angle;
- gbFirstDotsFly[i] = false;
- }
- // adiff12 = utils.angleDifferent(tangle[0], tangle[1]);
- // adiff23 = utils.angleDifferent(tangle[1], tangle[2]);
- // adiff31 = utils.angleDifferent(tangle[2], tangle[0]);
- g2ndAngle = utils.angleDifferent(utils.pointsAngle(pointX123[0], pointY123[0], pointX123[1], pointY123[1]), utils.pointsAngle(pointX123[1], pointY123[1], pointX123[2], pointY123[2]));
- //20181017 added for getting counter difference of first pt & second pt
- countDiff = (247 + gFirstDots[1].counter - gFirstDots[0].counter) % 247;
- dist1 = Math.sqrt(((pointX123[1] - pointX123[0]) * (pointX123[1] - pointX123[0])) + ((pointY123[1] - pointY123[0]) * (pointY123[1] - pointY123[0])));
- dist2 = Math.sqrt(((pointX123[2] - pointX123[1]) * (pointX123[2] - pointX123[1])) + ((pointY123[2] - pointY123[1]) * (pointY123[2] - pointY123[1])));
- dist3 = Math.sqrt(((pointX123[2] - pointX123[0]) * (pointX123[2] - pointX123[0])) + ((pointY123[2] - pointY123[0]) * (pointY123[2] - pointY123[0])));
- if (dist1 == 0.0) dist1 = 0.000001;
- if (dist2 == 0.0) dist2 = 0.000001;
- if (dist3 == 0.0) dist3 = 0.000001;
- //20181017 added
- dist1 /= countDiff;
- d12Times = dist1 / dist2;
- d23Times = dist3 / dist2;
- d31Times = dist1 / dist3;
- //201809
- d32Times = dist2 / dist3;
- // 20181011
- //201809
- if ((d12Times > 3.0 && d23Times > 3.0 && g2ndAngle > 45 && dist2 > 0.08) || (d12Times > 15.0 && d23Times > 15.0 && dist2 > 0.08)) {
- if ((pointX123[0] == pointX123[1] && pointX123[1] == pointX123[2]) || (pointY123[0] == pointY123[1] && pointY123[1] == pointY123[2]) || (pointX123[1] == pointX123[2] && pointY123[1] == pointY123[2]) || ((g2ndAngle < 20) || (g2ndAngle > 160))) {
- //gFirstPtIndex = 1;
- gbFirstDotsFly[0] = true;
- } else {
- //20181017 y = ax + b
- var a, b;
- if (pointX123[1] == pointX123[2])
- a = (pointY123[2] - pointY123[1]) / 0.000001;
- else
- a = (pointY123[2] - pointY123[1]) / (pointX123[2] - pointX123[1]);
- b = pointY123[1] - (a * pointX123[1]);
- var Rx, Ry;
- Ry = (a * pointX123[0]) + b;
- Rx = (pointY123[0] - b) / a;
- if (Math.abs(pointX123[0] - Rx) > Math.abs(pointY123[0] - Ry)) // Y diecrtion fly away, use Ry to be the Y coordinate of first pt
- {
- var iy, fy;
- iy = parseInt(Ry);
- fy = parseInt((Ry - iy) * 128.0);
- gFirstDots[0].y = iy;
- gFirstDots[0].fy = fy;
- } else // X direction fly away, use Rx to be the X coordinate of first pt
- {
- var ix, fx;
- ix = parseInt(Rx);
- fx = parseInt((Rx - ix) * 128.0);
- gFirstDots[0].x = ix;
- gFirstDots[0].fx = fx;
- }
- var pointXX = (gFirstDots[0].x) + (gFirstDots[0].fx) / 128.0;
- var pointYY = (gFirstDots[0].y) + (gFirstDots[0].fy) / 128.0;
- var dist12C = Math.sqrt(((pointX123[1] - pointXX) * (pointX123[1] - pointXX)) + ((pointY123[1] - pointYY) * (pointY123[1] - pointYY)));
- if ((dist12C / dist2) > 3) {
- gbFirstDotsFly[0] = true;
- }
- gbFirst3DotsChecked = true;
- return;
- }
- }
- d12Times = dist2 / dist1;
- d23Times = dist2 / dist3;
- d31Times = dist1 / dist3;
- d13Times = dist1 / dist3;
- // 201809
- if ((d23Times > 3.0 && d31Times > 3.0 && g2ndAngle > 45) || (d23Times > 15.0 && d31Times > 15.0)) {
- gbFirstDotsFly[1] = true;
- }
- //201809
- if (gbFirstDotsFly[0] == false && gbFirstDotsFly[1] == false) {
- //20180926
- d12Times = dist1 / dist2;
- d23Times = dist2 / dist3;
- g2ndAngle = utils.angleDifferent(utils.pointsAngle(pointX123[0], pointY123[0], pointX123[1], pointY123[1]), utils.pointsAngle(pointX123[1], pointY123[1], pointX123[2], pointY123[2]));
- if (g2ndAngle > 135) {
- if (d12Times > 3 && d23Times > 3) {
- gbFirstDotsFly[0] = true;
- } else if (d23Times > 3 && d13Times > 3 && dist3 > 0.08) {
- gbFirstDotsFly[1] = true;
- }
- }
- }
- //20181004
- d21Times = dist2 / dist1;
- d31Times = dist3 / dist1;
- if (((d21Times > 3.0 && d31Times > 3.0 && g2ndAngle > 45) || (d21Times > 15.0 && d31Times > 15.0)) && gbFirstDotsUp) {
- //gFirstPtIndex = 3;
- gbFirstDotsFly[2] = true;
- }
- //20181004
- if (gbFirstDotsFly[0] == true) {
- gSPtX[0] = gSPtX[1];
- gSPtY[0] = gSPtY[1];
- gSPtX[1] = gSPtX[2];
- gSPtY[1] = gSPtY[2];
- gSPtCnt = 2;
- }
- if (gbFirstDotsFly[1] == true) {
- gSPtX[1] = gSPtX[2];
- gSPtY[1] = gSPtY[2];
- gSPtCnt = 2;
- }
- if (gbFirstDotsFly[2] == true && gbFirstDotsUp) {
- gSPtCnt = 2;
- }
- // for (i = 0; i < 3; i++) {
- // if (gbFirstDotsFly[i] == false) {
- // gFirstDots[i].angle = InitAngle;
- // break;
- // }
- // }
- if (gbFirstDotsFly[0] == false && gbFirstDotsFly[1] == false && gbFirstDotsFly[2] == false && gbFirstDotsUp) {
- var dtimes = 0;
- gSPtCnt = 3;
- //1,2,3 Angle Diffs
- gAngleDiff[0] = utils.angleDifferent(utils.pointsAngle(gSPtX[0], gSPtY[0], gSPtX[1], gSPtY[1]), utils.pointsAngle(gSPtX[1], gSPtY[1], gSPtX[2], gSPtY[2]));
- dist1 = Math.sqrt(((gSPtX[1] - gSPtX[0]) * (gSPtX[1] - gSPtX[0])) + ((gSPtY[1] - gSPtY[0]) * (gSPtY[1] - gSPtY[0])));
- if (dist1 == 0.0) dist1 = 0.000001;
- dist2 = Math.sqrt(((gSPtX[2] - gSPtX[1]) * (gSPtX[2] - gSPtX[1])) + ((gSPtY[2] - gSPtY[1]) * (gSPtY[2] - gSPtY[1])));
- dist2 = dist2 / gMCounterDiff;
- if (dist2 == 0.0) dist2 = 0.000001;
- //dtimes = dist2 / dist1;
- dtimes = dist2 / dist1;
- if (gAngleDiff[0] < gThresholdAngle) {
- if (dtimes < gThresholdTimes || dist2 < gThresholdDist) {
- //201809
- if (dtimes > (gThresholdTimes * 2) && dist1 > 0.1) {
- gbFirst3DotsChecked = true;
- gbFirstDotsFly[2] = true;
- gSPtCnt = 2;
- return;
- }
- gbFirstDotsFly[2] = false;
- gSPtCnt = 3;
- } else {
- gbFirst3DotsChecked = true;
- gbFirstDotsFly[2] = true;
- gSPtCnt = 2;
- return;
- }
- } else {
- gbFirstDotsFly[2] = true;
- gSPtCnt = 2;
- }
- }
- }
- /**
- * Auther: kims wang
- * Describe: 有效点验证
- * Date: 2018-10-20
- */
- /**
- * Auther: kims wang
- * Describe: 处理成点数据(1)
- * Date: 2018-10-20
- */
- function processDots(g_CompressData, bIsOnline, bOID4) {
- penOnlineStrokeDot(g_CompressData, bIsOnline, bOID4);
- }
- /**
- * Auther: kims wang
- * Describe: 处理在线有效数据
- * Date: 2018-10-20
- */
- function penOnlineStrokeDot(data, bIsOnline, bOID4) {
- let dot = {
- counter: 0, // 点计数
- sectionID: 0, // 区域ID
- ownerID: 0, // 客户ID
- bookID: 0, // 书号
- pageID: 0, // 页号
- timeLong: utils.Dot.timeLong, // 当前点的RTC 时间,返回时间戳 ms(起止时间是2018-01-01 00:00:00,000)
- x: 0, // 点横坐标,整数部分
- y: 0, // 点纵坐标,整数部分
- fx: 0.0, // 点横坐标,小数部分
- fy: 0.0, // 点纵坐标,小数部分
- ab_x: 0.0, // 点横坐标,整数+小数部分
- ab_y: 0.0, // 点纵坐标,整数+小数部分
- dotType: "",
- force: 0, // 点的压力值
- angle: 0, // 点的角度值
- color: 0, // 笔的颜色值
- };
- if (bOID4) {
- let SBID = (data[1] & 0xff) * 256 + (data[3] & 0xff);
- dot.sectionID = parseInt(SBID / 1024);
- dot.ownerID = (data[2] & 0xff);
- dot.bookID = SBID % 1024;
- dot.counter = data[0] & 0xff;
- dot.pageID = data[4] & 0xff;
- dot.x = (data[5] & 0xff) + ((data[6] & 0xff) * 256);
- dot.fx = ((data[7] & 0xff) * 100 / 128);
- dot.y = (data[8] & 0xff) + ((data[9] & 0xff) * 256);
- dot.fy = ((data[10] & 0xff) * 100 / 128);
- dot.force = ((data[12] << 8) & 0xff00) | (data[11] & 0xff);
- dot.ab_x = dot.x + (dot.fx / 100)
- dot.ab_y = dot.y + (dot.fy / 100)
- // console.log("xxxx = " + dot.x + "yyyy=" + dot.y + "zzz = " + dot.force);
- //dot.force ;
- // dot.force += ;
- // dot.setColor(convertColor(onlineData[14] & 0xff));
- // console.log("Dot data is : "+JSON.stringify(dot));
- }
- if (dot.PageID < 0 || dot.BookID < 0) {
- return;
- }
- dot.timeLong = ((data[13] & 0xff) + ((data[14] & 0xff) << 8) + ((data[15] & 0xff) << 16) + ((data[16] & 0xff) << 24)) * 1000 + (data[17] & 0xff) + ((data[18] & 0xff) << 8);
- // console.log(" dot.timeLong is : " + dot.timeLong);
- dot.force = utils.outputForce(dot.force);
- pointZ = dot.force;
- let Angle = (data[19] & 0x0ff) | ((data[20] << 8) & 0xff00);
- dot.angle = Angle;
- if (dot.angle > 360) {
- return;
- }
- sendDot(dot, bIsOnline);
- }
- /**
- * Auther: kims wang
- * Describe: 分解数据,将数据输出
- * Date: 2018-10-20
- */
- function sendDot(dot, bIsOnline) {
- /**********************20180820 T111A滤波算法 ***************************/
- if (dot.x <= 0 || dot.y <= 0) {
- return;
- }
- if (dot.force > 0) { // down or move
- if (!firstDot) { // down
- firstDot = true;
- gCurBookID = dot.bookID;
- gCurPageID = dot.pageID;
- dot.dotType = utils.DotType.PEN_DOWN;
- /********************20180910 补UP点*********************/
- // lastDistence = 1;
- gLastMoveDot = dot;
- // mendUpArray.push(dot);
- } else {
- if (gCurPageID != dot.pageID || gCurBookID != dot.bookID) {
- return;
- }
- gCurBookID = dot.bookID;
- gCurPageID = dot.pageID;
- dot.dotType = utils.DotType.PEN_MOVE;
- gpreMoveDot = gLastMoveDot;
- gLastMoveDot = dot;
- // mendUpArray.push(dot);
- }
- } else {
- if (firstDot) {
- // To pageID and bookID ensure consistent
- if (gCurPageID != dot.pageID || gCurBookID != dot.bookID) {
- dot.pageID = gCurPageID;
- dot.bookID = gCurBookID;
- }
- var lastDistance = Math.max(Math.abs((gpreMoveDot.x + gpreMoveDot.fx / 100.0) - (gLastMoveDot.x + gLastMoveDot.fx / 100.0)), Math.abs((gpreMoveDot.y + gpreMoveDot.fy / 100.0) - (gLastMoveDot.y + gLastMoveDot.fy / 100.0))) + 1;
- var distance = Math.max(Math.abs((dot.x + dot.fx / 100.0) - (gLastMoveDot.x + gLastMoveDot.fx / 100.0)), Math.abs((dot.y + dot.fy / 100.0) - (gLastMoveDot.y + gLastMoveDot.fy / 100.0))) + 1;
- if ((distance / lastDistance > 10.0 && lastDistance >= 0.5) || (distance > 5.0 && lastDistance < 0.5)) {
- var dotx = 2 * (gLastMoveDot.x + gLastMoveDot.fx / 100.0) - (gpreMoveDot.x + gpreMoveDot.fx / 100.0);
- var doty = 2 * (gLastMoveDot.y + gLastMoveDot.fy / 100.0) - (gpreMoveDot.y + gpreMoveDot.fy / 100.0);
- dot.x = parseInt(dotx);
- dot.fx = parseInt(dotx * 100 % 100);
- dot.y = parseInt(doty);
- dot.fy = parseInt(doty * 100 % 100);
- }
- dot.dotType = utils.DotType.PEN_UP;
- firstDot = false;
- } else {
- return;
- }
- // 限制点up只送一次
- }
- //console.log('writeData' + 'dot.force=' + dot.force + 'dot.counter=' + dot.counter );
- // 将数据传送出去
- var dotData = dotDataCorrector.correct_point(dot);
- if (dotData.length > 0) {
- for (var i = 0; i < dotData.length; i++) {
- var newDot = dotData[i];
- // if (bIsOnline) {
- // console.log('writeData' + 'dot.force=' + dot.force + 'dot.counter=' + dot.counter + 'dot.x = '+ dot.x + 'dot.y = ' + dot.y);
- if (dot != null) {
- if (isOffset) { //偏移 需修偏移
- newDot = patchOffset.angleAndSensitivityLevelCheck(newDot)
- emitPoint(newDot)
- } else {
- filter(newDot)
- }
- }
- // }
- }
- }
- }
- // 2022-7-15 cd
- function filter(dot) {
- // emitPoint(dot)
- // return
- const firstFilterDot = firstFilter.handle(dot)
- if (!firstFilterDot) return
- const firstAverageDot = firstAverage.handle(firstFilterDot)
- if (!firstAverageDot) return
- const secondAverageDot = secondAverage.handle(firstAverageDot)
- if (!secondAverageDot) return
- const thirdAverageDot = thirdAverage.handle(secondAverageDot)
- if (!thirdAverageDot) return
- const fourthAverageDot = fourthAverage.handle(thirdAverageDot)
- if (!fourthAverageDot) return
- const fifthAverageDot = fifthAverage.handle(fourthAverageDot)
- if (!fifthAverageDot) return
- // const sixthAverageDot = sixthAverage.handle(fifthAverageDot)
- // if (!sixthAverageDot) return
- emitPoint(fifthAverageDot)
- }
- class LoseDot {
- constructor() {
- this.lastDot = null
- }
- handle(dot) {
- switch (dot.dotType) {
- case 'PEN_DOWN': {
- this.lastDot = dot
- return dot
- }
- case 'PEN_MOVE': {
- //两点之间距离
- const distance = Math.sqrt(Math.pow((dot.ab_x - this.lastDot.ab_x), 2) + Math.pow((dot.ab_y - this.lastDot.ab_y), 2))
- //距离小于 0.25
- if (distance > 0.25) {
- this.lastDot = dot
- return dot
- }
- return false
- }
- case 'PEN_UP': {
- this.lastDot = null
- return dot
- }
- default:
- break;
- }
- }
- }
- class Average {
- constructor() {
- this.points = []
- }
- handle(dot) {
- switch (dot.dotType) {
- case "PEN_DOWN":
- this.points.push(dot)
- return dot
- case "PEN_MOVE":
- this.points.push(dot)
- if (this.points.length === 3) {
- const _dot = this.threeAverage(...this.points)
- this.points.shift()
- return _dot
- } else {
- this.points.push(dot)
- const _dot = this.threeAverage(...this.points)
- this.points.shift()
- return _dot
- }
- case "PEN_UP":
- this.points = []
- return dot
- // // 无up
- // const up = this.points.some(i => i.dotType === 'PEN_MOVE')
- // if (!up) {
- // this.points.push({
- // ...dot,
- // dotType: 'PEN_MOVE'
- // })
- // }
- // this.points.shift()
- // this.points.push(dot)
- // this.points.push(dot)
- // const _dot = this.threeAverage(...this.points)
- // this.points = []
- // return _dot
- default:
- return false
- }
- }
- // 三点
- threeAverage(dot1, dot2, dot3) {
- const [x1, y1] = [(dot1.ab_x + dot2.ab_x) / 2, (dot1.ab_y + dot2.ab_y) / 2]
- const [x2, y2] = [(dot2.ab_x + dot3.ab_x) / 2, (dot2.ab_y + dot3.ab_y) / 2]
- dot2.ab_x = (x1 + x2) / 2
- dot2.ab_y = (y1 + y2) / 2
- return dot2
- }
- }
- const firstFilter = new LoseDot()
- const firstAverage = new Average()
- const secondAverage = new Average()
- const thirdAverage = new Average()
- const fourthAverage = new Average()
- const fifthAverage = new Average()
- const sixthAverage = new Average()
- // let threePointCenterList = []
- // function threePointToCenter(dot) {
- // if (dot.dotType === 'PEN_DOWN') {
- // threePointCenterList.push(dot)
- // emitPoint(dot)
- // }
- // if (dot.dotType === 'PEN_MOVE') {
- // const one = threePointCenterList[threePointCenterList.length - 1]
- // //两点之间距离
- // const _distance = Math.sqrt(Math.pow((dot.ab_x - one.ab_x), 2) + Math.pow((dot.ab_y - one.ab_y), 2))
- // //距离小于0.2 丢弃点
- // if (_distance > 0.5) {
- // threePointCenterList.push(dot)
- // }
- // if (threePointCenterList.length === 3) {
- // const one = threePointCenterList[0]
- // const two = threePointCenterList[1]
- // const three = threePointCenterList[2]
- // const [x1, y1] = [(one.ab_x + two.ab_x) / 2, (one.ab_y + two.ab_y) / 2]
- // const [x2, y2] = [(two.ab_x + three.ab_x) / 2, (two.ab_y + three.ab_y) / 2]
- // two.ab_x = (x1 + x2) / 2
- // two.ab_y = (y1 + y2) / 2
- // threePointCenterList = [one, two, three]
- // emitPoint(two)
- // threePointCenterList.shift()
- // }
- // }
- // if (dot.dotType === 'PEN_UP') {
- // threePointCenterList = []
- // emitPoint(dot)
- // }
- // }
- // Android start
- // const migrationDou = 0.5
- // let migrationDotMigration, migrationDotQueue, migrationDotQueue2, migrationDotQueue3
- // let lastDot = null
- // function mGoMigration1(dot) {
- // if (dot.dotType === 'PEN_DOWN') {
- // migrationDotMigration = []
- // migrationDotMigration.push(dot)
- // lastDot = dot
- // mGoMigration2(dot)
- // } else if (dot.dotType === 'PEN_MOVE' && dot.force > 1) {
- // migrationDotMigration.push(dot)
- // const dist12 = Math.sqrt(((dot.ab_x - lastDot.ab_x) * (dot.ab_x - lastDot.ab_x)) +
- // ((dot.ab_y - lastDot.ab_y) * (dot.ab_y - lastDot.ab_y)))
- // lastDot = dot
- // if (dist12 > migrationDou) {
- // mGoMigration2(dot)
- // }
- // }
- // // else if (dot.dotType === 'PEN_MOVE' && dot.force === 1) {
- // // mGoMigration2(dot)
- // // }
- // else if (dot.dotType === 'PEN_UP') {
- // lastDot = dot
- // mGoMigration2(dot)
- // migrationDotMigration = []
- // }
- // }
- // function mGoMigration2(dot) {
- // if (dot.dotType === 'PEN_DOWN') {
- // migrationDotQueue2 = []
- // migrationDotQueue2.push(dot)
- // } else if (dot.dotType === 'PEN_MOVE') {
- // migrationDotQueue2.push(dot)
- // if (migrationDotQueue2.length === 3) {
- // const dot1 = migrationDotQueue2[0]
- // const dot2 = migrationDotQueue2[1]
- // const dot3 = migrationDotQueue2[2]
- // const center1X = (dot1.ab_x + dot2.ab_x) / 2
- // const center1y = (dot1.ab_y + dot2.ab_y) / 2
- // const center2X = (dot3.ab_x + dot2.ab_x) / 2
- // const center2y = (dot3.ab_y + dot2.ab_y) / 2
- // dot2.ab_x = (center1X + center2X) / 2
- // dot2.ab_y = (center1y + center2y) / 2
- // threePointCenter2(dot1)
- // migrationDotQueue2.shift()
- // }
- // } else if (dot.dotType === 'PEN_UP') {
- // if (migrationDotQueue2 !== null && migrationDotQueue2.length > 0) {
- // migrationDotQueue2.map(_dot => {
- // threePointCenter2(_dot)
- // })
- // }
- // threePointCenter2(dot);
- // }
- // }
- // function threePointCenter2(dot) {
- // if (dot.dotType === 'PEN_DOWN') {
- // migrationDotQueue3 = []
- // migrationDotQueue3.push(dot)
- // } else if (dot.dotType === 'PEN_MOVE') {
- // migrationDotQueue3.push(dot)
- // if (migrationDotQueue3.length === 3) {
- // const dot1 = migrationDotQueue3[0]
- // const dot2 = migrationDotQueue3[1]
- // const dot3 = migrationDotQueue3[2]
- // dot2.ab_x = (dot1.ab_x, dot3.ab_x) / 2
- // dot2.ab_y = (dot1.ab_y, dot3.ab_y) / 2
- // threePointCenter(dot1)
- // migrationDotQueue3.shift()
- // }
- // } else if (dot.dotType === 'PEN_UP') {
- // if (migrationDotQueue3 !== null && migrationDotQueue3.length > 0) {
- // migrationDotQueue3.map(_dot => threePointCenter(_dot))
- // }
- // threePointCenter(dot)
- // }
- // }
- // function threePointCenter(dot) {
- // if (dot.dotType === 'PEN_DOWN') {
- // migrationDotQueue = []
- // migrationDotQueue.push(dot)
- // } else if (dot.dotType === 'PEN_MOVE') {
- // migrationDotQueue.push(dot)
- // if (migrationDotQueue.length === 3) {
- // const dot1 = migrationDotQueue[0]
- // const dot2 = migrationDotQueue[1]
- // const dot3 = migrationDotQueue[2]
- // const center1X = (dot1.ab_x + dot2.ab_x) / 2
- // const center1y = (dot1.ab_y + dot2.ab_y) / 2
- // const center2X = (dot3.ab_x + dot2.ab_x) / 2
- // const center2y = (dot3.ab_y + dot2.ab_y) / 2
- // dot2.ab_x = (center1X + center2X) / 2;
- // dot2.ab_y = (center1y + center2y) / 2;
- // emitPoint(dot1)
- // migrationDotQueue.shift()
- // }
- // } else if (dot.dotType === 'PEN_UP') {
- // if (migrationDotQueue !== null && migrationDotQueue.length > 0) {
- // migrationDotQueue.map(_dot => emitPoint(_dot))
- // }
- // emitPoint(dot)
- // }
- // }
- // Android end
- //向上层应用发点
- function emitPoint(dot) {
- // console.log(JSON.stringify(dot))
- event.emit('AddressDataChanged', dot);
- }
- module.exports = {
- splitData: splitData,
- changeOffset: changeOffset
- }
|