CAD xy坐标标注(跟随鼠标位置实时移动)——C#插件实现

效果如下:

(使用方法:命令行输入 “netload” 加载此dll插件,然后输入“zbbz”运行,选择文件夹即可。支持字体大小变化,输入“zbbd”可设置坐标字体变大或缩小的倍数)

部分代码如下:


#if DEBUG
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.GraphicsInterface;
using IFoxCAD.Cad;
using System.Diagnostics;
using System.Reflection;
using System.Windows;
using System.Windows.Shapes;namespace IfoxDemo
{public class Class1{[CommandMethod("XX")]public void Jigworlddraw(){//Debugger.Break();double dist = 5;//横线的长度double textHeight = 1;double vertDist = textHeight * 1.2;//坐标标注距离横向的长度Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;Database db = HostApplicationServices.WorkingDatabase;PromptPointResult ppr = ed.GetPoint("\n请指定坐标点:\n");if (ppr.Status != PromptStatus.OK){return;}Point3d pointStart = ppr.Value;//获取第一个点var m_Polyline = new Polyline();//定义线m_Polyline.AddVertexAt(0, new Point2d(pointStart.X, pointStart.Y), 0, 0, 0);double mpwX = pointStart.X;double mpwY= pointStart.Y;m_Polyline.AddVertexAt(1, new Point2d(mpwX, mpwY), 0, 0, 0);m_Polyline.AddVertexAt(2, new Point2d(mpwX, mpwY), 0, 0, 0);DBText textx = new DBText()//定义x坐标{Height = textHeight,TextString = Math.Round(pointStart.X, 3).ToString(),//Position = new Point3d(mpwX + dist / 2, mpwY + vertDist, 0)};DBText texty = new DBText()//定义y坐标{Height = textHeight,TextString = Math.Round(pointStart.Y, 3).ToString(),//Position = new Point3d(mpwX + dist / 2, mpwY - vertDist, 0)};Entity[] allentity = new Entity[3] { m_Polyline ,textx,texty};using var jig = new JigEx((mpw, queue) =>{mpwX = mpw.X;mpwY = mpw.Y;m_Polyline.SetPointAt(1,new Point2d (mpw.X,mpw.Y));if (mpw.X >= pointStart.X){m_Polyline.SetPointAt(2, new Point2d(mpw.X + dist, mpw.Y));textx.Position = new Point3d(mpwX + dist / 2, mpwY + vertDist, 0);texty.Position = new Point3d(mpwX + dist / 2, mpwY - vertDist, 0);textx.HorizontalMode = TextHorizontalMode.TextMid;textx.VerticalMode = TextVerticalMode.TextVerticalMid;texty.HorizontalMode = TextHorizontalMode.TextMid;texty.VerticalMode = TextVerticalMode.TextVerticalMid;textx.AlignmentPoint = textx.Position;texty.AlignmentPoint = texty.Position;textx.AdjustAlignment(db);texty.AdjustAlignment(db);}else{m_Polyline.SetPointAt(2, new Point2d(mpw.X - dist, mpw.Y));textx.Position = new Point3d(mpw.X - dist / 2, mpw.Y + vertDist, 0);texty.Position = new Point3d(mpw.X - dist / 2, mpw.Y - vertDist, 0);textx.HorizontalMode = TextHorizontalMode.TextMid;textx.VerticalMode = TextVerticalMode.TextVerticalMid;texty.HorizontalMode = TextHorizontalMode.TextMid;texty.VerticalMode = TextVerticalMode.TextVerticalMid;textx.AlignmentPoint = textx.Position;texty.AlignmentPoint = texty.Position;textx.AdjustAlignment(db);texty.AdjustAlignment(db);}});jig.DatabaseEntityDraw(worlddraw => worlddraw.Geometry.Draw(allentity));jig.SetOptions("\n选注记点");var r1 = jig.Drag();if (r1.Status != PromptStatus.OK)return;using var tr = new DBTrans();tr.CurrentSpace.AddEntity(allentity);}[CommandMethod("XXX")]public void Jig(){double dist = 3;//横线的长度double textHeight = 1;double vertDist = textHeight*1.2;//坐标标注距离横向的长度Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;Database db = HostApplicationServices.WorkingDatabase;PromptPointResult ppr = ed.GetPoint("\n请指定坐标点:\n");if (ppr.Status != PromptStatus.OK){return;}Point3d pointStart = ppr.Value;using var jig = new JigEx((mpw, queue) =>{var m_Polyline = new Polyline();m_Polyline.AddVertexAt(0, new Point2d(pointStart.X, pointStart.Y), 0, 0, 0);// 初始时,第二和第三个点设置为与第一个点相同(将在Sampler中更新)m_Polyline.AddVertexAt(1, new Point2d(mpw.X+0.1, mpw.Y+0.1), 0, 0, 0);DBText textx = new DBText() { Height = textHeight, TextString = Math.Round(pointStart.X, 3).ToString(),//HorizontalMode = TextHorizontalMode.TextMid,VerticalMode = TextVerticalMode.TextVerticalMid };DBText texty = new DBText() { Height = textHeight, TextString = Math.Round(pointStart.Y, 3).ToString(),//HorizontalMode = TextHorizontalMode.TextMid,VerticalMode = TextVerticalMode.TextVerticalMid };// textx.AdjustAlignment(db);//texty.AdjustAlignment(db);if (mpw.X>= pointStart.X){m_Polyline.AddVertexAt(2, new Point2d(mpw.X+ dist, mpw.Y+0.1), 0, 0, 0);textx.Position = new Point3d(mpw.X + dist / 2, mpw.Y + vertDist, 0);texty.Position = new Point3d(mpw.X + dist / 2, mpw.Y - vertDist, 0);textx.HorizontalMode = TextHorizontalMode.TextMid;textx.VerticalMode = TextVerticalMode.TextVerticalMid;texty.HorizontalMode = TextHorizontalMode.TextMid;texty.VerticalMode = TextVerticalMode.TextVerticalMid;textx.AlignmentPoint = textx.Position;texty.AlignmentPoint = texty.Position;textx.AdjustAlignment(db);texty.AdjustAlignment(db);}else{m_Polyline.AddVertexAt(2, new Point2d(mpw.X - dist, mpw.Y+0.1), 0, 0, 0);textx.Position = new Point3d(mpw.X - dist / 2, mpw.Y + vertDist, 0);texty.Position = new Point3d(mpw.X - dist / 2, mpw.Y - vertDist, 0);textx.HorizontalMode = TextHorizontalMode.TextMid;textx.VerticalMode = TextVerticalMode.TextVerticalMid;texty.HorizontalMode = TextHorizontalMode.TextMid;texty.VerticalMode = TextVerticalMode.TextVerticalMid;textx.AlignmentPoint = textx.Position;texty.AlignmentPoint = texty.Position;textx.AdjustAlignment(db);texty.AdjustAlignment(db);}m_Polyline.Closed = false; // 确保多段线不是闭合的queue.Enqueue(m_Polyline);queue.Enqueue(textx);queue.Enqueue(texty);});jig.SetOptions("\n选下一个点");var r1 = jig.Drag();if (r1.Status != PromptStatus.OK)return;using var tr = new DBTrans();tr.CurrentSpace.AddEntity(jig.Entities);}}
}
#endif

global using System;
global using IfoxDemo;
global using System.Collections.Generic;
global using System.Linq;
global using System.Text;
global using System.Threading.Tasks;
global using Autodesk.AutoCAD.ApplicationServices;
global using Autodesk.AutoCAD.EditorInput;
global using Autodesk.AutoCAD.Runtime;
global using Autodesk.AutoCAD.Geometry;
global using Autodesk.AutoCAD.DatabaseServices;
global using IFoxCAD.Cad;
global using Application = Autodesk.AutoCAD.ApplicationServices.Application;
global using Polyline = Autodesk.AutoCAD.DatabaseServices.Polyline;
namespace IfoxDemo
{public class GlobalUsing{}
}

(CAD二次开发插件制作)见↓↓↓↓

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

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

相关文章

vue项目中使用ag-grid

我这个项目中使用原因: 支持大数据量数据,滑动页面不会有白屏现象可对当前列表中数据进行过滤 安装依赖 ag-grid-vueag-grid-community 我这里使用的社区版ag-grid-community/locale 中文配置依赖 main.js import "ag-grid-community/styles/ag-gr…

【C#】实现Json转Lua (Json2Lua)

关键词: C#、JsonToLua、Json2Lua、对象序列化Lua 前提需引入NewtonsofJson,引入方法可先在Visual Studio 2019 将Newtonsoft.Json.dll文件导入Unity的Plugins下。 Json格式字符串转Lua格式字符串,效果如下: json字符串 {"1": &q…

Redis 7.x如何安装与配置?保姆级教程

大家好,我是袁庭新。最新写了一套最新版的Redis 7.x企业级开发教程,今天先给大家介绍下Redis 7.x如何在Linux系统上安装和配置。 1 Redis下载与安装 使用非关系型数据库Redis必须先进行安装配置并开启Redis服务,然后使用对应客户端连接使用…

Redis篇--常见问题篇6--缓存一致性1(Mysql和Redis缓存一致,更新数据库删除缓存策略)

1、概述 在使用Redis作为MySQL的缓存层时,缓存一致性问题是指Redis中的缓存数据与MySQL数据库中的实际数据不一致的情况。这可能会导致读取到过期或错误的数据,从而影响系统的正确性和用户体验。 为了减轻数据库的压力,通常读操作都是先读缓…

代码加入SFTP JAVA ---(小白篇3)

在 Java 中,您可以使用 JSch(Java Secure Channel)库 来连接和操作 SFTP 服务器。以下是一个完整的示例代码,展示如何使用 Java 接入 SFTP 服务器并上传文件。 1.服务器上加入SFTP------(小白篇 1) 2.加入SFTP 用户------(小白篇…

leetcode之hot100---240搜索二维矩阵II(C++)

思路一:通过遍历主对角线上元素判断查找方向 主对角线遍历: 遍历主对角线上的每个元素(matrix[i][i]),其中 i 的范围是 [0, min(m, n) - 1]。如果目标值小于当前主对角线元素,说明目标值可能在当前元素的左…

【Nginx-4】Nginx负载均衡策略详解

在现代Web应用中,随着用户访问量的增加,单台服务器往往难以承受巨大的流量压力。为了解决这一问题,负载均衡技术应运而生。Nginx作为一款高性能的Web服务器和反向代理服务器,提供了多种负载均衡策略,能够有效地将请求分…

git remote -v(--verbose)显示你的 Git 仓库配置的远程仓库的详细信息

git remote -v 是一个 Git 命令,用于显示你的 Git 仓库配置的远程仓库的详细信息。 当你执行 git remote -v 命令时,你会看到类似以下的输出: origin https://github.com/your-username/your-repo.git (fetch) origin https://github.com…

《Java 与 Deeplearning4j:开启深度学习高效训练之旅》

在当今科技飞速发展的时代,深度学习无疑是人工智能领域的一颗璀璨明珠。Java 作为一种广泛应用的编程语言,与 Deeplearning4j 框架的结合,为开发者们开辟了一条在深度学习领域大展身手的新路径。那么,如何在 Java 中高效地使用 De…

MySQL 基础:开启数据库之旅

MySQL 基础:开启数据库之旅 在当今数字化的时代,数据扮演着至关重要的角色,而数据库管理系统则是存储、管理和操作这些数据的强大工具。MySQL 作为一款广受欢迎的开源关系型数据库管理系统,被广泛应用于各类网站、应用程序以及企业…

递归读取指定目录下的文件

序言 需要读取sftp服务器上符合指定的文件名正则的文件列表&#xff0c;目前想到的最好的办法就是递归。 我这里引入的依赖是&#xff1a; <!-- jsch-sftp连接 --><dependency><groupId>com.jcraft</groupId><artifactId>jsch</artif…

<代码随想录> 算法训练营-2024.12.21

今日专题 &#xff1a;动态规划、打家劫舍 总结&#xff1a; 198. 打家劫舍 class Solution:def rob(self, nums: List[int]) -> int:#dp[n]max(dp[n-1],dp[n-2]nums[n])sizelen(nums)if size1:return nums[0]#n的状态只依赖n-1和n-2的状态&#xff0c;对状态进行压缩i,j…

uniapp 将base64字符串保存为图片、Word、Excel、音频、视频等文件

function blobToBase64(blob) {return new Promise((resolve, reject) > {const reader new FileReader();reader.onerror reject;reader.onload () > {if (typeof reader.result string) {// 去掉"data:..."前缀&#xff0c;只保留 Base64 部分resolve(re…

[计算机网络]唐僧的”通关文牒“NAT地址转换

1.NAT&#xff1a;唐僧的通关文牒 在古老的西游记中&#xff0c;唐僧师徒四人历经九九八十一难&#xff0c;终于取得了真经。然而&#xff0c;他们并不是一开始就获得了通关文牒&#xff0c;而是经过了重重考验&#xff0c;最终得到了国王的认可&#xff0c;才顺利通过了各个关…

音视频学习(二十四):hls协议

基本原理 HLS协议通过将视频文件切分成多个小的媒体段&#xff08;通常是10秒左右的.ts文件&#xff09;&#xff0c;并通过HTTP传输给客户端。视频播放过程中&#xff0c;客户端按顺序请求这些小段文件来逐步播放整个视频流。HLS还支持多种码率&#xff0c;以便适应不同网络条…

tcp_ack函数

tcp_ack 是 TCP/IP 协议栈中的一个函数,用于处理传入的数据包的确认(ACK)。这个函数在 Linux 内核的 TCP 实现中被用来确保可靠的数据传输。 具体来说,TCP(传输控制协议)是一种面向连接的协议,确保数据在网络中的可靠传输。ACK(确认)是 TCP 连接的一个基本元素,当一方…

WPF实现曲线数据展示【案例:震动数据分析】

wpf实现曲线数据展示&#xff0c;函数曲线展示&#xff0c;实例&#xff1a;震动数据分析为例。 如上图所示&#xff0c;如果你想实现上图中的效果&#xff0c;请详细参考我的内容&#xff0c;创作不易&#xff0c;给个赞吧。 一共有两种方式来实现&#xff0c;一种是使用第三…

【CVE-2024-56145】PHP 漏洞导致 Craft CMS 出现 RCE

大多数开发人员都同意,与 15 年前相比,PHP 是一种更加理智、更加安全和可靠的语言。PHP5早期的不良设计已让位于更好的开发生态系统,其中包括类、自动加载、更严格的类型、更理智的语法以及一大堆其他改进。安全性也没有被忽视。 register_globals一些老读者可能还记得和的…

7 家使用量子计算的公司

劳斯莱斯、Deloitte、BASF、Roche、富士通、JPMorgan和宝马是率先开展量子计算实验的部分公司。 商用量子计算的实现仍需数年时间&#xff0c;但这并未阻止世界上一些知名企业对其进行试验。在许多情况下&#xff0c;利用当下有噪声的中等规模量子&#xff08;NISQ&#xff09…

最大似然检测在通信解调中的应用

最大似然检测&#xff08;Maximum Likelihood Detection&#xff0c;MLD&#xff09;&#xff0c;也称为最大似然序列估计&#xff08;Maximum Likelihood Sequence Estimation&#xff0c;MLSE&#xff09;&#xff0c;是一种在通信系统中广泛应用的解调方法。其核心思想是在给…