UNPKG

igniteui-react-core

Version:
374 lines (373 loc) 12.9 kB
/* THIS INFRAGISTICS ULTIMATE SOFTWARE LICENSE AGREEMENT ("AGREEMENT") LOCATED HERE: https://www.infragistics.com/legal/license/igultimate-la https://www.infragistics.com/legal/license/igultimate-eula GOVERNS THE LICENSING, INSTALLATION AND USE OF INFRAGISTICS SOFTWARE. BY DOWNLOADING AND/OR INSTALLING AND USING INFRAGISTICS SOFTWARE: you are indicating that you have read and understand this Agreement, and agree to be legally bound by it on behalf of the yourself and your company. */ import { DependencyObject } from "./DependencyObject"; import { TriangulatorContext } from "./TriangulatorContext"; import { Number_$type, Point_$type, fromEnum, runOn, markType } from "./type"; import { List$1 } from "./List$1"; import { Triangle } from "./Triangle"; import { HashSet$1 } from "./HashSet$1"; import { LinkedList$1 } from "./LinkedList$1"; import { HalfEdgeSet } from "./HalfEdgeSet"; import { PointTester } from "./PointTester"; import { PointComparer } from "./PointComparer"; import { TriangulationStatusEventArgs } from "./TriangulationStatusEventArgs"; import { HalfEdge } from "./HalfEdge"; import { truncate, isNaN_, isInfinity } from "./number"; /** * @hidden */ export let Triangulator = /*@__PURE__*/ (() => { class Triangulator extends DependencyObject { constructor(a, b, c) { super(); this.o = 0; this.l = null; this.m = null; this.k = null; this.p = 0; this.triangulationStatusChanged = null; this.o = a; this.l = b; this.m = c; } y() { { this.v(); if (this.k != null) { this.k.c = true; } this.u(); } } x() { { this.v(); if (this.k != null) { this.k.c = false; } this.u(); } } v() { let a = this.o; let b = this.l; let c = this.m; let d = new List$1(Triangle.$, 0); let e = ((() => { let $ret = new List$1(Number_$type, 0); $ret.h = a; return $ret; })()); let f = new HashSet$1(Point_$type, 2, new PointComparer()); for (let g = 0; g < a; ++g) { let h = b.item(g), i = c.item(g); if (isNaN_(h) || isNaN_(i) || isInfinity(h) || isInfinity(i)) { continue; } let j = { $type: Point_$type, x: h, y: i }; if (f.contains(j)) { continue; } f.add_1(j); e.add(g); } a = e.count; if (a >= 3) { let k = (l, m) => { if (b.item(l) < b.item(m)) { return -1; } else if (b.item(l) > b.item(m)) { return 1; } if (c.item(l) < c.item(m)) { return -1; } else if (c.item(l) > c.item(m)) { return 1; } return 0; }; e.aa(k); let l = b.item(e._inner[0]); let m = b.item(e._inner[a - 1]); let n = c.item(e._inner[0]); let o = n; for (let p = 1; p < a; p++) { let q = c.item(e._inner[p]); if (isNaN_(q)) { continue; } n = Math.min(n, q); o = Math.max(o, q); } let r = m - l; let s = o - n; let t = Math.max(r, s); let u = (m + l) / 2; let v = (o + n) / 2; let w = { $type: Point_$type, x: u - 20 * t, y: v - t }; let x = { $type: Point_$type, x: u, y: v + 20 * t }; let y = { $type: Point_$type, x: u + 20 * t, y: v - t }; let z = new LinkedList$1(Triangle.$); let aa = new LinkedList$1(Triangle.$); let ab = new HalfEdgeSet(); let ac = new PointTester(); z.e(((() => { let $ret = new Triangle(); $ret.v1 = a; $ret.v2 = a + 1; $ret.v3 = a + 2; return $ret; })())); let ad = new TriangulatorContext(); ad.j = a; ad.n = w; ad.o = x; ad.p = y; ad.f = aa; ad.a = ab; ad.h = e; ad.b = ac; ad.i = d; ad.g = z; ad.d = b; ad.e = c; let ae = 1; if (a > 3000) { ae = 20; } ad.m = truncate(Math.ceil(a / ae)); ad.l = 0; ad.k = ad.m; this.p = 0; this.t(); this.k = ad; } } t() { this.s(); } s() { if (this.triangulationStatusChanged != null) { this.triangulationStatusChanged(this, new TriangulationStatusEventArgs(this.p)); } } n() { if (this.k == null) { return null; } return this.k.i; } w() { { if (this.k == null) { return; } let a = this.k; let b = this.k.j; let c = this.k.d; let d = this.k.e; let e = this.k.h; let f = this.k.n; let g = this.k.o; let h = this.k.p; let i = this.k.i; let j = this.k.g; let k = this.k.f; let l = this.k.b; let m = this.k.a; let n = this.k.l; let o = this.k.k; let p; let q; let r; let s; let t; let u; let v; let w; let x; let y; let z; let aa; for (let ab = n; ab < o; ++ab) { m.e(); if (ab < b) { p = c.item(e._inner[ab]); q = d.item(e._inner[ab]); } else if (ab == b) { p = f.x; q = f.y; } else if (ab == b + 1) { p = g.x; q = g.y; } else { p = h.x; q = h.y; } let ac = null; for (let ad = j.c; ad != null; ad = ac) { ac = ad.a; aa = ad.c; r = aa.v1; u = aa.v2; x = aa.v3; if (r < b) { s = c.item(e._inner[r]); t = d.item(e._inner[r]); } else if (r == b) { s = f.x; t = f.y; } else if (r == b + 1) { s = g.x; t = g.y; } else { s = h.x; t = h.y; } if (u < b) { v = c.item(e._inner[u]); w = d.item(e._inner[u]); } else if (u == b) { v = f.x; w = f.y; } else if (u == b + 1) { v = g.x; w = g.y; } else { v = h.x; w = h.y; } if (x < b) { y = c.item(e._inner[x]); z = d.item(e._inner[x]); } else if (x == b) { y = f.x; z = f.y; } else if (x == b + 1) { y = g.x; z = g.y; } else { y = h.x; z = h.y; } l.c(p, q, s, t, v, w, y, z); if (l.a) { k.f(aa); j.h(ad); } if (l.b) { let ae; ae = new HalfEdge(r, u); if (m.a(ae)) { m.f(ae); } else { m.d(ae); } ae = new HalfEdge(u, x); if (m.a(ae)) { m.f(ae); } else { m.d(ae); } ae = new HalfEdge(x, r); if (m.a(ae)) { m.f(ae); } else { m.d(ae); } j.h(ad); } } for (let af of fromEnum(m)) { let ag = new Triangle(); ag.v1 = af.a; ag.v2 = af.b; ag.v3 = ab; j.f(ag); } } if (o == b) { for (let ah = k.c; ah != null; ah = ah.a) { aa = ah.c; if (aa.v1 < b && aa.v2 < b && aa.v3 < b) { i.add(((() => { let $ret = new Triangle(); $ret.v1 = e._inner[aa.v1]; $ret.v2 = e._inner[aa.v2]; $ret.v3 = e._inner[aa.v3]; return $ret; })())); } } for (let ai = j.c; ai != null; ai = ai.a) { aa = ai.c; if (aa.v1 < b && aa.v2 < b && aa.v3 < b) { i.add(((() => { let $ret = new Triangle(); $ret.v1 = e._inner[aa.v1]; $ret.v2 = e._inner[aa.v2]; $ret.v3 = e._inner[aa.v3]; return $ret; })())); } } this.p = 100; this.t(); } else { n = o; o += a.m; if (o > b) { o = b; } a.l = n; a.k = o; this.p += truncate(Math.floor(100 / 20)); this.t(); this.u(); } } } r() { { this.k = null; } } u() { { if (this.k != null && this.k.c) { window.setTimeout(runOn(this, this.w), 0); } else { this.w(); } } } get q() { return this.p; } } Triangulator.$t = /*@__PURE__*/ markType(Triangulator, 'Triangulator', DependencyObject.$); return Triangulator; })();