<连载>Protel二次开发从入门到精通
--正文篇——第七章第10节
1.判断当前文档是否为原理图
SchematicServerHandle :=MessageRouter_ModuleHandle('Sch');
此过程先判断当前文档是否为原理图,如果不是,显示错误提示信息后退出。
2.创建TNetListOptions类实例
接下来创建一个存储如何产生网络连线表的设置选项对象NetListOptions,此对象中存储如原理图的类型、产生的文件是在本地硬盘还是DDB数据库内,如在本地硬盘上,存储的文件名称,产生的方法等等信息。类定义在NetFormat单元中。TNetListOptions类定义和Create方法
A.网络选项类定义
TNetListOptions = Class
WinFileName : TString;//产生的文件如果要写在硬盘中的文件名称。
CreateInDSN : Boolean;//为真网络连线表产生的数据库中,为假产生在本地硬盘中。
NetlistFormat : TNetListFormat; //网络连线表格式类型,有三种类型。
GenerateMethod :TNetListGenerateMethod;
//如何创建网络连线表的方法常量枚举,有三个选项,分别为eNetListGenerateAllGlobal, eNetListGeneratePortsGlobal, eNetListGenerateNoGlobal
AppendSheetNoToNets :TBoolean;
WriteNetsAfter_ConvertToConnective :TBoolean;
WriteNetsAfter_Resolve_Internal :TBoolean;
WriteNetsAfter_Resolve_Global :TBoolean;
Include_NetMergingInformation :TBoolean;
WriteNetDebugInformation :TBoolean;
DescendIntoSheetParts :TBoolean;
IncludeUnNamedSinglePinNets :TBoolean;
//输出所有网络名称,包括指示要跳过的引脚的网络名称。
SheetsToNetlist :TSheetsToNetlist;
Constructor Create;
Procedure SetState_Options; //设置网络表的格式。
End;
B.Create方法
Constructor TNetListOptions.Create;
Begin
SetState_Options;//调用设置网络连线表过程。
End;
1)SetState_Options
方法中调用SetState_Options过程来设置网络连线表的选项对象。
Procedure TNetListOptions.SetState_Options; //设置网络连线表选项。
Begin
WinFileName := '';//默认产生在硬盘中的文件名称为空。
CreateInDSN := True;//默认网络连线表是产生在DDB数据库中。
GenerateMethod := eNetListGenerateNoGlobal;//设置如何产生网络列表。
NetlistFormat := eProtel;//默认的格式是eProtel,即输出格式是eRunModeFlat,而不是eRunModeHierachical。
AppendSheetNoToNets := False;
WriteNetsAfter_ConvertToConnective := False;
WriteNetsAfter_Resolve_Internal := False;
WriteNetsAfter_Resolve_Global := False;
Include_NetMergingInformation := False;
WriteNetDebugInformation := False;
DescendIntoSheetParts := False;
IncludeUnNamedSinglePinNets := False;
//输出所有网络名称,包括指示要跳过的引脚的网络名称。
SheetsToNetlist := eActiveProject;//是原理图是prj文件,即不是一般的原理图,而是项目文件。
End;
请注意,默认的格式是eProtel,即输出格式是eRunModeFlat,而不是eRunModeHierachical。
3.得到所有advsch.dll输出方法和函数
程序接下来调用SetAllProcAddresses,SetAllProcAddresses不是一个常规的API方法,而是NETAPI中输出的一个函数。
4.得到运行模式
然后,使用Getstate_Parameter来读取用户在定制菜单项时所输入的参数值,使用函数GetState_RunModeFromString来返回不同的运行模式。GetState_RunModeFromString定义如下:
//S是从用户在定制菜单项时输入的参数块中的参数值。如果参数块为RunMode=value1形式。
Function GetState_RunModeFromString(S : String) : TRunModes;
Begin
Result := eRunModeFlat;//默认返回eRunModeFlat。
If TokenEqual(S,'Flat') Then
Result := eRunModeFlat //如果参数值是Flat,则返回eRunModeFlat。
Else
If TokenEqual(S,'Hierachical') Then
Result :=eRunModeHierachical;
//如果参数值是Hierachical,返回eRunModeHierachical。
//TokenEqual函数比较字符串S1和S2,如果它们精确地相同,函数返回一个真(True) 值,否则返回一个假(False)值。
End;
5.根据运行模式来设置运行对象NetListOptions中NetListFormat属性值
If RunMode = eRunModeHierachical Then
NetListOptions.NetListFormat := eProtel_H;
6.调用RunNetListGenerate过程来产生网络连线表
最后,程序调进RunNetListGenerate过程来产生网络连线表,参数为选项设置对象NetListOptions和用户在定制此进程菜单项时输入的参数Parameters。RunNetListGenerate定义在NetForms单元中。
10.2.4 NetForms单元
NetForms单元很简单,只有一个过程RunNetListGenerate。
//参数网络连接表选项和用户在菜单定制时输入的参数
Procedure RunNetListGenerate(NetListOptions : TNetListOptions; Parameters : PChar);
Var
NetFormatter :TNetFormatter;
//TNetFormatter定义在NetFormat单元中。
Begin
NetFormatter := Nil;
//根据网络连接表的选项中NetlistFormat选项来创建不同的对象。
Case NetListOptions.NetlistFormat Of
//根据NetListOptions对象中NetlistFormat格式来创建对象。
eProtel_H : NetFormatter := TProtel_H.Create; //Hierachical格式,TProtel_H定义在Protel单元中。
eProtel: NetFormatter := TProtel.Create; //Flat格式,TProtel_H定义在Protel单元中。
End;
If NetFormatter <> Nil Then //NetFormatter建立成功,建立一个网络列表。
Begin
NetFormatter.Run(NetListOptions,Parameters);//建立网络列表。
Netformatter.Destroy;//释放NetFormatter对象。
End;
End;
此过程创建一个TNetFormatter类的NetFormatter对象空的实例,然后根据NetListOptions对象中NetlistFormat格式来创建不同对象,如果用户在定制菜单时输入的参数是RunMode = Hierachical,创建一个TProtel_H类对象实例,如果用户在定制菜单时输入的参数是RunMode = Flat,则创建一个TProtel类对象实例。请见
调用NetFormatter对象实例中的Run方法来建立网络连线表。
完成后释放对象实例NetFormatter。
TNetFormatter类定义在NETFormat单元中。
下面先来分析TProtel_H和TProtel的类,请见
本文为e-works原创投稿文章,未经e-works书面许可,任何人不得复制、转载、摘编等任何方式进行使用。如已是e-works授权合作伙伴,应在授权范围内使用。e-works内容合作伙伴申请热线:editor@e-works.net.cn tel:027-87592219/20/21。
- 上一篇文章:<连载>Protel二次开发从入门到精通
- 下一篇文章:EDA工具最好理念:端到端流程优化
