diff --git a/web/app/sketcher/canvas.js b/web/app/sketcher/canvas.js index a314caa3..c991f7c4 100644 --- a/web/app/sketcher/canvas.js +++ b/web/app/sketcher/canvas.js @@ -327,17 +327,27 @@ TCAD.TWO.Viewer.prototype.mark = function(obj, style) { 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)); + if (layer == null || layer.readOnly) { + layer = null; + for (var i = 0; i < this.layers.length; i++) { + var l = this.layers[i]; + if (!l.readOnly) { + layer = l; + break; + } } - layer = this.layers[0]; + } + if (layer == null) { + layer = new TCAD.TWO.Layer("JustALayer", TCAD.TWO.Styles.DEFAULT); + this.layers.push(layer); } return layer; }; TCAD.TWO.Viewer.prototype.setActiveLayer = function(layer) { - this._activeLayer = layer; + if (!layer.readOnly) { + this._activeLayer = layer; + } }; TCAD.TWO.Viewer.prototype.deselectAll = function() { @@ -351,6 +361,7 @@ TCAD.TWO.Layer = function(name, style) { this.name = name; this.style = style; this.objects = []; + this.readOnly = false; }; TCAD.TWO.Viewer.prototype.fullHeavyUIRefresh = function() { diff --git a/web/app/sketcher/io.js b/web/app/sketcher/io.js index 4ee24428..7126ba30 100644 --- a/web/app/sketcher/io.js +++ b/web/app/sketcher/io.js @@ -47,7 +47,6 @@ TCAD.IO.prototype._loadSketch = function(sketch) { 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); @@ -107,14 +106,15 @@ TCAD.IO.prototype._loadSketch = function(sketch) { if (sketch.constraints !== undefined) { for (var i = 0; i < sketch.constraints.length; ++i) { - var c = this.parseConstr(sketch.constraints[i], index); - this.viewer.parametricManager._add(c); + try { + var c = this.parseConstr(sketch.constraints[i], index); + this.viewer.parametricManager._add(c); + } catch (err) { + console.error(err); + } } this.viewer.parametricManager.notify(); } - if (activeLayerCandidate < this.viewer.layers.length) { - this.viewer.setActiveLayer(this.viewer.layers[activeLayerCandidate]); - } }; TCAD.IO.prototype.cleanUpData = function() { @@ -144,7 +144,7 @@ TCAD.IO.prototype._serializeSketch = function() { var layers = toSave[t]; for (var l = 0; l < layers.length; ++l) { var layer = layers[l]; - var isBoundary = layer.name === ''; + if (layer.readOnly) continue; var toLayer = {name : layer.name, data : []}; sketch.layers.push(toLayer); for (var i = 0; i < layer.objects.length; ++i) { @@ -188,7 +188,8 @@ TCAD.IO.prototype._serializeSketch = function() { TCAD.IO.prototype.updateBoundary = function (boundary) { if (this.boundaryLayer === undefined) { this.boundaryLayer = new TCAD.TWO.Layer("bounds", TCAD.TWO.Styles.BOUNDS); - this.viewer.layers.push(this.boundaryLayer); + this.boundaryLayer.readOnly = true; + this.viewer.layers.splice(0, 0, this.boundaryLayer); } var edges = []; var bbox = [Number.MAX_VALUE, Number.MAX_VALUE, - Number.MAX_VALUE, - Number.MAX_VALUE]; @@ -260,6 +261,39 @@ TCAD.IO.prototype.serializeConstr = function (c) { TCAD.IO.prototype.svgExport = function (c) { + + var toExport = [this.viewer.layers]; + for (var t = 0; t < toExport.length; ++t) { + var layers = toExport[t]; + for (var l = 0; l < layers.length; ++l) { + var layer = layers[l]; + if (layer.readOnly) continue; + var toLayer = {name : layer.name, data : []}; + 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.EndPoint') { + to.location = point(obj); + } 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; + } + } + } + } + + // // //