C# CAD交互界面-自定义面板集-comboBox选择图层

news/2024/7/5 2:34:48

  运行环境Visual Studio 2022 c# cad2016

一、代码说明 

  • SelectLayer方法是一个自定义的AutoCAD命令方法,通过[CommandMethod("SelectLayer")]进行标记。
  • 方法首先获取当前活动文档,并检查是否有效。
  • 创建一个名为"SelectLayer"的PaletteSet,并设置其样式以显示自动隐藏和关闭按钮。
  • 初始化一个ComboBox,并遍历GetLayerList()方法返回的所有图层记录,将图层名添加到ComboBox的Items集合中。
  • 创建一个OK按钮,绑定Click事件处理程序,在点击时读取ComboBox中选定项的文本内容,并显示所选图层名称的警告消息。
  • 将ComboBox和OK按钮放入数组中,并将这个数组添加到PaletteSet的控件集中。
  • 最后,使PaletteSet可见。

GetLayerList()方法:

  • 该方法负责从数据库中获取所有图层表记录。
  • 使用事务安全地打开数据库,并读取LayerTable对象。
  • 遍历LayerTable中的每个ObjectId,将其转换为LayerTableRecord对象并添加到列表中。
  • 提交事务并返回包含所有图层记录的列表。

二、完整代码 

internal class layername
{
    [CommandMethod("SelectLayer")]
    public void SelectLayer()
    {
        Document doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
        if (doc != null)
        {
            PaletteSet ps = new PaletteSet("Select Layer");
            ps.Style = PaletteSetStyles.ShowAutoHideButton | PaletteSetStyles.ShowCloseButton;
            ps.Size = new System.Drawing.Size(200, 100);
            System.Windows.Forms.ComboBox comboBox = new System.Windows.Forms.ComboBox();
            foreach (LayerTableRecord layer in GetLayerList())
            {
                comboBox.Items.Add(layer.Name);
            }

            System.Windows.Forms.Button okButton = new System.Windows.Forms.Button();
            okButton.Text = "OK";
            okButton.Click += (sender, e) =>
            {
                string selectedLayer = comboBox.SelectedItem.ToString();
                Autodesk.AutoCAD.ApplicationServices.Application.ShowAlertDialog("Selected Layer: " + selectedLayer);
            };


            System.Windows.Forms.Panel panel = new System.Windows.Forms.Panel();
            panel.Controls.Add(comboBox);
            panel.Controls.Add(okButton);
            ps.Add("Select Layer", panel);
            ps.Visible = true;
        }
    }

    private IEnumerable<LayerTableRecord> GetLayerList()
    {
        List<LayerTableRecord> layers = new List<LayerTableRecord>();

        using (Transaction tr = HostApplicationServices.WorkingDatabase.TransactionManager.StartTransaction())
        {
            LayerTable layerTable = (LayerTable)tr.GetObject(HostApplicationServices.WorkingDatabase.LayerTableId, OpenMode.ForRead);

            foreach (ObjectId id in layerTable)
            {
                LayerTableRecord layer = (LayerTableRecord)tr.GetObject(id, OpenMode.ForRead);
                layers.Add(layer);
            }

            tr.Commit();
        }

        return layers;
    }
}

//感谢大家的点赞,收藏,转发,关注  


http://lihuaxi.xjx100.cn/news/2039439.html

相关文章

Windows 自带的 Linux 子系统(WSL)安装与使用

WSL官网安装教程&#xff1a; https://learn.microsoft.com/zh-cn/windows/wsl/install Windows 自带的Linux子系统&#xff0c;比用VM什么的香太多了。可以自己看官方教程&#xff0c;也可以以下步骤完成。 如果中间遇到我没遇到的问题百度&#xff0c;可以在评论区评论&#…

平台组成-资源服务

资源服务是平台一个核心服务&#xff0c;另一个是用户服务&#xff0c;用户服务下篇介绍。 资源服务包括 字典&#xff1a;整个平台的字典在这里维护。字典类指字典的类别&#xff0c;例如性别字典。字典项目指具体的项目&#xff0c;例如男、女。字典项目有字典ID&#xff0c;…

Jetpack Compose 与 Kotlin 的兼容性对应关系

点击查看&#xff1a;Jetpack Compose Kotlin 的兼容性 官网 声明依赖项 如需添加 Compose Compiler 的依赖项&#xff0c;您必须将 Google Maven 代码库添加到项目中。如需了解详情&#xff0c;请参阅 Google 的 Maven 代码库。 在应用或模块的 build.gradle或者build.grad…

React native更改包名后,启动app的activity包名不生效问题

这篇文章本不算记录的&#xff0c;因为实际开发中&#xff0c;类似这种小问题会有很多很多&#xff0c;因为导致问题的原因千奇百怪&#xff0c;解决方案也不尽相同&#xff0c;所以也都没有记录。 但今天看到我10年写的问题解决小文章&#xff0c;被网友收藏了&#xff0c; 感…

uniapp不同平台获取文件内容以及base64编码特征

前言 文件图片上传&#xff0c;客户端预览是很正常的需求&#xff0c;获取文件的md5特征码也是很正常的&#xff0c;那么&#xff0c;在uniapp中三种环境&#xff0c;h5, 小程序以及 app环境下&#xff0c;如何实现的&#xff1f; 参考&#xff1a; 如何在uniapp中读取文件Arr…

07.STL单调栈

单调栈的特点&#xff1a; 1.自顶向下一次递增&#xff0c;也就是上小下大的栈 单调栈代码&#xff1a; 算法思想&#xff1a;将不符合单调栈性质的弹出&#xff0c;符合的输入 #include<iostream> #include <stack> #include<queue> using namespace std…

k8s 基础理论

一、k8s概述 K8S 的全称为 Kubernetes&#xff0c;其作用为用于自动部署、扩展和管理“容器化&#xff08;containerized&#xff09;应用程序”的开源系统。可以理解成 K8S 是负责自动化运维管理多个容器化程序&#xff08;比如 Docker&#xff09;的集群&#xff0c;是一个生…

基于RHEL8部署Zabbix6.0,监控不再困难!

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是【IT邦德】&#xff0c;江湖人称jeames007&#xff0c;10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】&#xff01;&#x1f61c;&am…