Bentley二次开发教程25-工程属性-概念介绍

工程属性概念介绍

引言

对于工程信息,主要分为几何数据与工程数据两个部分,对于几何数据,Bentley采用模型来表达,而工程数据,起初Bentley采用XAttribute的方式在dgn文件中开辟一个特定空间存储非几何数据,但是在由于没有统一数据存储的方式和格式,导致不同专业软件之间的信息无法交流。最后,Bentley经过大量的摸索和借鉴形成了一套系统的数据解决方案系统ECFramework (Engineering Content Framework ),通过这套方案Bentley真正实现各个专业软件之间数据的无损流动和互动。
在这里插入图片描述
不同于应用程序框架,作为解决方案框架,整个ECFrameWork包含以下几个部分:

  • ECObjects 和ECXML: 用来定义工程内容
  • ECServices: 为多种数据来源的工程环境提供的一套统一的服务
  • ECControls:EngineeringContentBrowser , PropertyPane等控件
  • ECClassEditor:外部编辑ECSchema的编辑器
    相较于使用EC框架以前,架构如图所示:
    在这里插入图片描述
    在这里插入图片描述
    使用EC框架后,所有的工程信息被统一为相同的格式,单个应用程序生成的信息可被整个解决方案中使用,大大提高了信息的利用价值。

EC属性概念简述

ECObjects

ECObject(Engineering Content Object),即工程内容对象,用于描述工程中的数据。笼统地说,它相当于一个表格文件,与表格中的数据行,我们可以使用编程的方法对表格中的内容进行定义,修改,查询和更新。
在这里插入图片描述

ECSchema

ECSchema是描述数据的数据,用于表达EC的数据结构。简单的来说,ECSchema是一种用于表达ECObjects信息的载体,他可独立存在,其他任何程序只要遵循其构建标准都可获取我们所定义的工程信息,扩展性强。您可以采用创建Xml文件直接编写的方法或使用ClassEditor工具创建Schema文件。

<?xml version="1.0" encoding="utf-8" ?>
<ECSchema schemaName="ComplexSchema" nameSpacePrefix="ComplexSchema" version="1.0" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.2.0">
  <ECClass typeName="Contact" isStruct="True" isDomainClass="False">
        <ECProperty propertyName="Name" typeName="string" /> "
        <ECProperty propertyName="Age" typeName="int" /> "
        <ECArrayProperty propertyName="PhoneNumber" typeName="string" /> "    
  </ECClass>
  <ECClass typeName="StructClass" isStruct="True" isDomainClass="False">
        <ECProperty propertyName="StringProperty" typeName="string" /> "
        <ECProperty propertyName="IntProperty" typeName="int" /> "
        <ECArrayProperty propertyName="ArrayProperty" typeName="string" minOccurs="1" maxOccurs="1" /> "
        <ECArrayProperty propertyName="ContactData" typeName="Contact" isStruct="True" /> "    
  </ECClass>
  <ECClass typeName="ComplexClass" isDomainClass="True">
        <ECProperty propertyName="IntProperty" typeName="int" />"
        <ECProperty propertyName="StringProperty" typeName="string" /> "
        <ECProperty propertyName="DoubleProperty" typeName="double" /> "
        <ECProperty propertyName="DateTimeProperty" typeName="dateTime" />"
        <ECProperty propertyName="BooleanProperty" typeName="boolean" />"
        <ECProperty propertyName="APoint2d" typeName="point2d" />"
        <ECProperty propertyName="APoint3d" typeName="point3d" />"
        <ECProperty propertyName="ALong"   typeName="long" />"
        <ECProperty propertyName="ABinary" typeName="binary" />"
        <ECArrayProperty propertyName="SimpleArrayProperty" typeName="string"/>"
        <ECArrayProperty propertyName="FixedArrayProperty" typeName="string" minOccurs="1" maxOccurs="1" />"
        <ECArrayProperty propertyName="StructArrayProperty" typeName="StructClass" isStruct="True" />"
        <ECArrayProperty propertyName="FixedStructArrayProperty" typeName="StructClass" minOccurs="1" maxOccurs="1" isStruct="True" />"
        <ECStructProperty propertyName="StructProperty" typeName="StructClass" />"
  </ECClass>"
</ECSchema>

