예제 #1
0
 private void OnImportedModel(GameObject obj, string path)
 {
     if (useCache && !objectCache.ContainsKey(lastModelCacheKey))
     {
         objectCache.Add(lastModelCacheKey, obj);
     }
     ImportedModel?.Invoke(obj, path);
 }
예제 #2
0
        private void getModels(string filePath)
        {
            Stream        stream            = null;
            ImportedModel currentModel      = null;
            IParameterSet currentSet        = null;
            IGroup        group             = null;
            bool          parametersXmlArea = true;

            //int i = 0;
            try {
                using (XmlReader reader = ProjectBase.getXmlReader(filePath, out stream)) {
                    string modelClass;
                    string name;
                    //reader.ReadToFollowing("models");
                    while (reader.Read() && parametersXmlArea)
                    {
                        switch (reader.Name)
                        {
                        case "spectra":
                            if (reader.MoveToFirstAttribute())
                            {
                                modelClass = String.Empty;
                                name       = String.Empty;
                                do
                                {
                                    switch (reader.Name)
                                    {
                                    case "name": name = reader.Value; break;

                                    case "class": modelClass = reader.Value; break;        // AvailableAssemblies.getModel(reader.Value); break;
                                    }
                                } while (reader.MoveToNextAttribute());
                                if (name != String.Empty && modelClass != String.Empty)
                                {
                                    _importedModels.Add(currentModel = new ImportedModel(modelClass, name));
                                    _modelNames.Add(name);
                                }
                            }
                            reader.MoveToElement();
                            break;

                        case "spectrum":
                            //only start elemement has attributes. end elements are not analysed
                            if (reader.IsStartElement())
                            {
                                if (currentModel == null)
                                {
                                    throw new Exception();
                                }
                                //if (currentSet != null)
                                //    currentModel.parameters.Add(currentSet);
                                if (reader.ReadToFollowing("ps"))
                                {
                                    currentSet = new ParameterSet();
                                }
                            }
                            else
                            {
                                currentModel.parameters.Add(currentSet);
                                reader.MoveToElement();
                                currentSet = null;
                            }
                            break;

                        case "group":
                            if (reader.HasAttributes)
                            {
                                if (currentSet == null)
                                {
                                    throw new Exception();
                                }
                                //while (reader.Read()) { //groups
                                if (reader.Name == "group")
                                {
                                    XmlReader groupReader = reader.ReadSubtree();
                                    group = SpectrumBase.getGroup(groupReader, null, currentModel.model);
                                    currentSet.addGroup(group);
                                    groupReader.Close();
                                }
                            }
                            break;

                        case "models": if (!reader.HasAttributes)
                            {
                                parametersXmlArea = false;
                            }
                            break;
                        }
                    }
                    if (_modelNames.Count > 0)
                    {
                        _modelNames.Insert(0, "(none)");
                    }
                }
            } catch (Exception) {
                throw new ImportException(String.Format("Failed to import parameters from {0}", filePath));
            } finally {
                if (stream != null)
                {
                    stream.Close();
                }
            }
            if (_modelNames.Count == 0)
            {
                throw new ImportException(String.Format("{0}\ndoesn't contain any importable parameter values.", filePath));
            }
        }