Example #1
0
        private static void InsertSecantNodalLeaderWithJig(SecantNodalLeader secantNodalLeader, BlockReference blockReference)
        {
            // <msg1>Укажите точку вставки:</msg1>
            var insertionPointPrompt = Language.GetItem("msg1");

            // <msg18>Укажите точку выноски:</msg18>
            var leaderPointPrompt = Language.GetItem("msg18");

            var entityJig = new DefaultEntityJig(secantNodalLeader, blockReference, new Point3d(0, 0, 0))
            {
                PromptForInsertionPoint = insertionPointPrompt
            };

            secantNodalLeader.JigState = SecantNodalLeaderJigState.InsertionPoint;
            do
            {
                var status = AcadUtils.Editor.Drag(entityJig).Status;
                if (status == PromptStatus.OK)
                {
                    if (secantNodalLeader.JigState == SecantNodalLeaderJigState.InsertionPoint)
                    {
                        secantNodalLeader.JigState   = SecantNodalLeaderJigState.LeaderPoint;
                        entityJig.PromptForNextPoint = leaderPointPrompt;
                        entityJig.PreviousPoint      = secantNodalLeader.InsertionPoint;
                    }
                    else
                    {
                        break;
                    }

                    entityJig.JigState = JigState.PromptNextPoint;
                }
                else
                {
                    // mark to remove
                    using (AcadUtils.Document.LockDocument())
                    {
                        using (var tr = AcadUtils.Document.TransactionManager.StartTransaction())
                        {
                            var obj = (BlockReference)tr.GetObject(blockReference.Id, OpenMode.ForWrite, true, true);
                            obj.Erase(true);
                            tr.Commit();
                        }
                    }

                    break;
                }
            }while (true);

            if (!secantNodalLeader.BlockId.IsErased)
            {
                using (var tr = AcadUtils.Database.TransactionManager.StartTransaction())
                {
                    var ent = tr.GetObject(secantNodalLeader.BlockId, OpenMode.ForWrite, true, true);
                    ent.XData = secantNodalLeader.GetDataForXData();
                    tr.Commit();
                }
            }
        }
Example #2
0
        private static void InsertBreakLineWithJig(BreakLine breakLine, BlockReference blockReference)
        {
            var entityJig = new DefaultEntityJig(
                breakLine,
                blockReference,
                new Point3d(15, 0, 0));

            do
            {
                var status = AcadUtils.Editor.Drag(entityJig).Status;
                if (status == PromptStatus.OK)
                {
                    if (entityJig.JigState == JigState.PromptInsertPoint)
                    {
                        entityJig.JigState = JigState.PromptNextPoint;
                    }
                    else
                    {
                        break;
                    }
                }
                else
                {
                    // mark to remove
                    using (AcadUtils.Document.LockDocument())
                    {
                        using (var tr = AcadUtils.Document.TransactionManager.StartTransaction())
                        {
                            var obj = (BlockReference)tr.GetObject(blockReference.Id, OpenMode.ForWrite, true, true);
                            obj.Erase(true);
                            tr.Commit();
                        }
                    }

                    break;
                }
            }while (true);

            if (!breakLine.BlockId.IsErased)
            {
                using (var tr = AcadUtils.Database.TransactionManager.StartTransaction())
                {
                    var ent = tr.GetObject(breakLine.BlockId, OpenMode.ForWrite, true, true);
                    ent.XData = breakLine.GetDataForXData();
                    tr.Commit();
                }
            }
        }
