在编写插件时,有时经常需要查找某一类的对象,就像在EPLAN中使用各类筛选器一样,那EPLAN API中是否也提供了这种筛选器呢?答案是肯定的,那就是利用DMObjectsFinder类。
命名空间:Eplan.EplApi.DataModel.DMObjectsFinder
API帮助:https://www.eplan.help/en-US/infoportal/content/api/2.9/Eplan.EplApi.DataModelu~Eplan.EplApi.DataModel.DMObjectsFinder.html
介绍:此类允许使用一个过滤器类对象,来对指定的项目进行搜索,并返回符合过滤器要求的结果。从DMObjectFinder所提供的方法来看,针对某类的对象都有专门的Get打头的方法可调用,各方法的参数也都是派生自StorableObjectsFilter类的子类对象。最终的返回结果将是符合条件的对象数组。
使用方法很简单,例如我们想得到项目中所有页类型为“多线原理图”的页时,则可以这样编写:
DMObjectsFinder objectsFinder = new DMObjectsFinder(myProject);//myProject是当前项目对象 PagesFilter pagesFilter = new PagesFilter(); pagesFilter.DocumentType = DocumentTypeManager.DocumentType.Circuit; Page[] pages = objectsFinder.GetPages(pagesFilter); |
例如想得到项目中所有PLC连接点时,则可以这样编写:
DMObjectsFinder objectsFinder = new DMObjectsFinder(myProject);//myProject是当前项目对象 FunctionsFilter filter = new FunctionsFilter(); filter.Category = Function.Enums.Category.PLCTerminal; Terminal[] terminals = objectsFinder.GetTerminals(filter); |
在获取项目中某页时,除上述方法外,在一个项目对象中,还提供了一个Filter的可读写属性,同样可以给它指定一个PagesFilter对象来筛选。
Console.WriteLine(myProject.Pages.Length);//筛选前共100页 PagesFilter pagesFilter = new PagesFilter(); pagesFilter.DocumentType = DocumentTypeManager.DocumentType.Circuit; myProject.Filter = pagesFilter; Console.WriteLine(myProject.Pages.Length);//筛选后共60页 |
那如果想得到某一个设备显示名称为”-F66″的对象呢?哈哈,这时候有多个办法,例如用过滤器实现时,就可以先用PlacementsFilter类生成个对象,但这个对象只有一个Page类参数需要指定,在赋值后就会返回一个当前页中所有的已放置对象数组,接下来在通过遍历就可以得到名为”-F66″的对象了:
DMObjectsFinder objectsFinder = new DMObjectsFinder(myProject); PlacementsFilter pagesFilter = new PlacementsFilter(); pagesFilter.Page = myProject.Pages[0]; Placement[] placement = objectsFinder.GetPlacements(pagesFilter); foreach (var item in placement) { if (item.TypeIdentifier == 17) if (!item.Properties[Properties.FunctionBase.FUNC_VISIBLENAME].IsEmpty) if (item.Properties[Properties.FunctionBase.FUNC_VISIBLENAME].ToString() == “-F66”) //找到了 } |
好了,本节就介绍到这里,主要跟大家分享了DMObjectsFinder类的使用方法,通过此类可以很方便地得到某一类的所有对象,电气CAD吧可向终身会员提供技术咨询服务,有哪里不懂的用户可以随时联系我们!下节见。