仿写拉移随心PL线功能-JIG应用
本帖最后由 wang2006zhi 于 2025-2-14 12:16 编辑public void Tt21()
{
using var tr = new DBTrans();
if (!Env.Editor.SelEnt(out Polyline plSel, out Point3d ptSel))
return;
var plTemp = plSel.CloneEx();
plTemp.ColorIndex = 1;
using var jig = new JigEx((mpt, _) => {MovePolyline(plTemp, mpt); });
jig.DatabaseEntityDraw(wd => wd.RawGeometry.Draw(plTemp));
var jppo = jig.SetOptions("指定放入点:");
var r1 = jig.Drag();
if (r1.Status != PromptStatus.OK)
return;
void MovePolyline(Polyline pl, Point3d ptTemp)
{
var ptStar = plSel.GetClosestPointTo(ptSel, false);
var parmStar = plSel.GetParameterAtPoint(ptStar);
var parmS = Math.Floor(parmStar);
var parmE = Math.Ceiling(parmStar);
var indexS = Convert.ToInt32(parmS);
var indexE = Convert.ToInt32(parmE);
var part = parmStar - parmS;
var ptS = plSel.GetPointAtParameter(parmS);
var ptE = plSel.GetPointAtParameter(parmE);
var vecN = (ptE - ptS).GetNormal();
var vec = ptTemp - ptStar;
if (vec.Length<50)
return;
if (parmS.Equals(pl.StartParam))
{
pl.SetPointAt(indexS,(ptS + vec.DotProduct(vecN) * vecN).Point2d());
}
else if (parmE.Equals(pl.EndParam))
{
pl.SetPointAt(indexE,(ptE + vec.DotProduct(vecN) * vecN).Point2d());
}
else
{
if (part < 0.3)
{
var vecN1 = (ptE - ptS).GetNormal();
for (var i = 0; i <= parmS; i++)
{
var item = Convert.ToInt32(i);
var ptTem = plSel.GetPointAtParameter(item);
pl.SetPointAt(item, (ptTem + vec.DotProduct(vecN) * vecN1).Point2d());
}
}
else if (part > 0.7)
{
var vecN1 = (ptE - ptS).GetNormal();
for (var i = parmE; i < pl.NumberOfVertices; i++)
{
var item = Convert.ToInt32(i);
var ptTem = plSel.GetPointAtParameter(item);
pl.SetPointAt(item,(ptTem + vec.DotProduct(vecN) * vecN1).Point2d());
}
}
else
{
var pt00 = plSel.GetPointAtParameter(parmS - 1);
var pt11 = plSel.GetPointAtParameter(parmE + 1);
var vecN1 = (pt00 - ptS).GetNormal();
var vecN2 = (pt11 - ptE).GetNormal();
pl.SetPointAt(indexS, (ptS + vec.DotProduct(vecN1) * vecN1).Point2d());
pl.SetPointAt(indexE, (ptE + vec.DotProduct(vecN2) * vecN2).Point2d());
// pl.Move(pl.StartPoint-ptTemp);
}
}
}
}
这种功能pline拉伸夹点不是也能实现吗 怎么左边绿绿的侧边栏那么丑 天命 发表于 2024-8-30 16:54
这种功能pline拉伸夹点不是也能实现吗
不一样,有角度约束的。
页:
[1]