<连载>Protel二次开发从入门到精通
--正文篇——第七章第10节
1.TNetFormatter类的RunHierarchical方法
再加到TNetFormatter.Run。如果用户在定制菜单中输出Runmode=Hierarchical参数,此调用此过程。
//如果用户在参数输入中输入了RunMode=Hierachical参数块,运行此过程。对于eProtel_H格式。
Procedure TNetFormatter.RunHierarchical;
Var
i : TShortInt;
MaxSheetIndent : TShortInt; //最大缩进。
MinSheetIndent : TShortInt; //最小缩进。
SheetIndent : TShortInt;
//设置最小和最大缩进层次。
Procedure SetMaxMinIndentForSheet(P : TSheet); Far;
Begin
If P <> Nil Then
Begin
If P.GetState_SheetIndent > MaxSheetIndent Then
MaxSheetIndent := P.GetState_SheetIndent;
If P.GetState_SheetIndent < MinSheetIndent Then
MinSheetIndent := P.GetState_SheetIndent;
End;
End;
//处理每一个原理图,把信息输出到文件。
Procedure ProcessSheet(P : TSheet); Far;
Begin
If P <> Nil Then
Begin
If P.GetState_SheetIndent = SheetIndent Then
Begin
CurrentSheetName :=
UpperCase(ExtractWholeFileNameFromPath(P.GetState_SheetFileName));
//P.GetState_SheetFileName得到原理图图表的文件名称,包括扩展名称。
//ExtractWholeFilenameFromPath函数提取Path字符串中名称和扩展名称。
CurrentSheet := P;
//把要处理的原理图赋予CurrentSheet,成为当前图表,从而可对当前原理图进行处理,如调用GetState_SheetFileName读取原理图名称等。
WriteSheetHeader(SheetIndent);
//写TNetFormatter类实例对象的图表标题。实际上调用TProtel_H.WriteSheetHeader的过程。把当前原理图名称和端口写到文件。
if ProcessStyle = eProcessByComponent Then //如果处理类型是按组件处理。
WriteNodesByComponent
//按组件写节点,把当前原理图图表中引脚和图表符号写到文件。
Else//处理按网络。
Begin
if ProcessOrder = eComponentsFirst Then
//先组件,在create方法中,使用SetState_ProcessComponentsFirst方法,默认是先组件。
Begin
WriteComponentListHeader;//写组件标题,没有具体实现功能,您可以增加功能。
WriteAllComponents;//把所有元件和图表符号的属性写到文件。
WriteComponentListTrailer;
//写组件列表结尾,没有具体实现功能,您可以增加功能。
WriteNetListHeader;//写网络列表标题,没有具体实现功能,您可以增加功能。
WriteAllNets;//写网络名称、引脚对象到文件。
WriteNetListTrailer;//写网络列表结尾,没有具体实现功能,您可以增加功能。
End Else //先写网络的属性到文件。
Begin
WriteNetListHeader;//写网络列表标题,没有具体实现功能,您可以增加功能。
WriteAllNets;//写网络名称、引脚对象到文件。
WriteNetListTrailer; //写网络列表结尾,没有具体实现功能,您可以增加功能。
WriteComponentListHeader;//写组件标题,没有具体实现功能,您可以增加功能。
WriteAllComponents; //把所有元件和图表符号的属性写到文件。
WriteComponentListTrailer;
//写组件列表结尾,没有具体实现功能,您可以增加功能
End;
End;
WriteSheetTrailer(SheetIndent);
//一个原理图处理完成后,写结尾,调用TProtel_H.WriteSheetTrailer。
End;
End;
End;
Begin
if RunSetupOptions Then
Begin
WriteToStatucBar('写网络连线表到' + GetDisplayName(DesignName) +'文件'+'...');
//在状态条上输出提示信息。
if UseNetFileThen OpenNetFile;
//打开连线表输出文件。得到当前原理图顶层父原理图的名称,把其扩展名称改为net,成为输出网络文件名称。
WriteFileHeader; //输出文件标题。
MaxSheetIndent := 0;
MinSheetIndent := 9999;
//原理图的缩进层次。
Design.Sheets.ForEach(@SetMaxMinIndentForSheet);
//调用SetMaxMinIndentForSheet来设置最小、最大原理图缩进层次。
For SheetIndent := MaxSheetIndent DownTo MinSheetIndent Do//从最大的缩进层次到最小的缩进层次。
Design.Sheets.ForEach(@ProcessSheet);
//所有的原理图存储在Design对象的Sheets列表中。ForEach把Sheets列表中的所有原理图使用一个
//循环来分别进行处理各个原理图,循环中调用的处理过程是ProcessSheet。
WriteFileTrailer;//写文件的结尾,没有具体定义功能,您可以加上去。
if UseNetFileThen
CloseNetFile;
//关闭网络连线表文件。
End;
End;
{………………………………………………………………………………………………………………}
A.WriteToStatucBar
此过程向状态条上输出提示信息:
Procedure TNetFormatter.WriteToStatucBar(S : TString);
Begin
//没有具体的实现代码。
End;
B.OpenNetFile方法
OpenNetFile方法打开并创建一个文本文件,实现如下:
//打开网络连线表文件。
Procedure TNetFormatter.OpenNetFile;
Begin
OpenFile(NetFile,ForceFileNameExtension(FileName,GetState_NetFileExtension));
//FileName是当前原理图顶层父原理图的名称,即如果当前原理图是一个abc.Prj文件,其下有五个原理图,无论在哪一个原理图上运行此进程,filename都是abc.prj。GetState_NetFileExtension得到连线表的扩展名称。ForceFilenameExtension函数用新的扩展名称替代已存在的文件扩展名称。把filename的扩展名称改为net,并且打开输出文件,关联到NetFile。
End;
本文为e-works原创投稿文章,未经e-works书面许可,任何人不得复制、转载、摘编等任何方式进行使用。如已是e-works授权合作伙伴,应在授权范围内使用。e-works内容合作伙伴申请热线:editor@e-works.net.cn tel:027-87592219/20/21。
- 上一篇文章:<连载>Protel二次开发从入门到精通
- 下一篇文章:EDA工具最好理念:端到端流程优化
