运行环境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;}
}
//感谢大家的点赞,收藏,转发,关注