mirror of
https://github.com/xibyte/jsketcher
synced 2025-12-09 01:44:19 +01:00
fix bugs
This commit is contained in:
parent
a3c8b79153
commit
79b16c1283
6 changed files with 92 additions and 64 deletions
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
};
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue