public void ClassSelectionChanged()
        {
            PropsToWrite.Clear();
            if (string.IsNullOrEmpty(SelectedClass))
            {
                return;
            }
            string schemaName;
            int    marjornum, minornum;

            if (!Extension.Utilities.TryParseSchemaString(SelectedSchema, out schemaName, out marjornum, out minornum))
            {
                return;
            }
            BDE.FindInstancesScope scope   = BDE.FindInstancesScope.CreateScope(Program.GetActiveDgnFile(), new BDE.FindInstancesScopeOption());
            BES.IECSchema          schema  = BDE.DgnECManager.Manager.LocateSchemaInScope(scope, schemaName, marjornum, minornum, BES.SchemaMatchType.Exact);
            BES.IECClass           ecClass = schema.GetClass(SelectedClass);

            foreach (BES.IECProperty ecProp in ecClass.Properties(false))
            {
                PropsToWrite.Add(new PropertyToWrite {
                    PropertyName = ecProp.Name, PropertyType = ecProp.Type.Name, PropertyValue = ""
                });
            }
        }
示例#2
0
        protected override bool OnDataButton(BD.DgnButtonEvent ev)
        {
            BD.HitPath hitPath = DoLocate(ev, true, 1);
            if (null != hitPath)
            {
                InstanceToWrite instanceInfo = (WriteInstanceOnElementView.Instance.DataContext as WriteInstanceOnElementViewModel).GetInstanceToWrite();
                if (string.IsNullOrEmpty(instanceInfo.SchemaName) || string.IsNullOrEmpty(instanceInfo.ClassName) || instanceInfo.Properties.Count == 0)
                {
                    mc.StatusPrompt = "请先选择要附加的class";
                    return(false);
                }
                BDEC.FindInstancesScope scope  = BDEC.FindInstancesScope.CreateScope(Program.GetActiveDgnFile(), new BDEC.FindInstancesScopeOption());
                BES.IECSchema           schema = BDEC.DgnECManager.Manager.LocateSchemaInScope(scope, instanceInfo.SchemaName, instanceInfo.MajorVersion, instanceInfo.MinorVersion, BES.SchemaMatchType.Exact);
                BDE.Element             ele    = hitPath.GetHeadElement();

                BES.ECClass class1 = schema.GetClass(instanceInfo.ClassName) as BES.ECClass;
                BDEC.DgnECInstanceEnabler instanceEnabler = BDEC.DgnECManager.Manager.ObtainInstanceEnabler(Program.GetActiveDgnFile(), class1);
                BEI.StandaloneECDInstance instance        = instanceEnabler.SharedWipInstance;
                foreach (var pInfo in instanceInfo.Properties)
                {
                    switch (pInfo.PropertyType.ToLower())
                    {
                    case "string":
                        instance.MemoryBuffer.SetStringValue(pInfo.PropertyName, -1, pInfo.GetValueAsString());
                        break;

                    case "boolean":
                        instance.MemoryBuffer.SetBooleanValue(pInfo.PropertyName, -1, pInfo.GetValueAsBoolean());
                        break;

                    case "int":
                        instance.MemoryBuffer.SetIntegerValue(pInfo.PropertyName, -1, pInfo.GetValueAsInt());
                        break;

                    case "double":
                        instance.MemoryBuffer.SetDoubleValue(pInfo.PropertyName, -1, pInfo.GetValueAsDouble());
                        break;
                    }
                }
                instanceEnabler.CreateInstanceOnElement(ele, instance, false);
                mc.StatusPrompt  = "附加完成";
                mc.StatusMessage = $"将{instanceInfo.ClassName}附加到ID:{ele.ElementId}物体上";
            }

            return(true);
        }
        public void SchemaSelectionChanged()
        {
            ImportedClasses = new ObservableCollection <string>();
            SelectedClass   = string.Empty;
            string schemaName;
            int    majornum, minornum;

            if (!Extension.Utilities.TryParseSchemaString(SelectedSchema, out schemaName, out majornum, out minornum))
            {
                return;
            }

            BDE.FindInstancesScope scope  = BDE.FindInstancesScope.CreateScope(Program.GetActiveDgnFile(), new BDE.FindInstancesScopeOption());
            BES.IECSchema          schema = BDE.DgnECManager.Manager.LocateSchemaInScope(scope, schemaName, majornum, minornum, BES.SchemaMatchType.Exact);
            if (schema == null)
            {
                return;
            }
            foreach (BES.IECClass ecClass in schema.GetClasses())
            {
                ImportedClasses.Add(ecClass.Name);
            }
        }
