public static FileState ParseFile(string filePath, out ChangeSet changes)
        {
            if (!IsValidRhinoFile(filePath))
            {
                changes = null;
                return(null);
            }
            //opening the store, and the file and comparing the contents
            using (var file = File3dm.Read(filePath))
            {
                string             tetherJson = file.Strings.GetValue(RvcRhinoFileTether.RvcTetherKey);
                string             dirPath    = Path.GetDirectoryName(filePath);
                RvcRhinoFileTether tether;
                RvcVersion         version = null;
                if (tetherJson == null)
                {
                    version = new RvcVersion();
                    tether  = new RvcRhinoFileTether(version.Id);
                }
                else
                {
                    tether  = JsonConvert.DeserializeObject <RvcRhinoFileTether>(tetherJson);
                    version = RvcVersion.ReadRootVersion(Path.Combine(dirPath, RvcRhinoFileTether.RvcArchiveDirectoryName, tether.RvcId.ToString()));
                }
                RvcArchive archive = new RvcArchive(tether, version, Path.GetDirectoryName(filePath));

                using (var store = new DataStore(filePath, tether.RvcId))
                {
                    return(ParseFile(file, store, version, out changes));
                }
            }
        }
        private static FileState ParseFile(File3dm file, DataStore store, RvcVersion version, out ChangeSet changes)
        {
            FileState             state           = null;
            List <IFileDataTable> parsedTableList = new List <IFileDataTable>();
            //opening the store, and the file and comparing the contents
            List <Type>        memberTypes;
            List <string>      tableNames;
            List <IEnumerable> tables3dm   = GetAllTables(file, out memberTypes, out tableNames);
            ChangeSet          fileChanges = new ChangeSet();

            for (int i = 0; i < tables3dm.Count; i++)
            {
                ChangeSet      tableChanges;
                IFileDataTable parsedTable = TableUtil.ParseTableData(tables3dm[i], tableNames[i], memberTypes[i], version, store, out tableChanges);
                parsedTableList.Add(parsedTable);
                fileChanges = ChangeSet.Merge(fileChanges, tableChanges);
            }

            //populating the file state
            state = new FileState(store, version.AddDownStreamVersion(fileChanges));
            foreach (var table in parsedTableList)
            {
                state.Tables.Add(table);
            }
            changes = fileChanges;
            return(state);
        }
示例#3
0
        public static IFileDataTable ParseTableData(IEnumerable table3dm, string tableName, Type dataType, RvcVersion version, DataStore store,
                                                    out ChangeSet changes)
        {
            IFileDataTable refTable = version.State.GetMatchingTable(dataType, tableName);

            if (refTable == null)
            {
                refTable = CreateTableInstance(dataType);
                version.State.Tables.Add(refTable);
                version.State.Store = store;
            }
            changes = EvaluateDiffWith3dmData(refTable, table3dm, ref store);
            return(refTable.ApplyChangeSet(changes));
        }
 public FileState(DataStore store, RvcVersion version) : this()
 {
     Store   = store;
     Version = version;
 }