# 模型分析

ARS提供拓扑分析、几何(曲线、曲面)分析、特征识别等多种分析API,以应用于模型应用阶段,比如机械加工、激光切割、机器人仿真等。

# 1. 拓扑分析

# 1.1 获取所有的子拓扑对象

  • 使用TopoShape::GetChildren(EnumTopoShapeType subType)可以获取指定类型的拓扑对象
        public void ListchildrenTree(TopoShape shape)
        {
            TopoShapeList children = TopoExplor.GetSubShapes(shape);
            foreach(var child in children)
            {
                // do something for child
                ListchildrenTree(child);
            }
        }
1
2
3
4
5
6
7
8
9
  • 使用TopoExplor::GetSubShapes(TopoShape shape)获取直接子节点,可能不是同类型的

# 1.2 根据索引获取指定的拓扑对象

使用TopoShape TopoShape::FindChild(EnumTopoShapeType subType, int idx)获取指定索引和类型的TopoShape对象。

        TopoShape shape ...
        // 获取第0个Edge
        var child = shape.FindChild(EnumTopoShapeType.Topo_EDGE, 0);

1
2
3
4

# 2. 曲线分析

使用ParametricCurve可以获取Edge的参数信息,比如曲线上的参数域、长度、某个位置的点坐标、切线、导数等信息。

            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]; //切线
                ...
            }
1
2
3
4
5
6
7
8

ParametricCurve

等距离离散曲线

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

查看完整代码 SplitByUniformLength

# 3. 曲面分析

使用ParametricSurface可以获取Face的参数信息,比如曲面的面积、UV参数域、某个位置上的点、UV切线、Normal等

        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方向切线
                ...
            }
1
2
3
4
5
6
7
8
9
10

查看完整代码

# 4. 特征识别

# 4.1 面上孔识别

识别一个面上的孔,得到外轮廓和内孔轮廓

        var exp = new WireExplor(face);
        var innerWires = exp.GetInnerWires();
        var outWire = exp.GetOuterWire();
1
2
3

# 5. 距离计算

算法 类名
点线距离 ExtremaPointCurve
点面距离 ExtremaPointSurface
线线距离 ExtremaCurveCurve
线面距离 ExtremaCurveSurface
面面距离 ExtremaSurfaceSurface
任意Shape ExtremaShapeShape

TIP

算法得到的距离均为距离的平方,若存在多个极值,可以根据距离平方排序得到最小值。

获取实体之间最短距离:

            ExtremaShapeShape ess = new ExtremaShapeShape();
            if (!ess.Initialize(shape, shape2, 0.001))
                return;

            var pt1 = ess.GetPointOnShape1(0);
            var pt2 = ess.GetPointOnShape2(0);

            var line = SketchBuilder.MakeLine(pt1, pt2);
1
2
3
4
5
6
7
8

实体之间的最短距离

# 6. 小结

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

Last Updated: 9/30/2020, 10:28:51 PM