当前位置: 首页 > article >正文

006集—— CAD锁文档的用法(CAD—C#二次开发入门)

CAD 二开中,当要在除当前文档外的其它文档的模型空间或图纸空间中添加图元时,需要先锁定其文档。用户可用要锁定的Document对象的LockDocument方法进行锁定。在调用LockDocument方法后,将返回一个DocumentLock对象。

本例创建一个新的文档然后在里面画一个圆。文档创建后,新文档的数据库会被锁定,然后一个圆会被添加到里面。圆添加后,数据库会被解锁,并且与其关联的文档窗口会被设置成当前文档。

附代码:

 

using AcTools;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.Runtime;
using System;
using System.Collections.Generic;
using System.Linq;

namespace Acdemo
{
    public static class Acdemo
    {

[CommandMethod("xx", CommandFlags.Session)]
    public static void LockDoc()
    {
        // 创建新图形  Create a new drawing
        DocumentCollection acDocMgr = Application.DocumentManager;
        Document acNewDoc = acDocMgr.Add("acad.dwt");
        Database acDbNewDoc = acNewDoc.Database;

        // 锁定新文档    Lock the new document
        using (DocumentLock acLckDoc = acNewDoc.LockDocument())
        {
            // 在新数据库中启动事务   Start a transaction in the new database
            using (Transaction acTrans = acDbNewDoc.TransactionManager.StartTransaction())
            {
                // 以只读方式打开块表   Open the Block table for read
                BlockTable acBlkTbl;
                acBlkTbl = acTrans.GetObject(acDbNewDoc.BlockTableId,
                                             OpenMode.ForRead) as BlockTable;

                // 以写方式打开模型空间块表记录   Open the Block table record Model space for write
                BlockTableRecord acBlkTblRec;
                acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace],
                                                OpenMode.ForWrite) as BlockTableRecord;

                // 创建一个半径为3圆心在5,5的圆    Create a circle with a radius of 3 at 5,5
                Circle acCirc = new Circle();
                acCirc.SetDatabaseDefaults();
                acCirc.Center = new Point3d(5, 5, 0);
                acCirc.Radius = 3;
                    acCirc.ColorIndex  = 3;
                    // 添加新对象到模型空间和事务中   Add the new object to Model space and the transaction
                    acBlkTblRec.AppendEntity(acCirc);
                acTrans.AddNewlyCreatedDBObject(acCirc, true);

                // 保存新对象到数据库中   Save the new object to the database
                acTrans.Commit();
            }

            // 解锁文档   Unlock the document
        }

        // 设置新文档为当前文档   Set the new document current
        acDocMgr.MdiActiveDocument = acNewDoc;
    }

}
}


http://www.kler.cn/a/350382.html

相关文章:

  • ESP32下FreeRTOS实时操作系统使用
  • Linux容器(初学了解)
  • 2025 最新flutter面试总结
  • 记录一下OpenCV Contrib 编译踩的坑
  • 鸿蒙系统 将工程HarmonyOS变成OpenHarmony
  • Kotlin Bytedeco OpenCV 图像图像50 仿射变换 图像缩放
  • 一篇文章带你搞懂总线舵机驱动电路
  • android中使用svg
  • 如何使用GeoIP和ELK(Elasticsearch、Logstash和Kibana)映射用户位置
  • 操作符详解(C 语言)
  • 语音识别与语音控制
  • megatron训练gpt
  • Python画笔案例-085 绘制 3D效果文字
  • leetcode54:螺旋矩阵
  • 婴儿游泳馆会员管理软件试用版下载 佳易王儿童游泳会员次卡管理系统操作教程
  • GaussDB主备版 8 工具学习
  • SQL Server 基础查询语句
  • 【Linux】C文件头文件数裁剪前58644个,裁剪后9373个
  • jarvis OJ web浅析
  • 微信小程序路由跳转的区别及其常见的使用场景
  • springboot-网站开发-linux服务器部署jar格式图片存档路径问题
  • 堆排序(C++实现)
  • MySQL 之LRU 缓存管理算法
  • ESP32-S3芯片AI开发应用,图像识别与语音唤醒方案,启明云端乐鑫代理商
  • 24/10/12 算法笔记 NiN
  • Linux10-9