/// <summary> /// Обход объектов. Объекты геометрии текущего документа попадают в словарь /// УДАЛЕНИЕ ДУБЛИКАТОВ СВОЙСТВ если они есть в существующем XML /// </summary> /// <param name="object"></param> /// <returns></returns> private SurveyObjectResult SurveyObject(XML.St.Object @object) { @object.PropsCorrection(); SurveyObjectResult result = SurveyObjectResult.RegularObject; if (String.IsNullOrEmpty(@object.Name) || String.IsNullOrEmpty(@object.ClassCode)) { result = SurveyObjectResult.InvalidObject; } else if (@object.NestedObjects.Count == 0 && !String.IsNullOrEmpty(@object.SceneObjectId)) { string[] splitted = @object.SceneObjectId.Split('|'); if (splitted.Length > 1) { string id = splitted[1]; if (AddedGeometryItemsLookUp.ContainsKey(id)) { //Если есть объекты с дублирующимися id, то их нужно будет удалить result = SurveyObjectResult.InvalidObject; } else { ModelItem item = SearchForIDInCurrDoc(id); if (item != null && item.HasGeometry) { //Это объект геометрии этого документа @object.NavisItem = item; AddedGeometryItemsLookUp.Add(id, @object); result = SurveyObjectResult.GeometryObjectCurrDoc; } else { //Видимо это объект геометрии добавленный в другом документе result = SurveyObjectResult.GeometryObjectOtherDoc; } } } } if (result == SurveyObjectResult.RegularObject) { List <XML.St.Object> nestedObjectsValid; List <XML.St.Object> geometryObjectsCurrDoc; List <XML.St.Object> geometryObjectsOtherDoc; List <XML.St.Object> displayObjects; List <XML.St.Object> resetObjects; SurveyNestedObjects(@object.NestedObjects, out nestedObjectsValid, out geometryObjectsCurrDoc, out geometryObjectsOtherDoc, out displayObjects, out resetObjects); @object.NestedObjects = nestedObjectsValid; @object.NestedDisplayObjects = displayObjects; //больше не поменяются @object.NestedGeometryObjectsCurrDoc = geometryObjectsCurrDoc; @object.NestedGeometryObjectsOtherDoc = geometryObjectsOtherDoc; //больше не поменяются @object.ResetNestedObjects = resetObjects; //может поменяться если удалять все объекты, включая те, что из других документов } return(result); }
/// <summary> /// ВЫЗЫВАЕТСЯ НАЖАТИЕМ КНОПКИ В ОКНЕ /// Создает новый объект в дереве структуры и добавляет в словарь /// </summary> /// <param name="parent"></param> /// <param name="item"></param> public void CreateNewModelObject(XML.St.Object parent, ModelItem item) { string replacementName, baseName, exportName, strId; bool contains = ItemAdded(item, out baseName, out exportName, out replacementName, out strId); if (strId == null) { //если id нет, то принять за id обычное имя strId = baseName; replacementName = baseName; contains = AddedGeometryItemsLookUp.ContainsKey(strId); if (contains) { } } if (!contains /*&& strId != null*/)//Добавлять только если объект еще не был добавлен и имеет id { XML.St.Object @object = new XML.St.Object() { Name = !String.IsNullOrWhiteSpace(exportName) ? exportName : baseName,//replacementName - имя вместе с guid //baseName - имя в модели Navis. Оно не подходит так как может быть определено служебное свойство для имени при экспорте SceneObjectId = replacementName, NavisItem = item, }; //Настрока ссылки на класс и заполнение списка свойств в соответствии со свойствами Navis SetObjectProps(@object, item.PropertyCategories, 1, 1); //Добавление в соответствующие списки родителя if (parent != null) { parent.NestedObjects.Add(@object); parent.NestedGeometryObjectsCurrDoc.Add(@object); } else { Structure.NestedObjects.Add(@object); } //Добавление в словарь поиска по id AddedGeometryItemsLookUp.Add(strId, @object); } }
/// <summary> /// Проверка, добавлен ли объект в структуру /// </summary> /// <param name="item"></param> /// <param name="baseName"></param> /// <param name="replacementName"></param> /// <param name="strId"></param> /// <returns></returns> public bool ItemAdded(ModelItem item, out string baseName, out string exportName, out string replacementName, out string strId) { baseName = null; exportName = null; strId = null; bool baseNameTrustable; object id; FBXExport.CreateReplacementName(oState, item, out baseName, out exportName, out baseNameTrustable, out replacementName, out id, false); if (id != null) { strId = id.ToString(); return(AddedGeometryItemsLookUp.ContainsKey(strId)); } else { return(false); } }