/// <summary> 执行外部命令,并且在执行命令之前,自动将 事务打开</summary> /// <param name="cmd">要执行的命令</param> public static void ExecuteCommand(ExternalCommand cmd) { using (DocumentModifier docMdf = new DocumentModifier(openDebugerText: true)) { try { // 刷新所有的全局选项到内存中 DbXdata.LoadAllOptionsFromDbToMemory(docMdf); // var impliedSelection = docMdf.acEditor.SelectImplied().Value; var res = cmd(docMdf, impliedSelection); // switch (res) { case ExternalCmdResult.Commit: docMdf.acTransaction.Commit(); break; case ExternalCmdResult.Cancel: docMdf.acTransaction.Abort(); break; default: docMdf.acTransaction.Abort(); break; } } catch (System.Exception ex) { docMdf.acTransaction.Abort(); // Abort the transaction and rollback to the previous state MessageBox.Show(ex.AppendMessage(), @"出错", MessageBoxButtons.OK, MessageBoxIcon.Error); } } }
/// <summary> 根据 AutoCAD 中的几何图形构造出完整的路基横断面信息系统 </summary> public ExternalCmdResult ConstructSections(DocumentModifier docMdf, SelectionSet impliedSelection) { _docMdf = docMdf; SQUtils.SubgradeEnvironmentConfiguration(docMdf); // 方法一:在界面中选择指定的断面 // var axisLines = SQUtils.SelecteSectionLines(docMdf.acEditor); // 方法二:直接提取整个文档中所有的断面 var axisLines = SQUtils.GetAllSectionLines(docMdf.acEditor); if (axisLines != null && axisLines.Count > 0) { // 先检查以前是否进行过横断面构造,免得由于误点击而将原来的数据删除 bool hasConstructed = true; // if (hasConstructed) { var res = MessageBox.Show("是否要重新构造横断面系统?\r\n此操作会覆盖以前的横断面系统数据!", "提示", MessageBoxButton.YesNo, MessageBoxImage.Information); if (res == MessageBoxResult.No) { return(ExternalCmdResult.Cancel); } } var f = new SectionsConstructorForm(docMdf, axisLines); f.ShowDialog(); // var stations = f.SectionAxes.Select(r => r.XData.Station).ToArray(); //检查是否有重复的桩号出现 var duplicated = stations.GroupBy(x => x).Where(g => g.Count() > 1).ToArray(); if (duplicated.Length > 0) { MessageBox.Show("路基系统中出现重复的桩号,请核对后再操作!\r\n重复的桩号见命令行提示。", "提示", MessageBoxButton.OK, MessageBoxImage.Error); docMdf.WriteLineIntoDebuger("重复的桩号,重复的次数"); foreach (var d in duplicated) { docMdf.WriteLineIntoDebuger(d.Key, d.Count()); } } else { // 将桩号从小到大排序 Array.Sort(stations); Options_Collections.AllSortedStations = stations; DbXdata.FlushXData(docMdf, DbXdata.DatabaseXdataType.AllSortedStations); } } else { MessageBox.Show("未找到有效的横断面轴线,请核对后再操作!", "提示", MessageBoxButton.OK, MessageBoxImage.Information); } return(ExternalCmdResult.Commit); }
internal static ExternalCommandResult DebugInAddinManager(ExternalCommand cmd, SelectionSet impliedSelection, ref string errorMessage, ref IList <ObjectId> elementSet) { var dat = new DllActivator_RESD(); dat.ActivateReferences(); using (var docMdf = new DocumentModifier(true)) { try { // 先换个行,显示效果更清爽 docMdf.WriteNow("\n"); // 刷新所有的全局选项到内存中 DbXdata.LoadAllOptionsFromDbToMemory(docMdf); // 运行具体的命令 var canCommit = cmd(docMdf, impliedSelection); // switch (canCommit) { case ExternalCmdResult.Commit: docMdf.acTransaction.Commit(); return(ExternalCommandResult.Succeeded); break; case ExternalCmdResult.Cancel: docMdf.acTransaction.Abort(); return(ExternalCommandResult.Cancelled); break; default: docMdf.acTransaction.Abort(); return(ExternalCommandResult.Cancelled); break; } } catch (Exception ex) { docMdf.acTransaction.Abort(); // Abort the transaction and rollback to the previous state errorMessage = ex.AppendMessage(); return(ExternalCommandResult.Failed); } } }
public ExternalCmdResult EditCriterion(DocumentModifier docMdf, SelectionSet impliedSelection) { // var allXdataTypes = DbXdata.GetAllXdataTypes(); var handledXdataTypes = DbXdata.DatabaseXdataType.General | DbXdata.DatabaseXdataType.LayerNames; // 在执行此方法前,已经通过“DbXdata.LoadAllOptionsFromDbToMemory”方法,将文档中的通用选项加载到了内存中,所以不需要再特别地调用 RefreshOptionsFromDb()方法了。 //DbXdata.RefreshOptionsFromDb(docMdf, handledXdataTypes); var f = new Form_CriterionEditor(docMdf); var res = f.ShowDialog(null); if (res == DialogResult.OK) { DbXdata.FlushXData(docMdf, handledXdataTypes); } else if (res == DialogResult.Cancel) { // 将内存中对全局选项的修改进行还原,还原的方法就是重新从数据库中加载修改前的数据。 DbXdata.RefreshOptionsFromDb(docMdf, handledXdataTypes); } return(ExternalCmdResult.Commit); }
private ExternalCmdResult SetSubgradeEnvir(DocumentModifier docMdf, SelectionSet impliedSelection) { _docMdf = docMdf; // var allXdataTypes = DbXdata.GetAllXdataTypes(); var handledXdataTypes = DbXdata.DatabaseXdataType.RangeBlocks | DbXdata.DatabaseXdataType.SoilRockRange; // 在执行此方法前,已经通过“DbXdata.LoadAllOptionsFromDbToMemory”方法,将文档中的通用选项加载到了内存中,所以不需要再特别地调用 RefreshOptionsFromDb()方法了。 //DbXdata.RefreshOptionsFromDb(docMdf, handledXdataTypes); // var fm = new Form_SubgradeEnvir(docMdf); var res = fm.ShowDialog(); if (res == DialogResult.OK) { DbXdata.FlushXData(docMdf, handledXdataTypes); } else if (res == DialogResult.Cancel) { // 将内存中对全局选项的修改进行还原,还原的方法就是重新从数据库中加载修改前的数据。 DbXdata.RefreshOptionsFromDb(docMdf, handledXdataTypes); } return(ExternalCmdResult.Commit); }