c# aveva marine 批量导出图纸到dxf格式

c#,aveva,marine,批量,导出,图纸,dxf,格式 · 浏览次数 : 207

小编点评

**代码摘要:** 该代码提供三种方法用于获取图纸数据库: 1. `GetDbElements()`:从指定的数据库类型中获取数据库元素的字典。 2. `GetDrawingsDB()`: 从数据库中获取所有设计图纸的列表。 3. `GetDrawings()`:从指定数据库中获取所有设计图纸,并根据元素类型过滤结果。 **代码说明:** * `GetDbElements()` 使用 `MDB.GetDBArray()` 获取数据库数组。 * `GetDrawingsDB()` 通过 `DbExtension.GetDbElements()` 获取所有设计图纸。 * `GetDrawings()` 通过 `DbElement.GetMembers()` 获取所有元素,并通过 `GetActualType()` 获取元素类型。 * `GetDrawings()` 通过 `Where()` 条件筛选非空的元素并返回结果。 **主函数代码:** 该代码展示了如何使用 `GetDrawingsDB()` 和 `GetDrawings()` 方法获取数据库中的所有设计图纸,并根据元素类型显示其名称。

正文

获取图纸数据库

查看代码

public static Dictionary<string,List<DbElement>> GetDbElements(DbType dbtype)
        {
            Dictionary<string, List<DbElement>> rtn = new Dictionary<string, List<DbElement>>();
            Aveva.Pdms.Database.MDB mdb = Aveva.Pdms.Database.MDB.CurrentMDB;
            var dbs = mdb.GetDBArray(dbtype);
            foreach (var item in dbs)
            {
                rtn[item.Name] = item.WorldMembers().ToList();
            }
            return rtn;
        }
查看代码
 public List<DbElement> GetDrawingsDB()
        {
            var designs = DbExtension.GetDbElements(Aveva.Pdms.Database.DbType.Draft);
            return designs.Values.First().Where(c => c.GetActualType() == DbElementTypeInstance.DEPT).ToList();
        }

获取某一数据库的图纸

 

查看代码
  public List<DbElement> GetDrawings(string dbName)
        {
            var dwgs = new List<DbElement>();
            var db = DbElement.GetElement(dbName.StartsWith("/")?dbName: "/"+dbName);
            var regis = db.Members().Where(c => c.GetActualType() == DbElementTypeInstance.REGISTRY);
            foreach (var item in regis)
            {
                if (item.FirstMember() != null)
                {
                    var curRegDwgs = item.Members().Where(d => d.GetActualType() == DbElementTypeInstance.DRWG);
                    if (curRegDwgs.Any())
                        dwgs.AddRange(curRegDwgs.ToList());
                }

            }
            return dwgs.Where(d=>!d.IsNull).ToList();
        }

主函数

查看代码
 AMHullEnv AmEnv = new AMHullEnv();
            try
            {
                var dwgTypes = AmEnv.GetDrawingsDB().Select(c => c.GetAsString(DbAttributeInstance.NAMN)).ToList();
                //dwgTypes.ToCSVFile($@"C:\{dwgTypes.First().GetType().FullName}.csv");
                MarStringlist strs = new MarStringlist();
                dwgTypes.ForEach(c => strs.AddString(c));
                var ints = AmEnv.Ui.StringSelect("选择数据库", "select DataBank to save drawing", "", strs);
                if (ints[0] == AmEnv.MarUtil.Ok())
                {
                    var dwgType = dwgTypes.First(c => c == strs[ints[1] - 1]);
                    var dwgs = AmEnv.GetDrawings(dwgType);
                    if (dwgs != null)
                    {
                        wm.StatusBar.Text = dwgType.ToString();
                        foreach (var item in dwgs)
                        {
                            try
                            {
                                var dwgName = item.GetAsString(DbAttributeInstance.NAMN).Replace("/" + item.GetAsString(DbAttributeInstance.TYPE), "");
                                //var curDwgName = AmEnv.DraftApp.DwgNameGet();
                                if (AmEnv.DraftApp.DwgCurrent()) AmEnv.DraftApp.DwgClose();
                                AmEnv.DraftApp.DwgOpen(dwgName);
                                var dxfName = $@"C:\{dwgType}_{item.GetAsString(DbAttributeInstance.OWNER).Replace("/", "")}_{dwgName}.dxf";
                                AmEnv.DraftApp.DwgDxfExport(dxfName);
                                //AmEnv.DraftApp.DwgWmfExport(Path.ChangeExtension(dxfName, ".wmf"));
                                AmEnv.DraftApp.DwgClose();
                            }
                            catch (Exception ex)
                            {
                                AmEnv.Ui.MessageNoConfirm(ex.StackTrace);
                                continue;    
                            }
                        }
                    }
                    else
                        AmEnv.Ui.MessageNoConfirm(dwgType + "数据库下无任何图纸!");
                }
                else
                    AmEnv.Ui.MessageNoConfirm("未选择到数据库!");
            }
            catch (Exception ex)
            {
                wm.StatusBar.Text = ex.StackTrace;
            }

