<?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" displayLabel="MyClassDisLab" isDomainClass="True">
<ECProperty propertyName="PropStr" typeName="string" />
<ECProperty propertyName="PropDou" typeName="double" />
<ECArrayProperty propertyName="PropArrStruct" typeName="MyStructClass" minOccurs="0" maxOccurs="unbounded" isStruct="True" />
</ECClass>
</ECSchema>
如上所示的ECSchema中,在“MyClass”下的“PropArrStruct”是一个结构体数组类型的属性,我们在对元素添加“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 (0==cnt)
{
DgnECInstanceEnabler instanceEnabler = DgnECManager.Manager.ObtainInstanceEnabler(Bentley.MstnPlatformNET.Session.Instance.GetActiveDgnFile(), ecclass);
StandaloneECDInstance instance = instanceEnabler.SharedWipInstance;
instance.SetString("PropStr", "MyVal");
instance.SetDouble("PropDou", 200.0);
IECPropertyValue iECPropVal = instance["PropArrStruct"];
IECArrayValue iECArrVal = iECPropVal as IECArrayValue;
IECStructValue ecStruVal = iECArrVal[0] as IECStructValue;
ecStruVal["StructPropInt"].IntValue = 444;
ecStruVal["StructPropStr"].StringValue = "AAA";
ecStruVal = iECArrVal[1] as IECStructValue;
ecStruVal["StructPropInt"].IntValue = 555;
ecStruVal["StructPropStr"].StringValue = "BBB";
instanceEnabler.CreateInstanceOnElement(ele, instance, false);
}
}