还剩22页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
二次开发概述
1.Altium Designer什么是二次开发
1.1Altium Designer是一款功能强大的设计软件,广泛应用于电子设计自动化Altium DesignerPCB EDA领域尽管本身提供了丰富的功能和工具,但在某些特定的应用Altium Designer场景中,用户可能需要更定制化的功能和自动化流程这就需要进行二次开发,通过编写脚本和插件来扩展的功能Altium Designer二次开发可以实现以下目标-自动化任务例如自动布局、自动布线、生成报告等-定制化功能例如特定的规则检查、自定义报表生成、数据导入导出等-集成外部工具例如与其他设计工具、数据库、系统等进行集成ERP二次开发的工具和语言
1.2支持多种二次开发工具和语言,主要包括使用Altium Designer-Scripting JavaScript进行脚本开发,适用于简单的自动化任务使用或编写插件,适-Addins C#C++用于复杂的功能扩展通过的进行深度集成和定制-API Altium Designer API使用进行脚本开发
2.JavaScript脚本开发环境
2.1内置了一个脚本编辑器,用户可以直接在软件中编写和执行Altium Designer脚本此外,还提供了一些常用的函数,帮助用户快JavaScript Altium Designer API速实现自动化任务基本脚本示例
2.2自动保存当前项目
2.
2.1〃保存当前项目function saveProject{public string Name=ImportCSVCommand;”导入文件中的组件信息”;public stringDescription=CSVpublic string Category=ImportCSVCategory;public boolIsAvailable=true;public voidExecute〃获取当前打开的文档PCBvar pcbDoc=IPCB_Boardapplication.ActiveDocument;if pcbDoc!=null〃选择文件CSVvar openFileDialog=new OpenFileDialogO;if openFileDialog.ShowDialogO==DialogResult.OK读取文件//csvvar lines=File.ReadAIILinesopenFileDialog.FileName;foreach varline inlinesvar parts=line.Split7;if parts.Length=3var componentName=partsfO];var x=double.Parseparts[l];var y=double.Parseparts
[2];〃获取组件var component=IPCB_ComponentpcbDoc.ComponentList.GetComponentByNamecomponentName;if component!=null〃设置组件位置component.Location=new Pointx,y;}组件信息导入完成MessageBox.Showelse没有打开的文档”;MessageBox.Show PCB}.集成外部工具6与数据库集成
6.1从数据库中导入组件信息
6.
1.1using System;using System.Data.SqlClient;using;using Altium.DXP.PCB;using Altium.DXP.PCB.Objects;namespace Databaseintegration[ComVisibletrue][GuidCYOUR-GUID-HERE]public classDatabasePlugin:IDXPAddlnprivate IDXPApplicationapplication;public voidOnDXPConnectIDXPCOMConnection connectionthis.application=connection.Application;〃注册命令var command=new ImportFromDatabaseCommandO;connection.Commands.Addcommand;}public voidOnDXPDisconnect断开连接时清理资源//;application.Commands.Removeapplication.Commands[lmportFromDatabaseCommand]}}[ComVisibletrue][GuidYOUR-COMMAND-GUID-HERE]public classImportFromDatabaseCommand:IDXPCommand public string Name=ImportFromDatabaseCommand;”从数据库中导入组件信息”;public stringDescription=public string Category=Databasecategory;public boolIsAvailable=true;public voidExecute〃获取当前打开的文档PCBvar pcbDoc=IPCB_Boardapplication.ActiveDocument;if pcbDoc!=null〃连接数据库var connectionstring=Data Source=YOUR_SERVER;lnitial CataI og=YO UR_DATA BASE;Int egratedSecurity=True;using varconnection=new SqlConnectionconnectionStringconnection.Open;var command=new SqlCommandSELECTComponentName,X,Y FROMComponents,connection;using varreader=command.ExecuteReaderwhile reader.Readvar componentName=reader.GetStringO;var x=reader.GetDoublel;var y=reader.GetDouble2;〃获取组件var component=IPCB_ComponentpcbDoc.ComponentList.GetComponentByNamecomponentName;if component!=null〃设置组件位置component.Location=new Pointx,y;}(组件信息从数据库导入完成”);MessageBox.Show else没有打开的文档”;MessageBox.Show PCB与系统集成
6.2ERP将导出到系统
6.
2.1BOM ERPusing System;using System.10;using;using Altium.DXP.PCB;using Altium.DXP.PCB.Objects;namespace ERPIIntegration[ComVisibletrue][GuidC7OUR-GUID-HERE]public classERPPIugin:IDXPAddlnprivate IDXPApplicationapplication;public voidOnDXPConnectIDXPCOMConnection connectionthis.application=connection.Application;〃注册命令var command=new ExportBOMCommand;connection.Commands.Addcommand;public voidOnDXPDisconnect断开连接时清理资源//application.Commands.Removeapplication.Commands[ExportBOMCommand];[ComVisibletrue][GuidYOUR-COMMAND-GUID-HERE]public classExportBOMCommand:IDXPCommand public string Name=ExportBOMCommand;将导出到系统”;public stringDescription=11BOM ERPpublic stringCategory=ERPCategory;public boolIsAvailable=true;public voidExecute获取当前打开的文档//PCBvar pcbDoc=IPCB_Boardapplication.ActiveDocument;if pcbDoc!=null〃获取信息BOMvar bom=pcbDoc.BOM;;var bomFile=@C:\BOM.txt”using varwriter=new StreamWriterbomFileforeach var component inbom var componentName=component.ComponentName;var reference=component.Reference;var value=component.Value;var footprint=component.Footprint;writer.WriteLine${componentName}{reference}{value},{footprint};//导出完成;MessageBox.ShowBOMelse没有打开的文档”;MessageBox.Show PCB}用户界面定制
7.创建自定义菜单
7.1添加自定义菜单项
7.
1.1using System;using;using Altium.DXP.UI;using Altium.DXP.UI.Commands;namespace CustomMenu[ComVisibletrue][GuidYOUR-GUID-HERE]public classCustomMenuPlugin:IDXPAddlnprivate IDXPApplicationapplication;public voidOnDXPConnectIDXPCOMConnection connectionthis.application=connection.Application;〃注册命令var command=new CustomMenuCommand;connection.Commands.Addcommand;创建自定义菜单//定义菜单”;var menu=new DXPMenus.MenuCCustomMenu,menu.Commands.Addcommand;connection.Menus.Addmenu;}public voidOnDXPDisconnect断开连接时清理资源//application.Com mands.Remove application.Commands[Custom MenuCommand];application.Menus.Removeapplication.Menus[Custom Menu];}[ComVisibletrue][GuidCYOUR-COMMAND-GUID-HERE]public classCustomMenuCommand:IDXPCommand public stringName=CustomMenuCommand;自定义菜单命令”;public stringDescription=public stringCategory=CustomMenuCategory;public boolIsAvailable=true;public voidExecute自定义菜单命令已执行”;MessageBox.Show创建自定义对话框
7.2使用创建对话框
7.
2.1Windows Formsusing System;using System.Windows.Forms;using;using Altium.DXP.PCB;using Altium.DXP.PCB.Objects;namespace CustomDialog[ComVisibletrue][GuidYOUR-GUID-HERE]public classCustomDialogPlugin:IDXPAddlnprivate IDXPApplicationapplication;用户界面定制public voidOnDXPConnectIDXPCOM###
7.创建自定义菜单####
7.1添加自定义菜单项#####csharpusing System;using;using Altium.DXP.UI;using Altium.DXP.UI.Commands;namespace CustomMenu[ComVisibletrue][GuidnYOUR-GUID-HERE]public classCustomMenuPlugin:IDXPAddlnprivate IDXPApplicationapplication;public voidOnDXPConnectIDXPCOMConnection connectionthis.application=connection.Application;〃注册命令var command=new CustomMenuCommand;connection.Commands.Addcommand;创建自定义菜单//定义菜单”;var menu=new DXPMenus.MenuCustomMenuflzmenu.Commands.Addcommand;connection.Menus.Add menu;public voidOnDXPDisconnect断开连接时清理资源//application.Commands.Removeapplication.Commands[Custom MenuCommand];application.Menus.Removeapplication.Menus[Custom Menu];}}[ComVisibletrue][GuidYOUR-COMMAND-GUID-HEREn]public classCustomMenuCommand:IDXPCommandpublic stringName=CustomMenuCommand;”自定义菜单命令”;public stringDescription=public stringCategory=CustomMenuCategory;public boolIsAvailable=true;public voidExecute咱定义菜单命令已执行”;MessageBox.Show创建自定义对话框
7.2使用创建对话框
7.
2.1Windows Forms要在中创建自定义对话框,可以使用以下是一个Altium DesignerWindows Formso简单的示例,展示如何创建一个包含文本输入框和按钮的对话框,并在按钮点击时执行某些操作创建项目
1.Windows Forms在中,创建一个新的项目o Visual Studio WindowsForms App添加一个表单并在表单上添加文本输入框和按钮o Form,TextBoxButtono添力口弓|用
2.Altium Designer右键点击项目-选择“添加引用”-在选项卡中找到o“COM”“AltiumDesigner COMObjectn并添加编写插件代码
3.using System;usingSystem.W in do ws.Forms;using;using Altium.DXP.UI;using Altium.DXP.UI.Commands;namespace CustomDialog[ComVisibletrue][GuidYOUR-GUID-HERE]public classCustomDialogPlugin:IDXPAddlnpublic voidOnDXPConnectIDXPCOMConnection connectionthis.application=connection.Application;〃注册命令var command=new CustomDialogCommand;connection.Commands.Addcommand;创建自定义菜单//定义菜单”;var menu=new DXPMenus.MenuCCustomMenu,Rmenu.Commands.Addcommand;connection.Menus.Addmenu;}public voidOnDXPDisconnect〃断开连接时清理资源application.Commands.Removeapplication.Commands[CustomDialogCommand];application.Menus.Removeapplication.Menus[Custom Menu];}}[ComVisibletrue][GuidYOUR-COMMAND-GUID-HEREn]public classCustomDialogCommand:IDXPCommandpublic stringName=CustomDialogCommand;”显示自定义对话框“;public stringDescription=publicstringCategory=CustomDialogCategory;public boolIsAvailable=true;public voidExecute〃显示自定义对话框var form=new CustomForm;form.ShowDialog;}public classCustomForm:Formprivate TextBox textBox;〃获取当前打开的项目var project=Project.CurrentProject;if project{〃保存项目project.Save;项口已保存”;MessageBox.Show}else{没有打开的项目;MessageBox.ShowC}〃执行保存项目函数saveProject;自动生成布局PCB自动生成布局//PCBfunction autoPlaceComponents{获取当前打开的文档//PCBvar pcbDoc=PCBDocument.GetCurrentPCBDocument;if pcbDoc{〃获取所有组件var components=pcbDoc.Components;for vari=0;icomponents.Count;i++{varcomponent=components.Itemi;〃设置组件位置component.Location=new Pointi*100,i*100;组件自动布局完成;MessageBox.Show}else{没有打开的文档;MessageBox.Show PCB执行自动布局函数//autoPlaceComponents;脚本开发最佳实践
2.3模块化将代码分解为多个函数,增强可读性和可维护性
1.错误处理使用语句处理可能的异常,确保脚本的健壮性
2.try-catchprivate Buttonbutton;public CustomForm初始化表单//二“自定义对话框”;this.Textthis.Size=new System.Drawing.Size300,150;〃添加文本输入框textBox=new TextBoxf;textBox.Location=new System.Drawing.Point50,30;this.Controls.AddtextBox;添加按钮//button=new Button;确定”;button.Text=button.Location=new System.Drawing.Point100,70;button.Click+=new EventHandlerButton_Click;this.Controls.Addbutton;}private voidButton_Clickobject sender,Eve ntArgs e〃获取文本输入框的值var inputText=textBox.Text;〃执行某些操作”输入的文本是:MessageBox.Show${inputText};〃关闭表单this.Close;}高级技巧和注意事项
8.性能优化
8.1在进行二次开发时,性能优化是非常重要的以下是一些常见的优化技巧:批量操作尽量减少对对象的频繁访问和修改,使用批量操作可以Altium Designer显著提高性能•缓存数据缓存常用的数据和对象,避免重复计算和访问•异步处理对于耗时较长的操作,使用异步处理方式,避免阻塞用户界面错误处理
1.2良好的错误处理机制可以提高插件的健壮性和用户体验以下是一些错误处理的建议•日志记录记录详细的日志信息,帮助调试和排查问题•友好的错误提示在用户界面中提供友好的错误提示,避免技术术语•异常捕获使用语句捕获和处理异常,确保插件的稳定性try-catch版本兼容性
1.3的不同版本可能在和功能上有所差异为了确保插件的兼容性,Altium Designer API建议•测试不同版本在多个版本的中进行测试,确保插件在不同版Altium Designer本中都能正常工作•条件编译使用条件编译指令,针对不同版本的编写兼容代码API.总结9通过二次开发,用户可以极大地扩展的功能,实现自动化任务、定Altium Designer制化功能和集成外部工具本文详细介绍了使用脚本、插件和JavaScript C#Altium进行二次开发的方法和示例,并提供了高级技巧和注意事项希望这DesignerAPI些内容能帮助开发者更好地利用进行电子设计自动化Altium Designer参考资料
10.官方文档提供了详细的文档和开发指南•Altium DesignerAPI社区用户可以在这里找到更多的开发示例和讨论•Altium Designer官方文档和教程,帮助开发者更好地使用进行开发•Visual StudioC#希望本文对您在二次开发方面有所帮助如果有任何问题或需要进Altium Designer一步的指导,欢迎随时咨询注释为代码添加详细的注释,便于其他开发者理解和维护
3.使用编写插件
3.C#创建插件项目
3.1C#安装确保安装了这是编写插件的主要开发环
1.Visual StudioVisual Studio,C#境创建新项目在中创建一个新的项目
2.Visual StudioClass Library添力口引用:在项目中添加对的接口
3.Altium DesignerAltium Designer COM的引用添加引用
3.L1在中,右键点击项目-选择“添加引用”-在“选项卡中找Visual StudioCOM”至并添加U Altium DesignerCOMObject”基本插件示例
3.2创建一个简单的插件
3.
2.1using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using;using Altium.DXP.UI;using Altium.DXP.UI.Commands;namespace AltiumDesignerPlugin[ComVisibletrue][GuidC7OUR-GUID-HERE]public classMyAltiumPlugin:IDXPAddlnpublic voidOnDXPConnectIDXPCOMConnection connectionthis.connection=connection;〃注册命令var command=new MyCommand;connection.Commands.Addcommand;}public voidOnDXPDisconnect〃断开连接时清理资源connection.Commands.Removeconnection.Commands[MyCommand];}}[ComVisibletrue][GuidCYOUR-COMMAND-GUID-HERE1]public classMyCommand:IDXPCommandpublic stringName=MyCommand;”这是一个简单的插件命令”;publicstringDescription=Altium DesignerpublicstringCategory=MyPluginCategory;public boolIsAvailable=true;public voidExecute获取当前打开的项目//var project=connection.ProjectCurrentProject;if project!=null〃保存项目project.Save;项目已保存;MessageBox.Showelse没有打开的项目”;MessageBox.Show}插件安装和调试
3.
2.
21.编译项目在VisualStudio中编译项目,生成DLL文件
2.注册插件使用regasm工具将生成的DLL文件注册到系统中
3.在Altium Designer中加载插件在AltiumDesigner中,通过“Add/Remove对话框加载插件Addins”使用进行深度集成
4.AltiumDesignerAPI基础知识
4.1API提供了一套丰富的用户可以通过这些访问和操作软件中的AltiumDesignerAPI,API各种对象和功能主要包括以下几类-项目管理创建、打开、保存项目等API-文档管理操作原理图、文档等-对象操作获取、设置组件、网络、焊盘PCB等对象的属性-规则管理设置和检查设计规则基本示例
4.2API创建一个新的项目421using System;using;using Altium.DXP.Projects;namespace AltiumDesignerAPIclassProgramstatic voidMainstring[]args获取应用程序对象//Altium Designervarapp=IDXPApplicationActivator.CreatelnstanceType.GetTypeFromProglDDXP.Application;创建一个新的项目//var project=app.Projects.AddProjectC:\\NewProject.PrjPcb;if project!=null项□创建成功;MessageBox.Show else项目创建失败;MessageBox.Show〃释放资源app.Quit;设置组件属性using System;using;using Altium.DXP.PCB;using Altium.DXP.PCB.Objects;namespace AltiumDesignerAPIclassProgramstatic voidMainstring[]args获取应用程序对象//Altium Designervarapp=IDXPApplicationActivator.CreatelnstanceType.GetTypeFromProglDDXP.Application;获取当前打开的文档//PCBvar pcbDoc=IPCB_Boardapp.ActiveDocument;if pcbDoc!=null〃获取第一个组件var components=pcbDoc.ComponentList;if components.Count0varcomponent=IPCB_Componentcomponents
[0];〃设置组件属性component.Location=new Point100,100;component.Rotation=90;组件属性设置成功;MessageBox.Showelse没有组件可以设置;MessageBox.Showelse没有打开的文档;MessageBox.ShowC PCB〃释放资源app.Quit;高级功能开发
5.定义规则检查插件自定义规则检查
5.1using System;using;using Altium.DXP.PCB;using Altium.DXP.PCB.Rules;namespace CustomRuleCheck[ComVisibletrue][GuidnYOUR-GUID-HERE]public classCustomRulePlugin:IDXPAddlnprivate IDXPApplicationapplication;this.application=connection.Application;〃注册命令var command=new CustomRuleCommand;connection.Commands.Addcommand;}public voidOnDXPDisconnect〃断开连接时清理资源application.Commands.Removeapplication.Commands[CustomRuleCommand];[ComVisibletrue][GuidCYOUR-COMMAND-GUID-HERE11]public classCustomRuleCommand:IDXPCommandpublic stringName=CustomRuleCommand;自定义规则检查命令publicstringDescription=publicstringCategory=CustomRuleCategory;public boolIsAvailable=true;public voidExecute〃获取当前打开的文档PCBvar pcbDoc=IPCB_Boardapplication.ActiveDocument;if pcbDoc!=null获取所有网络//var nets=pcbDoc.Nets;foreach varnet innets检查网络长度//假设最大允许长度为if net.Length100//100网络长度超过MessageBox.Show$”{net.Name}100;}else没有打开的文档;MessageBox.Show PCB数据导入导出
5.2导入文件中的组件信息
5.
2.1CSVusing System;usingSystem.10;using;using Altium.DXP.PCB;using Altium.DXP.PCB.Objects;namespace ImportCSV[ComVisibletrue][GuidC7OUR-GUID-HERE]public classImportCSVPIugin:IDXPAddlnprivate IDXPApplicationapplication;public voidOnDXPConnectIDXPCOMConnection connectionthis.application=connection.Application;〃注册命令var command=new lmportCSVCommand;connection.Commands.Addcommand;}public voidOnDXPDisconnect断开连接时清理资源//application.Commands.Removeapplication.Commands[ImportCSVCommand];}}[ComVisibletrue][GuidYOUR-COMMAND-GUID-HERE]public classImportCSVCommand:IDXPCommand。
个人认证
优秀文档
获得点赞 0