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

VB.net进行CAD二次开发(二)与cad交互

开发过程遇到了一个问题:自制窗口与控件与CAD的交互。

启动类,调用非模式窗口

Imports Autodesk.AutoCAD.Runtime

Public Class Class1

    '//CAD启动界面
    <CommandMethod("US")>
    Public Sub UiStart()

        Dim myfrom As Form1 = New Form1()
        'Autodesk.AutoCAD.ApplicationServices.Application.ShowModalDialog(myfrom); //  模态显示
        '; //  非模态显示
        Autodesk.AutoCAD.ApplicationServices.Application.ShowModelessDialog(myfrom)

    End Sub
End Class

非模式窗体

Imports System
Imports System.Collections.Generic
Imports System.ComponentModel
Imports System.Data
Imports System.Drawing
Imports System.Linq
Imports System.Text
Imports System.Threading.Tasks
Imports System.Windows.Forms


Imports Autodesk.AutoCAD.DatabaseServices
Imports Autodesk.AutoCAD.Geometry
Imports Autodesk.AutoCAD.ApplicationServices
Imports Autodesk.AutoCAD.Runtime
Imports Autodesk.AutoCAD.EditorInput
Imports System.Runtime.InteropServices
Imports Application = Autodesk.AutoCAD.ApplicationServices.Application
Public Class Form1

    Dim db As Database = HostApplicationServices.WorkingDatabase
    Dim ed As Editor = Application.DocumentManager.MdiActiveDocument.Editor
    Dim doc As Document = Application.DocumentManager.MdiActiveDocument

    Public Property MyDoc() As Document
        Get
            Return doc
        End Get
        Set(ByVal value As Document)
            doc = value
        End Set
    End Property

'调用windows all的命令,两种方法都可以
    ' <DllImport("user32.DLL")> _
    '  Public Shared Function SetFocus(ByVal hWnd As IntPtr) As Integer

    'End Function

    Public Declare Function SetFocus Lib "USER32.DLL" (ByVal hWnd As Integer) As Integer

    Public Sub New()
        InitializeComponent()
        SetFocus(doc.Window.Handle)
    End Sub
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        ed.WriteMessage("欢迎使用批量统计线段长度小工具,请框选线段!\n")

        '在界面开发中,操作图元时,首先进行文档锁定 ,利用using 语句变量作用范围,结束时自动解锁文档
        Using docLock As DocumentLock = doc.LockDocument()
            '过滤删选条件设置 过滤器
            Dim typedValues(0) As TypedValue
            typedValues.SetValue(New TypedValue(0, "*LINE"), 0)

            Dim sSet As SelectionSet = SelectSsGet("GetSelection", Nothing, typedValues)
            Dim sumLen As Double = 0
            ' 判断是否选取了对象
            If sSet IsNot Nothing Then
                '遍历选择集
                For Each sSObj As SelectedObject In sSet
                    ' 确认返回的是合法的SelectedObject对象  
                    If sSObj IsNot Nothing Then

                        '开启事务处理
                        Using trans As Transaction = db.TransactionManager.StartTransaction()
                            Dim curEnt As Curve = trans.GetObject(sSObj.ObjectId, OpenMode.ForRead)
                            ' 调整文字位置点和对齐点
                            Dim endPoint As Point3d = curEnt.EndPoint
                            'GetDisAtPoint 用于返回起点到终点的长度 传入终点坐标
                            Dim lineLength As Double = curEnt.GetDistAtPoint(endPoint)
                            ed.WriteMessage("\n" + lineLength.ToString())
                            sumLen = sumLen + lineLength
                            trans.Commit()
                        End Using
                    End If
                Next
            End If         'using 语句 结束,括号内所有对象自动销毁,不需要手动dispose()去销毁
            ed.WriteMessage("\n 线段总长为: " & (sumLen.ToString()))
        End Using
    End Sub

    Public Function SelectSsGet(ByVal selectStr As String, ByVal point3dCollection As Point3dCollection, ByVal typedValue() As TypedValue) As SelectionSet

        Dim ed As Editor = Application.DocumentManager.MdiActiveDocument.Editor
        '将过滤条件赋值给SelectionFilter对象
        Dim selfilter As SelectionFilter = Nothing
        If typedValue IsNot Nothing Then
            selfilter = New SelectionFilter(typedValue)
        End If
        ' 请求在图形区域选择对象

        Dim psr As PromptSelectionResult
        If selectStr = "GetSelection" Then  '提示用户从图形文件中选取对象

            psr = ed.GetSelection(selfilter)

        ElseIf (selectStr = "SelectAll") Then '选择当前空间内所有未锁定及未冻结的对象

            psr = ed.SelectAll(selfilter)

        ElseIf selectStr = "SelectCrossingPolygon" Then '选择由给定点定义的多边形内的所有对象以及与多边形相交的对象。多边形可以是任意形状,但不能与自己交叉或接触。

            psr = ed.SelectCrossingPolygon(point3dCollection, selfilter)

            '选择与选择围栏相交的所有对象。围栏选择与多边形选择类似,所不同的是围栏不是封闭的, 围栏同样不能与自己相交
        ElseIf selectStr = "SelectFence" Then

            psr = ed.SelectFence(point3dCollection, selfilter)

            '选择完全框入由点定义的多边形内的对象。多边形可以是任意形状,但不能与自己交叉或接触
        ElseIf selectStr = "SelectWindowPolygon" Then

            psr = ed.SelectWindowPolygon(point3dCollection, selfilter)

        ElseIf selectStr = "SelectCrossingWindow" Then  '选择由两个点定义的窗口内的对象以及与窗口相交的对象

            Dim point1 As Point3d = point3dCollection(0)
            Dim point2 As Point3d = point3dCollection(1)
            psr = ed.SelectCrossingWindow(point1, point2, selfilter)

        ElseIf selectStr = "SelectWindow" Then '选择完全框入由两个点定义的矩形内的所有对象。

            Dim point1 As Point3d = point3dCollection(0)
            Dim point2 As Point3d = point3dCollection(1)
            psr = ed.SelectCrossingWindow(point1, point2, selfilter)
        Else
            Return Nothing
        End If

        '// 如果提示状态OK,表示对象已选
        If psr.Status = PromptStatus.OK Then
            Dim sSet As SelectionSet = psr.Value
            ed.WriteMessage("Number of objects selected: " + sSet.Count.ToString() + "\n") '打印选择对象数量
            Return sSet
        Else
            ' 打印选择对象数量
            ed.WriteMessage("Number of objects selected 0 \n")
            Return Nothing
        End If


    End Function


