fix #IKI74 修正trim取点错误的问题,多段线切割时,去除重复点和整数化临界点.

pull/72/head
ChenX 6 years ago
parent bdfd39c1c5
commit 87f2086d79

@ -91,7 +91,7 @@ export class Command_Trim implements Command
let breakCus = lastCu.GetSplitCurves(breakParams);
if (breakCus.length === 2)
{
let mindP = breakCu.GetPointAtParam(0.5);
let mindP = breakCu.GetPointAtParam(breakCu.EndParam * 0.5);
if (breakCus[0].PtOnCurve(mindP))
lastCu = breakCus[1];
else

@ -1,7 +1,7 @@
import * as THREE from 'three';
import { Box3, Geometry, Matrix4, Object3D, Vector2, Vector3 } from 'three';
import { CreateBoardUtil } from '../ApplicationServices/mesh/createBoard';
import { arrayLast } from '../Common/ArrayExt';
import { arrayLast, arrayRemoveDuplicateBySort } from '../Common/ArrayExt';
import { ColorMaterial } from '../Common/ColorPalette';
import { Vec2DTo3D, Vec3DTo2D, getDeterminantFor2V } from '../Common/CurveUtils';
import { matrixAlignCoordSys } from '../Common/Matrix4Utils';
@ -399,13 +399,19 @@ export class Polyline extends Curve
else
params = param;
//校验参数在曲线中
params = params.filter(p => this.ParamOnCurve(p));
//校验参数在曲线中,修正参数
params = params.filter(p => this.ParamOnCurve(p))
.map(a =>
{
if (equaln(a, Math.floor(a + 0.5), 1e-6))
return Math.floor(a + 0.5);
return a;
});
//排序
params.sort((a, b) => a - b);
//必须加入最后一个参数,保证切割后的曲线完整
params.push(this.EndParam);
params = [...new Set(params)];
arrayRemoveDuplicateBySort(params, (e1, e2) => equaln(e1, e2, 1e-6));
if (params.length === 0)
return [];

Loading…
Cancel
Save