svg export outline

This commit is contained in:
Val Erastov 2015-07-16 23:47:21 -07:00
parent 89301a3d8f
commit 4595faca67
3 changed files with 39 additions and 26 deletions

View file

@ -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('<g id="{0}" fill="{1}" stroke="{2}" stroke-width="{3}">', 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('<line x1="{0}" y1="{1}" x2="{2} y2="{3}" fill="none"/>', 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('<path d="M {0} {1} A {2} {3} 0 {4} {5} {6} {7}" fill="none"/>', 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('<circle cx="{0}" cy="{1}" r="{2}" fill="none"/>', 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('</g>');
}
}
//
//<circle cx="50" cy="50" r="40" stroke="green" stroke-width="4" fill="yellow" />
//</svg>
//
//var out = "<svg width="100" height="100">";
return "<svg>\n" + svg + "</svg>"
};

View file

@ -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();
});

View file

@ -295,7 +295,7 @@
</script>
</head>
<body>
<a id="downloader" style="display: none;" ></a>
<div class="panel b-bot" style="width: 100%; height: 35px; text-align:right;">
<span class="logo" style="float:left">sketcher.js <span style="font-size: 10px">(alpha)</span></span>
@ -303,7 +303,7 @@
--><button class="btn tbtn act-redo sep" ><i class="fa fa-arrow-right"></i></button><!--
-- <button class="btn tbtn act-checkpoint sep" ><i class="fa fa-check-circle"></i></button><!--
--><button class="btn tbtn act-save" ><i class="fa fa-floppy-o"></i></button><!--
--><button class="btn tbtn sep" ><i class="fa fa-upload"></i></button><!--
--><button class="btn tbtn act-export sep" ><i class="fa fa-upload"></i></button><!--
--><button class="btn tbtn sep act-pan" ><i class="fa fa-arrows"></i></button><!--
--><button class="btn tbtn act-addPoint" style="background-image: url(img/dot.png);" type="submit" value=""></button><!--
--><button class="btn tbtn act-addSegment" style="background-image: url(img/line.png);" type="submit" value=""></button><!--
@ -356,8 +356,5 @@
</div>
<!--<div id="log" style="position:absolute; width: 500px; height: 300px; top:500px; pxleft:0; overflow: scroll;background-color: salmon;">-->
</div>
</body>
</html>