CAD二开—WblockCloneObjects函数用法

public void WblockCloneObjects(ObjectIdCollection identifiers, ObjectId id, IdMapping mapping, Autodesk.AutoCAD.DatabaseServices.DuplicateRecordCloning cloning, [MarshalAs(UnmanagedType.U1)] bool deferTranslation
);

其中各个参数的意义如下:

  1. identifiers:需要拷贝的源数据库中的对象ID集合,对象ID可以是实体对象ID,也可以是存储实体的块表记录对象ID;
  2. id:指定目标数据库中用于存放源数据库拷贝实体的所属者对象ID,可以是某个块表记录ID,也可以是BlockTableId;
  3. mapping:用于存储源数据库中拷贝对象id与目标数据库中新对象id之间的映射关系;
  4. cloning:若目标数据库中有相同记录,重复记录处理方式:Ignore(忽略),Replace(替换);
以下分别通过两种方式(拷贝实体和拷贝块表记录)实现了用A图纸中的图元替换B图纸中的块表记录,快速实现图框模板定制。
		//拷贝实体public void CloneEntity(){try{string defaultPath = new DirectoryInfo(typeof(CommandDetail).Assembly.Location).Parent.FullName;string stdBlkPath = Path.Combine(Path.Combine(defaultPath, "config"), "B.dwg");string titlePath = Path.Combine(Path.Combine(defaultPath, "config"), "A.dwg");Database titleDb = new Database(false, true);titleDb.ReadDwgFile(titlePath, System.IO.FileShare.Read, true, null);titleDb.CloseInput(true);Database stdBlkDb = new Database(false, true);stdBlkDb.ReadDwgFile(stdBlkPath, System.IO.FileShare.ReadWrite, true, null);stdBlkDb.CloseInput(true);Point3d rbPos = new Point3d(titleDb.Extmax.X, titleDb.Extmin.Y, 0);Matrix3d mt = Matrix3d.Displacement(rbPos.GetVectorTo(Point3d.Origin));ObjectIdCollection entIds = new ObjectIdCollection();using (Transaction trans = titleDb.TransactionManager.StartTransaction()){BlockTable bt = (BlockTable)trans.GetObject(titleDb.BlockTableId, OpenMode.ForRead, false);BlockTableRecord btr = (BlockTableRecord)trans.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForRead);foreach (ObjectId entId in btr){Entity ent = trans.GetObject(entId, OpenMode.ForRead) as Entity;if (ent != null){ent.UpgradeOpen();ent.TransformBy(mt);ent.Layer = "TK1";ent.DowngradeOpen();entIds.Add(entId);}}}ObjectId titleBtrId = ObjectId.Null;using (Transaction trans = stdBlkDb.TransactionManager.StartTransaction()){BlockTable stdBt = (BlockTable)trans.GetObject(stdBlkDb.BlockTableId, OpenMode.ForWrite, false);BlockTableRecord stdBtr = trans.GetObject(stdBt[""], OpenMode.ForWrite) as BlockTableRecord;foreach (ObjectId id in stdBtr){Entity ent= trans.GetObject(id,OpenMode.ForWrite) as Entity;if (ent != null){//清空块表记录中的图元ent.Erase();}}titleBtrId = stdBtr.Id;trans.Commit();}var mappling = new IdMapping();titleDb.WblockCloneObjects(entIds, titleBtrId, mappling, DuplicateRecordCloning.Replace, false);stdBlkDb.SaveAs(stdBlkPath, DwgVersion.AC1024);titleDb.Dispose();stdBlkDb.Dispose();}catch (System.Exception ex){throw new System.Exception(ex.Message);}}//拷贝块表记录public void CloneBlockTableRecord(){try{string defaultPath = new DirectoryInfo(typeof(CommandDetail).Assembly.Location).Parent.FullName;string stdBlkPath = Path.Combine(Path.Combine(defaultPath, "config"), "B.dwg");string titlePath = Path.Combine(Path.Combine(defaultPath, "config"), "A.dwg");Database titleDb = new Database(false, true);titleDb.ReadDwgFile(titlePath, System.IO.FileShare.Read, true, null);titleDb.CloseInput(true);Database stdBlkDb = new Database(false, true);stdBlkDb.ReadDwgFile(stdBlkPath, System.IO.FileShare.ReadWrite, true, null);stdBlkDb.CloseInput(true);Point3d rbPos = new Point3d(titleDb.Extmax.X, titleDb.Extmin.Y, 0);Matrix3d mt = Matrix3d.Displacement(rbPos.GetVectorTo(Point3d.Origin));string csBtrName = "";List<string> titleBtrNames = new List<string> { "", ""};ObjectIdCollection blkTbRecIds = new ObjectIdCollection();List<Entity> cEnts = new List<Entity>();using (Transaction trans = titleDb.TransactionManager.StartTransaction()){BlockTable bt = (BlockTable)trans.GetObject(titleDb.BlockTableId, OpenMode.ForRead, false);BlockTableRecord btr = (BlockTableRecord)trans.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForRead);foreach (ObjectId entId in btr){Entity ent=trans.GetObject(entId, OpenMode.ForRead) as Entity;if (ent!=null){ent.UpgradeOpen();ent.TransformBy(mt);ent.Layer = "TK1";ent.DowngradeOpen();cEnts.Add(ent);}}bt.UpgradeOpen();//切换块表为写的状态foreach (string titleBtrName in titleBtrNames){//创建一个BlockTableRecord类的对象,表示所要创建的块BlockTableRecord titleBtr = new BlockTableRecord();titleBtr.Name = titleBtrName;//将列表中的实体加入到新建的BlockTableRecord对象cEnts.ForEach(ent => titleBtr.AppendEntity(ent.Clone() as Entity));ObjectId titleBtrId = bt.Add(titleBtr);//在块表中加入blockName块blkTbRecIds.Add(titleBtrId);titleDb.TransactionManager.AddNewlyCreatedDBObject(titleBtr, true);//通知事务处理}bt.DowngradeOpen();//为了安全,将块表状态改为读 }using (Transaction trans = stdBlkDb.TransactionManager.StartTransaction()){BlockTable stdBt = (BlockTable)trans.GetObject(stdBlkDb.BlockTableId, OpenMode.ForWrite, false);foreach (ObjectId btrId in stdBt){BlockTableRecord stdBtr = trans.GetObject(btrId, OpenMode.ForWrite) as BlockTableRecord;if (stdBtr != null && stdBtr.Name == csBtrName){stdBtr.Erase();}}trans.Commit();}var mappling = new IdMapping();titleDb.WblockCloneObjects(blkTbRecIds, stdBlkDb.BlockTableId, mappling, DuplicateRecordCloning.Replace, false);stdBlkDb.SaveAs(stdBlkPath,DwgVersion.AC1024);titleDb.Dispose();stdBlkDb.Dispose();}catch (System.Exception ex){throw new System.Exception(ex.Message);}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/600170.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

