Ejemplo n.º 1
0
        /// <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);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// ВЫЗЫВАЕТСЯ НАЖАТИЕМ КНОПКИ В ОКНЕ
        /// Очистить узел от добавленных к нему объектов геометрии Navis
        /// </summary>
        /// <param name="parent"></param>
        public void ResetNestedObjects(XML.St.Object parent)
        {
            foreach (XML.St.Object obj in parent.NestedGeometryObjectsCurrDoc)
            {
                //Каждый объект геометрии удалить из словаря
                string[] splitted = obj.SceneObjectId.Split('|');
                string   id       = splitted[1];
                AddedGeometryItemsLookUp.Remove(id);
            }

            //Сброс списка вложенных
            parent.NestedObjects = new List <XML.St.Object>(parent.ResetNestedObjects);
            //Очистить список объектов геометрии
            parent.NestedGeometryObjectsCurrDoc = new List <XML.St.Object>();

            parent.NotifyPropertyChanged();
        }
Ejemplo n.º 3
0
        /// <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);
            }
        }
Ejemplo n.º 4
0
        /// <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);
            }
        }