Skip to content

数据交换

1. 快速读取几何数据

很多情况下的应用不关心物体的颜色,此时可以采用StepIO/IgesIO实现快速的模型加载。

STEP

csharp
            OpenFileDialog dialog = new OpenFileDialog();
            dialog.Filter = "STEP (*.stp;*.step)|*.stp;*.step";
            if (dialog.ShowDialog() != DialogResult.OK)
                return;

            var shape = ShapeIO.Open(dialog.FileName);
            if (shape == null)
                return;

            mRenderView.ShowShape(shape, new Vector3(0.8f)); // 显示指定个灰白色

IGES

csharp
            OpenFileDialog dialog = new OpenFileDialog();
            dialog.Filter = "IGES (*.igs;*.iges)|*.igs;*.iges";
            if (dialog.ShowDialog() != DialogResult.OK)
                return;

            var shape = ShapeIO.Open(dialog.FileName);
            if (shape == null)
                return;

            // 转换成BREP格式
            BrepIO.Save(shape, dialog.FileName + ".brep");

TIP

STEP/IGES文件的读取还是很慢。如果需要每次都加载同一个模型文件,可以使用BrepIO::Save成中间格式,加速模型读取。

2. 读取模型详细数据

获取模型的颜色、名称等信息相对上述方法效率稍有降低。

简单用法

使用CADReader得到每一个TopoShape

csharp
            OpenFileDialog dialog = new OpenFileDialog();
            dialog.Filter = "STEP (*.stp;*.step)|*.stp;*.step";
            if (dialog.ShowDialog() != DialogResult.OK)
                return;

            CADReader doc = new CADReader();
            doc.Open(dialog.FileName, (XdeNode xn, TopoShape shape, GTrsf trf, Vector3 color) =>
            {
                // 
                mRenderView.ShowShape(shape.Transformed(trf), color);
            });

复杂用法

CADReader是对XdeDocument的封装,若需要更灵活的控制,可以直接使用XdeDocument API来自行解析。

csharp

    CADReader doc = new CADReader();
    doc.Open(dialog.FileName, (XdeNode xn, TopoShape shape, GTrsf trf, Vector3 color) =>
    {
        mRenderView.ShowShape( TransformTool.Transform(shape, trf), color);
    });

3. 通用模型数据

通用的三维模型格式有obj、stl、3ds、glTF等,这类数据格式只包含了显示相关数据,不包含几何拓扑数据和参数化数据。 ARS提供了SceneIO可以读取此类格式。

csharp
            OpenFileDialog dlg = new OpenFileDialog();
            // 获取支持的文件格式列表
            dlg.Filter = SceneIO.FormatFilters();
            if (dlg.ShowDialog() != DialogResult.OK)
                return;

             var node = SceneIO.Load(dlg.FileName, mRenderView.GetMaterialManager());
            if (node == null)
                return;
            mRenderView.ShowSceneNode(node);
            mRenderView.ZoomAll();

4. DXF模型读取

DXF是比较通用的二维交换格式,ARS没有原始支持,但可以通过第三方的组件来实现与DXF数据互通。

在github上可以获取显示DXF的完整示例代码:anycad.rapid.dxf.viewer


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