Ejemplo n.º 1
0
        /// <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);
                }
            }
        }
Ejemplo n.º 2
0
        /// <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);
        }
Ejemplo n.º 3
0
        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);
                }
            }
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
        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);
        }