Skip to content

模型分析

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]; //切线
    ...
}

ParametricCurve

等距离离散曲线

csharp
var pc = new ParametricCurve(edge);
// 每距离0.1的长度采样一个点
var points = pc.SplitByUniformLength(0.1f, GP.Resolution());
...

查看完整代码SplitByUniformLength

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
任意ShapeExtremaShapeShape

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. 小结

结合拓扑遍历和曲线、曲面分析便可以完成常见的模型分析任务。


上海图无形科技有限公司旗下产品
Copyright © 2013-2024 AnyCAD