From cbf54794e615c2b17007133fe9fb28e891fef7a2 Mon Sep 17 00:00:00 2001 From: xibyte Date: Sat, 6 Jan 2018 22:51:20 -0800 Subject: [PATCH] fix nurbs mirroring(left handed coordinate system if working in parametric space) --- web/app/brep/geom/impl/nurbs.js | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/web/app/brep/geom/impl/nurbs.js b/web/app/brep/geom/impl/nurbs.js index 849c375c..f21962ca 100644 --- a/web/app/brep/geom/impl/nurbs.js +++ b/web/app/brep/geom/impl/nurbs.js @@ -294,6 +294,14 @@ export class NurbsSurface extends Surface { this.simpleSurface = simpleSurface || figureOutSimpleSurface(this); } + domainU() { + return this.verb.domainU(); + } + + domainV() { + return this.verb.domainV(); + } + middle() { let {min: uMin, max: uMax} = this.verb.domainU(); let {min: vMin, max: vMax} = this.verb.domainV(); @@ -370,11 +378,13 @@ export class NurbsSurface extends Surface { } static isMirrored(surface) { - //TODO: use domain! - let a = surface.point(0, 0); - let b = surface.point(1, 0); - let c = surface.point(1, 1); - return b.minus(a).cross(c.minus(a))._normalize().dot(surface.normalUV(0, 0)) < 0; + let {min: uMin} = surface.domainU(); + let {min: vMin} = surface.domainV(); + + let x = surface.isoCurveAlignU(uMin).tangentAtParam(uMin); + let y = surface.isoCurveAlignV(vMin).tangentAtParam(vMin); + + return x.cross(y).dot(surface.normalUV(uMin, vMin)) < 0; } intersectSurfaceForSameClass(other) {