End Class

参考文献

https://zhuanlan.zhihu.com/p/138579148

VB.NET自动操作其他程序(2)--声明DLL相关函数 - zs李四 - 博客园

相关文章:

VB.net进行CAD二次开发(二)与cad交互

开发过程遇到了一个问题&#xff1a;自制窗口与控件与CAD的交互。 启动类&#xff0c;调用非模式窗口 Imports Autodesk.AutoCAD.Runtime Public Class Class1 //CAD启动界面 <CommandMethod("US")> Public Sub UiStart() Dim myfrom As Form1 New…...

【NLP 11、Adam优化器】

祝你先于春天&#xff0c; 翻过此间铮铮山峦 —— 24.12.8 一、Adam优化器的基本概念 定义 Adam&#xff08;Adaptive Moment Estimation&#xff09;是一种基于梯度的优化算法&#xff0c;用于更新神经网络等机器学习模型中的参数。它结合了动量法&#xff08;Momentum&…...

51单片机应用开发(进阶)---串口接收字符命令

实现目标 1、巩固UART知识&#xff1b; 2、掌握串口接收字符数据&#xff1b; 3、具体实现目标&#xff1a;&#xff08;1&#xff09;上位机串口助手发送多字符命令&#xff0c;单片机接收命令作相应的处理&#xff08;如&#xff1a;openled1 即打开LED1;closeled1 即关…...

redis 怎么样删除list

在 Redis 中&#xff0c;可以使用以下方法删除列表或列表中的元素&#xff1a; 1. 删除整个列表 使用 DEL 命令删除一个列表键&#xff1a; DEL mylist这个命令会删除键 mylist 及其值&#xff08;无论 mylist 是一个列表还是其他类型的键&#xff09;。 2. 删除列表中的部分…...

【数据结构——内排序】快速排序(头歌实践教学平台习题)【合集】