如果您拥有读写Xml文件经验的话,相信您对其肯定不会陌生,因为从文件后缀(*.xml)可以看出,Schema文件也遵循Xml文件的构建标准。如果您没有相关经验,也没有关系,以下为阅读该文件的方法:

  • Xml文件有点类似于树状图表或者多项式,首先遵循的标准就是开始与结束的符号需要对应。即<…/>或<>…</>对应于(…),可以使用VisualStudio创建Xml文件的方法,使用程序辅助编写Schema文件,如果尖括号不对应程序会有警告显示
    在这里插入图片描述

  • 在一个ECSchema文件中可以囊括多个ECClass,而一个ECClass可以拥有多个ECProperty或ECArrayProperty,ECStructProperty。ECProperty表示的是常规类型的属性,包括int,string,double,datetime(日期),point2d,point3d(坐标),long,binary等;而ECStructProperty指的是自定义的结构体,具有由ECClass定义的复杂类型;而ECArrayProperty指的是动态链表,在其中我们可以添加多个该属性。

  • ECClass可以继承其他的ECClass,用于表达工程属性中的层级关系。同时,其不仅可以使用当前Schema文件内部的定义,还可以使用外部Schema中的信息。

  • ECPropertyValue表示ECInstance中单个ECProperty的值。在大多数情况下,ECPropertyValue组成一个ECInstance。ECPropertyValue保存由ECProperty定义的各种类型的数据
    在这里插入图片描述
    在这里插入图片描述
    ECSchema,ECClass,ECProperty,ECInstance,ECPropertyValue间关系
    在这里插入图片描述
    他们之间的关系,对于EC框架,若您对数据库较为熟悉:

  • ECRepository 就相当于整个数据库系统

  • ECSchema 就相当于一个数据库的定义

  • ECClass 就相当于一个数据库中表的定义

  • ECProperty 就像是表结构中每一列的定义

  • ECInstance 相当于每个表中的每一行。

  • ECPropertyValue 就 相当于每一行中的每一个单元

  • ECClass加上所产生的ECInstances 就相当于一个数据库所有的表格
    如果您没有接触过数据库,我们就以工程中明细表作以类比:

  • ECRepository 就相当于某某项目施工图项目阶段

  • ECSchema 就相当于结构专业

  • ECClass 就相当于结构柱明细表

  • ECProperty 就相当于结构柱属性定义(钢筋型号,混凝土强度,混凝土保护层厚度)

  • ECInstance 就相当于指定某个结构柱

  • ECPropertyValue 就相当于该结构柱的属性值(如钢筋混凝土强度为C40,钢筋型号HRB400,混凝土保护层厚度取35)

  • ECClass加上所产生的ECInstances 就相当于该项目的柱明细表

ECRelationship

我们使用ECRelationship来表达不同工程数据类型之间的相互关系,它相当于第三方,关联了两个工程对象。ECRelationshipClass就像是在数据库中定义了一个链接表格,ECRelationshipInstance 就是这个表格中的一行。
在这里插入图片描述

<?xml version="1.0" encoding="utf-8"?>
<ECSchema schemaName="Simple" nameSpacePrefix="demo" version="01.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.2.0">
  <ECClass typeName="Widget" isDomainClass="True">
    <ECProperty propertyName="Manufacturer" typeName="string" />
  </ECClass>
  <ECClass typeName="Gadget1" isDomainClass="True">
    <ECProperty propertyName="Manufacturer" typeName="string" />
  </ECClass>
  <ECClass typeName="Gadget2" isDomainClass="True">
    <ECProperty propertyName="Manufacturer" typeName="string" />
  </ECClass>
  <ECRelationshipClass typeName="WidgetHasGadgets" description="WidgetHasGadgets" isDomainClass="True" strength="referencing" strengthDirection="forward">
    <Source cardinality="(1,1)" roleLabel="has Gadgets" polymorphic="False">
      <Class class="Widget" />
    </Source>
    <Target cardinality="(1,N)" roleLabel="are held by Widget" polymorphic="False">
      <Class class="Gadget1" />
      <Class class="Gadget2" />
    </Target>
  </ECRelationshipClass>
</ECSchema>
例如在该项目中,在ECRelationshipClass部分,Source中包含名为Widget的EC类,而Target中拥有名为Gadget1和Gadget2的EC类。通过代码给元素赋予EC实例,得到的结果见下图:

在这里插入图片描述

ItemType概念简述

ItemType是基于EC计数开发更容易使用的功能,是EC的简化形式,它可以附加到元素,模型与文件中。ItemType作为特殊的ECClass,具有ECClass的部分功能。与Schema相比,ItemType具有以下特点:

  • 不支持继承
  • 为每个基元属性提供默认值
  • 不支持自定义属性
  • 仅支持部分属性类型
  • 具有ItemType工具,使用更加便捷

对于从未接触过工程属性概念的用户来说,这里笔者强烈建议您首先学习ItemType的使用方法,因为其具有图形界面工具,可以更直观的对工程属性进行表达,同时ItemType更加简单,容易上手。
在这里插入图片描述
在这里插入图片描述

CustomProperty

将ItemType附加到主机以生成项(Item)时,每个CustomProperty成为项(Item)中的属性值。它的名称具有唯一性,这个名称也是是用户所看到的名称,同时内部会创建一个用户看不到的内部名称与ID,它支持integer、boolean或string等类型。同时可设置彼此的优先级以控制属性在界面上的显示顺序,创建时他会给出一个默认值。

ItemType

ItemType是定义CustomProperties的命名集合,可以将其附加到元素、模型和文件上。在此过程中就产生了一个“项”(Item),其中每个ItemType的CustomProperty定义都成为一个属性,项中的每个值都将根据对应的CustomProperty设置的默认值进行初始化。

ItemTypeLibrary

ItemTypeLibrary是定义ItemTypes和CustomPropertyTypes的命名集合。注意,文件中的库名称不可重名。

  • 30
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值