许可优化
许可优化
产品
产品
解决方案
解决方案
服务支持
服务支持
关于
关于
软件库
当前位置:服务支持 >  软件文章 >  【Eplan-Api】使用API检查项目内元件是否已选择部件

【Eplan-Api】使用API检查项目内元件是否已选择部件

阅读数 16
点赞 0
article_banner

【Eplan-Api】检查项目内元件是否已经选择部件


注明

测试版本为EplanP8,版本为2.9。

   初步 学习 ,程序非最优方式,仅提供思路,欢迎交流。

   点击进入Eplan官方Api链接,注意 文档 为全英文。

思路

  1. 首先必须选中项目,判断是项目效率才高,如果只是单纯的某一页,不如直接用肉眼看。
  2. 遍历项目内所有页面,遍历页面内部件,然后判断元件是否已经选择部件。
  3. 由于元件的类型太多,实际我们需要选出我们需要的某些类型的元件。
  4. 注意元件只有“主功能”才需要选择部件,端子同理。
  5. 对于未选择部件的元件,返回页面名称和标识符,方便后续纠错。

检查元件是否已经选择部件

1:判断选取焦点是否为项目,然后遍历项目出我们需要的元件

SelectionSet 类 可以使用 SelectionSet::GetCurrentProject 方法获取用户当前正在处理的项目。 也可以通过 SelectionSet::GetSelectedPages 方法获取当前选定的页面。 根据图形编辑器或页面概述对话框当前是否具有焦点,可以选择一个或多个页面。 最重要的是,可以通过 SelectionSet.Select 属性从任何焦点(非模态)对话框中选择任何对象集。这些对象由函数作为 StorableObject 数组返回。可以遍历数组并确定有关对象的类型(以及任何其他信息)。
            SelectionSet selectionSet = new SelectionSet();
            StorableObject[] storableObjects = selectionSet.Selection;

            if (storableObjects.Length == 0)
            {
                MessageBox.Show("未选择项目!");
            }
            else
            {
                foreach (StorableObject storableObject in storableObjects)
                {
                    //选择的是项目
                    if (storableObject is Project)
                    {
                        //遍历项目内所有界面
                        foreach (Page page in ((Project)storableObject).Pages)
                        {
                            //遍历界面内所有可放置的部件符号等等
                            foreach (Placement placement in page.AllPlacements)
                            {
                                ////如果Placement是逻辑设备(例如端子,断路器等等)
                                if (placement is Function)
                                {
                                    ;
                                }
                            }
                        }
                    }
                }
            }

2.定义需要使用的变量

            //部件选择数量
            int PartCount;
            //元件类型
            string PartCctegory = "";

            int i = 0, j = 0;
            //用于最后的页面的字符串输出
            string PageNameSum = "";
            string[] PageName = new string[1000];

3.获取元件的 类  型和部件选择数量。

                                    //部件选型数量
                                    PartCount = ((Function)placement).ArticleReferences.Length;

                                    //部件类型
                                    PartCctegory = ((Function)placement).Category.ToString();                                    

4.这里提供几种元件类型的名字。

安全开关:CircuitBreaker 端子:Terminal 漏电保护:CurrentCircuitBreaker 开关:Switch 断路器:Overload 线缆:Cable 接触器:Coil 一键获取完整项目代码1234567

5.判断是否是我们需要判断的元件,然后部件数量为0,元件是主功能。

((Function)placement).IsMainFunction),返回TRUE则代表是主功能。
                                    if ((PartCctegory == "CircuitBreaker" || PartCctegory == "CurrentCircuitBreaker" ||
                                        PartCctegory == "Overload" || PartCctegory == "Cable" ||PartCctegory == "Coil")
                                        && PartCount==0 && ((Function)placement).IsMainFunction)//注意设备还必须是主功能
                                    {
                                        PageName[i] = ((Function)placement).Page.Name.ToString() + "  " + PartCctegory + " " + ((Function)placement).Properties.FUNC_DEVICETAG_MAIN_WITHSEPARATOR.ToString();
                                        i++;
                                        j++;
                                    }
                                    //如果是端子则只有主端子需要选部件
                                    else if(PartCctegory == "Terminal" && ((Terminal)placement).IsMainTerminal && PartCount == 0)
                                    {
                                        PageName[i] = ((Function)placement).Page.Name.ToString() + "  " + PartCctegory + " " + ((Function)placement).Properties.FUNC_DEVICETAG_MAIN_WITHSEPARATOR.ToString();
                                        i++;
                                        j++;
                                    }

6.需要补充的是端子分为主端子和分布式端子,端子不用用元件是否是主功能来判断,只能用端子自己的主端子来判断。

((Terminal)placement).IsMainTerminal,返回TRUE则代表主端子。

7.最后输出结果,这里为了方便查看,新建了一个界面显示。

                        for (i = 0; i < j; i++)
                        {
                            PageNameSum = PageNameSum + PageName[i] +" "+ "存在未选型" + "\n";
                        }
                        FormAll.FormLabel.Variable.Label = PageNameSum;
                        FormAll.FormLabel form = new FormAll.FormLabel();
                        form.Show();

效果演示

在这里插入图片描述

可以自由对需要检查的元件加入IF条件中,不知道元件名字可以用该指令 查询

PartCctegory = ((Function)placement).Category.ToString();


相关文章
技术文档
QR Code
微信扫一扫,欢迎咨询~
customer

online

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 board-phone 155-2731-8020
close1
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

姓名不为空

姓名不为空
手机不正确

手机不正确

手机不正确
公司不为空

公司不为空

公司不为空