From 4595faca67c896f1c8ce9f734077659e8abb205a Mon Sep 17 00:00:00 2001 From: Val Erastov Date: Thu, 16 Jul 2015 23:47:21 -0700 Subject: [PATCH] svg export outline --- web/app/sketcher/io.js | 50 ++++++++++++++++++++++---------------- web/app/sketcher/main2d.js | 8 ++++++ web/sketcher.html | 7 ++---- 3 files changed, 39 insertions(+), 26 deletions(-) diff --git a/web/app/sketcher/io.js b/web/app/sketcher/io.js index 7126ba30..95314e67 100644 --- a/web/app/sketcher/io.js +++ b/web/app/sketcher/io.js @@ -259,45 +259,53 @@ TCAD.IO.prototype.serializeConstr = function (c) { return c.serialize(); }; -TCAD.IO.prototype.svgExport = function (c) { +TCAD.IO.prototype.svgExport = function () { + var format = function(str, args) { + return str.replace(/{(\d+)}/g, function(match, number) { + var val = args[number] !== undefined ? args[number] : match; + if (typeof val === 'number') val = val.toPrecision(); + return val; + }); + }; + var colors = ["#000000", "#00008B", "#006400", "#8B0000", "#FF8C00", "#E9967A"]; + var svg = ""; + function append(chunk) { + var args = Array.prototype.slice.call(arguments, 1); + svg += format(chunk, args) + "\n" + } + var a = new TCAD.Vector(); + var b = new TCAD.Vector(); + + var colIdx = 0; 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 : []}; + var color = colors[colIdx++ % colors.length]; + append('', layer.name, "none", color, '2'); 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)]; + append('', obj.a.x, obj.a.y, obj.b.x, obj.b.y); } 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)]; + a.set(obj.a.x - obj.c.x, obj.a.y - obj.c.y, 0); + b.set(obj.b.x - obj.c.x, obj.b.y - obj.c.y, 0); + var dir = a.cross(b).z > 0 ? 0 : 1; + var r = obj.r.get(); + append('', obj.a.x, obj.a.y, r, r, dir, 1, obj.b.x, obj.b.y); } else if (obj._class === 'TCAD.TWO.Circle') { - to.c = point(obj.c); - to.r = obj.r.get(); + append('', obj.c.x, obj.c.y, 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; } } + append(''); } } - - // - // - // - // - //var out = ""; - + return "\n" + svg + "" }; diff --git a/web/app/sketcher/main2d.js b/web/app/sketcher/main2d.js index 48a9a287..6c3f485b 100644 --- a/web/app/sketcher/main2d.js +++ b/web/app/sketcher/main2d.js @@ -13,6 +13,14 @@ TCAD.App2D = function() { app._actionsOrder.push(id); }; + this.registerAction('export', "Export", function () { + var link = document.getElementById("downloader"); + link.href = "data:," + app.viewer.io.svgExport(); + link.download = app.getSketchId() + ".svg"; + //link.click(); + console.log(app.viewer.io.svgExport()); + }); + this.registerAction('undo', "Undo", function () { app.viewer.historyManager.undo(); }); diff --git a/web/sketcher.html b/web/sketcher.html index 15f686dc..c88f7191 100644 --- a/web/sketcher.html +++ b/web/sketcher.html @@ -295,7 +295,7 @@ - +
@@ -303,7 +303,7 @@ --> - -
- \ No newline at end of file