/// <summary> /// Writes the stream states to the current schema. /// </summary> /// <param name="streamStates"></param> public static void WriteStreamStateList(DgnFile File, List <StreamState> streamStates) { DgnECManager Manager = DgnECManager.Manager; FindInstancesScope scope = FindInstancesScope.CreateScope(File, new FindInstancesScopeOption(DgnECHostType.All)); IECSchema schema = RetrieveSchema(File, scope); IECClass ecClass = schema.GetClass(className); ECQuery readWidget = new ECQuery(ecClass); readWidget.SelectClause.SelectAllProperties = true; using (DgnECInstanceCollection instances = Manager.FindInstances(scope, readWidget)) { foreach (IDgnECInstance instance in instances) { instance.Delete(); } } DgnECInstanceEnabler instanceEnabler = Manager.ObtainInstanceEnabler(File, ecClass); var data = JsonConvert.SerializeObject(streamStates) as string; StandaloneECDInstance _instance = instanceEnabler.SharedWipInstance; _instance.SetAsString(propertyName, data); instanceEnabler.CreateInstanceOnFile(File, _instance); }
private static ECSchema RetrieveSchema(DgnFile File, FindInstancesScope scope) { DgnECManager Manager = DgnECManager.Manager; DgnModel model = Session.Instance.GetActiveDgnModel(); var schemas = (List <string>)Manager.DiscoverSchemasForModel(model, ReferencedModelScopeOption.All, false); var schemaString = schemas.Where(x => x.Contains(schemaName)).FirstOrDefault(); if (schemaString != null) { try { IECSchema schema = Manager.LocateSchemaInScope(scope, schemaName, 1, 0, SchemaMatchType.Latest); return((ECSchema)schema); } catch (Exception e) { return(null); } } else { return(CreateSchema(File)); } }
//WS: added internal IECSchema GetSchemaFromConnection(string fullSchemaName) { ECP.PersistenceService persistenceService = ECP.PersistenceServiceFactory.GetService(); object contextForSchemaLocate = persistenceService.GetSchemaContext(m_Connection); IECSchema schema = ECO.ECObjects.LocateSchema(fullSchemaName, ECOS.SchemaMatchType.LatestCompatible, null, contextForSchemaLocate); return(schema); }
public static ECSchema RetrieveSchema() { DgnFile File = Session.Instance.GetActiveDgnFile(); DgnECManager Manager = DgnECManager.Manager; FindInstancesScope scope = FindInstancesScope.CreateScope(File, new FindInstancesScopeOption(DgnECHostType.All)); IECSchema schema = Manager.LocateSchemaInScope(scope, schemaName, 1, 0, SchemaMatchType.Latest); return((ECSchema)schema); }
//WS: create an empty instance internal IECInstance CreateClassInstance(IECSchema Schema, string clsName) { ECOI.IECInstance pInstance = null; ECOS.IECClass pClass; //ECOS.IECSchema pSchema = LocateExampleSchema(connection, schema); pClass = Schema[clsName]; pInstance = pClass.CreateInstance(); return(pInstance); }
public InstanceImportAdapter(string filetoImport, IECSchema AppSchema) { m_filetoImport = filetoImport; m_AppSchema = AppSchema; m_importReader = new ImportReader(filetoImport); // SetIgnorePropertyNames(); ApplicationExceptions = m_importReader.ApplicationExceptions; Valid = m_importReader.IsConnectionValid; }
//WS: added: Get Schema object from schema file path. internal IECSchema GetSchemaFromFile(string schemaPath) { FileStream schemaInputFile = new FileStream(schemaPath, FileMode.Open, FileAccess.Read, FileShare.Read); IECSchema exampleSchema = null; using (ECOX.ECSchemaXmlStreamReader schemaReader = new ECOX.ECSchemaXmlStreamReader(schemaInputFile)) { exampleSchema = schemaReader.Deserialize(); } return(exampleSchema); }
public static List <CellHeaderElement> FindSPDSElementsByInstance(DgnModel model) { if (model == null) { throw new ArgumentNullException(); } DgnFile file = model.GetDgnFile(); DgnFileOwner fileOwner = new DgnFileOwner(file); IECSchema Schema = null; { // todo Правильная инициализация схемы: Schema = DgnECManager.Manager?.LocateDeliveredSchema( ECHelper.SCHEMA_NAME, VrnMajor, VrnMinor, SchemaMatchType.LatestCompatible, file); } if (Schema == null) { return(null); } IECClass commonClass = Schema.GetClass(ECCLASS_COMMON_NAME); ECQuery query = new ECQuery(commonClass); var modelConn = DgnModelRepositoryConnection.CreateConnection( new DgnECConnectionOptions(), fileOwner, model); var instColl = DgnECManager.Manager.FindDgnECInstances(modelConn, query); if (instColl == null) { return(null); } List <CellHeaderElement> resList = new List <CellHeaderElement>(); foreach (var item in instColl) { Element element; if (DgnECManager.TryGetElementInfo(modelConn, item.InstanceId, out element)) { if (element is CellHeaderElement) { resList.Add(element as CellHeaderElement); } } } return(resList); }
public static DgnECInstanceCollection RetrieveInstances() { DgnFile File = Session.Instance.GetActiveDgnFile(); DgnECManager Manager = DgnECManager.Manager; FindInstancesScope scope = FindInstancesScope.CreateScope(File, new FindInstancesScopeOption(DgnECHostType.All)); IECSchema schema = Manager.LocateSchemaInScope(scope, schemaName, 1, 0, SchemaMatchType.Latest); IECClass ecClass = schema.GetClass(className); ECQuery readWidget = new ECQuery(ecClass); readWidget.SelectClause.SelectAllProperties = true; DgnECInstanceCollection instances = Manager.FindInstances(scope, readWidget); return(instances); }
public static IECSchema GetSchema(DgnFile file) { if (file == null) { throw new ArgumentNullException(); } if (file == cachedFile && ECHelper.cachedSchema != null) { return(ECHelper.cachedSchema); } cachedSchema = null; cachedFile = file; { // todo Правильная инициализация схемы: // в.1 cachedSchema = DgnECManager.Manager.LocateDeliveredSchema(SCHEMA_NAME, VrnMajor, VrnMinor, SchemaMatchType.LatestCompatible, file); // в.2 //FindInstancesScope scope = FindInstancesScope.CreateScope(file, new FindInstancesScopeOption()); //Schema = DgnECManager.Manager.LocateSchemaInScope(scope, "SPDSTools", 1, 0, SchemaMatchType.LatestCompatible); } if (cachedSchema == null) { return(null); } IEnumerable <string> schemas = DgnECManager.Manager.DiscoverSchemas( file, ReferencedModelScopeOption.All, true); if (!schemas.Contains(cachedSchema.FullName)) { // схема не подготовлена для использования в файле: SchemaImportStatus impStat = DgnECManager.Manager.ImportSchema( cachedSchema, file, new ImportSchemaOptions( isExternal: true, importReferencedSchemas: false, registerHighPriorityLocater: true)); if (impStat != SchemaImportStatus.Success) { // todo ! throw new AddinException("Failed to initialize ECSchema: {0}", SchemaFullName); } } return(cachedSchema); }
public static IDgnECInstance RetrieveInstance(StreamState streamState) { DgnFile File = Session.Instance.GetActiveDgnFile(); DgnECManager Manager = DgnECManager.Manager; FindInstancesScope scope = FindInstancesScope.CreateScope(File, new FindInstancesScopeOption(DgnECHostType.All)); IECSchema schema = Manager.LocateSchemaInScope(scope, schemaName, 1, 0, SchemaMatchType.Latest); IECClass ecClass = schema.GetClass(className); ECQuery readWidget = new ECQuery(ecClass); readWidget.SelectClause.SelectAllProperties = true; DgnECInstanceCollection instances = Manager.FindInstances(scope, readWidget); var instance = instances.Where(x => x["Id"].StringValue == streamState.Stream.id).FirstOrDefault(); return(instance); }
//WS: create a class instance based on schema internal IECInstance CreateClassInstance(IECSchema Schema, string clsName, string propertyAccessString, string propertyValue) { ECOI.IECInstance pInstance = null; ECOS.IECClass pClass; //ECOS.IECSchema pSchema = LocateExampleSchema(connection, schema); pClass = Schema[clsName]; pInstance = pClass.CreateInstance(); try { pInstance.SetAsString(propertyAccessString, propertyValue); return(pInstance); } catch (Exception ex) { Debug.Print("{0} in {1}\n\t{2}", ex, ex.TargetSite, ex.Message); return(null); } }
/// <summary> /// Writes the stream states to the current schema. /// </summary> /// <param name="streamStates"></param> public static void WriteStreamStateList(List <StreamState> streamStates) { DgnFile File = Session.Instance.GetActiveDgnFile(); DgnECManager Manager = DgnECManager.Manager; FindInstancesScope scope = FindInstancesScope.CreateScope(File, new FindInstancesScopeOption(DgnECHostType.All)); IECSchema schema = Manager.LocateSchemaInScope(scope, schemaName, 1, 0, SchemaMatchType.Latest); if (schema == null) { schema = StreamStateListSchema.GetSchema(); } IECClass ecClass = schema.GetClass(className); ECQuery readWidget = new ECQuery(ecClass); readWidget.SelectClause.SelectAllProperties = true; using (DgnECInstanceCollection instances = Manager.FindInstances(scope, readWidget)) { foreach (IDgnECInstance instance in instances) { instance.Delete(); } } DgnECInstanceEnabler instanceEnabler = Manager.ObtainInstanceEnabler(File, ecClass); foreach (var streamState in streamStates) { var data = JsonConvert.SerializeObject(streamState) as string; StandaloneECDInstance instance = instanceEnabler.SharedWipInstance; instance.SetAsString("Id", streamState.Stream.id); instance.SetAsString("StreamData", data); instanceEnabler.CreateInstanceOnFile(File, instance); } }
public static IECClass[] GetActiveModelAllClasses() { List <IECClass> classes = new List <IECClass>(); FindInstancesScope scope = FindInstancesScope.CreateScope(Session.Instance.GetActiveDgnFile(), new FindInstancesScopeOption()); foreach (string schemastring in DgnECManager.Manager.DiscoverSchemasForModel(Session.Instance.GetActiveDgnModel(), ReferencedModelScopeOption.All, false)) { string schemaName; int majornum, minornum; if (!TryParseSchemaString(schemastring, out schemaName, out majornum, out minornum)) { throw new InvalidOperationException($"{schemastring}解析错误"); } IECSchema schema = DgnECManager.Manager.LocateSchemaInScope(scope, schemaName, majornum, minornum, SchemaMatchType.Exact); var ecClass = schema?.GetClasses(); if (ecClass != null) { classes.AddRange(ecClass); } } return(classes.ToArray()); }
public static IEnumerable <string> getSp3dXmlData(Element element, bool includeRelations = true) { var summary = new HashSet <string>(); var manager = DgnECManager.Manager; manager.ActivateDgnECEvents(); using (DgnECInstanceCollection ecInstances = manager.GetElementProperties(element, ECQueryProcessFlags.SearchAllClasses)) { foreach (IDgnECInstance inst in ecInstances) { //! если не удалить xmlns, то получим ошибку // ~ "not absolut xmlns path" string xmlData = Regex.Replace(getXmlFormECInstance(inst), " xmlns=\"[^\"]+\"", ""); summary.Add(xmlData); if (!includeRelations) { continue; } inst.SelectClause = inst.SelectClause ?? new SelectCriteria(); inst.SelectClause.SelectAllProperties = true; inst.SelectClause.SelectDistinctValues = true; DgnSelectAllRelationshipsAccessor.SetIn(inst.SelectClause, true); foreach (IECRelationshipInstance relInst in inst.GetRelationshipInstances()) { var refInst = (IDgnECInstance)relInst.Source; if (relInst.Source.ClassDefinition.Name == "P3DHangerPipeSupport") { FindInstancesScopeOption option = new FindInstancesScopeOption(DgnECHostType.Element); FindInstancesScope scope = FindInstancesScope.CreateScope(refInst.Element, option); IECSchema schema = relInst.Source.ClassDefinition.Schema; var query = QueryHelper.CreateQuery(schema, true, relInst.Source.ClassDefinition.Name); query.SelectClause.SelectAllProperties = true; query.SelectClause.SelectDistinctValues = true; var findInsts = manager.FindInstances(scope, query); if (findInsts.Count() > 0) { //! если не удалить xmlns, то получим ошибку // ~ "not absolut xmlns path" xmlData = Regex.Replace( getXmlFormECInstance(findInsts.First()), " xmlns=\"[^\"]+\"", ""); summary.Add(xmlData); } } } } } return(summary); }
public InstanceImporter(string filetoImport, IECSchema AppSchema) : base(filetoImport, AppSchema) { }