目录&#x1f60b; 任务描述 测试说明 我的通关代码: 测试结果&#xff1a; 任务描述 本关任务&#xff1a;实现快速排序算法。 测试说明 平台会对你编写的代码进行测试&#xff1a; 测试输入示例&#xff1a; 10 6 8 7 9 0 1 3 2 4 5 (说明&#xff1a;第一行是元素个数&a…...

npm或yarn包配置地址源

三种方法 1.配置.npmrc 文件 在更目录新增.npmrc文件 然后写入需要访问的包的地址 2.直接yarn.lock文件里面修改地址 简单粗暴 3.yarn install 的时候添加参数 设置包的仓库地址 yarn config set registry https://registry.yarnpkg.com 安装&#xff1a;yarn install 注意…...

STUN服务器用于内网NAT的方案

在内网中部署 STUN 服务器的场景通常用于处理多层 NAT 或内网客户端之间的通信需求&#xff0c;尤其是在大企业或学校等复杂网络环境下。通过 STUN 服务器&#xff0c;可以帮助客户端设备检测和适配 NAT 转换规则&#xff0c;进而支持 WebRTC 或其他实时通信技术的正常运行。 …...

Linux 简单命令总结

1. 简单命令 1.1. ls 列出该目录下的所有子目录与文件&#xff0c;后面还可以跟上一些选项 常用选项&#xff1a; ・-a 列出目录下的所有文件&#xff0c;包括以。开头的隐含文件。 ・-d 将目录象文件一样显示&#xff0c;而不是显示其下的文件。如&#xff1a;ls -d 指定目…...

Vue.js组件开发:提升你的前端工程能力

Vue.js 是一个用于构建用户界面的渐进式框架&#xff0c;它允许开发者通过组件化的方式创建可复用且易于管理的代码。在 Vue.js 中开发组件是一个直观且高效的过程&#xff0c;下面我将概述如何创建和使用 Vue 组件&#xff0c;并提供一些最佳实践。 1. 创建基本组件 首先&am…...

使用 Pandas 读取 JSON 数据的五种常见结构解析

文章目录 引言JSON 数据的五种常见结构1. split 结构2. records 结构3. index 结构4. columns 结构5. values 结构 引言 在日常生活中&#xff0c;我们经常与各种数据打交道&#xff0c;无论是从网上购物的订单信息到社交媒体上的动态更新。JSON&#xff08;JavaScript Object…...

C++鼠标轨迹算法(鼠标轨迹模拟真人移动)

一.简介 鼠标轨迹算法是一种模拟人类鼠标操作的程序&#xff0c;它能够模拟出自然而真实的鼠标移动路径。 鼠标轨迹算法的底层实现采用C/C语言&#xff0c;原因在于C/C提供了高性能的执行能力和直接访问操作系统底层资源的能力。 鼠标轨迹算法具有以下优势&#xff1a; 模拟…...

Go mysql驱动源码分析

文章目录 前言注册驱动连接器创建连接交互协议读写数据读数据写数据 mysqlConncontext超时控制 查询发送查询请求读取查询响应 Exec发送exec请求读取响应 预编译客户端预编译服务端预编译生成prepareStmt执行查询操作执行Exec操作 事务读取响应query响应exec响应 总结 前言 go…...

GNSS误差源及差分定位

GNSS误差源&#xff1a; &#xff08;一&#xff09;卫星星历误差 由星历信息所得出的卫星位置坐标与实际位置坐标的偏差就是星历误差。星历信息是由 GPS 地面部分测量计算后传入空间部分的。由于卫星在运动中要受到各种摄动力的作用, 而地面部分又很难精确测量这些作用力,…...

pg数据类型

1、数值类型&#xff1a; smallint 2 字节 小范围整数 -32768 到 32767 integer 4 字节 常用的整数 -2147483648 到 2147483647 bigint 8 字节 大范围整数 -9223372036854775808 到 9223372036854775807 decimal 可变长 用户指定的精度&#x…...

【java】finalize方法

目录 1. 说明2. 调用过程3. 注意事项 1. 说明 1.finalize方法是Java中Object类的一个方法。2.finalize方法用于在对象被垃圾回收之前执行一些清理工作。3.当JVM&#xff08;Java虚拟机&#xff09;确定一个对象不再被引用、即将被回收时&#xff0c;会调用该对象的finalize方法…...

HNU_多传感器(专选)_作业4(构建单层感知器实现分类)

