예제 #1
0
 public BlockInfo(BlockReference blRef, string blName)
 {
     IdBtr    = blRef.DynamicBlockTableRecord;
     BlName   = blName;
     AttrsDef = AttributeInfo.GetAttrDefs(IdBtr);
     AttrsRef = AttributeInfo.GetAttrRefs(blRef);
 }
예제 #2
0
 public ProfileTile(ObjectId idBlRefProfile)
 {
     // Блок Профиля для торцевых панелей
     // Считывание атрибу названия профиля и марки профиля
     using (var blRef = idBlRefProfile.Open(OpenMode.ForRead, false, true) as BlockReference)
     {
         var atrRefs = AttributeInfo.GetAttrRefs(blRef);
         ProfileTileName = atrRefs.Where(a => a.Tag.Equals("НАЗВАНИЕ", StringComparison.OrdinalIgnoreCase))?.FirstOrDefault()?.Text;
         ProfileTileMark = atrRefs.Where(a => a.Tag.Equals("МАРКА", StringComparison.OrdinalIgnoreCase))?.FirstOrDefault()?.Text;
     }
 }
예제 #3
0
        private void defineAttrs(BlockReference blRef)
        {
            var attrs = AttributeInfo.GetAttrRefs(blRef);

            // Поиск атрибута типа квартиры
            TypeFlatAttr = attrs.Find(a => a.Tag.Equals(Options.Instance.ApartmentTypeFlatParameter, StringComparison.OrdinalIgnoreCase));
            if (TypeFlatAttr != null)
            {
                TypeFlat = TypeFlatAttr.Text.Trim();
            }
        }
예제 #4
0
        private static int removeInBtr(BlockTableRecord btr)
        {
            if (!testedBtrs.Add(btr.Id))
            {
                return(0);
            }

            int count = 0;

            List <ObjectId> innerBtrs = new List <ObjectId>();

            foreach (var idEnt in btr)
            {
                using (var ent = idEnt.GetObject(OpenMode.ForRead, false, true))
                {
                    if (ent is BlockReference)
                    {
                        var blRef    = (BlockReference)ent;
                        var attRefs  = AttributeInfo.GetAttrRefs(blRef);
                        var dublAttr = attRefs.GroupBy(a => a.Tag).Where(g => g.Skip(1).Any());
                        foreach (var atrGroup in dublAttr)
                        {
                            foreach (var atrInfo in atrGroup.Skip(1))
                            {
                                var atrRef = atrInfo.IdAtr.GetObject(OpenMode.ForWrite, false, true) as AttributeReference;
                                atrRef.Erase();
                                count++;
                            }
                        }
                        innerBtrs.Add(blRef.BlockTableRecord);
                    }
                }
            }

            foreach (var idInnerBtr in innerBtrs)
            {
                using (var innerBtr = idInnerBtr.GetObject(OpenMode.ForRead) as BlockTableRecord)
                {
                    count += removeInBtr(innerBtr);
                }
            }
            return(count);
        }
예제 #5
0
        /// <summary>
        /// Создание ведомости деталей в чертеже в указанной точке верхнего левого угла таблицы
        /// Возвращается список объектов таблицы - набор блоков
        /// </summary>
        public List <ObjectId> CreateTable(Point3d ptTopLeftTable)
        {
            List <ObjectId> res = new List <ObjectId> ();

            if (details.Count == 0)
            {
                return(res);
            }
            // Копирование блоков деталей в чертеж
            var blNames = details.GroupBy(g => g.BlockNameDetail).Select(s => s.First().BlockNameDetail).ToList();

            copyBlocks(blNames);

            var bt = db.BlockTableId.GetObject(OpenMode.ForRead) as BlockTable;
            var cs = db.CurrentSpaceId.GetObject(OpenMode.ForWrite) as BlockTableRecord;
            var t  = db.TransactionManager.TopTransaction;

            // Вставка блоков деталей и заполнение параметров
            var ptInsert   = new Point3d(ptTopLeftTable.X, ptTopLeftTable.Y - 25 * scale, 0);
            var blRefTitle = BlockInsert.InsertBlockRef(blockTitleName, ptInsert, cs, t, scale);
            var layerId    = AcadLib.Layers.LayerExt.GetLayerOrCreateNew(new AcadLib.Layers.LayerInfo(KRHelper.LayerTable));

            blRefTitle.LayerId = layerId;
            res.Add(blRefTitle.Id);

            foreach (var detail in details)
            {
                var blRefDetail = BlockInsert.InsertBlockRef(detail.BlockNameDetail, ptInsert, cs, t, scale);
                blRefDetail.LayerId = layerId;
                var atrs = AttributeInfo.GetAttrRefs(blRefDetail);
                // Заполнение параметров
                detail.SetDetailsParam(atrs);
                // определение точки вставки следующего блока
                ptInsert = defineNextPtInsert(blRefDetail);

                res.Add(blRefDetail.Id);
            }

            return(res);
        }