模型分析
ARS提供拓扑分析、几何(曲线、曲面)分析、特征识别等多种分析API,以应用于模型应用阶段,比如机械加工、激光切割、机器人仿真等。
1. 拓扑分析
1.1 获取所有的子拓扑对象
- 使用TopoShape::GetChildren(EnumTopoShapeType subType)可以获取指定类型的拓扑对象
csharp
public void ListchildrenTree(TopoShape shape)
{
TopoShapeList children = TopoExplor.GetSubShapes(shape);
foreach(var child in children)
{
// do something for child
ListchildrenTree(child);
}
}
- 使用TopoExplor::GetSubShapes(TopoShape shape)获取直接子节点,可能不是同类型的
1.2 根据索引获取指定的拓扑对象
使用TopoShape TopoShape::FindChild(EnumTopoShapeType subType, int idx)获取指定索引和类型的TopoShape对象。
csharp
TopoShape shape ...
// 获取第0个Edge
var child = shape.FindChild(EnumTopoShapeType.Topo_EDGE, 0);
2. 曲线分析
使用ParametricCurve可以获取Edge的参数信息,比如曲线上的参数域、长度、某个位置的点坐标、切线、导数等信息。
csharp
var pc = new ParametricCurve(ellipse);
for (double param = pc.FirstParameter(), endParam = pc.LastParameter(); param < endParam; param += 0.2)
{
var value = pc.D1(param); // 一阶导数
var pos = value.GetPoint();
var vec = value.GetVectors()[0]; //切线
...
}
等距离离散曲线
csharp
var pc = new ParametricCurve(edge);
// 每距离0.1的长度采样一个点
var points = pc.SplitByUniformLength(0.1f, GP.Resolution());
...
3. 曲面分析
使用ParametricSurface可以获取Face的参数信息,比如曲面的面积、UV参数域、某个位置上的点、UV切线、Normal等
csharp
var ps = new ParametricSurface(face);
for(double u = ps.FirstUParameter(), endU = ps.LastUParameter(); u<endU; u+= 0.1)
for(double v = ps.FirstVParameter(), endV = ps.LastVParameter(); v<endV; v+=0.1)
{
var value = ps.D1(u, v);
var pos = value.GetPoint();
var vecU = value.GetVectors()[0]; // u方向切线
var vecV = value.GetVectors()[1]; // v方向切线
...
}
4. 特征识别
4.1 面上孔识别
识别一个面上的孔,得到外轮廓和内孔轮廓
csharp
var exp = new WireExplor(face);
var innerWires = exp.GetInnerWires();
var outWire = exp.GetOuterWire();
5. 距离计算
算法 | 类名 |
---|---|
点线距离 | ExtremaPointCurve |
点面距离 | ExtremaPointSurface |
线线距离 | ExtremaCurveCurve |
线面距离 | ExtremaCurveSurface |
面面距离 | ExtremaSurfaceSurface |
任意Shape | ExtremaShapeShape |
TIP
算法得到的距离均为距离的平方,若存在多个极值,可以根据距离平方排序得到最小值。
获取实体之间最短距离:
csharp
ExtremaShapeShape ess = new ExtremaShapeShape();
if (!ess.Initialize(shape, shape2, 0.001))
return;
var pt1 = ess.GetPointOnShape1(0);
var pt2 = ess.GetPointOnShape2(0);
var line = CurveBuilder.MakeLine(pt1, pt2);
6. 小结
结合拓扑遍历和曲线、曲面分析便可以完成常见的模型分析任务。