1. (论述题)&#xff08;共1题&#xff0c;100分&#xff09; 假设平面坐标系上有四个点&#xff0c;要求构建单层感知器实现分类。 (3,3),(4,3) 两个点的标签为1&#xff1b; (1,1),(0,2) 两个点的标签为-1。 思路&#xff1a;要分类的数据是2维数据&#xff0c;需要2个输入…...

以太网链路详情

文章目录 1、交换机1、常见的概念1、冲突域2、广播域3、以太网卡1、以太网卡帧 4、mac地址1、mac地址表示2、mac地址分类3、mac地址转换为二进制 2、交换机的工作原理1、mac地址表2、交换机三种数据帧处理行为3、为什么会泛洪4、转发5、丢弃 3、mac表怎么获得4、同网段数据通信…...

vue3 setup语法,子组件点击一个元素打印了这个元素的下标id,怎么传递给父组件,让父组件去使用

问&#xff1a; vue3 setup语法&#xff0c;子组件点击一个元素打印了这个元素的下标id&#xff0c;怎么传递给父组件&#xff0c;让父组件去使用 回答&#xff1a; 在 Vue 3 中&#xff0c;你可以使用 setup 语法糖和组合式 API 来实现子组件向父组件传递数据。具体来说&am…...

《Keras3 minist 手写数字AI模型训练22秒精度达到:0.97》

《Keras3 minist 手写数字AI模型训练22秒精度达到&#xff1a;0.97》 一、修改源码加上如下两条代码二、源码修改如下三、Keras3 minist 训练22秒结束&#xff0c;训练过程截图四、Keras3 minist 源码截图 一、修改源码加上如下两条代码 import os os.environ["KERAS_BAC…...

【.net core】【sqlsugar】大数据写入配置(需要版本5.0.45)

官网连接 https://www.donet5.com/home/Doc?typeId2404 泛型方法 /// <summary> /// 大数据写入&#xff08;泛型方法&#xff09; /// </summary> /// <param name"entitys"></param> /// <returns></returns> ///代码中_d…...

ansible运维实战

通过学习ansible自动化运维&#xff0c;初步对ansible有了一定的了解&#xff0c;此次分享两个案例&#xff0c;希望对大家有所帮助 案例一&#xff1a;自动化安装nginx 本次案例目的是ansible自动化安装nginx并配置 首先创建如图所示目录 在主机上安装好nginx&#xff0c;如…...

DDOS分布式拒绝服务攻击

DDOS分布式拒绝服务攻击 简单来说 传统的DOS就是一台或者多台服务对一个受害目标&#xff08;服务器&#xff0c;路由&#xff0c;ip&#xff0c;国家&#xff09;进行攻击&#xff0c;当范围过大时就是DDOS。目的就是通过大规模的网络流量使得正常流量不能访问受害目标&…...

如何使用 Python 实现 UDP 通信?

1. UDP通信基础 UDP&#xff08;用户数据报协议&#xff09;是一种无连接的传输层协议&#xff0c;它提供了一种不可靠的数据传输服务&#xff0c;但具有较低的延迟和较小的开销。在Python中&#xff0c;可以使用socket模块来实现UDP通信。 2. 实现UDP服务端 import socketd…...

MTK 配置文件梳理

文章目录 MTK 日常配置总结屏幕默认横竖屏显示ro.build.characteristics 属性修改修改点一&#xff1a;build\core\product_config.mk修改点二&#xff1a;build\make\core\main.mk修改是否成功&#xff0c;adb 验证 配置部分系统app handheld_product.mk配置系统属性、第三方应…...

论文笔记:Treat Visual Tokens as Text? But Your MLLM Only Needs Fewer Efforts to See

2024 10月的arxiv 1 主要idea 针对多模态大模型&#xff08;如LLaVA&#xff09;&#xff0c;提出了一系列高效的剪枝策略 在显著降低计算开销&#xff08;多达 88%&#xff09;的同时&#xff0c;保持了模型在多模态任务中的性能表现 2 目前的问题 与文本 token 相比&…...

软考高级架构 —— 10.6 大型网站系统架构演化实例 + 软件架构维护

10.6 大型网站系统架构演化实例 大型网站的技术挑战主要来自于庞大的用户&#xff0c;高并发的访问和海量的数据&#xff0c;主要解决这类问题。 1. 单体架构 特点: 所有资源&#xff08;应用程序、数据库、文件&#xff09;集中在一台服务器上。适用场景: 小型网站&am…...