Example #3
0
        /// <summary>
        /// Динамическая вставка линейного интеллектуального объекта
        /// </summary>
        /// <typeparam name="T">Тип линейного интеллектуального объекта</typeparam>
        /// <param name="linearEntity">Экземпляр линейного интеллектуального объекта</param>
        /// <param name="blockReference">Блок</param>
        public static void InsertWithJig <T>(T linearEntity, BlockReference blockReference)
            where T : SmartEntity, ILinearEntity
        {
            var nextPointPrompt = Language.GetItem("msg5");
            var entityJig       = new DefaultEntityJig(
                linearEntity,
                blockReference,
                new Point3d(20, 0, 0));

            do
            {
                var status = AcadUtils.Editor.Drag(entityJig).Status;
                if (status == PromptStatus.OK)
                {
                    entityJig.JigState           = JigState.PromptNextPoint;
                    entityJig.PromptForNextPoint = nextPointPrompt;
                    if (entityJig.PreviousPoint == null)
                    {
                        entityJig.PreviousPoint = linearEntity.MiddlePoints.Any()
                            ? linearEntity.MiddlePoints.Last()
                            : linearEntity.InsertionPoint;
                    }
                    else
                    {
                        linearEntity.RebasePoints();
                        entityJig.PreviousPoint = linearEntity.MiddlePoints.Last();
                    }
                }
                else
                {
                    if (linearEntity.MiddlePoints.Any())
                    {
                        linearEntity.EndPoint = linearEntity.MiddlePoints.Last();
                        linearEntity.MiddlePoints.RemoveAt(linearEntity.MiddlePoints.Count - 1);
                        linearEntity.UpdateEntities();
                        linearEntity.BlockRecord.UpdateAnonymousBlocks();
                    }
                    else
                    {
                        // if no middle points - remove entity
                        using (AcadUtils.Document.LockDocument())
                        {
                            using (var tr = AcadUtils.Document.TransactionManager.StartTransaction())
                            {
                                var obj = (BlockReference)tr.GetObject(blockReference.Id, OpenMode.ForWrite, true, true);
                                obj.Erase(true);
                                tr.Commit();
                            }
                        }
                    }

                    break;
                }
            }while (true);

            if (!linearEntity.BlockId.IsErased)
            {
                using (var tr = AcadUtils.Database.TransactionManager.StartTransaction())
                {
                    var ent = tr.GetObject(linearEntity.BlockId, OpenMode.ForWrite, true, true);
                    ent.XData = linearEntity.GetDataForXData();
                    tr.Commit();
                }
            }
        }
        private static void InsertLevelMarkWithJig(LevelMark levelMark, BlockReference blockReference)
        {
            // <msg11>Укажите точку начала отсчета:</msg11>
            var basePointPrompt = Language.GetItem("msg11");

            // <msg12>Укажите точку уровня:</msg12>
            var levelPointPrompt = Language.GetItem("msg12");

            // <msg13>Укажите точку положения отметки уровня:</msg13>
            var levelMarkPositionPointPrompt = Language.GetItem("msg13");

            var entityJig = new DefaultEntityJig(levelMark, blockReference, new Point3d(0, 0, 0))
            {
                PromptForInsertionPoint = basePointPrompt
            };

            levelMark.LevelMarkJigState = LevelMarkJigState.InsertionPoint;
            do
            {
                var status = AcadUtils.Editor.Drag(entityJig).Status;
                if (status == PromptStatus.OK)
                {
                    if (levelMark.LevelMarkJigState == LevelMarkJigState.InsertionPoint)
                    {
                        levelMark.LevelMarkJigState  = LevelMarkJigState.ObjectPoint;
                        entityJig.PromptForNextPoint = levelPointPrompt;
                        entityJig.PreviousPoint      = levelMark.InsertionPoint;
                    }
                    else if (levelMark.LevelMarkJigState == LevelMarkJigState.ObjectPoint)
                    {
                        levelMark.LevelMarkJigState  = LevelMarkJigState.EndPoint;
                        entityJig.PromptForNextPoint = levelMarkPositionPointPrompt;
                        levelMark.ObjectPoint        = levelMark.EndPoint;
                        entityJig.PreviousPoint      = levelMark.ObjectPoint;
                    }
                    else
                    {
                        break;
                    }

                    entityJig.JigState = JigState.PromptNextPoint;
                }
                else
                {
                    // mark to remove
                    using (AcadUtils.Document.LockDocument())
                    {
                        using (var tr = AcadUtils.Document.TransactionManager.StartTransaction())
                        {
                            var obj = (BlockReference)tr.GetObject(blockReference.Id, OpenMode.ForWrite, true, true);
                            obj.Erase(true);
                            tr.Commit();
                        }
                    }

                    break;
                }
            }while (true);

            if (!levelMark.BlockId.IsErased)
            {
                using (var tr = AcadUtils.Database.TransactionManager.StartTransaction())
                {
                    var ent = tr.GetObject(levelMark.BlockId, OpenMode.ForWrite, true, true);
                    ent.XData = levelMark.GetDataForXData();
                    tr.Commit();
                }
            }
        }
        private static void InsertGroundLineWithJig(GroundLine groundLine, BlockReference blockReference)
        {
            var nextPointPrompt = Language.GetItem(Invariables.LangItem, "msg5");
            var entityJig       = new DefaultEntityJig(
                groundLine,
                blockReference,
                new Point3d(20, 0, 0));

            do
            {
                var status = AcadUtils.Editor.Drag(entityJig).Status;
                if (status == PromptStatus.OK)
                {
                    entityJig.JigState           = JigState.PromptNextPoint;
                    entityJig.PromptForNextPoint = nextPointPrompt;
                    if (entityJig.PreviousPoint == null)
                    {
                        entityJig.PreviousPoint = groundLine.MiddlePoints.Any()
                            ? groundLine.MiddlePoints.Last()
                            : groundLine.InsertionPoint;
                    }
                    else
                    {
                        groundLine.RebasePoints();
                        entityJig.PreviousPoint = groundLine.MiddlePoints.Last();
                    }
                }
                else
                {
                    if (groundLine.MiddlePoints.Any())
                    {
                        groundLine.EndPoint = groundLine.MiddlePoints.Last();
                        groundLine.MiddlePoints.RemoveAt(groundLine.MiddlePoints.Count - 1);
                        groundLine.UpdateEntities();
                        groundLine.BlockRecord.UpdateAnonymousBlocks();
                    }
                    else
                    {
                        // if no middle points - remove entity
                        using (AcadUtils.Document.LockDocument())
                        {
                            using (var tr = AcadUtils.Document.TransactionManager.StartTransaction())
                            {
                                var obj = (BlockReference)tr.GetObject(blockReference.Id, OpenMode.ForWrite, true, true);
                                obj.Erase(true);
                                tr.Commit();
                            }
                        }
                    }

                    break;
                }
            }while (true);

            if (!groundLine.BlockId.IsErased)
            {
                using (var tr = AcadUtils.Database.TransactionManager.StartTransaction())
                {
                    var ent = tr.GetObject(groundLine.BlockId, OpenMode.ForWrite, true, true);
                    ent.XData = groundLine.GetDataForXData();
                    tr.Commit();
                }
            }
        }