Merge branch 'offset_dir_fix'

pull/70/head
ChenX 6 years ago
commit 32b0cbe332

@ -74,17 +74,30 @@ export class Command_TestOffset implements Command
{
if (lastpls) lastpls.forEach(cu => cu.Erase());
let ptClose = cu.GetClosestPointTo(p, false);
let toPtVec = p.clone().sub(ptClose); //点击处向量
let d = cu.GetFistDeriv(cu.GetParamAtPoint(ptClose));//切线。
let c = toPtVec.cross(d);
let dist = p.distanceTo(cu.GetClosestPointTo(p, !cu.IsClose));
if (cu instanceof Polyline && cu.EndParam > 1 && cu.Area > 0)
{
c.z = (IsPointInPolyLine(cu, p) ? -1 : 1) * Math.sign(cu.Area2);
let pls1 = cu.GetOffsetCurves(dist);
let pls2 = cu.GetOffsetCurves(-dist);
let dis1 = Math.min.apply(undefined, pls1.map(c => p.distanceTo(c.GetClosestPointTo(p, false))));
let dis2 = Math.min.apply(undefined, pls2.map(c => p.distanceTo(c.GetClosestPointTo(p, false))));
if (dis1 < dis2)
lastpls = pls1;
else
lastpls = pls2;
}
else
{
let ptClose = cu.GetClosestPointTo(p, false);
let toPtVec = p.clone().sub(ptClose); //点击处向量
let d = cu.GetFistDeriv(cu.GetParamAtPoint(ptClose));//切线。
let c = toPtVec.cross(d);
lastpls = cu.GetOffsetCurves(p.distanceTo(cu.GetClosestPointTo(p, !cu.IsClose)) * Math.sign(c.z));
}
lastpls = cu.GetOffsetCurves(p.distanceTo(cu.GetClosestPointTo(p, !cu.IsClose)) * Math.sign(c.z));
lastpls.forEach((offCur) =>
{
app.m_Database.ModelSpace.Append(offCur);

Loading…
Cancel
Save