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 = "" }); } }
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); }