/*-----------------------------------------------------------------------------*/
        /// <summary>
        /// checks the active model
        /// does simple walk of  the  dgn file to look for schema that are not managed by the plugin.
        /// </summary>
        /// <param name="connection">The connection to  the  active dgn file.</param>
        /// <returns>true if a schema is found in model</returns>
/*-----------------------------------------------------------------------------*/
        public static bool FindEmbededSchemas(ECSR.RepositoryConnection connection,
                                              List <string> schemas)
        {
            bool bStatus = false;

            System.Collections.Generic.IList <ECOS.IECSchema> schemaList;
            schemaList = new System.Collections.Generic.List <ECOS.IECSchema>();
            ECPS.PersistenceService pService = ECPS.PersistenceServiceFactory.GetService();
            string[] schemaNames             = pService.GetSchemaFullNames(connection);
            object   schemaContext           = pService.GetSchemaContext(connection);

            bool bFirstOne = true;

            if ((schemaNames.Length <= 0) || (schemaNames.Length == 2) &&
                IsOPMBaseSchema(schemaNames))
            {
                CSVReporter.writeLine(strCurrentProjectName,
                                      BVSchemaChecker.ComApp.ActiveDesignFile.Name,
                                      BVSchemaChecker.ComApp.ActiveModelReference.Name,
                                      "", true);
                return(bStatus);
            }
            else
            {
                //if the file is openned in OPM then OpenPlant and OpenPlant_3D are available by default.
                //if OPM host then schemacontext.managed <3 or those not in there are are OP and OP3D
                bStatus = false;
                foreach (string fullSchemaName in schemaNames)
                {
                    ECOS.IECSchema schema = Bentley.ECObjects.ECObjects.LocateSchema(
                        fullSchemaName, ECOS.SchemaMatchType.LatestCompatible, null, schemaContext);
                    BDGNP.PersistenceStrategy pStrategy;
                    pStrategy = BDGNP.DgnECPersistence.GetPersistenceStrategiesForSchema(connection, schema);

                    if (bFirstOne)
                    {
                        bFirstOne = false;
                        if (bUseLogFile)
                        {
                            LogWriter.writeLine(
                                string.Format("FAILED: Processing File: {0} Model: {1}",
                                              BVSchemaChecker.ComApp.ActiveDesignFile.FullName,
                                              BVSchemaChecker.ComApp.ActiveModelReference.Name), true);
                        }
                    }
                    if ((!IsOnWhiteList(schema.Name)) && (!IsABDBaseSchema(schema.Name)) &&
                        (!IsOPMSchema(schema.Name)) && (!IsBRCMSchema(schema.Name)))
                    {
                        if ((s_bIsUSTN) || ((s_bIsOPM) && (((schema.Name.CompareTo("OpenPlant") != 0) &&
                                                            (schema.Name.CompareTo("OpenPlant_3D") != 0)))))
                        {
                            BVSchemaChecker.ComApp.MessageCenter.AddMessage(
                                string.Format("found {0}_{1}_{2}", schema.Name,
                                              schema.VersionMajor, schema.VersionMinor),
                                "found " + fullSchemaName, BCOM.MsdMessageCenterPriority.Info,
                                false);
                            bStatus = true;
                        }
                        if (bUseLogFile)
                        {
                            LogWriter.writeLine(string.Format("\t Found Schema {0} in the file", fullSchemaName), false);
                        }
                        //this is a FAILED line
                        if ((s_bIsUSTN) || ((s_bIsOPM) && (((schema.Name.CompareTo("OpenPlant") != 0) &&
                                                            (schema.Name.CompareTo("OpenPlant_3D") != 0)))))
                        {
                            CSVReporter.writeLine(strCurrentProjectName,
                                                  BVSchemaChecker.ComApp.ActiveDesignFile.Name,
                                                  BVSchemaChecker.ComApp.ActiveModelReference.Name,
                                                  fullSchemaName, false);
                        }
                    }

                    if (!IsOnWhiteList(schema.Name) &&
                        !IsABDBaseSchema(schema.Name) && !IsOPMSchema(schema.Name) &&
                        !IsBRCMSchema(schema.Name))
                    {
                        schemas.Add(fullSchemaName);
                    }
                }
            }
            return(bStatus);
        }