Exemple #1
0
        public void MyMLeaderJig()
        {
            Document doc    = Application.DocumentManager.MdiActiveDocument;
            Editor   ed     = doc.Editor;
            Database db     = doc.Database;
            string   text   = null;
            bool     escape = false;

            // Get the text outside of the jig
            PromptStringOptions pso = new PromptStringOptions("\nEnter text: ");

            pso.AllowSpaces = true;
            PromptResult pr = ed.GetString(pso);

            text = pr.StringResult;

            do
            {
                PromptStringOptions pso2 = new PromptStringOptions("\nEnter Next Line: ");
                PromptResult        pr2  = ed.GetString(pso2);
                text = text + @"\P" + pr2.StringResult;
                if (pr2.StringResult == "")
                {
                    escape = true;
                }
            }while (!escape);

            if (pr.Status == PromptStatus.OK)
            {
                // Create MleaderJig
                MLeaderJig jig = new MLeaderJig(text);

                // Loop to set vertices
                bool bSuccess = true;

                for (int i = 0; i < 2; i++)
                {
                    PromptResult dragres = ed.Drag(jig);
                    bSuccess = (dragres.Status == PromptStatus.OK);

                    // A new point was added
                    if (bSuccess)
                    {
                        jig.AddVertex();
                    }
                }
                jig.RemoveLastVertex();

                // Append entity
                Transaction tr = db.TransactionManager.StartTransaction();
                using (tr)
                {
                    BlockTable       bt  = (BlockTable)tr.GetObject(db.BlockTableId, OpenMode.ForRead, false);
                    BlockTableRecord btr = (BlockTableRecord)tr.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite, false);
                    btr.AppendEntity(jig.GetEntity());
                    tr.AddNewlyCreatedDBObject(jig.GetEntity(), true);
                    tr.Commit();
                }
            }
        }
        /// <summary>Вставка мультивыноски</summary>
        /// <param name="txt">Содержимое мультивыноски</param>
        /// <param name="standardArrowhead">Стандартная стрелка. По умолчанию значение "_NONE"</param>
        public static void InsertMLeader(string txt, AutocadHelpers.StandardArrowhead standardArrowhead = AutocadHelpers.StandardArrowhead._NONE)
        {
            var doc = AcApp.DocumentManager.MdiActiveDocument;
            var ed  = doc.Editor;
            var db  = HostApplicationServices.WorkingDatabase;

            using (doc.LockDocument())
            {
                var ppo = new PromptPointOptions($"\n{Language.GetItem(LangItem, "msg16")}")
                {
                    AllowNone = true
                };
                var ppr = ed.GetPoint(ppo);
                if (ppr.Status != PromptStatus.OK)
                {
                    return;
                }

                // arrowHead
                var arrowHead = "_NONE";
                if (standardArrowhead != AutocadHelpers.StandardArrowhead.closedFilled)
                {
                    arrowHead = standardArrowhead.ToString();
                }

                // Создаем текст
                var jig = new MLeaderJig
                {
                    FirstPoint = AutocadHelpers.UcsToWcs(ppr.Value),
                    MlText     = txt,
                    ArrowName  = arrowHead
                };
                var res = ed.Drag(jig);
                if (res.Status == PromptStatus.OK)
                {
                    using (var tr = doc.TransactionManager.StartTransaction())
                    {
                        var btr = (BlockTableRecord)tr.GetObject(db.CurrentSpaceId, OpenMode.ForWrite);

                        btr.AppendEntity(jig.MLeader());
                        tr.AddNewlyCreatedDBObject(jig.MLeader(), true);
                        tr.Commit();
                    }
                }

                doc.TransactionManager.QueueForGraphicsFlush();
            }
        }
        public void MyConduitTable()
        {
            Document doc = Application.DocumentManager.MdiActiveDocument;
            Database db = doc.Database;
            Editor ed = doc.Editor;

            //Get the text oustide of the jig
            string conduits = SelectConduits();

            //Set layer for ellipse to equal _mlLayer
            Transaction trLt = db.TransactionManager.StartTransaction();
            using (trLt)
            {
                try
                {
                    LayerTable lt = (LayerTable)trLt.GetObject(db.LayerTableId, OpenMode.ForRead);

                    if (lt.Has(_mlLayer) == true)
                    {
                        db.Clayer = lt[_mlLayer];
                        trLt.Commit();
                    }
                    else
                    {
                        try
                        {
                            CreateLayer(_mlLayer);
                            db.Clayer = lt[_mlLayer];
                            trLt.Commit();
                        }
                        catch (System.Exception ex)
                        {
                            ed.WriteMessage("Error: Can't create layer");
                            trLt.Abort();
                        }
                    }
                }
                catch (System.Exception ex)
                {
                    ed.WriteMessage("error: Can't make layer current.");
                    trLt.Abort();
                }
            }   //End transaction to set layer and/or create it if doesn't exist to prevent crash.

            if (conduits == "" || conduits == null || conduits == "FAIL")
            {
                ed.WriteMessage("\nMust select at least [1] Conduit");
            }
            else
            {
                //Call ellipse command first
                bool ec = EllipseCall.EllipseJigWait();

                if (ec == true)
                {
                    //Create MLeaderJig
                    MLeaderJig jig = new MLeaderJig(conduits);

                    //Loop to set vertices
                    bool bSuccess = true, bComplete = false;
                    while (bSuccess && !bComplete)
                    {
                        PromptResult dragres = ed.Drag(jig);
                        bSuccess = (dragres.Status == PromptStatus.OK);

                        if (bSuccess)
                            jig.AddVertex();

                        bComplete = (dragres.Status == PromptStatus.None);
                        if (bComplete)
                            jig.RemoveLastVertex();
                    }

                    if (bComplete)
                    {
                        //Append entity
                        Transaction tr = db.TransactionManager.StartTransaction();
                        using (tr)
                        {
                            BlockTable bt = (BlockTable)tr.GetObject(db.BlockTableId, OpenMode.ForRead, false);
                            BlockTableRecord btr = (BlockTableRecord)tr.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite, false);
                            btr.AppendEntity(jig.GetEntity());
                            tr.AddNewlyCreatedDBObject(jig.GetEntity(), true);
                            tr.Commit();
                        }
                    }
                }
            }
        }