This commit is contained in:
Val Erastov 2015-02-24 23:29:51 -08:00
parent a3c8b79153
commit 79b16c1283
6 changed files with 92 additions and 64 deletions

View file

@ -74,9 +74,12 @@ TCAD.TWO.Viewer = function(canvas) {
window.addEventListener( 'resize', onWindowResize, false );
this.ctx = this.canvas.getContext("2d");
this._activeLayer = null;
this.layers = [];
this._serviceLayers = [];
this._workspace = [this.layers, this._serviceLayers];
this.dimLayer = new TCAD.TWO.Layer("_dim", TCAD.TWO.Styles.DIM);
this.dimLayers = [this.dimLayer];
this._workspace = [this.dimLayers, this.layers, this._serviceLayers];
this.toolManager = new TCAD.TWO.ToolManager(this, new TCAD.TWO.PanTool(this));
this.parametricManager = new TCAD.TWO.ParametricManager(this);
@ -87,8 +90,6 @@ TCAD.TWO.Viewer = function(canvas) {
this.snapped = [];
this._setupServiceLayer();
this.dimLayer = new TCAD.TWO.Layer("_dim", TCAD.TWO.Styles.DIM);
this.layers.push(this.dimLayer);
this.refresh();
};
@ -317,6 +318,21 @@ TCAD.TWO.Viewer.prototype.mark = function(obj, style) {
this.selected.push(obj);
};
TCAD.TWO.Viewer.prototype.activeLayer = function() {
var layer = this._activeLayer;
if (layer == null) {
if (this.layers.length == 0) {
this.layers.push(new TCAD.TWO.Layer("JustALayer", TCAD.TWO.Styles.DEFAULT));
}
layer = this.layers[0];
}
return layer;
};
TCAD.TWO.Viewer.prototype.setActiveLayer = function(layer) {
this._activeLayer = layer;
};
TCAD.TWO.Viewer.prototype.deselectAll = function() {
for (var i = 0; i < this.selected.length; i++) {
this.selected[i].marked = null;

View file

@ -6,7 +6,6 @@ TCAD.App2D = function() {
this.viewer = new TCAD.TWO.Viewer(document.getElementById('viewer'));
this.boundaryLayer = new TCAD.TWO.Layer("default", TCAD.TWO.Styles.DEFAULT);
this.viewer.layers.push(this.boundaryLayer);
var app = this;
this.actions = {};
@ -17,26 +16,26 @@ TCAD.App2D = function() {
this.registerAction = function(id, desc, action) {
app.actions[id] = {id: id, desc: desc, action: action};
app._actionsOrder.push(id);
}
};
this.registerAction('addPoint', "Add Point", function () {
app.viewer.toolManager.takeControl(new TCAD.TWO.AddPointTool(app.viewer, layer));
app.viewer.toolManager.takeControl(new TCAD.TWO.AddPointTool(app.viewer));
});
this.registerAction('addSegment', "Add Segment", function () {
app.viewer.toolManager.takeControl(new TCAD.TWO.AddSegmentTool(app.viewer, layer, false));
app.viewer.toolManager.takeControl(new TCAD.TWO.AddSegmentTool(app.viewer, false));
});
this.registerAction('addMultiSegment', "Add Multi Segment", function () {
app.viewer.toolManager.takeControl(new TCAD.TWO.AddSegmentTool(app.viewer, layer, true));
app.viewer.toolManager.takeControl(new TCAD.TWO.AddSegmentTool(app.viewer, true));
});
this.registerAction('addArc', "Add Arc", function () {
app.viewer.toolManager.takeControl(new TCAD.TWO.AddArcTool(app.viewer, layer));
app.viewer.toolManager.takeControl(new TCAD.TWO.AddArcTool(app.viewer));
});
this.registerAction('addCircle', "Add Circle", function () {
app.viewer.toolManager.takeControl(new TCAD.TWO.EditCircleTool(app.viewer, layer));
app.viewer.toolManager.takeControl(new TCAD.TWO.EditCircleTool(app.viewer));
});
this.registerAction('pan', "Pan", function () {
@ -61,28 +60,32 @@ TCAD.App2D = function() {
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 isBoundary = layer.name === '';
var toLayer = {name : layer.name, data : []};
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};
if (obj.aux) to.aux = obj.aux;
if (obj.edge !== undefined) to.edge = obj.edge;
toLayer.data.push(to);
if (obj._class === 'TCAD.TWO.Segment') {
to.points = [point(obj.a), point(obj.b)];
} else if (obj._class === 'TCAD.TWO.Arc') {
to.points = [point(obj.a), point(obj.b), point(obj.c)];
} else if (obj._class === 'TCAD.TWO.Circle') {
to.c = point(obj.c);
to.r = obj.r.get();
} else if (obj._class === 'TCAD.TWO.Dimension' || obj._class === 'TCAD.TWO.HDimension' || obj._class === 'TCAD.TWO.VDimension') {
to.a = obj.a.id;
to.b = obj.b.id;
to.flip = obj.flip;
var toSave = [app.viewer.dimLayers, app.viewer.layers]
for (var t = 0; t < toSave.length; ++t) {
var layers = toSave[t];
for (var l = 0; l < layers.length; ++l) {
var layer = layers[l];
var isBoundary = layer.name === '';
var toLayer = {name : layer.name, data : []};
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};
if (obj.aux) to.aux = obj.aux;
if (obj.edge !== undefined) to.edge = obj.edge;
toLayer.data.push(to);
if (obj._class === 'TCAD.TWO.Segment') {
to.points = [point(obj.a), point(obj.b)];
} else if (obj._class === 'TCAD.TWO.Arc') {
to.points = [point(obj.a), point(obj.b), point(obj.c)];
} else if (obj._class === 'TCAD.TWO.Circle') {
to.c = point(obj.c);
to.r = obj.r.get();
} else if (obj._class === 'TCAD.TWO.Dimension' || obj._class === 'TCAD.TWO.HDimension' || obj._class === 'TCAD.TWO.VDimension') {
to.a = obj.a.id;
to.b = obj.b.id;
to.flip = obj.flip;
}
}
}
}
@ -209,19 +212,23 @@ TCAD.App2D.prototype.loadSketch = function(sketch) {
var layerIdGen = 0;
function getLayer(viewer, name) {
for (var i = 0; i < viewer.layers.length; ++i) {
if (name === viewer.layers[i].name) {
return viewer.layers[i];
}
}
if (name === undefined) {
name = "layer_" + layerIdGen++;
} else {
if (name === viewer.dimLayer.name) {
return viewer.dimLayer;
}
for (var i = 0; i < viewer.layers.length; ++i) {
if (name === viewer.layers[i].name) {
return viewer.layers[i];
}
}
}
var layer = new TCAD.TWO.Layer(name, TCAD.TWO.Styles.DEFAULT);
viewer.layers.push(layer);
return layer;
}
var activeLayerCandidate = this.viewer.layers.length;
if (sketch.layers !== undefined) {
for (var l = 0; l < sketch.layers.length; ++l) {
var layer = getLayer(this.viewer, sketch.layers[l].name);
@ -264,17 +271,14 @@ TCAD.App2D.prototype.loadSketch = function(sketch) {
}
}
}
for (l = 0; l < this.viewer.layers.length; ++l) {
layer = this.viewer.layers[l];
for (i = 0; i < layer.objects.length; ++i) {
obj = layer.objects[i];
if (obj._class === 'TCAD.TWO.Dimension' || obj._class === 'TCAD.TWO.HDimension' || obj._class === 'TCAD.TWO.VDimension') {
obj.a = index[obj.a];
obj.b = index[obj.b];
}
}
}
for (i = 0; i < this.viewer.dimLayer.objects.length; ++i) {
obj = this.viewer.dimLayer.objects[i];
//if (obj._class === 'TCAD.TWO.Dimension' || obj._class === 'TCAD.TWO.HDimension' || obj._class === 'TCAD.TWO.VDimension') {
obj.a = index[obj.a];
obj.b = index[obj.b];
//}
}
if (sketch.boundary !== undefined && sketch.boundary != null) {
this.updateBoundary(sketch.boundary);
@ -287,6 +291,9 @@ TCAD.App2D.prototype.loadSketch = function(sketch) {
}
this.viewer.parametricManager.notify();
}
if (activeLayerCandidate < this.viewer.layers.length) {
this.viewer.setActiveLayer(this.viewer.layers[activeLayerCandidate]);
}
};
TCAD.App2D.prototype.updateBoundary = function (boundary) {

View file

@ -53,6 +53,14 @@ TCAD.TWO.ParametricManager.prototype._add = function(constr) {
break;
}
subSystem.constraints.push(constr);
this.checkRedundancy(subSystem, constr);
};
TCAD.TWO.ParametricManager.prototype.checkRedundancy = function (subSystem, constr) {
var solver = this.prepareForSubSystem([], subSystem);
if (TCAD.parametric.diagnose(solver.system).conflict) {
alert("Most likely this "+constr.NAME + "." + constr.id +" constraint is CONFLICTING!")
}
};
TCAD.TWO.ParametricManager.prototype.refresh = function() {
@ -79,7 +87,7 @@ TCAD.TWO.ParametricManager.prototype.remove = function(constr) {
for (var i = 0; i < sub.constraints.length; ++i) {
var p = sub.constraints[i];
if (p === constr) {
sub.constraints(i, 1);
sub.constraints.splice(i, 1);
if (p.NAME === 'coi') {
this.unlinkObjects(p.a, p.b);
}

View file

@ -71,9 +71,8 @@ TCAD.TWO.Arc.prototype.stabilize = function(viewer) {
viewer.parametricManager._add(new TCAD.TWO.Constraints.P2PDistanceV(this.a, this.c, this.r));
};
TCAD.TWO.AddArcTool = function(viewer, layer) {
TCAD.TWO.AddArcTool = function(viewer) {
this.viewer = viewer;
this.layer = layer;
this.arc = null;
this.point = null;
this._v = new TCAD.Vector(0, 0, 0);
@ -120,7 +119,7 @@ TCAD.TWO.AddArcTool.prototype.mouseup = function(e) {
new TCAD.TWO.EndPoint(p.x, p.y)
);
this.point = this.arc.a;
this.layer.objects.push(this.arc);
this.viewer.activeLayer().objects.push(this.arc);
this.viewer.refresh();
} else if (this.point.id === this.arc.a.id) {
this.point = this.arc.b;

View file

@ -41,9 +41,8 @@ TCAD.TWO.Circle.prototype.getDefaultTool = function(viewer) {
};
TCAD.TWO.EditCircleTool = function(viewer, layer) {
TCAD.TWO.EditCircleTool = function(viewer) {
this.viewer = viewer;
this.layer = layer;
this.circle = null;
};
@ -76,7 +75,7 @@ TCAD.TWO.EditCircleTool.prototype.mouseup = function(e) {
this.circle = new TCAD.TWO.Circle(
new TCAD.TWO.EndPoint(p.x, p.y)
);
this.layer.objects.push(this.circle);
this.viewer.activeLayer().objects.push(this.circle);
this.viewer.refresh();
} else {
this.solveRequest(false);

View file

@ -1,7 +1,6 @@
TCAD.TWO.AddSegmentTool = function(viewer, layer, multi) {
TCAD.TWO.AddSegmentTool = function(viewer, multi) {
this.viewer = viewer;
this.layer = layer;
this.line = null;
this.multi = multi;
};
@ -38,7 +37,7 @@ TCAD.TWO.AddSegmentTool.prototype.mouseup = function(e) {
this.viewer.cleanSnap();
needSnap = true;
}
this.line = this.viewer.addSegment(a.x, a.y, b.x, b.y, this.layer);
this.line = this.viewer.addSegment(a.x, a.y, b.x, b.y, this.viewer.activeLayer());
if (needSnap) {
this.viewer.parametricManager.linkObjects([this.line.a, a]);
}
@ -54,7 +53,7 @@ TCAD.TWO.AddSegmentTool.prototype.mouseup = function(e) {
}
if (this.multi) {
var b = this.line.b;
this.line = this.viewer.addSegment(b.x, b.y, b.x, b.y, this.layer);
this.line = this.viewer.addSegment(b.x, b.y, b.x, b.y, this.viewer.activeLayer());
this.viewer.parametricManager.linkObjects([this.line.a, b]);
} else {
this.line = null;
@ -77,9 +76,8 @@ TCAD.TWO.AddSegmentTool.prototype.keypress = function(e) {};
TCAD.TWO.AddSegmentTool.prototype.keyup = function(e) {};
TCAD.TWO.AddPointTool = function(viewer, layer) {
TCAD.TWO.AddPointTool = function(viewer) {
this.viewer = viewer;
this.layer = layer;
};
TCAD.TWO.AddPointTool.prototype.mousemove = function(e) {
@ -94,8 +92,9 @@ TCAD.TWO.AddPointTool.prototype.mousedown = function(e) {
TCAD.TWO.AddPointTool.prototype.mouseup = function(e) {
var a = this.viewer.screenToModel(e);
var p = new TCAD.TWO.EndPoint(a.x, a.y);
this.layer.objects.push(p);
p.layer = this.layer;
var layer = this.viewer.activeLayer();
layer.objects.push(p);
p.layer = layer;
this.viewer.refresh();
};