Пример #1
0
        public void Replace()
        {
            ObjectId idBtrWin;

            if (dictIdBtrAkrWindow == null)
            {
                dictIdBtrAkrWindow = getBtrAkrWin(UtilsReplaceWindows.Db);
            }
            dictIdBtrAkrWindow.TryGetValue(TranslatorW.BlNameNew, out idBtrWin);

            if (idBtrWin.IsNull)
            {
                throw new Exception($"Ошибка, не найден блок окна {TranslatorW.BlNameNew}.");
            }

            // Создание вхождения нового блока окнак
            var blRefNew = new BlockReference(Position, idBtrWin);

            blRefNew.SetDatabaseDefaults();
            blRefNew.Layer = Settings.Default.LayerWindows;
            // добавление его в определение блок
            var btrOwner = IdBtrOwner.GetObject(OpenMode.ForWrite) as BlockTableRecord;

            btrOwner.AppendEntity(blRefNew);
            UtilsReplaceWindows.Transaction.AddNewlyCreatedDBObject(blRefNew, true);
            // Удаление старого блока.
            var blRefOldWin = IdBlRef.GetObject(OpenMode.ForWrite, false, true) as BlockReference;

            blRefOldWin.Erase();
        }
Пример #2
0
        /// <summary>
        /// Вставка чистого блока сваи и установка текущих параметров
        /// </summary>
        public void ResetBlock()
        {
            var t     = IdBtrOwner.Database.TransactionManager.TopTransaction;
            var owner = IdBtrOwner.GetObject(OpenMode.ForWrite) as BlockTableRecord;
            var blRef = BlockInsert.InsertBlockRef(BlName, Position, owner, t);

            blRef.LayerId = LayerId;

            var oldBlRef = IdBlRef.GetObject(OpenMode.ForWrite) as BlockReference;

            oldBlRef.Erase();

            var oldProps = Properties.Select(s => (Property)s.Clone());

            Update(blRef);
            foreach (var item in Properties.Where(p => p.IsShow))
            {
                var oldProp = oldProps.First(p => p.Name == item.Name);
                FillProp(item, oldProp.Value);
            }
        }
Пример #3
0
        public bool Define(SpecTable specTable)
        {
            if (IdBlRef.IsNull)
            {
                Logger.Log.Error($"Ошибка в методе SpecItem.Define() - IdBlRef.IsNull. Недопустимая ситуация.");
                return(false);
            }
            var blRef = IdBlRef.GetObject(OpenMode.ForRead, false, true) as BlockReference;

            if (blRef == null)
            {
                Logger.Log.Error($"Ошибка в методе SpecItem.Define() - blRef == null. Недопустимая ситуация.");
                return(false);
            }

            string err = string.Empty;

            BlName = blRef.GetEffectiveName();

            if (blRef.AttributeCollection == null)
            {
                // В блоке нет атрибутов.
                err += "Нет атрибутов. ";
            }
            else
            {
                if (Regex.IsMatch(BlName, specTable.SpecOptions.BlocksFilter.BlockNameMatch, RegexOptions.IgnoreCase))
                {
                    // все атрибуты блока
                    AttrsDict = blRef.GetAttributeDictionary();

                    // Проверка типа блока
                    var typeBlock = specTable.SpecOptions.BlocksFilter.Type;
                    if (typeBlock != null)
                    {
                        DBText atrType;
                        if (AttrsDict.TryGetValue(typeBlock.BlockPropName, out atrType))
                        {
                            if (!typeBlock.Name.Equals(atrType.TextString, StringComparison.OrdinalIgnoreCase))
                            {
                                // Свойство типа не соответствует требованию
                                err += $"Свойство '{typeBlock.BlockPropName}'='{atrType.TextString}' не соответствует требуемому значению '{typeBlock.Name}'. ";
                            }
                        }
                        // В блоке нет свойства Типа
                        else
                        {
                            err += $"Нет обязательного свойства {typeBlock.BlockPropName}. ";
                        }
                    }

                    // Проверка обязательных атрибутов
                    foreach (var atrMustHave in specTable.SpecOptions.BlocksFilter.AttrsMustHave)
                    {
                        if (!AttrsDict.ContainsKey(atrMustHave))
                        {
                            err += $"Нет обязательного свойства: '{atrMustHave}'. ";
                        }
                    }

                    // определение Группы
                    DBText groupAttr;
                    if (AttrsDict.TryGetValue(specTable.SpecOptions.GroupPropName, out groupAttr))
                    {
                        Group = groupAttr.TextString;
                    }

                    // Ключевое свойство
                    DBText keyAttr;
                    if (AttrsDict.TryGetValue(specTable.SpecOptions.KeyPropName, out keyAttr))
                    {
                        Key = keyAttr.TextString;
                    }
                    else
                    {
                        err += $"Не определено ключевое свойство '{specTable.SpecOptions.KeyPropName}'. ";
                    }
                }
                // Имя блока не соответствует Regex.IsMatch
                else
                {
                    err += $"Имя блока не соответствует '{specTable.SpecOptions.BlocksFilter.BlockNameMatch}'. ";
                }
            }

            if (string.IsNullOrEmpty(err))
            {
                return(true);
            }
            else
            {
                Inspector.AddError($"Пропущен блок '{BlName}': {err}", blRef);
                return(false);
            }
        }
Пример #4
0
        public void Delete()
        {
            var blRef = IdBlRef.GetObject(OpenMode.ForWrite);

            blRef.Erase();
        }