<连载>Protel二次开发从入门到精通
--正文篇——第七章第9节
3. GetState_DesignfileName函数
Function TDesign.GetState_DesignFileName :TString;
Begin
GetState_DesignFileName := GetStringFromAPIFunction(DataHandle,
GetDesign_DesignFileName);
//得到设计文件名称。GetDesign_DesignFileName是advsch.dll输出的方法。
End;
并根据设计文件名称创建一个文本文件对象DDBItem。
4. TSchBOMFormatter类的SheetsForEach方法
//对存储原理图的列表每一个进行处理,产生BOM
Procedure TSchBOMFormatter.SheetsForEach;
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);
//写当前原理图名称。
WriteComponentListHeader;//写组件标题,没有具体实现功能,您可以增加功能。
WriteAllComponents;//把所有元件和图表符号的属性写到文件。
WriteComponentListTrailer;//写组件列表结尾,没有具体实现功能,您可以增加功能。
WriteSheetTrailer(SheetIndent); //一个原理图处理完成后写结尾。
End;
End;
End;
Begin
OpenBOMFile;
//打开BOM表输出文件。得到当前原理图顶层父原理图的名称,把其扩展名称改为BOM,成为输出网络文件名称。
WriteFileHeader; //输出文件标题。
MaxSheetIndent := 0;
MinSheetIndent := 9999; //原理图的缩进层次。
Design.Sheets.ForEach(@SetMaxMinIndentForSheet);
//调用SetMaxMinIndentForSheet来设置最小、最大原理图缩进层次。
For SheetIndent := MaxSheetIndentDownToMinSheetIndent Do//从最大的缩进层次到最小的缩进层次。
Design.Sheets.ForEach(@ProcessSheet);
//所有的原理图存储在Design对象的Sheets列表中。ForEach把Sheets列表中的所有原理图使用一个循环来分别进行处理各个原理图,循环中调用的处理过程是ProcessSheet。
WriteFileTrailer;//写文件的结尾。
CloseBOMFile; //关闭BOM表文件。
End;
A.OpenBOMFile方法
OpenBOMFile方法打开并创建一个文本文件,实现如下:
Procedure TSchBOMFormatter.OpenBOMFile;
Begin
OpenFile(BOMFile,ForceFileNameExtension(FileName,GetState_BOMFileExtension));
//FileName是当前原理图顶层父原理图的名称,即如果当前原理图是一个abc.Prj文件,其下有五个原理图,无论在哪一个原理图上运行此进程,filename都是abc.prj。GetState_BOMFileExtension得到BOM表的扩展名称。ForceFilenameExtension函数用新的扩展名称替代已存在的文件扩展名称。把filename的扩展名称改为net,并且打开输出文件,关联到BOMFile。
End;
本文为e-works原创投稿文章,未经e-works书面许可,任何人不得复制、转载、摘编等任何方式进行使用。如已是e-works授权合作伙伴,应在授权范围内使用。e-works内容合作伙伴申请热线:editor@e-works.net.cn tel:027-87592219/20/21。
- 上一篇文章:基于VHDL逻辑电路设计与应用
- 下一篇文章:EDA工具最好理念:端到端流程优化
