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

aveva,marine · 浏览次数 : 2

小编点评

**快速读取和筛选分段元素** 该代码提供了一种快速读取和筛选分段元素的方法,并包括对数据库类型、筛选器和条件的处理。 **步骤:** 1. **遍历窗口**,查找所有 `DockedWindow` 对象。 2. **筛选分段**,并检查其标题是否为 `messages`。 3. **提取分段信息**,包括类型和名称。 4. **查找匹配分段的元素**,并将其添加到 `MarUi` 对象中。 5. **处理匹配分段**,并显示在窗口中。 **代码示例:** ```csharp public void 读取分段(WindowManager wm) { try { foreach (var item in wm.Windows) { if (item is DockedWindow) { var w = item as DockedWindow; if (w.Title.ToLower() == "messages") { if (!w.Visible) { w.Show(); wm.MainForm.Refresh(); } } } } } catch (System.Exception ex) { Interaction.MsgBox(ex.Message, MsgBoxStyle.Exclamation); } } ``` **使用说明:** 1. 将 `dbType` 的值设置为要读取的数据类型。 2. 将 `filter` 的值设置为要筛选的分段的条件。 3. 将 `condtion` 的值设置为对 dbelement 需要筛选的条件。 4. 调用 `读取分段()` 方法,并将其传递 `wm` 对象。 5. 程序将自动处理匹配的分段并将其添加到 `MarUi` 对象中。 **注意:** * 此代码需要包含 `DBElementCollection` 和 `DBElement` 类。 * 代码需要包含 `MarUi` 类。

正文

快速读取和筛选分段元素

[MyAmFunctionAtt(nameof(测试功能), nameof(读取分段))]
        public void 读取分段(WindowManager wm)
        {
            try
            {
                foreach (var item in wm.Windows)
                {
                    if (item is DockedWindow)
                    {
                        var w = item as DockedWindow;
                        if (w.Title.ToLower() == "messages")
                        {
                            if (!w.Visible)
                            {
                                w.Show();
                                wm.MainForm.Refresh();
                            }
                        }
                    }
                }
                //提取全部分段信息
                var flType = new TypeFilter(DbElementTypeInstance.BLOCK);//只筛选分段,添加引用的dll==> C:\AVEVA\Marine\OH12.1.SP4\PDMSFilters.dll
                var searchStr = "ER*";
                var nameLikeStr = new AttributeLikeFilter(DbAttributeInstance.NAMN, searchStr);//根据名称筛选,添加引用 C:\AVEVA\Marine\OH12.1.SP4\Aveva.Pdms.Database.dll
                var andFl = new AndFilter(flType, nameLikeStr);//两个条件同时满足
                var blkeles = FindElements(DbType.Design, andFl);
                var ui = new MarUi(); //添加引用 C:\AVEVA\Marine\OH12.1.SP4\marAPI.dll
                if (!blkeles.Any())
                {
                    ui.MessageConfirm($"找不到名称类似‘{searchStr}’的分段!");//发送文本到message window窗口
                    ui.Dispose();
                    return;
                }
                blkeles.ForEach(c => ui.MessageNoConfirm(c.GetAsString(DbAttributeInstance.NAMN)));
                ui.Dispose();
            }
            catch (System.Exception ex)
            {
                Interaction.MsgBox(ex.Message, MsgBoxStyle.Exclamation);// 添加引用C:\Windows\Microsoft.NET\Framework64\v2.0.50727\Microsoft.VisualBasic.dll
            }
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="dbType">数据类型</param>
        /// <param name="filter">筛选器</param>
        /// <param name="condtion">对dbelement需要筛选的条件</param>
        /// <returns></returns>
        public static List<DbElement> FindElements(DbType dbType, BaseFilter filter, Func<DbElement, bool> condtion = null)
        {
            List<DbElement> resDbElements = new List<DbElement>();
            DBElementCollection dbeEleCol = new DBElementCollection(dbType, filter);
            var res = dbeEleCol.Cast<DbElement>();
            if (!res.Any()) return resDbElements;
            res.ToList().ForEach(c =>
            {
                if (condtion != null)
                {
                    if (condtion.Invoke(c)) resDbElements.Add(c);
                }
                resDbElements.Add(c);
            });
            return resDbElements;
        }

测试结果

与C# AVEVA MARINE 二次开发 读取分段相似的内容:

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

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

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

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

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检查。 复杂条件逻辑:在处理复杂的条件逻辑时,特别是涉及到多个条件和类型的情况下,使用模式匹配可以使代码更