效果见视频

https://www.bilibili.com/video/BV1a14y1L749/?spm_id_from=333.999.0.0&vd_source=0b221dbd75584a13ab6cd4551f3a0ec2

 

与c# aveva marine 批量导出图纸到dxf格式相似的内容:

c# aveva marine 批量导出图纸到dxf格式

获取图纸数据库 查看代码 public static Dictionary

C# AVEVA MARINE 二次开发 读取分段

快速读取和筛选分段元素 [MyAmFunctionAtt(nameof(测试功能), nameof(读取分段))] public void 读取分段(WindowManager wm) { try { foreach (var item in wm.Windows) { if (item is Do

c# aveva marine link folder

public class LinkWorld { public static DbElement LinkWLD => Aveva.Pdms.Database.DbType.Design.FindElements(DbElementTypeInstance.LINKWLD).FirstOrDefau

自己制作AM启动方式,不需要每次输入密码和用户名

第一布,查看用户名,数据库等信息 在记事本中写以下信息,保存后,后缀改为bat,双击此文件即可启动hull design模块且无黑框框的控制台哦 C:\AVEVA\Marine\OH12.1.SP4\marine.bat noconsole Mar SYSTEM/XXXXXX/PLANARHULL

C# 开发技巧 轻松监控方法执行耗时

前言 MethodTimer.Fody 是一个功能强大的库,可以用于测量 .NET 应用程序中的方法的执行时间。允许你在不修改代码的情况下,自动地测量和记录方法的执行时间。 这个工具是基于.NET的 weaving 技术,通过修改IL(Intermediate Language,中间语言)代码来插入

C#开源、简单易用的Dapper扩展类库 - Dommel

前言 今天大姚给大家分享一个C#开源(MIT License)、免费、简单易用的Dapper扩展类库,帮助.NET开发者使用Dapper的CRUD操作变得更简单:Dommel。 项目特性 Dommel 使用 IDbConnection 接口上的扩展方法为 CRUD 操作提供了便捷的 API。 Dom

C语言指针易混淆知识点总结

指针 定义 指针是一个变量,存储另一个变量的内存地址,它允许直接访问和操作内存中的数据,使得程序能够以更灵活和高效的方式处理数据和内存。 获取变量地址:使用取地址符 &。 访问地址上的数据:使用解引用符 *。 例子1 指针是存储另一个变量地址的变量。通过使用取地址符 & 和解引用符 *,我们可以灵活

C++如何在main函数开始之前(或结束之后)执行一段逻辑?

1. 问题 2. 考察的要点 3. 解决策略 3.1. 方案一:使用GCC的拓展功能 3.2. 方案二:使用全局变量 3.3. 方案三:atexit 4. Demo测试 4.1. 测试代码 4.2. 执行结果 5. 程序异常退出场景 5.1. 存在的问题 5.2. 解决方案 5.2.1. 原理 5.

C#/.NET这些实用的编程技巧你都会了吗?

DotNet Exercises介绍 DotNetGuide专栏C#/.NET/.NET Core编程常用语法、算法、技巧、中间件、类库练习集,配套详细的文章教程讲解,助你快速掌握C#/.NET/.NET Core各种编程常用语法、算法、技巧、中间件、类库等等。 GitHub开源地址:https:/

C# 使用模式匹配的好处,因为好用所以推荐~

类型检查和转换:当你需要检查对象是否为特定类型,并且希望在同一时间内将其转换为那个类型时,模式匹配提供了一种更简洁的方式来完成这一任务,避免了使用传统的as和is操作符后还需要进行额外的null检查。 复杂条件逻辑:在处理复杂的条件逻辑时,特别是涉及到多个条件和类型的情况下,使用模式匹配可以使代码更