diff --git a/web/app/3d/main.js b/web/app/3d/main.js index 4490f05e..3b6244c9 100644 --- a/web/app/3d/main.js +++ b/web/app/3d/main.js @@ -298,26 +298,3 @@ TCAD.App.prototype.save = function() { } }; - -TCAD.Bus = function() { - this.listeners = {}; -}; - -TCAD.Bus.prototype.subscribe = function(event, callback) { - var listenerList = this.listeners[event]; - if (listenerList === undefined) { - listenerList = []; - this.listeners[event] = listenerList; - } - listenerList.push(callback); -}; - -TCAD.Bus.prototype.notify = function(event, data) { - var listenerList = this.listeners[event]; - if (listenerList !== undefined) { - for (var i = 0; i < listenerList.length; i++) { - listenerList[i](data); - } - } - -}; diff --git a/web/app/app-init.js b/web/app/app-init.js index 3d78215c..1304047b 100644 --- a/web/app/app-init.js +++ b/web/app/app-init.js @@ -2,6 +2,16 @@ function start() { var app = new TCAD.App2D(); app.loadFromLocalStorage(); app.fit(); + + function addLayer(name, style) { + if (app.viewer.findLayerByName(name) === null) { + app.viewer.layers.push(new TCAD.TWO.Layer(name, style)); + } + } + + addLayer("sketch", TCAD.TWO.Styles.DEFAULT); + addLayer("_construction_", TCAD.TWO.Styles.CONSTRUCTION); + var actionsWin = new TCAD.ui.Window($('#actions')); TCAD.ui.bindOpening( $('#showActions'), actionsWin ); @@ -68,6 +78,27 @@ function start() { }); app.viewer.parametricManager.listeners.push(function() {constrList.refresh()}); constrList.refresh(); + + var updateLayersList = function () { + var options = ''; + for (var i = 0; i < app.viewer.layers.length; i++) { + var layer = app.viewer.layers[i]; + options += "" + } + $('#layersList').html(options).val(app.viewer.activeLayer.name); + }; + updateLayersList(); + app.viewer.bus.subscribe("activeLayer", function() { + updateLayersList(); + }); + $('#layersList') + .mousedown(updateLayersList) + .change(function () { + var layer = app.viewer.findLayerByName($('#layersList').val()); + if (layer != null) { + app.viewer.activeLayer = layer; + } + }); } window.___log = function(log) { $('#log').append( " *****************



"); diff --git a/web/app/sketcher/canvas.js b/web/app/sketcher/canvas.js index 74115d9d..e38bc75f 100644 --- a/web/app/sketcher/canvas.js +++ b/web/app/sketcher/canvas.js @@ -37,6 +37,12 @@ TCAD.TWO.Styles = { lineWidth : 2, strokeStyle : "#fff5c3", fillStyle : "#000000" + }, + + CONSTRUCTION : { + lineWidth : 1, + strokeStyle : "#aaaaaa", + fillStyle : "#000000" } }; @@ -87,7 +93,13 @@ TCAD.TWO.Viewer = function(canvas) { } updateCanvasSize(); window.addEventListener( 'resize', onWindowResize, false ); - + + Object.defineProperty(this, "activeLayer", { + get: viewer.getActiveLayer , + set: viewer.setActiveLayer + }); + + this.bus = new TCAD.Bus(); this.ctx = this.canvas.getContext("2d"); this._activeLayer = null; this.layers = []; @@ -345,7 +357,7 @@ TCAD.TWO.Viewer.prototype.mark = function(obj, style) { this.selected.push(obj); }; -TCAD.TWO.Viewer.prototype.activeLayer = function() { +TCAD.TWO.Viewer.prototype.getActiveLayer = function() { var layer = this._activeLayer; if (layer == null || layer.readOnly) { layer = null; @@ -367,6 +379,7 @@ TCAD.TWO.Viewer.prototype.activeLayer = function() { TCAD.TWO.Viewer.prototype.setActiveLayer = function(layer) { if (!layer.readOnly) { this._activeLayer = layer; + this.bus.notify("activeLayer"); } }; @@ -789,9 +802,18 @@ TCAD.TWO.PanTool.prototype.mousedown = function(e) { this.viewer.select([picked[0]], false); this.deselectOnUp = false; } else { - this.viewer.select([picked[0]], true); - if (!picked[0].isAuxOrLinkedTo()) { - var tool = picked[0].getDefaultTool(this.viewer); + var toSelect = picked[0]; + if (this.viewer.selected.length === 1) { + for (var i = 0; i < picked.length - 1; i++) { + if (picked[i].id == this.viewer.selected[0].id) { + toSelect = picked[i + 1]; + break; + } + } + } + this.viewer.select([toSelect], true); + if (!toSelect.isAuxOrLinkedTo()) { + var tool = toSelect.getDefaultTool(this.viewer); tool.mousedown(e); this.viewer.toolManager.takeControl(tool); } diff --git a/web/app/sketcher/io.js b/web/app/sketcher/io.js index 09a5735e..10f5b6ca 100644 --- a/web/app/sketcher/io.js +++ b/web/app/sketcher/io.js @@ -64,8 +64,10 @@ TCAD.IO.prototype._loadSketch = function(sketch) { var sketchLayers = sketch['layers']; if (sketchLayers !== undefined) { for (var l = 0; l < sketchLayers.length; ++l) { - var layer = getLayer(this.viewer, sketchLayers[l]['name']); - var layerData = sketchLayers[l]['data']; + var ioLayer = sketchLayers[l]; + var layer = getLayer(this.viewer, ioLayer['name']); + if (!!ioLayer.style) layer.style = ioLayer.style; + var layerData = ioLayer['data']; for (var i = 0; i < layerData.length; ++i) { var obj = layerData[i]; var skobj = null; @@ -164,7 +166,7 @@ TCAD.IO.prototype._serializeSketch = function() { var layers = toSave[t]; for (var l = 0; l < layers.length; ++l) { var layer = layers[l]; - var toLayer = {'name' : layer.name, 'data' : []}; + var toLayer = {'name' : layer.name, style : layer.style, 'data' : []}; sketch['layers'].push(toLayer); for (var i = 0; i < layer.objects.length; ++i) { var obj = layer.objects[i]; diff --git a/web/app/sketcher/shapes/arc.js b/web/app/sketcher/shapes/arc.js index 48ac0038..ee1c7fbc 100644 --- a/web/app/sketcher/shapes/arc.js +++ b/web/app/sketcher/shapes/arc.js @@ -140,7 +140,7 @@ TCAD.TWO.AddArcTool.prototype.mouseup = function(e) { new TCAD.TWO.EndPoint(p.x, p.y) ); this.point = this.arc.a; - this.viewer.activeLayer().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; diff --git a/web/app/sketcher/shapes/circle.js b/web/app/sketcher/shapes/circle.js index 23174586..84798767 100644 --- a/web/app/sketcher/shapes/circle.js +++ b/web/app/sketcher/shapes/circle.js @@ -84,7 +84,7 @@ TCAD.TWO.EditCircleTool.prototype.mouseup = function(e) { new TCAD.TWO.EndPoint(p.x, p.y) ); if (needSnap) this.viewer.parametricManager.linkObjects([this.circle.c, p]); - this.viewer.activeLayer().objects.push(this.circle); + this.viewer.activeLayer.objects.push(this.circle); this.viewer.refresh(); } else { this.solveRequest(false); diff --git a/web/app/sketcher/shapes/segment.js b/web/app/sketcher/shapes/segment.js index 6e9a1ba7..63f3312f 100644 --- a/web/app/sketcher/shapes/segment.js +++ b/web/app/sketcher/shapes/segment.js @@ -37,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.viewer.activeLayer()); + 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]); } @@ -53,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.viewer.activeLayer()); + 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; @@ -103,7 +103,7 @@ TCAD.TWO.AddPointTool.prototype.mouseup = function(e) { this.viewer.historyManager.checkpoint(); var a = this.viewer.screenToModel(e); var p = new TCAD.TWO.EndPoint(a.x, a.y); - var layer = this.viewer.activeLayer(); + var layer = this.viewer.activeLayer; layer.objects.push(p); p.layer = layer; this.viewer.refresh(); diff --git a/web/app/ui/toolkit.js b/web/app/ui/toolkit.js index 72af0bf9..44239121 100644 --- a/web/app/ui/toolkit.js +++ b/web/app/ui/toolkit.js @@ -162,3 +162,25 @@ TCAD.toolkit.Tree.prototype._fill = function(data, level) { } } }; + +TCAD.Bus = function() { + this.listeners = {}; +}; + +TCAD.Bus.prototype.subscribe = function(event, callback) { + var listenerList = this.listeners[event]; + if (listenerList === undefined) { + listenerList = []; + this.listeners[event] = listenerList; + } + listenerList.push(callback); +}; + +TCAD.Bus.prototype.notify = function(event, data) { + var listenerList = this.listeners[event]; + if (listenerList !== undefined) { + for (var i = 0; i < listenerList.length; i++) { + listenerList[i](data); + } + } +}; diff --git a/web/app/workbench.js b/web/app/workbench.js index 43b0e154..d0c97c7c 100644 --- a/web/app/workbench.js +++ b/web/app/workbench.js @@ -14,8 +14,10 @@ TCAD.workbench.readSketchGeom = function(sketch) { var out = {connections : [], loops : []}; if (sketch.layers !== undefined) { for (var l = 0; l < sketch.layers.length; ++l) { - for (var i = 0; i < sketch.layers[l].data.length; ++i) { - var obj = sketch.layers[l].data[i]; + var layer = sketch.layers[l]; + if (layer.name == "_construction_") continue; + for (var i = 0; i < layer.data.length; ++i) { + var obj = layer.data[i]; if (obj.edge !== undefined) continue; if (!!obj.aux) continue; if (obj._class === 'TCAD.TWO.Segment') { diff --git a/web/sketcher.html b/web/sketcher.html index 4c2f8494..67d97bcf 100644 --- a/web/sketcher.html +++ b/web/sketcher.html @@ -35,6 +35,7 @@ + @@ -42,6 +43,7 @@
+