CAD C# 批量替换当前图中块
本案例功能为选择当前文档中一个块(旧块),然后选择新图元(新块),运行插件后新块将替换图中所有的旧块。
效果如下:
public static class Class1{//选取对象替换块定义[CommandMethod("TT")]public static void BLKREDEF(){Document doc =Z.doc;Database db = doc.Database;Editor ed = doc.Editor;ed.WriteMessage("图块编辑替换 BK");//提示选择块PromptEntityOptions peo = new PromptEntityOptions("\n请选择需要编辑的块");peo.SetRejectMessage("\n你选择的不是块");peo.AddAllowedClass(typeof(BlockReference), true); //只让选择块PromptEntityResult per = ed.GetEntity(peo);if (per.Status != PromptStatus.OK) { return; }ObjectId blockID = per.ObjectId;string blockName;Point3d blockInPt;double blockAngle;Matrix3d blockMatri, blockInMatri;using (Transaction trans = doc.TransactionManager.StartTransaction()){BlockReference blockref = (BlockReference)trans.GetObject(blockID, OpenMode.ForRead); //块参照blockName = blockref.Name; //块名blockInPt = blockref.Position; //块插入点blockAngle = blockref.Rotation; //块旋转blockMatri = blockref.BlockTransform;blockInMatri = blockMatri.Inverse(); //逆矩阵}ed.WriteMessage("\n您编辑的块名为: " + blockName);//提示选择对象PromptSelectionOptions pso = new PromptSelectionOptions();pso.MessageForAdding = "请选择需要生成块的图形";pso.RejectObjectsOnLockedLayers = true; //不能选在锁定图层上的PromptSelectionResult psr = ed.GetSelection(pso);if (psr.Status != PromptStatus.OK) { return; }SelectionSet ss = psr.Value;//新对象的基点//注意交互下的坐标都是UCS,需要处理PromptPointOptions ppo = new PromptPointOptions("请选择新块基点:");ppo.UseBasePoint = true;ppo.BasePoint = blockInPt.TransformBy(ed.CurrentUserCoordinateSystem.Inverse());PromptPointResult ppr = ed.GetPoint(ppo);if (ppr.Status != PromptStatus.OK) { return; }Point3d blockInPtN = ppr.Value;Point3d inPtNWCS = blockInPtN.TransformBy(ed.CurrentUserCoordinateSystem);//坐标系变换,从UCS转换到WCSVector3d vt = blockInPt - inPtNWCS;Matrix3d matMove = Matrix3d.Displacement(vt); //平移using (Transaction trans = doc.TransactionManager.StartTransaction()){//获取块参照的定义BlockReference blockRef = (BlockReference)trans.GetObject(blockID, OpenMode.ForWrite);BlockTableRecord btr = (BlockTableRecord)blockRef.BlockTableRecord.GetObject(OpenMode.ForWrite);//遍历删除原块内所有对象foreach (ObjectId id in btr){Entity ent = (Entity)trans.GetObject(id, OpenMode.ForWrite);ent.Erase();}//实体列表加入新建的块表记录中foreach (ObjectId id in ss.GetObjectIds()){Entity ent = (Entity)trans.GetObject(id, OpenMode.ForWrite);//要排除自身嵌套Bugif (ent is BlockReference){if (((BlockReference)ent).Name == blockName){continue;}}IdMapping mapping = new IdMapping();Entity ent1 = (Entity)ent.Clone(); //复制新的并加入块// Entity ent1 = (Entity)ent.DeepClone(ent, mapping, false);//块定义以时候会以(0,0,0)为基点//插入的时候坐标会以飞一个相对(0,0,0)到inPt的距离,这里要处理一下。//预先把对象移到原点ent1.TransformBy(blockInMatri * (matMove));btr.AppendEntity(ent1);trans.AddNewlyCreatedDBObject(ent1, true);//ent.Erase(); //删除原来的}//通知事务处理//trans.AddNewlyCreatedDBObject(bt, true);//刷新块显示//blockRef.RecordGraphicsModified(true);//模型空间打开块表BlockTable bt = (BlockTable)trans.GetObject(db.BlockTableId, OpenMode.ForRead);//打开指定块名的块表记录BlockTableRecord btr1 = (BlockTableRecord)trans.GetObject(bt[blockName], OpenMode.ForRead);//获取指定块名的块参照集合的IdObjectIdCollection blockIds = btr1.GetBlockReferenceIds(false, true);foreach (ObjectId id in blockIds) // 遍历块参照的Id{//获取块参照BlockReference block = (BlockReference)trans.GetObject(id, OpenMode.ForWrite);block.Visible = block.Visible;}trans.Commit();}}}
相关文章:
CAD C# 批量替换当前图中块
本案例功能为选择当前文档中一个块(旧块),然后选择新图元(新块),运行插件后新块将替换图中所有的旧块。 效果如下: public static class Class1{//选取对象替换块定义[CommandMethod("TT&…...
Android -- [SelfView] 自定义多行歌词滚动显示器
Android – [SelfView] 自定义多行歌词滚动显示器 流畅、丝滑的滚动歌词控件* 1. 背景透明;* 2. 外部可控制进度变化;* 3. 支持屏幕拖动调节进度(回调给外部);效果 歌词文件(.lrc) 一. 使用…...
vscode 配置C/C++环境控制台参数
您可以通过以下步骤在VS Code中配置C/C环境的控制台参数: 1,打开VS Code并进入您的C/C项目 2,点击左侧的"调试"图标,然后点击顶部的齿轮图标,选择“launch.json”。 3,在"launch.json&qu…...
【HarmonyOS学习日志(13)】计算机网络之TCP/IP协议族(二)
文章目录 TCP/IP协议族ARPDNS标志字段:协商具体的通信方式和反馈通信状态DNS查询问题的格式资源记录(Resource Record, RR)格式:被用于应答字段、授权字段和额外信息字段 IP协议IP服务的特点无状态无连接不可靠 IP头部结构IPv4头部…...
多系统对接的实现方案技术分析
前言 随着信息化和大数据时代的到来,数据资产变得至关重要,企业纷纷上线多种软件系统和移动端应用以适应这一变化。这些系统和应用虽然发挥了各自的优势,但也导致了信息孤岛问题。为了解决这一问题,数据中台和异构系统集成技术应…...
kv类型算子使用
对kv类型的RDD数据集进行操作。 keys """ 获取所有的key转换算子"""inputRdd sc.parallelize([(laoda, 11), (laoer, 22), (laosan, 33), (laosi, 44)]) print(inputRdd.keys().collect()) # [laoda, laoer, laosan, laosi] values "&…...
3维建模blender
官网稳定版下载:https://www.blender.org/download/lts/ windows有安装版和portable版 教程:https://www.bilibili.com/video/BV1kX4y1m7G5 1. 基础操作 场景操作 场景位移:shift鼠标中键长按场景旋转:鼠标中键长按场景缩放&…...
百问FB网络编程 - UDP编程简单示例
6.5 UDP编程简单示例 UDP服务器首先进行初始化操作:调用函数socket创建一个数据报类型的套接字,函数bind将这个套接字与服务器的公认地址绑定在一起。然后调用函数recvfrom接收UDP客户机的数据报。UDP客户机首先调用函数socket创建一个数据报套接字&…...
面试题:什么是ThreadLocal,如何实现的?
强烈推荐 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站:人工智能 你是否还在为简历无人阅读而感到沮丧?是否因为寻觅不到理想的工作机会而感到焦虑不安?试试:看看…...
js后端开发之Next.js、Nuxt.js 与 Express.js
后端js之Next.js、Nuxt.js 与 Express.js 在现代 Web 开发中,JavaScript 已经成为前后端通用的编程语言,而选择合适的后端框架则是构建高效、可扩展应用程序的关键。本文将带你深入了解三个流行的 JavaScript 后端框架:Next.js、Nuxt.js 和 …...
飞牛Nas如何实现阿里云盘、百度网盘的资料迁移!
文章目录 📖 介绍 📖🏡 演示环境 🏡📒 如何使用飞牛NAS实现阿里云盘与百度网盘的数据互相迁移 📒📝 操作步骤注意事项⚓️ 相关链接 ⚓️📖 介绍 📖 你是否有将百度网盘的文件迁移到阿里云盘,或是将阿里云盘的资料转移到百度网盘的需求?本文将给大家演示如…...
如何在小米平板5上运行 deepin 23 ?
deepin 23 加入了 ARM64 支持,这里尝试将 deepin 系统刷入平板中,平常使用中,带个笔记本电脑有时候也会嫌比较麻烦,把 Linux 系统刷入平板中既满足了使用需要,又满足了轻便的需求。为什么不使用 Termux ?虽…...
【PlantUML系列】流程图(四)
目录 目录 一、基础用法 1.1 开始和结束 1.2 操作步骤 1.3 条件判断 1.4 并行处理 1.5 循环 1.6 分区 1.7 泳道 一、基础用法 1.1 开始和结束 开始一般使用start关键字;结束一般使用stop/end关键字。基础用法包括: start ... stopstart ...…...
操作系统:进程、线程与作业
背景介绍: 因为单道程序处理器效率低 、设备利用率低 、内存利用率低的问题人们提出了多道程序设计来解决这个问题。 多道程序致力于提高处理机、设备、内存等各种资源的利用率,从而提高系统效率,也就是吞吐量,吞吐量定义为单位时…...
先验地图--slam学习笔记
先验信息 (Prior Information) 先验信息指的是在收集新数据之前已有的知识或假设。这种信息可以来自之前的实验、历史数据、理论模型或专家意见。 地图信息:在无人驾驶中,车辆通常会预先加载高精度地图数据,这些地图数据提供了道路布局、车…...
空指针异常:软件开发中的隐形陷阱
在软件开发的世界里,bug如同隐藏在代码森林中的小怪兽,不时跳出来给开发者们制造惊喜(或惊吓)。其中,空指针异常(Null Pointer Exception, NPE)无疑是最令人头疼的一类。它悄无声息,…...
【Java从入门到放弃 之 GC】
垃圾回收 垃圾回收什么是垃圾引用计数法可达性分析算法 垃圾回收算法标记清除法标记复制法标记整理法分代 常用的垃圾回收器 垃圾回收 如果你学过C,你肯定知道,我们没申请一块内存,都要自己写回收内存的方法。而Java不需要我们管理内存&…...
【C++】等差数列末项计算题解析及优化
博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯题目描述与输入输出要求💯数学分析与公式推导公差的计算通项公式推导 💯示例解析解题步骤 💯程序实现与解析初版代码代码解析优点与不足…...
vue中父组件接收子组件的多个参数的方法:$emit或事件总线
方法一:使用 $emit 方法 原理 子组件通过 $emit 方法向父组件发送事件,同时可以传递多个参数,父组件通过事件监听来接收这些参数。 示例 子组件代码 <template><div><button click"sendData">发送数据</…...
2024.12.10——攻防世界Web_php_include
知识点:代码审计 文件包含 伪协议 伪协议知识点补充: 在PHP中,伪协议(Pseudo Protocols)也被称为流包装器,这些伪协议以 php://开头,后面跟着一些参数,用于指定要执行的操作或需要…...
【机器学习算法】——数据可视化
1. 饼图:显示基本比例关系 import matplotlib.pyplot as pltplt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False# ——————————————————————————————————————————————————————…...
如何在 Android 项目中实现跨库传值
背景介绍 在一个复杂的 Android 项目中,我们通常会有多个库(lib),而主应用程序(app)依赖所有这些库。目前遇到的问题是,在这些库中,libAd 需要获取 libVip 的 VIP 等级状态…...
JavaCV之FFmpegFrameFilter视频转灰度
1、代码 package com.example.demo.ffpemg;import lombok.SneakyThrows; import org.bytedeco.javacv.*;public class FFmpegFrameFilterVideoExample {SneakyThrowspublic static void main(String[] args) {// 输入视频文件路径String inputVideoPath "f:/2222.mp4&qu…...
Redis:基于PubSub(发布/订阅)、Stream流实现消息队列
Redis - PubSub、Stream流 文章目录 Redis - PubSub、Stream流1.基于List的消息队列2.基于PubSub的消息队列3.基于Stream的消息队列1.Redis Streams简介2.Redis Streams基本命令1.XADD 添加消息到末尾2.XLEN 获取消息长度3.XREAD 读取消息 (单消费模式)4…...
C#飞行棋(新手简洁版)
我们要在主函数的顶部写一些全局静态字段 确保能在后续的静态方法中能够获取到这些值和修改 static int[] Maps new int[100];static string[] PlayerName new string[2];static int[] PlayerScore new int[2];static bool[] Flags new bool[2] {true,true }; static int[]…...
【OpenCV】图像转换
理论 傅立叶变换用于分析各种滤波器的频率特性。对于图像,使用 2D离散傅里叶变换(DFT) 查找频域。快速算法称为 快速傅立叶变换(FFT) 用于计算DFT。 Numpy中的傅立叶变换 首先,我们将看到如何使用Numpy查…...
力扣 重排链表-143
重排链表-143 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int x, ListNode *next) : val(x), next(next)…...
【Kubernetes理论篇】容器集群管理系统Kubernetes(K8S)
Kubernetes集群部署基本管理实战 这么好的机会,还在等什么! 01、Kubernetes 概述 K8S是什么 K8S 的全称为 Kubernetes (K12345678S),PS:“嘛,写全称也太累了吧,写”。不如整个缩写 K8s 作为缩写的结果…...
Kubernetes 常用操作大全:全面掌握 K8s 基础与进阶命令
Kubernetes(简称 K8s)作为一种开源的容器编排工具,已经成为现代分布式系统中的标准。它的强大之处在于能够自动化应用程序的部署、扩展和管理。在使用 Kubernetes 的过程中,熟悉常用操作对于高效地管理集群资源至关重要。本文将详…...
爬虫基础之Web网页基础
网页的组成 网页可以分为三大部分–HTML、CSS 和 JavaScript。如果把网页比作一个人,那么 HTML 相当于骨架、JavaScript 相当于肌肉、CSS 相当于皮肤,这三者结合起来才能形成一个完善的网页。下面我们分别介绍一下这三部分的功能。 HTML HTML(Hypertext…...
用html5做的静态网站网站/今日新闻最新头条
安装jdk安装Zookeeper. 在官网http://zookeeper.apache.org/下载zookeeper.我下载的是zookeeper-3.4.6版本。解压zookeeper-3.4.6至D:\machine\zookeeper-3.4.6.在D:\machine 新建data及log目录。 ZooKeeper的安装模式分为三种,分别为:单机模式ÿ…...
网站设计深圳市/今天的新闻内容
单例写法 在OC中,我们通常是采用dispatch_once函数来帮助我们实现单例。dispatch_once可以保证马上执行函数并且线程安全。 (instancetype)sharedInstance { static id _instance nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ …...
潍坊网站制作厂家/济南优化seo公司
如果你经常使用 Linux,你应该遇到这个术语“僵尸进程Zombie Processes”。 那么什么是僵尸进程? 它们是怎么产生的? 它们是否对系统有害? 我要怎样杀掉这些进程? 下面将会回答这些问题。 什么是僵尸进程? …...
罗湖中心区做网站/网站建设报价单模板
下面是自己封装的,存在一定问题,node接触不久,promise的用法尚未理解,我想实现的是执行多条sql后,如果sql均正常执行,则返回一个定义的对象,如果某一sql出问题,直接rollback…...
做盗版小说网站能赚钱不/百度客服电话是多少
“要想保证皮带电子秤的精度,必须要对电子秤安装、调试的每一个步骤严格把关。”近期,安装维修中心副段长刘云多次叮嘱参与施工的电工段自动化班组职工。皮带电子秤依附于皮带运输机,它通过称重传感器感应皮带上物料的压力换算成皮带上物料的…...
阿里云个人网站制作/苏州百度推广分公司电话
2019独角兽企业重金招聘Python工程师标准>>> 深入原理分析与解析(本文并未抄录):http://www.freebuf.com/articles/web/40520.html 下面你将要看到的来自http://www.cnblogs.com/bangerlee/archive/2013/04/06/3002142.html xss表…...