|
|
|
@ -62,37 +62,24 @@ export class Contour
|
|
|
|
|
* @param {number} ref 缩放参考值,大于该值的点缩放
|
|
|
|
|
* @param {number} dist 缩放距离
|
|
|
|
|
* @param {string} dir x y z
|
|
|
|
|
* @returns
|
|
|
|
|
* @memberof Contour
|
|
|
|
|
*/
|
|
|
|
|
UnEqualProportionScale(ref: number, dist: number, dir: string)
|
|
|
|
|
UnEqualProportionScale(ref: number, dist: number, dir: "x" | "y")
|
|
|
|
|
{
|
|
|
|
|
let cu = this.m_Curve;
|
|
|
|
|
if (cu instanceof Polyline)
|
|
|
|
|
{
|
|
|
|
|
for (let i = 0; i <= cu.EndParam; i++)
|
|
|
|
|
let lineData = cu.LineData;
|
|
|
|
|
let length = lineData.length;
|
|
|
|
|
|
|
|
|
|
let moveIndexs: number[] = [];
|
|
|
|
|
for (let i = 0; i < length; i++)
|
|
|
|
|
{
|
|
|
|
|
let p = cu.GetPointAtParam(i);
|
|
|
|
|
if (p[dir] > ref)
|
|
|
|
|
{
|
|
|
|
|
let vec = new Vector3();
|
|
|
|
|
vec[dir] = dist;
|
|
|
|
|
p.add(vec).applyMatrix4(cu.OCSInv);
|
|
|
|
|
cu.SetPointAt(i, Vec3DTo2D(p));
|
|
|
|
|
//下一点不拉伸时修正凸度
|
|
|
|
|
if (!equaln(cu.GetBuilgeAt(i), 0) && i + 1 <= cu.EndParam)
|
|
|
|
|
{
|
|
|
|
|
let p2 = cu.GetPointAtParam(i + 1);
|
|
|
|
|
if (p2[dir] < ref)
|
|
|
|
|
{
|
|
|
|
|
let derv = cu.GetFistDeriv(i + 1).negate();
|
|
|
|
|
let chord = p.sub(cu.GetPointAtParam(i + 1));
|
|
|
|
|
let ang = getCirAngleByChordAndTangent(derv, chord);
|
|
|
|
|
cu.SetBulgeAt(i, ang / 4);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (lineData[i].pt[dir] > ref)
|
|
|
|
|
moveIndexs.push(i);
|
|
|
|
|
}
|
|
|
|
|
let moveVec = new Vector3();
|
|
|
|
|
moveVec[dir] = dist;
|
|
|
|
|
cu.MoveStretchPoints(moveIndexs, moveVec);
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|