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

效果如下:

(使用方法:命令行输入 “netload” 加载此dll插件,然后输入“xx”运行,选择文件夹即可。)

部分代码如下:


#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
    {
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java性能调优 - JVM性能监测及调优

JVM 内存模型概述 堆 堆是JVM内存中最大的一块内存空间,该内存被所有线程共享,几乎所有对象和数组都被分配到了堆内存中。堆被划分为新生代和老年代,新生代又被进一步划分为Eden和Survivor区,最后Survivor由From Survivor和To Su…

RK3588 , mpp硬编码yuv, 保存MP4视频文件.

RK3588 , mpp硬编码yuv, 保存MP4视频文件. ⚡️ 传送 ➡️ Ubuntu x64 架构, 交叉编译aarch64 FFmpeg mppRK3588, FFmpeg 拉流 RTSP, mpp 硬解码转RGBRk3588 FFmpeg 拉流 RTSP, 硬解码转RGBRK3588 , mpp硬编码yuv, 保存MP4视频文件.

【计算机网络2】计算机网络的性能能指标

目录 一 、计算机网络的性能指标 二、具体介绍 1、速 率 2、带 宽 3、吞 吐 量 4、时 延 5、时延带宽积 6、往 返 时 延 7、信道利用率 一 、计算机网络的性能指标 计算机网络的性能指标就是从不同方面度量计算机网络的性能,有如下7个指标: 速…

OpenAI 12天发布会(12 Days of OpenAI)总结

在OpenAI的“12 Days of OpenAI”活动中,每一天都会发布新的功能或技术,展示公司在AI领域的最新进展。首先展示下全部功能发布完成后,现在ChatGPT的界面: 以下是每一天的简要概述及其意义: 第1天 - 完整版O1模型 今天…

android:sharedUserId 应用进程声明介绍

背景 adb install 安装系统软件报错,原因是签名不一致,进程改变。 代码分析 AndroidManifest.xml 定义的 android:sharedUserId 应用归属进程不同,从phone切换到system。 初始配置 <manifest xmlns:android="http://schemas.android.com/apk/res/android"c…

Spark优化----Spark 性能调优

目录 常规性能调优 常规性能调优一&#xff1a;最优资源配置 常规性能调优二&#xff1a;RDD 优化 RDD 复用 RDD 持久化 RDD 尽可能早的 filter 操作 常规性能调优三&#xff1a;并行度调节 常规性能调优四&#xff1a;广播大变量 常规性能调优五&#xff1a;Kryo 序列化 常规性…

Android Room 数据库使用详解

一、Room介绍 Android Room 是 Google 提供的一个 Android 数据持久化库&#xff0c;是 Android Jetpack 组成部分之一。它提供了一个抽象层&#xff0c;使得 SQLite 数据库的使用更为便捷。通过 Room&#xff0c;开发者可以轻松地操作数据库&#xff0c;不需要直接编写繁琐的…

数据结构十大排序之(冒泡,快排,并归)

接上期&#xff1a; 数据结十大排序之&#xff08;选排&#xff0c;希尔&#xff0c;插排&#xff0c;堆排&#xff09;-CSDN博客 前言&#xff1a; 在计算机科学中&#xff0c;排序算法是最基础且最重要的算法之一。无论是大规模数据处理还是日常的小型程序开发&#xff0c;…

【原生js案例】让你的移动页面实现自定义的上拉加载和下拉刷新

目前很多前端UI都是自带有上拉加载和下拉刷新功能,按照官网配置去实现即可,比如原生小程序,vantUI等UI框架,都替我们实现了内部功能。 那如何自己来实现一个上拉加载和下拉刷新的功能? 实现效果 不用浏览器的css滚动条,自定义实现滚动效果 自定义实现滚动,添加上拉加载…

【D3.js in Action 3 精译_046】DIY 实战:在 Observable 平台利用饼图布局函数实现 D3 多个环形图的绘制

当前内容所在位置&#xff1a; 第五章 饼图布局与堆叠布局 ✔️ 5.1 饼图和环形图的创建 ✔️ 5.1.1 准备阶段&#xff08;一&#xff09;5.1.2 饼图布局生成器&#xff08;二&#xff09;5.1.3 圆弧的绘制&#xff08;三&#xff09;5.1.4 数据标签的添加&#xff08;四&#…

【案例80】麒麟操作系统无法使用Uclient访问NC65

问题现象 麒麟操作系统&#xff0c;安装Uclient&#xff0c;添加应用后无法看到登录界面&#xff0c;一直在转圈。 问题分析 进入到Uclient的工作目录 发现在工作目录下&#xff0c;无相关app.log生成。 查看Uclient的main.log发现&#xff0c;有大量的报错与Uclient下的sha…

阿里云OSS批量导出下载地址 OSS批量导出 OSS导出清单

阿里云官方提供的客户端不能批量导出下载地址&#xff0c;阿里云OSS批量导出下载地址 OSS批量导出 OSS导出清单 1、参数配置&#xff1a;填写阿里云的AccessKeyID和AccessKeySecret&#xff0c;在阿里右上角的用户获取 2、选择地域&#xff1a;就是你OSS开的是哪个地方的&…

【CSS in Depth 2 精译_084】第 14 章:CSS 蒙版、形状与剪切概述 + 14.1:CSS 滤镜

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第四部分 视觉增强技术 ✔️【第 14 章 蒙版、形状与剪切】 ✔️ 14.1 滤镜 ✔️ 14.1.1 滤镜的类型 ✔️14.1.2 背景滤镜 ✔️ 14.2 蒙版 文章目录 第 14 章 蒙版、形状与剪切 Masks, shapes, and…

如何高效调试复杂布局?Layout Inspector 的 Toggle Deep Inspect 完全解析

Layout Inspector 是 Android Studio 提供的一个强大工具&#xff0c;用于分析和调试 Android 应用的 UI 布局。前置条件是app是debug调试状态&#xff0c;它允许你在应用运行时实时查看布局层次结构、UI 元素的属性&#xff0c;并帮助你诊断 UI 渲染问题。 Toggle Deep Inspe…

wxpython 基础代码

wxpython 基础代码 import wxclass MyFrame(wx.Frame):def __init__(self):super().__init__(parentNone, title计算器, size(450, 250))panel wx.Panel(self)# panel.SetBackgroundColour(wx.GREEN)self.icon1 wx.Icon(name"test.ico", typewx.BITMAP_TYPE_PNG)se…

2.5 io_uring

io_uring的相关函数接口介绍 io_uring 是 Linux 内核中一种高效的异步 I/O 接口&#xff0c;最早引入于 **Linux 内核 5.1** 版本。它是由 Jens Axboe 开发的&#xff0c;目的是提供更高效的异步 I/O 操作&#xff0c;尤其是相比 epoll 和 aio&#xff0c;io_uring 减少了系统…

服务器数据恢复—V7000存储中多块磁盘出现故障导致业务中断的数据恢复案例

服务器存储数据恢复环境&#xff1a; 一台V7000存储上共12块SAS机械硬盘&#xff08;其中1块是热备盘&#xff09;&#xff0c;组建了2组Mdisk&#xff0c;创建了一个pool。挂载在小型机上作为逻辑盘使用&#xff0c;小型机上安装的AIXSybase。 服务器存储故障&#xff1a; V7…

python 读取win7 win10本机ipv6 地址转发到电邮(备份)

python 版本&#xff1a; 3.8.10 用于外网查询SMB服务器ipv6 地址。服务器定时查询本机ipv6地址&#xff0c;如地址变动则用电邮发送新地址。 import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart import ssl import socket…

多个JAVA环境变量安装配置

在做java代码审计时&#xff0c;为了要成功运行目标环境&#xff0c;时长要对于jdk版进行切换&#xff0c;且在装多个jdk时还时长会遇到安装配置后环境变量不生效的情况&#xff0c;下文介绍&#xff1b; 1、为什么安装了新的jdk&#xff0c;有的时候环境变量中的jdk版本确还是…

数字经济下的 AR 眼镜

目录 1. &#x1f4c2; AR 眼镜发展历史 1.1 AR 眼镜相关概念 1.2 市面主流 XR 眼镜 1.3 AR 眼镜大事记 1.4 国内外 XR 眼镜 1.5 国内 AR 眼镜四小龙 2. &#x1f531; 关键技术 2.1 AR 眼镜近眼显示原理 2.2 AR 眼镜关键技术 2.3 AR 眼镜技术难点 3. &#x1f4a…