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

C#+Visual Studio 2022为AutoCAD 2022开发插件并显示在Ribbon选项卡

1.插件功能开发

(1)建立C#类库项目,添加必要引用,都是autocad二次开发相关的,要注意对引用的库修改其“复制文件”属性为false

(2)项目调试使用“属性”打开“启用外部程序”,指定为机器上autocad2022的acad.exe所在路径。

(3)建立一个新类,开发功能。

[CommandMethod("CheckArea",CommandFlags.UsePickSet)] //指令名称
public void CheckArea()
{
    // 获取当前文档和数据库
    Document doc =Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
    Database db = HostApplicationServices.WorkingDatabase;
    Editor ed = doc.Editor;
    //插件功能代码
   

   
}

2.Ribbon选显卡功能开发

在类里面添加一个方法:

[CommandMethod("RibbonDemo")]
public void RibbonDemo()
{
    // 获取程序集的加载路径
    string currentDLLLocation = Path.GetDirectoryName(this.GetType().Assembly.Location) + "\\";

    // 获取cad的Ribbon界面
    RibbonControl ribbonCtrl = ComponentManager.Ribbon;

    // 添加选项卡
    RibbonTab tab = new RibbonTab();
    tab.Title = "老旧小区插建房屋日照测算";
    tab.Id = "Acad.RibbonId1";
    tab.IsActive = true;
    ribbonCtrl.Tabs.Add(tab);

    // 给选项卡添加面板
    RibbonPanelSource panelSource = new RibbonPanelSource();
    panelSource.Title = "日照测算";
    RibbonPanel ribbonPanel = new RibbonPanel();
    ribbonPanel.Source = panelSource;
    tab.Panels.Add(ribbonPanel);

    // 命令按钮

    RibbonButton pLineBtn = new RibbonButton();

    string imgFileNameLineBtn = string.Format("{0}\\{1}\\{2}.png", currentDLLLocation, "Images", "big");

    Uri uriLineBtn = new Uri(imgFileNameLineBtn);
    BitmapImage bitmapImgeLineBtn = new BitmapImage(uriLineBtn);
    // 按钮图片 16 * 16
    pLineBtn.Image = bitmapImgeLineBtn;
    // 按钮图片 32 * 32
    pLineBtn.LargeImage = bitmapImgeLineBtn;
    pLineBtn.ShowImage = true;
    pLineBtn.Size = RibbonItemSize.Large;
    pLineBtn.Orientation = System.Windows.Controls.Orientation.Vertical;
    pLineBtn.Text = "面积测算";
    pLineBtn.ShowText = true;

    //添加提示对象
    RibbonToolTip toolTipLine = new RibbonToolTip();
    toolTipLine.Title = "日照测算";
    toolTipLine.Content = "根据选定的区域测算插建日照房数量和面积是否达标";
    toolTipLine.Command = "CHECKAREA";
    toolTipLine.ExpandedContent = "CheckArea命令是一个自定义插件,其根据选定的区域测算插建日照房数量和面积是否达标。";
    string imgToolTipFileNameLineBtn = string.Format("{0}\\{1}\\{2}.png", currentDLLLocation, "Images", "big");
    Uri toolTipUriLineBtn = new Uri(imgToolTipFileNameLineBtn);
    BitmapImage toolTipBitmapImgeLineBtn = new BitmapImage(toolTipUriLineBtn);
    toolTipLine.ExpandedImage = toolTipBitmapImgeLineBtn;
    pLineBtn.ToolTip = toolTipLine;

    // 给按钮关联命令
    pLineBtn.CommandHandler = new RibbonCommandHandler();
    pLineBtn.CommandParameter = "CheckArea" + " ";

    // 添加直线命令按钮
    panelSource.Items.Add(pLineBtn);

   

}

3.配置插件自启动

在“C:\Program Files\Autodesk\ApplicationPlugins”目录下创建文件夹 “ RibbonUI.bundle ”,将生成的 debug 文件夹(包含Image)拷贝入 “ RibbonUI.bundle ” ,在此文件夹中,新建PackageContents.xml,填入以下代码
<?xml version="1.0" encoding="utf-8" ?>
<ApplicationPackage SchemaVersion="1.0" AppVersion="1.0"
    ProductCode="{xxx}" 
    Name="ribbon测试插件"
>
  <CompanyDetails
    Name="****"
    Email="****"
  />
  <RuntimeRequirements OS="Win32|Win64" Platform="AutoCAD*" />
  <Components>
 <ComponentEntry ModuleName="./debug/XXXX.dll">
      <Commands>
        <Command Local="RibbonDemo" Global="RibbonDemo" StartupCommand="True"/>
      </Commands>
    </ComponentEntry>
  </Components>
 
</ApplicationPackage>
                        
参考链接:https://blog.csdn.net/wang2543311/article/details/124477198

http://www.xdnf.cn/news/55999.html

相关文章:

  • 【网络编程】从零开始彻底了解网络编程(三)
  • 榕壹云预约咨询系统:基于ThinkPHP+MySQL+UniApp打造的灵活预约小程序解决方案
  • 解决方案评测|告别复杂配置!基于阿里云云原生应用开发平台CAP快速部署Bolt.diy
  • 使用 Electron 打包可执行文件和资源:完整实战教程
  • [QMT量化交易小白入门]-四十六、年化收益率118%的回测参数,如何用贪心算法挑选50个两两相关性最小的ETF组合
  • 【Java面试笔记:基础】2.Exception和Error有什么区别?
  • XSS详解
  • 神经网络直接逆控制:神经网络与控制的结合入门级结合
  • 树莓派超全系列教程文档--(38)config.txt视频配置
  • SpringBoot中PDF处理完全指南
  • JVM学习
  • 【Linux网络】构建UDP服务器与字典翻译系统
  • 完美解决Microsoft Edge浏览器无法同步/一直在同步中/更新失败等问题
  • 后端如何生成验证码
  • 4U带屏基于DSP/ARM+FPGA+AI的电力故障录波装置设计方案,支持全国产化
  • 解析三大中间件:Nginx、Apache与Tomcat
  • 【KWDB 创作者计划】_本地化部署与使用KWDB 深度实践
  • ASP.NET Core 分层项目中EFCore的使用
  • Linux下 REEF3D及DIVEMesh 源码编译安装及使用
  • CGAL 计算直线之间的距离(3D)
  • 红队专题-漏洞挖掘-代码审计-反序列化
  • C++初阶的应用-日期管理系统的设计与实现
  • SSM--事务
  • 【TeamFlow】4 团队管理系统
  • 卡洛诗以“中式西餐”为锚点
  • C++运算符重载详解
  • puzzle(0531)脑力航迹
  • 【计量地理学】实验八 土壤重金属Zn污染范围的界定与不确定性分析
  • SpringCloud
  • 火箭姿态控制系统