MSTN CE 获取EC属性相关疑问?

各位老师好!

       在学习MSTN ce版本时 ,通过DgnECExample 这个例子可以获取EC属性...但是在获取ElementID属性 发现出现多个ElementID值...请问为什么会出现这些?该如何筛选出我们要的某一种呢?

public void SearchInstance()
        {
            DgnECManager manager = DgnECManager.Manager;

            //作用域指定要搜索实例的元素集
            FindInstancesScope scope = FindInstancesScope.CreateScope(Bentley.MstnPlatformNET.Session.Instance.GetActiveDgnModel(), new FindInstancesScopeOption(DgnECHostType.Element, false));

            //指定要返回的实例
            ECQuery query = new ECQuery(SearchClasses());

            query.SelectClause.SelectAllProperties = true;

            DgnECInstanceCollection ecInstances = manager.FindInstances(scope, query);

            LstInstances.Items.Clear();

            //遍历获取到的实例ecInstacne

            foreach (IDgnECInstance ecInstance in ecInstances)
            {
                
                try
                {         
                    ListViewItem itemClass = new ListViewItem(ecInstance.ClassDefinition.Name);
                    itemClass.SubItems.Add("");
                    itemClass.SubItems.Add("");
                    itemClass.SubItems.Add("");
                    LstInstances.Items.Add(itemClass);

                    //获取到实例ecInstance下的类名
                    string className = ecInstance.ClassDefinition.Name;

                    
                    //MessageBox.Show(ecInstance.GetPropertyValue("all").Property.ToString());
                    //遍历类名下的所有属性名称及属性名称
                    foreach (IECProperty prop in ecInstance.ClassDefinition.Properties(true))
                    {
                        ListViewItem itemProp = new ListViewItem();
                        itemProp.SubItems.Add(prop.Name);
                        itemProp.SubItems.Add(prop.Type.Name);

                        string propName = prop.Name;
                        
                        IECPropertyValue propValue = ecInstance.GetPropertyValue(prop.Name);

                        if (propName == "ElementID")
                        {
                            //MessageBox.Show(propValue.StringValue);
                            itemProp.SubItems.Add(propValue.StringValue);
                        }

                        if (propName == "ElementDescription")
                        {
                            itemProp.SubItems.Add(propValue.StringValue);
                        }
                        //MessageBox.Show(propName +":"+ propValue);

                        LstInstances.Items.Add(itemProp);
                    }
                }
                catch (Exception ex)
                {
                    continue;
                }
                
            }

        }

        public static IECClass[] SearchClasses()
        {
            List<IECClass> classes = new List<IECClass>();

            DgnECManager manager = DgnECManager.Manager;

            List<string> schemas = (List<string>)manager.DiscoverSchemasForModel(Bentley.MstnPlatformNET.Session.Instance.GetActiveDgnModel(), ReferencedModelScopeOption.All, true);
            //MessageBox.Show(schemas.Count().ToString());
            foreach (string schemaName in schemas)
            {
                //MessageBox.Show(schemaName);
                FindInstancesScope scope = FindInstancesScope.CreateScope(Bentley.MstnPlatformNET.Session.Instance.GetActiveDgnModel(), new FindInstancesScopeOption());
                string new_scehmaName = schemaName.Substring(0, schemaName.IndexOf("."));

                IECSchema schema = DgnECManager.Manager.LocateSchemaInScope(scope, new_scehmaName, 1, 0, SchemaMatchType.Exact);

                if (schema == null)
                {
                    continue;
                }

                foreach (IECClass ecClass in schema.GetClasses())
                {
                    //MessageBox.Show(ecClass.ToString());
                    classes.Add(ecClass);
                }
            }
            return classes.ToArray();
        }

Parents Reply Children
No Data