add codec optional extended point data encoding
This commit is contained in:
parent
f5d234da31
commit
39cc3db3d8
2 changed files with 31 additions and 3 deletions
|
|
@ -312,7 +312,7 @@ Polygon.prototype.encode = function(state) {
|
|||
|
||||
state.poly[this.id] = this;
|
||||
|
||||
return {
|
||||
let enc = {
|
||||
type: TYPE.POLY,
|
||||
id: this.id,
|
||||
array: encodePointArray(this.points, state, this.z),
|
||||
|
|
@ -322,6 +322,20 @@ Polygon.prototype.encode = function(state) {
|
|||
color: this.color,
|
||||
open: this.open
|
||||
};
|
||||
|
||||
// encode extended point info for tagged polys
|
||||
if (this._epk) {
|
||||
let epk = enc.epk = {};
|
||||
for (let key of this._epk) {
|
||||
let arr = epk[key] = [];
|
||||
let pts = this.points;
|
||||
for (let i=0, l=pts.length; i<l; i++) {
|
||||
if (pts[i][key]) arr.push(i, pts[i][key]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return enc;
|
||||
};
|
||||
|
||||
registerDecoder(TYPE.POLY, function(v, state) {
|
||||
|
|
@ -340,6 +354,18 @@ registerDecoder(TYPE.POLY, function(v, state) {
|
|||
poly.push(newPoint(array[vid++], array[vid++], array[vid++]));
|
||||
}
|
||||
|
||||
// decode extended point when present
|
||||
if (v.epk) {
|
||||
let pts = poly.points;
|
||||
for (let [key, arr] of Object.entries(v.epk)) {
|
||||
for (let i=0; i<arr.length; ) {
|
||||
let pos = arr[i++];
|
||||
let val = arr[i++];
|
||||
pts[pos][key] = val;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
state.poly[v.id] = poly;
|
||||
|
||||
poly.id = v.id;
|
||||
|
|
|
|||
|
|
@ -152,8 +152,8 @@ function offset_default(params) {
|
|||
// merge points marking point offset and skip
|
||||
let mid = p0.midPointTo(p1);
|
||||
let inc = p0.distTo2D(mid) / offset1;
|
||||
moved = p0.moved = p1.moved = inc;
|
||||
p1.skip = true;
|
||||
moved = p0.moved = p1.moved = inc.round(4);
|
||||
p1.skip = 1;
|
||||
p0.x = p1.x = mid.x;
|
||||
p0.y = p1.y = mid.y;
|
||||
}
|
||||
|
|
@ -168,6 +168,8 @@ function offset_default(params) {
|
|||
for (let rec of thin_test) {
|
||||
if (rec.moved) {
|
||||
let last_seg;
|
||||
// tag for codec extended point encoding
|
||||
rec.poly._epk = ["moved", "skip"];
|
||||
rec.poly.points = rec.points.filter((p,i) => {
|
||||
let keep = (last_seg !== p.segment || p.moved || p.skip);
|
||||
last_seg = p.segment;
|
||||
|
|
|
|||
Loading…
Reference in a new issue