Exemplo n.º 1
0
        public void CreateBlock()
        {
            using (Transaction tr = AcadFuncs.GetActiveDb().TransactionManager.StartTransaction())
            {
                // Get the block table from the drawing
                BlockTable blk_tbl = (BlockTable)tr.GetObject(
                    AcadFuncs.GetActiveDb().BlockTableId,
                    OpenMode.ForRead);

                PromptStringOptions pso = new PromptStringOptions("\nEnter new block name: ");
                pso.AllowSpaces = true;
                string blk_name = "";
                do
                {
                    PromptResult pr = AcadFuncs.GetEditor().GetString(pso);
                    if (PromptStatus.OK != pr.Status)
                    {
                        return;
                    }

                    try
                    {
                        SymbolUtilityServices.ValidateSymbolName(pr.StringResult, false);
                        if (blk_tbl.Has(pr.StringResult))
                        {
                            AcadFuncs.GetEditor().WriteMessage("\nA block with this name already exists.");
                        }
                        else
                        {
                            blk_name = pr.StringResult;
                        }
                    }
                    catch
                    {
                        AcadFuncs.GetEditor().WriteMessage("\nInvalid block name.");
                    }
                } while ("" == blk_name);

                BlockTableRecord btr = new BlockTableRecord();
                btr.Name = blk_name;

                blk_tbl.UpgradeOpen();
                ObjectId btrId = blk_tbl.Add(btr);
                tr.AddNewlyCreatedDBObject(btr, true);

                DBObjectCollection ents = SquareOfLines(5);
                foreach (Entity ent in ents)
                {
                    btr.AppendEntity(ent);
                    tr.AddNewlyCreatedDBObject(ent, true);
                }

                BlockTableRecord ms = (BlockTableRecord)tr.GetObject(blk_tbl[BlockTableRecord.ModelSpace], OpenMode.ForWrite);
                BlockReference   br = new BlockReference(AcadGeo.Point3d.Origin, btrId);
                ms.AppendEntity(br);
                tr.AddNewlyCreatedDBObject(br, true);
                tr.Commit();
            }
        }