first approach to saving

This commit is contained in:
Val Erastov 2014-10-28 21:58:39 -07:00
parent d49f72a3ed
commit 3ef1f743c2
2 changed files with 172 additions and 27 deletions

View file

@ -7,7 +7,7 @@ TCAD.App2D = function() {
var layer = new TCAD.TWO.Layer("test", TCAD.TWO.Styles.DEFAULT);
this.viewer.layers.push(layer);
var sketchId = "TCAD.projects." + window.location.hash.substring(1);
var sketchId = this.getSketchId();
var sketchData = localStorage.getItem(sketchId);
var boundary = null;
@ -19,13 +19,21 @@ TCAD.App2D = function() {
// layer.objects.push(poly);
} else {
var sketch = JSON.parse(sketchData);
boundary = sketch.boundary;
var bbox = this.makePolygon(boundary.shell, layer);
for (var i = 0; i < sketch.boundary.holes.length; ++i ) {
this.makePolygon(sketch.boundary.holes[i], layer);
}
this.viewer.showBounds(bbox[0], bbox[1], bbox[2], bbox[3])
}
if (sketch != null) {
try {
this.loadSketch(sketch);
} catch(e) {
if (typeof(e) === String) {
console.error(e);
} else {
throw e;
}
}
}
this.viewer.repaint();
var app = this;
@ -56,20 +64,39 @@ TCAD.App2D = function() {
},
save : function() {
var sketch = {boundary : boundary};
sketch.segments = [];
var params = {};
for (var i = 0; i < layer.objects.length; ++i) {
var obj = layer.objects[i];
if (obj._class === 'TCAD.TWO.Segment') {
params[obj.a._x]
sketch.segments.push([obj.a.x, obj.a.y, obj.b.x, obj.b.y]);
var sketch = {};
sketch.boundary = boundary;
sketch.layers = [];
sketch.index = {};
function point(p) {
return [ p.id, [p._x.id, p.x], [p._y.id, p.y] ];
}
for (var l = 0; l < app.viewer.layers.length; ++l) {
var layer = app.viewer.layers[l];
var toLayer = [];
sketch.layers.push(toLayer);
for (var i = 0; i < layer.objects.length; ++i) {
var obj = layer.objects[i];
var to = {id: obj.id, _class: obj._class};
toLayer.push(to);
if (obj._class === 'TCAD.TWO.Segment') {
to.points = [point(obj.a), point(obj.b)];
} else if (obj._class === 'TCAD.TWO.Arc') {
} else if (obj._class === 'TCAD.TWO.Circle') {
}
}
}
sketch.constraints = {}
var constrs = sketch.constraints = [];
var sys = app.viewer.parametricManager.system;
for (var i = 0; i < sys.length; ++i) {
constrs.push(app.serializeConstr(sys[i]));
}
var sketchData = JSON.stringify(sketch);
console.log(sketchData);
var sketchId = app.getSketchId();
localStorage.setItem(app.getSketchId(), sketchData);
},
@ -163,6 +190,108 @@ TCAD.App2D = function() {
};
TCAD.App2D.prototype.loadSketch = function(sketch) {
var boundary = sketch.boundary;
if (boundary != null) {
var bbox = this.makePolygon(boundary.shell, layer);
for (var i = 0; i < sketch.boundary.holes.length; ++i ) {
this.makePolygon(sketch.boundary.holes[i], layer);
}
this.viewer.showBounds(bbox[0], bbox[1], bbox[2], bbox[3])
}
var index = {};
function createEndPoint(p) {
var id = p[0];
var ep = new TCAD.TWO.EndPoint(p[1][1], p[2][1]);
index[p[1][0]] = ep._x;
index[p[2][0]] = ep._y;
index[id] = ep;
return ep;
}
for (var l = 0; l < sketch.layers.length; ++l) {
var layer = new TCAD.TWO.Layer("layer_" + l, TCAD.TWO.Styles.DEFAULT);
this.viewer.layers.push(layer);
for (var i = 0; i < sketch.layers[l].length; ++i) {
var obj = sketch.layers[l][i];
if (obj._class === 'TCAD.TWO.Segment') {
var a = createEndPoint(obj.points[0]);
var b = createEndPoint(obj.points[1]);
var line = new TCAD.TWO.Segment(a, b);
layer.objects.push(line);
line.layer = layer;
index[obj.id] = line;
} else if (obj._class === 'TCAD.TWO.Arc') {
} else if (obj._class === 'TCAD.TWO.Circle') {
}
}
}
for (var i = 0; i < sketch.constraints.length; ++i) {
var c = this.parseConstr(sketch.constraints[i], index);
this.viewer.parametricManager.system.push(c);
}
};
TCAD.App2D.prototype.parseConstr = function (c, index) {
function find(id) {
var p = index[id];
if (!p) throw "CAN'T READ SKETCH";
return p;
}
var name = c[0];
var ps = c[1];
switch (name) {
case "equal":
return new TCAD.TWO.Constraints.Equal(find(ps[0]), find(ps[1]));
case "equalsTo":
return new TCAD.TWO.Constraints.EqualsTo(find(ps[0]), ps[1]);
case "perpendicular":
return new TCAD.TWO.Constraints.Perpendicular(find(ps[0]), find(ps[1]));
case "parallel":
return new TCAD.TWO.Constraints.Parallel(find(ps[0]), find(ps[1]));
case "P2LDistance":
return new TCAD.TWO.Constraints.P2LDistance(find(ps[0]), find(ps[1]), ps[2]);
case "P2LDistanceV":
return new TCAD.TWO.Constraints.P2LDistanceV(find(ps[0]), find(ps[1]), find(ps[2]));
case "P2PDistance":
return new TCAD.TWO.Constraints.P2PDistance(find(ps[0]), find(ps[1]), ps[2]);
case "P2PDistanceV":
return new TCAD.TWO.Constraints.P2PDistanceV(find(ps[0]), find(ps[1]), find(ps[2]));
}
};
TCAD.App2D.prototype.serializeConstr = function (c) {
switch (c.NAME) {
case "equal":
return ['equal', [c.p1.id, c.p2.id]];
case "equalsTo":
return ['equalsTo', [c.p.id, c.v]];
case "perpendicular":
return ['perpendicular', [c.l1.id, c.l2.id]];
case "parallel":
return ['parallel', [c.l1.id, c.l2.id]];
case "P2LDistance":
return ['P2LDistance', [c.p.id, c.l.id, c.d]];
case "P2LDistanceV":
return ['P2LDistanceV', [c.p.id, c.l.id, c.d.get()]];
case "P2PDistance":
return ['P2PDistance', [c.p1.id, c.p2.id, c.d]];
case "P2PDistanceV":
return ['P2PDistanceV', [c.p1.id, c.p2.id, c.d.get()]];
}
};
TCAD.App2D.prototype.getSketchId = function() {
var id = window.location.hash.substring(1);
if (!!id) {
id = "untitled";
}
return "TCAD.projects." + id;
};
TCAD.App2D.prototype.makePolygon = function(points, layer) {
var n = points.length;
@ -179,4 +308,4 @@ TCAD.App2D.prototype.makePolygon = function(points, layer) {
bounds[3] = Math.max(bounds[3], k*points[q].y);
}
return bounds;
};
};

View file

@ -274,8 +274,10 @@ TCAD.TWO.Constraints.Equal = function(p1, p2) {
this.p2 = p2;
};
TCAD.TWO.Constraints.Equal.prototype.NAME = 'equal';
TCAD.TWO.Constraints.Equal.prototype.getSolveData = function() {
return ['equal', [this.p1, this.p2], []];
return [this.NAME, [this.p1, this.p2], []];
};
TCAD.TWO.Constraints.EqualsTo = function(p, v) {
@ -283,8 +285,10 @@ TCAD.TWO.Constraints.EqualsTo = function(p, v) {
this.v = v;
};
TCAD.TWO.Constraints.EqualsTo.prototype.NAME = 'equalsTo';
TCAD.TWO.Constraints.EqualsTo.prototype.getSolveData = function() {
return ['equalsTo', [this.p], [this.v]];
return [this.NAME, [this.p], [this.v]];
};
TCAD.TWO.Constraints.Parallel = function(l1, l2) {
@ -292,11 +296,13 @@ TCAD.TWO.Constraints.Parallel = function(l1, l2) {
this.l2 = l2;
};
TCAD.TWO.Constraints.Parallel.prototype.NAME = 'parallel';
TCAD.TWO.Constraints.Parallel.prototype.getSolveData = function() {
var params = [];
this.l1.collectParams(params);
this.l2.collectParams(params);
return ['parallel', params, []];
return [this.NAME, params, []];
};
TCAD.TWO.Constraints.Perpendicular = function(l1, l2) {
@ -304,11 +310,13 @@ TCAD.TWO.Constraints.Perpendicular = function(l1, l2) {
this.l2 = l2;
};
TCAD.TWO.Constraints.Perpendicular.prototype.NAME = 'perpendicular';
TCAD.TWO.Constraints.Perpendicular.prototype.getSolveData = function() {
var params = [];
this.l1.collectParams(params);
this.l2.collectParams(params);
return ['perpendicular', params, []];
return [this.NAME, params, []];
};
TCAD.TWO.Constraints.P2LDistance = function(p, l, d) {
@ -317,11 +325,13 @@ TCAD.TWO.Constraints.P2LDistance = function(p, l, d) {
this.d = d;
};
TCAD.TWO.Constraints.P2LDistance.prototype.NAME = 'P2LDistance';
TCAD.TWO.Constraints.P2LDistance.prototype.getSolveData = function() {
var params = [];
this.p.collectParams(params);
this.l.collectParams(params);
return ['P2LDistance', params, [this.d]];
return [this.NAME, params, [this.d]];
};
@ -331,12 +341,14 @@ TCAD.TWO.Constraints.P2LDistanceV = function(p, l, d) {
this.d = d;
};
TCAD.TWO.Constraints.P2LDistanceV.prototype.NAME = 'P2LDistanceV';
TCAD.TWO.Constraints.P2LDistanceV.prototype.getSolveData = function() {
var params = [];
this.p.collectParams(params);
this.l.collectParams(params);
params.push(this.d);
return ['P2LDistanceV', params];
return [this.NAME, params];
};
@ -346,11 +358,13 @@ TCAD.TWO.Constraints.P2PDistance = function(p1, p2, d) {
this.d = d;
};
TCAD.TWO.Constraints.P2PDistance.prototype.NAME = 'P2PDistance';
TCAD.TWO.Constraints.P2PDistance.prototype.getSolveData = function() {
var params = [];
this.p1.collectParams(params);
this.p2.collectParams(params);
return ['P2PDistance', params, [this.d]];
return [this.NAME, params, [this.d]];
};
TCAD.TWO.Constraints.P2PDistanceV = function(p1, p2, d) {
@ -359,10 +373,12 @@ TCAD.TWO.Constraints.P2PDistanceV = function(p1, p2, d) {
this.d = d;
};
TCAD.TWO.Constraints.P2PDistanceV.prototype.NAME = 'P2PDistanceV';
TCAD.TWO.Constraints.P2PDistanceV.prototype.getSolveData = function() {
var params = [];
this.p1.collectParams(params);
this.p2.collectParams(params);
params.push(this.d);
return ['P2PDistanceV', params];
return [this.NAME, params];
};