4.基于C#的CAD二次开发-文件操作

1.操作界面

虽然很多资料里都用命令的形式进行操作,但在实际运用中,命令更多的还是用于打开交互界面窗体和方便菜单调用,日常使用还是以界面交互为主。
请添加图片描述

2.对应代码

        /// <summary>
        /// 从模板中新建文件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button1_Click(object sender, EventArgs e)
        {
            string strTemplatePath = @"E:\work\cad二次开发\基于C#的CAD二次开发\CAD模板.dwt";
            DocumentCollection docMgr1 = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager;
            Document doc1 = docMgr1.Add(strTemplatePath);
            docMgr1.MdiActiveDocument = doc1;
        }

        /// <summary>
        /// 打开现有文件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button2_Click(object sender, EventArgs e)
        {
            string strFileName =@"E:\work\cad二次开发\基于C#的CAD二次开发\CAD文件\打开测试.dwg";
            DocumentCollection docMgr1 = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager;
            if (File.Exists(strFileName))
            {
                docMgr1.Open(strFileName, false);
            }
        }

        /// <summary>
        /// 获取所有已打开的文件,根据条件激活对应文件(注释掉的部分)
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button3_Click(object sender, EventArgs e)
        {
            DocumentCollection docMgr1 = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager;
            foreach (Document doc1 in docMgr1)
            {
                /*
                if(doc1.Name=="XXXX")
                {
                    Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument=doc1;
                }
                */
                int index = dataGridView1.Rows.Add();
                dataGridView1.Rows[index].Cells[0].Value=doc1.Name;
                dataGridView1.Rows[index].Cells[1].Value = doc1.IsActive;
            }
        }

        /// <summary>
        /// 通过Database将文件在内存中打开,不显示在CAD文件界面,常用语跨文件操作、后台获取文件信息等
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button4_Click(object sender, EventArgs e)
        {
            string filename = @"E:\work\cad二次开发\基于C#的CAD二次开发\CAD文件\打开测试.dwg";
            Database db = new Database(false, true);
            db.ReadDwgFile(filename, FileOpenMode.OpenForReadAndAllShare, true, "");
            db.Dispose();//关闭内存中打开的文件
        }

        /// <summary>
        /// 保存文件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button5_Click(object sender, EventArgs e)
        {
            Document doc1 = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
            string strName = doc1.Name;
            object obj = Autodesk.AutoCAD.ApplicationServices.Application.GetSystemVariable("DWGTITLED");
            if (System.Convert.ToInt16(obj) == 0)
            {
                //新建的文件,保存的路径
                strName = @"E:\work\cad二次开发\基于C#的CAD二次开发\CAD文件\保存的文件.dwg";
            }
            //已有的文件,直接保存
            doc1.Database.SaveAs(strName, true, DwgVersion.Current, doc1.Database.SecurityParameters);
        }

        /// <summary>
        /// 查看当前文档是否需要保存
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button6_Click(object sender, EventArgs e)
        {
            object obj = Autodesk.AutoCAD.ApplicationServices.Application.GetSystemVariable("DBMOD");
            if (System.Convert.ToInt16(obj) != 0)
            {
                MessageBox.Show("当前文档未保存");
            }
        }

        //关闭文件
        private void button7_Click(object sender, EventArgs e)
        {
            Document doc1 = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
            //doc1.CloseAndSave(doc1.Name);//保存并关闭指定文件
            doc1.CloseAndDiscard();//关闭当前文件,不保存
        }

3.主要代码释义

文件管理器。对已打开的文件进行管理。将文件添加到文件管理器中,相当于打开文件。

DocumentCollection docMgr1 = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager;

当前文档。如无切换,后面的操作都是针对该文档进行操作。

Document doc1 = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;

文档切换。将文档doc1切换为当前文档,后续文档将针对该文档进行操作。

Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument=doc1;

C# CAD二次开发中,获取多边形的角度可以使用尺寸标注类中的转角标注(rotateddimension)。通过选择多边形的边界线,然后使用代码中的GetSelection方法获取选中的尺寸标注对象。在循环中,可以通过RotatedDimension对象的Measurement属性获取每个角度的数值。以下是一个获取多边形角度的示例代码: ``` public void GetPolygonAngles() { Database db = HostApplicationServices.WorkingDatabase; Document doc = Application.DocumentManager.MdiActiveDocument; Editor ed = doc.Editor; using (Transaction trans = db.TransactionManager.StartTransaction()) { var selectedDimensions = from dim in db.GetSelection<RotatedDimension>() where dim.ColorIndex >= 0 select dim; foreach (RotatedDimension dimension in selectedDimensions) { double angle = dimension.Measurement; Application.ShowAlertDialog("角度: " + angle.ToString()); } trans.Commit(); } } ``` 这段代码将获取选中的转角标注对象,并循环输出每个转角标注的角度。请注意,你需要在你的项目中引用相应的命名空间和CAD开发库。123 #### 引用[.reference_title] - *1* *2* [cad二次开发c#学习记录4——导出图纸标注的尺寸](https://blog.csdn.net/weixin_48897477/article/details/127777400)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}} ] [.reference_item] - *3* [cad二次开发C#学习记录5——导出属性块信息](https://blog.csdn.net/weixin_48897477/article/details/128601490)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ri1520011

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值