示例#1
0
        /// <inheritdoc />
        /// <summary>
        /// Показ блока (по границе) пользователю с миганием
        /// С проверкой чертежа и блокировкой.
        /// </summary>
        public virtual void Show()
        {
            var doc = Application.DocumentManager.MdiActiveDocument;

            if (doc == null)
            {
                return;
            }
            if (doc.Database != IdBlRef.Database)
            {
                Application.ShowAlertDialog(
                    $"Переключитесь на чертеж {Path.GetFileNameWithoutExtension(IdBlRef.Database.Filename)}");
                return;
            }

            using (doc.LockDocument())
            {
                var ed  = doc.Editor;
                var ext = ExtentsToShow;
                if (_isNullExtents)
                {
                    Application.ShowAlertDialog("Границы объекта не определены.");
                }

                ed.Zoom(ext);
                IdBlRef.FlickObjectHighlight(2, 100, 100);
            }
        }
示例#2
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();
        }
示例#3
0
        private void FillDyn(Property prop, object value)
        {
            var blRef   = IdBlRef.GetObjectT <BlockReference>(OpenMode.ForWrite);
            var dynProp = blRef.DynamicBlockReferencePropertyCollection.Cast <DynamicBlockReferenceProperty>()
                          .FirstOrDefault(p => p.PropertyName.Equals(prop.Name, StringComparison.OrdinalIgnoreCase));

            SetValue(dynProp, value);
        }
示例#4
0
        protected void FillProp([CanBeNull] Property prop, object value)
        {
            if (prop == null)
            {
                return;
            }
            var blRef = IdBlRef.GetObjectT <BlockReference>(OpenMode.ForWrite);

            if (prop.Type == PropertyType.Attribute && !prop.IdAtrRef.IsNull)
            {
                var atr  = prop.IdAtrRef.GetObject <AttributeReference>(OpenMode.ForWrite);
                var text = value?.ToString() ?? string.Empty;
                if (atr.IsMTextAttribute)
                {
                    var mt = atr.MTextAttribute;
                    mt.Contents        = text;
                    atr.MTextAttribute = mt;
                    atr.UpdateMTextAttribute();
                }
                else
                {
                    atr.TextString = text;
                }

                if (!atr.IsDefaultAlignment)
                {
                    atr.AdjustAlignment(Db);
                }
            }
            else if (prop.Type == PropertyType.Dynamic)
            {
                if (value == null)
                {
                    return;
                }
                var dynProp = blRef.DynamicBlockReferencePropertyCollection.Cast <DynamicBlockReferenceProperty>()
                              .FirstOrDefault(p => p.PropertyName.Equals(prop.Name, StringComparison.OrdinalIgnoreCase));
                if (dynProp != null)
                {
                    try
                    {
                        dynProp.Value = value;
                    }
                    catch
                    {
                        Inspector.AddError(
                            $"Не удалосось установить динамический параметр {prop.Name} " +
                            $"со значением {prop.Value} в блок {BlName}",
                            IdBlRef,
                            System.Drawing.SystemIcons.Error);
                    }
                }
            }
        }
示例#5
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);
            }
        }
示例#6
0
 public void Show(Editor ed)
 {
     if (!_extendsHasCalc)
     {
         _extendsHasCalc = true;
         using (var blRef = IdBlRef.Open(OpenMode.ForRead, false, true) as BlockReference)
         {
             try
             {
                 _extents = blRef.GeometricExtents;
             }
             catch
             {
                 var ptMin = new Point3d(Position.X - Side, Position.Y - Side, 0);
                 var ptMax = new Point3d(Position.X + Side, Position.Y + Side, 0);
                 _extents = new Extents3d(ptMin, ptMax);
             }
         }
     }
     ed.Zoom(_extents);
     IdBlRef.FlickObjectHighlight(2, 100, 100);
 }
示例#7
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);
            }
        }
示例#8
0
        public void Delete()
        {
            var blRef = IdBlRef.GetObject(OpenMode.ForWrite);

            blRef.Erase();
        }
示例#9
0
 public bool Equals(Tile other)
 {
     return(IdBlRef.Equals(other.IdBlRef) &&
            Bounds.Value.IsEqualTo(other.Bounds.Value, Album.Tolerance));
 }