EC属性之结构体


<?xml version="1.0" encoding="utf-8"?>
<ECSchema schemaName="MyECSchema" nameSpacePrefix="MyNSPre" version="1.0" description="MyDesc" displayLabel="MyDisLab" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.2.0">
    <ECClass typeName="MyStructClass" isStruct="True" isDomainClass="False">
        <ECProperty propertyName="StructPropStr" typeName="string" />
        <ECProperty propertyName="StructPropInt" typeName="int" />
    </ECClass>
    <ECClass typeName="MyClass" description="MyDesc" isDomainClass="True">
        <ECProperty propertyName="PropStr" typeName="string" />
        <ECProperty propertyName="PropDou" typeName="double" />
        <ECStructProperty propertyName="PropStruct" typeName="MyStructClass" />
    </ECClass>
</ECSchema>

如上所示的ECSchema中,在“MyClass”下的“PropStruct”是一个结构体类型的属性,我们在对元素添加“MyClass”类型属性时,可以参考如下代码对数组类型的EC属性赋值:

DgnECManager manager = DgnECManager.Manager;
            FindInstancesScope scope = FindInstancesScope.CreateScope(ele, new FindInstancesScopeOption(DgnECHostType.Element, true));
            FindInstancesScope scopeTemp = FindInstancesScope.CreateScope(Session.Instance.GetActiveDgnFile(), new FindInstancesScopeOption());
            int verMaj = 01, verMin = 0;
            IECSchema ecschema = DgnECManager.Manager.LocateSchemaInScope(scopeTemp, "MyECSchema", verMaj, verMin, SchemaMatchType.Latest);
            if (ecschema == null)
            {
                return;
            }
            IECClass ecclass = ecschema.GetClass("MyClass");
            if (ecclass == null)
            {
                return;
            }
            ECQuery query = new ECQuery(ecclass);
            using (DgnECInstanceCollection ecInstances = manager.FindInstances(scope, query))
            {
                int cnt = ecInstances.Count();
                if (cnt > 0)
                {
                    foreach (IDgnECInstance dgnEcIns in ecInstances)
                    {
                        dgnEcIns.SetString("PropStr", "MyNewVal");
                        dgnEcIns.WriteChanges();
                    }
                    return;
                }
                DgnECInstanceEnabler instanceEnabler = DgnECManager.Manager.ObtainInstanceEnabler(Bentley.MstnPlatformNET.Session.Instance.GetActiveDgnFile(), ecclass);
                StandaloneECDInstance instance = instanceEnabler.SharedWipInstance;
                instance.SetString("PropStr", "MyVal");
                instance.SetDouble("PropDou", 200.0);
                instance.SetString("PropStruct.StructPropStr", "MyStructPropVal");
                instanceEnabler.CreateInstanceOnElement(ele, instance, false);
            }