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(); } } }
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(); } } }
/// <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(); } } }