e-works数字化企业网  »  文章频道  »  产品创新数字化(PLM)  »  EDA

Protel二次开发从入门到精通

—— 正文篇——第七章第10节

2007/9/12    来源:e-works    特约撰稿人:张浩  白二平      
关键字:EDA应用  Protel  二次开发  
再加到TNetFormatter.Run。如果用户在定制菜单中输出Runmode=Hierarchical参数,此调用此过程。作者邮箱:bullzhanghao@yahoo.com.cn 如有疑问,可直接与作者联系!

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。
e-works
官方微信
掌上
信息化
编辑推荐
新闻推荐
博客推荐
视频推荐