From 8bcf8bcf35c23df717a1c1567d711d59f22611a8 Mon Sep 17 00:00:00 2001 From: Zoe Date: Thu, 17 May 2018 15:15:16 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/DatabaseServices/Polyline.ts | 4 ++-- src/GraphicsSystem/OffestPolyline.ts | 10 ++++------ 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/src/DatabaseServices/Polyline.ts b/src/DatabaseServices/Polyline.ts index 6d2969b17..8649cf014 100644 --- a/src/DatabaseServices/Polyline.ts +++ b/src/DatabaseServices/Polyline.ts @@ -8,7 +8,7 @@ import { FixIndex } from '../Common/Utils'; import { equal, equaln, updateGeometry } from '../Geometry/GeUtils'; import { RenderType } from '../GraphicsSystem/Enum'; import { IntersectOption, IntersectPolylineAndCurve } from '../GraphicsSystem/IntersectWith'; -import { PolyOffestUtil, PolyOffestUtil2 } from '../GraphicsSystem/OffestPolyline'; +import { PolyOffestUtil } from '../GraphicsSystem/OffestPolyline'; import { Arc } from './Arc'; import { Factory } from './CADFactory'; import { CADFile } from './CADFile'; @@ -637,7 +637,7 @@ export class Polyline extends Curve //偏移 GetOffsetCurves(offsetDist: number): Array { - let polyOffestUtil = new PolyOffestUtil2(this, offsetDist); + let polyOffestUtil = new PolyOffestUtil(this, offsetDist); return polyOffestUtil.GetOffsetCurves(); } /** diff --git a/src/GraphicsSystem/OffestPolyline.ts b/src/GraphicsSystem/OffestPolyline.ts index 7ce550bc5..4ad6710c1 100644 --- a/src/GraphicsSystem/OffestPolyline.ts +++ b/src/GraphicsSystem/OffestPolyline.ts @@ -20,11 +20,10 @@ interface offestRes * 先把线段首尾尝试相连,分离出与源线段方向相反的线段 * 然后分离出自交的曲线, * 再用源线段上的点以及偏移线段上离源线段小于偏移距离的最近点最为圆心去切割偏移线段 - * 存在问题为仍有一些无效线段无法正确删除 * 移除自交线段时部分情况不正确 - * 存在多封闭区域的时候无法都识别出来 + * 存在多封闭区域的时候结果不对 * 分离自交曲线 存在问题 - * //TODO:尝试先通过自交点把偏移后曲线数组打散,然后进行曲线切割(用源线段点和线段到源线段的最近点) + * 当源线段有多个自交点时结果不正确 * @export * @class PolyOffestUtil */ @@ -120,8 +119,6 @@ export class PolyOffestUtil } else return oldSlope !== newSlope } - - for (let i = 0; i < offResList.length; i++) { //前面线 @@ -173,7 +170,7 @@ export class PolyOffestUtil //终点data let endV = i === offResList.length - 1 ? laterLine.LineData[0] : this.clonePlData(laterLine.LineData[0]); - //判断线段是否为补圆弧 + //判断线段是否为补圆弧,若是补圆弧,则不受斜率和圆弧方向影响 let isMendPl = false; // 如果两线结合点不相等,调整交点位置 @@ -601,6 +598,7 @@ export class PolyOffestUtil * 再用另一方向的偏移曲线和结果偏移曲线做运算,排除掉线之间的线段 * 用最近点和源线段点做圆切割 * 问题为存在大量无效线段 + * 有bug未修复 * 可以识别多封闭区域 * @export * @class PolyOffestUtil2