mirror of
https://github.com/xibyte/jsketcher
synced 2026-01-28 19:14:53 +01:00
svg export outline
This commit is contained in:
parent
89301a3d8f
commit
4595faca67
3 changed files with 39 additions and 26 deletions
|
|
@ -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>"
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
});
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
Loading…
Reference in a new issue