diff --git a/web/app/sketcher/io.ts b/web/app/sketcher/io.ts index de22c5d9..afa9f858 100644 --- a/web/app/sketcher/io.ts +++ b/web/app/sketcher/io.ts @@ -335,7 +335,7 @@ export class IO { }; getWorkspaceToExport() { - return [this.viewer.layers]; + return [this.viewer.layers, [this.viewer.labelLayer]]; }; getLayersToExport() { @@ -395,6 +395,8 @@ export class IO { var bbox = new BBox(); var toExport = this.getLayersToExport(); var i; + let needsTextStyle = false; + bbox.checkLayers(toExport); out.line("999"); out.line("js.parametric.sketcher"); @@ -526,11 +528,60 @@ export class IO { out.line("0"); out.line("40"); out.numberln(obj.r.get()); + } else if (obj._class === T.LABEL) { + const m = obj.assignedObject.labelCenter; + if (!m) { + return; + } + + const h = obj.textHelper.textMetrics.width/2; + const lx = m.x - h + obj.offsetX; + const ly = m.y + obj.marginOffset + obj.offsetY; + + out.line("0"); + out.line("TEXT"); + out.line("8"); + out.line(lid); + out.line("10"); + out.numberln(lx); + out.line("20"); + out.numberln(ly); + out.line("30"); + out.line("0"); + + out.line("41"); + out.line("1"); + + out.line("1"); + out.line(obj.text); + out.line("7"); + out.line("TEXT_STYLE"); + needsTextStyle = true; // } else if (obj._class === T.DIM || obj._class === T.HDIM || obj._class === T.VDIM) { } } } + if (needsTextStyle) { + out.line("0"); + out.line("STYLE"); + out.line("2"); + out.line("TEXT_STYLE"); + out.line("70"); + out.line("0"); + out.line("40"); + out.line("12"); + out.line("41"); + out.line("1.0"); + out.line("42"); + out.line("12"); + out.line("50"); + out.line("0.0"); + out.line("71"); + out.line("0"); + } + + out.line("0"); out.line("ENDSEC"); out.line("0"); diff --git a/web/app/sketcher/shapes/label.ts b/web/app/sketcher/shapes/label.ts index 61ee31f2..fcf29c20 100644 --- a/web/app/sketcher/shapes/label.ts +++ b/web/app/sketcher/shapes/label.ts @@ -26,6 +26,10 @@ export class Label extends SketchObject { this.offsetY += dy; } + get marginOffset() { + return TEXT_H_OFFSET; + } + drawImpl(ctx, scale, viewer) { @@ -41,7 +45,7 @@ export class Label extends SketchObject { ctx.save(); viewer.setStyle(Styles.HIGHLIGHT, ctx); } - const textOff = viewer.unscale * TEXT_H_OFFSET; + const textOff = viewer.unscale * this.marginOffset; this.textHelper.prepare(this.text, ctx, viewer); diff --git a/web/app/sketcher/shapes/sketch-types.js b/web/app/sketcher/shapes/sketch-types.js index 89d6bacb..ca641b10 100644 --- a/web/app/sketcher/shapes/sketch-types.js +++ b/web/app/sketcher/shapes/sketch-types.js @@ -11,5 +11,6 @@ export const SketchTypes = { HDIM : 'TCAD.TWO.HDimension', VDIM : 'TCAD.TWO.VDimension', DDIM : 'TCAD.TWO.DiameterDimension', - ANGLE_BW : 'TCAD.TWO.AngleBetweenDimension' + ANGLE_BW : 'TCAD.TWO.AngleBetweenDimension', + LABEL : 'TCAD.TWO.Label', }; \ No newline at end of file diff --git a/web/app/sketcher/shapes/textHelper.js b/web/app/sketcher/shapes/textHelper.js index 313fa388..b068e418 100644 --- a/web/app/sketcher/shapes/textHelper.js +++ b/web/app/sketcher/shapes/textHelper.js @@ -11,8 +11,8 @@ export class TextHelper { prepare(txt, ctx, viewer) { ctx.font = (this.fontSize) + "px Arial"; - const textMetrics = ctx.measureText(txt); - this.modelTextWidth = viewer.screenToModelDistance(textMetrics.width); + this.textMetrics = ctx.measureText(txt); + this.modelTextWidth = viewer.screenToModelDistance(this.textMetrics.width); this.txt = txt; }