git本地创建分支并推送到远程关联起来

git本地创建分支并推送到远程关联起来 git本地基于当前分支创建个新的分支&#xff0c;然后推送到远程&#xff0c;并把本地新创建的分支和远程分支关联 在当前分支下&#xff0c;新建分支 git checkout -b test推送到远程仓库 git push origin test将本地分支和远程分支关联…

SAP设置修改删除自动JOB

一、设置JOB 方法一 一个不需要单独记事务码的方式 如果FS要求开发做了程序的话&#xff0c;直接执行事务码&#xff0c;点击左上角 程序-后台执行 输出设备选择LP01 打勾&#xff0c;有可能还有一个对话框&#xff0c;也打勾 打勾后设置周期值 系统预设的会有小时、天、周…

论文阅读_InP-Based_Generic_Foundry_Platform_for_Photonic_Integrated_Circuits

InP-Based_Generic_Foundry_Platform_for_Photonic_Integrated_Circuits 时间&#xff1a;2018年 作者&#xff1a;Luc M. Augustin, Member, IEEE, Rui Santos, Erik den Haan, Steven Kleijn, Peter J. A. Thijs, Sylwester Latkowski, Senior Member, IEEE, Dan Zhao, Wei…

STM32F407-14.3.10-表73具有有断路功能的互补通道OCx和OCxN的输出控制位-01x11

如上表所示&#xff0c;MOE0&#xff0c;OSSI1&#xff0c;CCxE1&#xff0c;CCxNE1 时&#xff0c;如下框图OISx与CCxP异或&#xff0c;OISxN与CC1NP异或&#xff0c;然后相与后决定 OCx与OCxN的输出是否相对于OISx与OISxN取反。&#xff08;异或门参考逻辑门符号-CSDN博客&…

【华为OD真题 Python】查找众数及中位数

文章目录 题目描述输入描述输出描述示例1输入输出示例2输入输出示例3输入输出实现代码题目描述 1.众数是指一组数据中出现次数量多的那个数,众数可以是多个 2.中位数是指把一组数据从小到大排列,最中间的那个数,如果这组数据的个数是奇数,那最中间那个就是中位数,如果这组…

‘str‘ object has no attribute ‘capabilities‘

selenium 版本&#xff1a;4.16.0 报错代码&#xff1a; from selenium import webdriverdriver_pathrC:\\xxx\\drivers\\chromedriver\\win64\\120.0.6099.109\\chromedriver-win32/chromedriver.exe driver webdriver.Chrome(driver_path) 解决方法&#xff1a; 等待30秒时…

大数据情况下如何保证企业数据交换安全

