包覆(wrap)算法是将线条或面直接环绕现有物体进行包覆,线条的长度保持不变。这种算法常用于将2D图形包覆到实体模型或网格模型上。
包覆算法与投影算法的不同之处
投影(projection)算法则是将线条或面在灯光投射下附加在现有物体上,得到的曲线可能会变形。投影算法可以根据需要选择不同的投影方式,如圆柱投影或锥型投影等,适用于需要将平面图形映射到曲面表面的情况2。投影算法在处理曲面时能够根据曲面的形状调整线条或面的形状,适用于需要适应曲面形状的情况。
在实际应用中,包覆和投影算法各有其适用场景。例如,在机器人柔顺打磨
领域,包覆式投影算法可以将平面打磨轨迹投影映射到待打磨工件的表面上,从而完成打磨轨迹与姿态的规划。这种算法能够确保打磨轨迹在工件表面上的精确性和适应性。
.NET下实现曲线包覆功能
使用AnyCAD.Foundation.AdvFeatureTool.Wrapping API可以一行实现该功能。
例如,从DXF文件中读取一个二维图形,包覆到圆柱面上,可以这样写:
var dxf = ShapeIO.Open(GetResourcePath("dxf/tiger.dxf"));
render.ShowShape(dxf, ColorTable.LightGreen);
var circle = CurveBuilder.MakeCircle(new GPnt(), 50, new GDir(0, 0, 1));
var face = FeatureTool.Extrude(circle, 500, new GDir(0, 0, -1));
foreach (var edge in dxf.GetChildren(EnumTopoShapeType.Topo_EDGE))
{
var curves = AdvFeatureTool.Wrapping(edge, face);
render.ShowShape(curves, ColorTable.Red);
}
render.ShowShape(face, ColorTable.LightGray);