From bb234a7c573f81b43fc2d7f4013e3a2a2e4cc12f Mon Sep 17 00:00:00 2001 From: Val Erastov Date: Tue, 30 Aug 2022 19:28:06 -0700 Subject: [PATCH] calculating tesselation scale --- web/app/cad/scene/views/sketchObjectView.js | 7 ++++- web/app/cad/sketch/sketchModel.ts | 29 ++++++++++++++++++++- 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/web/app/cad/scene/views/sketchObjectView.js b/web/app/cad/scene/views/sketchObjectView.js index 37318e11..285ddac0 100644 --- a/web/app/cad/scene/views/sketchObjectView.js +++ b/web/app/cad/scene/views/sketchObjectView.js @@ -4,7 +4,12 @@ export class SketchObjectView extends CurveBasedView { constructor(ctx, mSketchObject, sketchToWorldTransformation) { const color = mSketchObject.construction ? 0x964B00 : 0x0000FF; - const tess = mSketchObject.sketchPrimitive.tessellate(10).map(sketchToWorldTransformation.apply).map(v => v.data()); + + const massiveness = mSketchObject.sketchPrimitive.massiveness(); + + const MAGIC_RATIO = 0.01; + const tess = mSketchObject.sketchPrimitive.tessellate(massiveness * MAGIC_RATIO) + .map(sketchToWorldTransformation.apply).map(v => v.data()); super(ctx, mSketchObject, tess, 3, color); this.representation.onDblclick = () => { ctx.sketcherService.sketchFace(this.model.face); diff --git a/web/app/cad/sketch/sketchModel.ts b/web/app/cad/sketch/sketchModel.ts index a415a4b6..56f3782e 100644 --- a/web/app/cad/sketch/sketchModel.ts +++ b/web/app/cad/sketch/sketchModel.ts @@ -26,7 +26,7 @@ export class SketchPrimitive { } tessellate(resolution) { - return this.toNurbs(CSys.ORIGIN).tessellate(); + return this.toNurbs(CSys.ORIGIN).tessellate(resolution); // return brepCurve.impl.verb.tessellate().map(p => new Vector().set3(p) ); // const tessellation = this.tessellateImpl(resolution); @@ -67,6 +67,10 @@ export class SketchPrimitive { toOCCGeometry(oci: OCCCommandInterface, underName: string, csys: CSys) { throw 'not implemented' } + + massiveness() { + return 50; + } } export class Segment extends SketchPrimitive { @@ -115,6 +119,9 @@ export class Segment extends SketchPrimitive { return this.a.minus(this.b); } + massiveness() { + return this.a.minus(this.b).length(); + } } export class Arc extends SketchPrimitive { @@ -192,6 +199,10 @@ export class Arc extends SketchPrimitive { oci.point(underName + "_T2", A_TAN.x, A_TAN.y, A_TAN.z); oci.gcarc(underName, "cir", underName + "_A", underName + "_T1", underName + "_T2", underName + "_B") } + + massiveness() { + return this.a.minus(this.b).length(); + } } export class BezierCurve extends SketchPrimitive { @@ -211,6 +222,10 @@ export class BezierCurve extends SketchPrimitive { toVerbNurbs(tr) { return new verb.geom.BezierCurve([tr(this.a).data(), tr(this.cp1).data(), tr(this.cp2).data(), tr(this.b).data()], null); } + + massiveness() { + return this.a.minus(this.b).length(); + } } export class EllipticalArc extends SketchPrimitive { @@ -253,6 +268,10 @@ export class EllipticalArc extends SketchPrimitive { return arc; // return adjustEnds(arc, tr(this.a), tr(this.b)) } + + massiveness() { + return Math.max(this.rx, this.ry); + } } export class Circle extends SketchPrimitive { @@ -276,6 +295,10 @@ export class Circle extends SketchPrimitive { const DIR = csys.z; oci.circle(underName, ...C.data(), ...DIR.data(), this.r); } + + massiveness() { + return this.r; + } } export class Ellipse extends SketchPrimitive { @@ -303,6 +326,10 @@ export class Ellipse extends SketchPrimitive { return new verb.geom.Ellipse(tr(this.c).data(), tr(xAxis).data(), tr(yAxis).data()); } + + massiveness() { + return Math.max(this.rx, this.ry); + } } export class Contour {