<?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="MyClass" description="MyDesc" displayLabel="MyClassDisLab" isDomainClass="True"> <ECProperty propertyName="PropStr" typeName="string" /> <ECProperty propertyName="PropDou" typeName="double" /> <ECArrayProperty propertyName="PropArr" typeName="point3d" minOccurs="0" maxOccurs="unbounded" /> </ECClass> </ECSchema>
如上所示的ECSchema中,在“MyClass”下的“PropArr”是一个数组类型的属性,我们在对元素添加“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) { var ecVal = dgnEcIns["PropArr"]; if (ecVal.IsArray) { IECArrayValue ecArrVal = ecVal as IECArrayValue; var ecArrItemVal = ecArrVal[0]; ECDPoint3dValue ecDPtVal = ecArrVal[0] as ECDPoint3dValue; for (int i = 0; i < ecArrVal.Count; i++) { ECDPoint3dValue ecPtVal = ecArrVal[i] as ECDPoint3dValue; if (null != ecPtVal) { MessageBox.Show(ecPtVal.DPoint3dValue.ToString()); } } } } 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); IECPropertyValue iECPropVal = instance["PropArr"]; IECArrayValue iECArrVal = iECPropVal as IECArrayValue; iECArrVal[0].NativeValue = new DPoint3d(1, 2, 3); iECArrVal[1].NativeValue = new DPoint3d(4, 5, 6); iECArrVal[2].NativeValue = new DPoint3d(7, 8, 9); instanceEnabler.CreateInstanceOnElement(ele, instance, false); }