Exemplo n.º 1
0
        private static LayerInfo GetLayerInfo(string name, Color color, LineWeight lw, string lt, bool isPlottable = true)
        {
            var layInfo = new LayerInfo(name)
            {
                Color      = color,
                LineWeight = lw,
                LineType   = lt,
                IsPlotable = isPlottable
            };

            layInfo.CheckLayerState();
            return(layInfo);
        }
Exemplo n.º 2
0
        protected ObjectId GetLayerForVisual(string layer)
        {
            var lay = new LayerInfo(layer ?? SymbolUtilityServices.LayerZeroName);

            return(lay.CheckLayerState());
        }
Exemplo n.º 3
0
        /// <summary>
        /// Вставка блока в чертеж - интерактивная (BlockInsertJig)
        /// </summary>
        public static ObjectId Insert(string blName, LayerInfo layer, List <Property> props, bool explode = false)
        {
            ObjectId idBlRefInsert;
            var      doc = Application.DocumentManager.MdiActiveDocument;

            if (doc == null)
            {
                return(ObjectId.Null);
            }
            var db = doc.Database;
            var ed = doc.Editor;

            using (doc.LockDocument())
                using (var t = db.TransactionManager.StartTransaction())
                {
                    var bt = (BlockTable)t.GetObject(db.BlockTableId, OpenMode.ForRead);
                    if (!bt.Has(blName))
                    {
                        throw new Exception("Блок не определен в чертеже " + blName);
                    }

                    var idBlBtr = bt[blName];
                    var pt      = Point3d.Origin;
                    var br      = new BlockReference(pt, idBlBtr);
                    br.SetDatabaseDefaults();

                    if (layer != null)
                    {
                        layer.CheckLayerState();
                        br.Layer = layer.Name;
                    }

                    var spaceBtr = (BlockTableRecord)t.GetObject(db.CurrentSpaceId, OpenMode.ForWrite);
                    idBlRefInsert = spaceBtr.AppendEntity(br);
                    t.AddNewlyCreatedDBObject(br, true);

                    if (props != null && br.IsDynamicBlock)
                    {
                        foreach (DynamicBlockReferenceProperty item in br.DynamicBlockReferencePropertyCollection)
                        {
                            var prop = props.FirstOrDefault(p =>
                                                            p.Name.Equals(item.PropertyName, StringComparison.OrdinalIgnoreCase));
                            if (prop != null)
                            {
                                try
                                {
                                    item.Value = prop.Value;
                                }
                                catch (Exception ex)
                                {
                                    Logger.Log.Error(ex,
                                                     msg: $"Ошибка типа значения для дин параметра '{item.PropertyName}' " +
                                                     $"при вставке блока '{blName}': тип устанавливаемого значение '{prop.Value.GetType()}', " +
                                                     $"а должен быть тип '{item.UnitsType}'");
                                }
                            }
                        }
                    }

                    // jig
                    var entJig = new Jigs.BlockInsertJig(br);
                    var pr     = ed.Drag(entJig);
                    if (pr.Status == PromptStatus.OK)
                    {
                        var btrBl = (BlockTableRecord)t.GetObject(idBlBtr, OpenMode.ForRead);
                        if (btrBl.HasAttributeDefinitions)
                        {
                            AddAttributes(br, btrBl, t);
                        }
                        if (explode)
                        {
                            var owner = br.BlockId.GetObject <BlockTableRecord>(OpenMode.ForWrite);
                            using (var explodes = new DBObjectCollection())
                            {
                                br.Explode(explodes);
                                foreach (Entity ent in explodes)
                                {
                                    owner.AppendEntity(ent);
                                    t.AddNewlyCreatedDBObject(ent, true);
                                    ent.Layer = br.Layer;
                                }

                                br.Erase();
                            }
                        }
                    }
                    else
                    {
                        br.Erase();
                        idBlRefInsert = ObjectId.Null;
                    }

                    t.Commit();
                }

            return(idBlRefInsert);
        }