2024美赛数学建模C题:网球比赛中的动量,用马尔可夫链求解!详细分析

文末获取历年美赛数学建模论文&#xff0c;交流思路模型 接下来讲解马尔可夫链在2024年C题中的运用 1. 马尔科夫链的基本原理 马尔科夫链是描述随机过程的一种数学模型&#xff0c;其核心特征是无记忆性。 简单来说&#xff0c;系统在某一时刻的状态只取决于当前状态&#x…...

23种设计模式之状态模式

目录 1. 简介2. 代码2.1 State &#xff08;定义抽象状态接口&#xff09;2.2 StartState &#xff08;实现具体状态类&#xff09;2.3 EndState &#xff08;实现具体状态类&#xff09;2.4 Context &#xff08;定义上下文类&#xff09;2.5 Test &#xff08;测试类&#xf…...

Elasticsearch Serverless 中的数据流自动分片

作者&#xff1a;来自 Elastic Andrei Dan 在 Elastic Cloud Serverless 中&#xff0c;我们根据索引负载自动为数据流配置最佳分片数量&#xff0c;从而使用户无需摆弄分片。 传统上&#xff0c;用户会更改数据流的分片配置&#xff0c;以处理各种工作负载并充分利用可用资源。…...

YOLOv10改进,YOLOv10添加U-Netv2分割网络中SDI信息融合模块+GSConv卷积,助力小目标

理论介绍 完成本篇需要参考以下两篇文章,并已添加到YOLOv10代码中 YOLOv10改进,YOLOv10添加U-Netv2分割网络中SDI信息融合模块,助力小目标检测YOLOv10改进,YOLOv10添加GSConv卷积+Slim-neck,助力小目标检测,二次创新C2f结构下文都是手把手教程,跟着操作即可添加成功 目…...

宁波做网站烟台厂商/上热门最火标题

情景描述&#xff1a;之前使用的gitblit地址是&#xff1a;http://admin127.0.0.1:8080/gitblit/r/aaa.git&#xff0c;现在想修改为&#xff1a;http://admin127.0.0.1:8080/gitblit/r/bbb.git。解决方案&#xff1a;1、查看现用的remote地址&#xff1a;$ git remote -v orig…...

深圳最好的公司排名/抖音seo排名优化

最近在看java的线程池&#xff0c;对于里面的三种缓存队列里面进行对比学习了下&#xff0c;感觉自己测试下来的结果和网上有些知识点不同相同&#xff0c;所以还希望有人能帮我解惑下。 概述 队列简单解释SynchrousQueue不会保存提交任务&#xff0c;超出直接corePoolSize个…...

如何做解析网站/电商热门关键词

//在初始化codec后&#xff0c;接下来就是打开解码器int attribute_align_arg avcodec_open2(AVCodecContext *avctx, const AVCodec *codec, AVDictionary **options){int ret 0;AVDictionary *tmp NULL;if (avcodec_is_open(avctx)) //返回avctx-》internal&#xff0c;见…...

怎么制作网站维护公告效果/新一轮疫情最新消息

微信开始严打第三方网页强制跳转行为&#xff0c;禁止使用提供诱导或强制点击跳转阅读全文功能&#xff0c;违规导流网站一律封杀!微信方面表示&#xff0c;近期大量用户投诉&#xff0c;在微信中打开第三方网站链接内容总是出现诱导或强制点击才能阅读链接全文行为&#xff0c…...

网站开发设计模板/百度的客服电话是多少

事先声明&#xff0c;本文无意挑起python与其他语言的争端&#xff0c;每一种语言都有自己的适用场景和专业范围&#xff0c;任何一门编程语言都是有所能&#xff0c;有所不能。本文对其他语言没有半点贬低之意&#xff0c;这7门编程语言&#xff0c;我都有过使用&#xff0c;我…...

建设银行河北省分行官方网站/头条站长平台

必备技术参考链接所属阶段课前技能IDEA工具使用https://gitee.com/lagouedu/Basic-document/blob/master/document/IDEA.md程序员开发协作工具使用1、下载安装idea 2、idea构建maven分模块项目 3、集成mave、git 4、常用快捷Maven使用https://gitee.com/lagouedu/Basic-documen…...