コード例 #1
0
        /// <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);
        }
コード例 #2
0
        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));
            }
        }
コード例 #3
0
        //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);
        }
コード例 #4
0
            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);
            }
コード例 #5
0
        //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);
        }
コード例 #6
0
        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;
        }
コード例 #7
0
        //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);
        }
コード例 #8
0
ファイル: ECHelper.cs プロジェクト: Egyuza/Bentley.simpen
        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);
        }
コード例 #9
0
            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);
            }
コード例 #10
0
ファイル: ECHelper.cs プロジェクト: Egyuza/Bentley.simpen
        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);
        }
コード例 #11
0
            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);
            }
コード例 #12
0
        //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);
            }
        }
コード例 #13
0
        /// <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);
            }
        }
コード例 #14
0
ファイル: Utilities.cs プロジェクト: DawsenSu/PDIWT_MS
        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());
        }
コード例 #15
0
        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);
        }
コード例 #16
0
 public InstanceImporter(string filetoImport, IECSchema AppSchema)
     : base(filetoImport, AppSchema)
 {
 }