Beispiel #1
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);
        }
Beispiel #2
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);
        }
Beispiel #3
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);
        }