数据交换是指在网络或其他方式下&#xff0c;不同主体按照规定的规则和标准实现数据的共享、传输和处理的过程。大数据时代的到来使得数据交换的重要性更为凸显&#xff0c;大数据带来了海量、多样、高速、低价值密度等特点&#xff0c;也带来了更多的价值挖掘和应用场景。 保障…

期货日数据维护与使用_日数据维护_sqlite3数据库创建

目录 写在前面&#xff1a; 初始准备 开始编写数据库代码 t_product t_symbol_basemsg t_main_symbol t_online_symbol t_last30_daily 小贴士 写在前面&#xff1a; 本文默认已经创建了项目&#xff0c;如果不知道如何创建一个空项目的&#xff0c;请参看以下两篇博…

亲测表白网制作源码,在线制作表白,无数据库上传就能用

在线制作表白网源码 没有数据库上传就能用 后台/admin 账号密码都是admin

Vue2 - 生命周期

目录 1&#xff0c;介绍1&#xff0c;初次渲染2&#xff0c;数据改变后的重渲染 2&#xff0c;生成周期钩子执行顺序 1&#xff0c;介绍 创建 vue 实例和创建组件的流程基本一样。 1&#xff0c;初次渲染 做一些初始化操作&#xff0c;主要设置一些私有属性到实例中。 运行 b…

Springboot整合Flowable Modeler(flowable6.4.0)

文章目录 Springboot整合Flowable Modeler1 项目准备1.1 新建一个Springboot项目1.2 项目的pom文件1.3 Flowable Modeler UI下载2 后端代码2.1 复制代码2.2 代码修改2.3 新增代码3 启动项目Springboot整合Flowable Modeler 1 项目准备 1.1 新建一个Springboot项目 ​ Spring…

vue实现项目部署成功之后提示用户刷新页面

vue实现项目部署成功之后提示用户刷新页面 1. 项目根目录新建 version.js require("fs").writeFileSync("./public/version.txt", new Date().getTime().toString()) 2. 改写package.json中打包命令 "scripts": {"dev": "vue-cl…

微信小程序 分享按钮 监听用户分享成功

代码 <view><button class"btnLq ed flex justify-center" open-type"share" click"getAward">点击分享</button> </view>export default {data(){return{shareMd:false,//分享埋点}},onShow(){//if(this.shareMd){uni.…

【Java集合篇】接上篇博文--为什么在JDK8中HashMap要转成红黑树

为什么在JDK8中HashMap要转成红黑树 ✔️为什么不继续使用链表✔️为什么是红黑树✔️红黑树的性能优势 ✔️ 拓展知识仓✔️为什么是链表长度达到8的时候转✔️为什么不在冲突的时候立刻转✔️关于为什么长度为8的时候转(源码注释解读)✔️为什么长度为6的时候转回来?✔️双向…

leetcode:136只出现一次的数字(详解),又名找到单身狗

期末考试临近&#xff0c;每天复习一点知识&#xff0c;还是可以复习完的&#xff0c;加油 前言 我后来才知道这是力扣上的一道题&#xff0c;我当时写他的时候名字叫找到单身狗&#xff0c;即使那个只出现了一次的数字 题目 136. 只出现一次的数字 给你一个 非空 整数数组…

每日一题——LeetCode1021删除最外层括号1047消除字符串相邻重复字符串

这两道题基本上来说是差不多的&#xff0c;一个匹配并删除字符串中的( ) 一个匹配并删除字符串中相邻重复的元素&#xff0c;其实都是用到栈这种数据结构&#xff0c;通过匹配不同的条件使用入栈出栈操作保存或删除目标元素来实现。 1021.删除最外层括号 var removeOuterParent…

ChatGPT实战手册

ChatGPT是 OpenAI 的一个强大的自然语言处理模型&#xff0c;它可以生成人类般的文本。在这篇文章中&#xff0c;我们将通过一个实战示例来展示如何安装、配置和使用 ChatGPT。 安装 首先&#xff0c;你需要安装 OpenAI 的 Python 客户端库。你可以使用 pip 来安装&#xff1…

图像分割实战-系列教程12:deeplab系列算法概述

&#x1f341;&#x1f341;&#x1f341;图像分割实战-系列教程 总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在Pycharm中进行 本篇文章配套的代码资源已经上传 1、deeplab概述 图像分割中的传统做法&#xff1a;为了增大感受野&#xff0c;通常都会选择pooling…

基于SpringBoot的物流管理系统

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于SpringBoot的物流管理系统,java项目…

DevOps搭建(十五)-kubernetes部署项目详细步骤

1、k8s简介 k8s官网地址 https://kubernetes.io/zh-cn/docs/home/ 2、安装kuboard 详细步骤可参考官网 https://kuboard.cn/install/install-k8s.html 2.1、环境准备 至少 2 台 2核4G 的服务器。 选择v1.19&#xff0c;因为高版本的已经把docker给舍弃掉了。 https://k…