您所在的位置:e-works首页 > 产品创新数字化(PLM) > EDA

<连载>Protel二次开发从入门到精通

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

发表时间:2007-9-10  特约撰稿人: 张浩 白二平 来源:e-works
此单元中整个服务器的核心单元,其中定义了TConnective类、TDesign类、TName类、TSheetEntry类、TNet 类、TPart 类、TPin 类、TSheet 类、TSheetSymbol 、TListOptions类、TNetFormatter类、TNetListOptions类。作者邮箱:bullzhanghao@yahoo.com.cn 如有疑问,可直接与作者联系!

2.Create和Destroy

在RunNetListGenerate过程调用了TNetFormatter的Create和Destroy方法,定义如下:

//创建一个TNetFormatter实例。

Constructor TNetFormatter.Create;

Begin

GlobalNetListOptions := Nil; //网络连线表设置为nil。

Design := TDesign.Create;

//建立两个原理图列表,分别用于存放以当前原理图为容器的,无父子关系的一般原理图和有父子关系的原理图。

GeneratedFileNames := TStringList.Create; //创建一个用于存储产生的输出文件名称列表。

UseXRef := False;

UseNodeNames := True;

MaximumNetNameLength := 0;

MaximumPinNumberLength := 0;

MaximumPinNameLength := 0;

MaximumDesignatorLength := 0;

MaximumPartTypeLength := 0;

MaximumFootPrintLength := 0;

NetCount := 0;

UnConnectedNetCount := 0;

AppendSheetNoToNets := False;

ShouldRemoveRedundentParts := True;

ShouldRemoveRedundentNetNames := True;

ShouldRemoveRedundentSheetSymbols:= True;

PinListStyle := ePinListByComponentSortedByPinNumber; //排序类型为按组件引脚号码排序。

SetState_ProcessComponentsFirst; //设置处理次序,先处理组件,即ProcessOrder为eComponentsFirst。

SetState_UseNetFile;//设定允许使用网络文件。

SetState_AllowSingleNode;//设定允许单节点。

SetState_DontAllowZeroNode;//设定不允许零节点。

SetState_ProcessByNet;//设置按网络处理。

End;

{....................................................................................}

//TNetFormatter类的析构方法。

Destructor TNetFormatter.Destroy;

Begin

Design.Free;

GeneratedFileNames.Free;

End;

在Create方法中,创建了TDesign类的实例对象和一个用来存储已产生的文件名称的列表。上面说过,TDesign类中定义了两个用来存储原理图对象的列表,下面看一看TDesign类。

A.TDesign类定义和Create方法

//存放原理图图表的对象,此类从TConnective类继承。

TDesign = Class(TConnective)

Sheets : TListOptions;//存放原理图对象的列表。

UnFlattenedSheets : TListOptions;//存放原理图对象的列表。

Constructor Create;

DestructorDestroy;Override;

Function GetState_DesignFileName : TString;//得到设计文件名称。

Procedure AddSheet (ADataHandle : HData);

//对一个TDesign类的实例对象,把原理图对象增加到存储原理图对象的Sheets列表中。

Procedure AddUnFlattenedSheet(ADataHandle : HData);

//对一个TDesign类的实例对象,把UnFlattened类型的原理图对象增加到UnFlattenedSheets列表中。

Procedure ImportFrom_APIDataStructure;Override;

//对所有原理图进行处理,把各个原理图中的图表符号、元件、端口、网络、BUS对象属性读出来,构建出实际的对象并增加到不同的存储对象的列表中。

End; {………………………………………………………………………………………………………………}

Create方法定义如下:

Constructor TDesign.Create;

Begin

Inherited Create;

Sheets := TListOptions.Create;

//建立一个用于存放原理图对象的列表类TListOptions的实例。

UnFlattenedSheets := TListOptions.Create;

//建立一个用于存放原理图对象的列表类TListOptions的实例。

End;

在Create方法中,创建了两个TListOptions类的实例。下面来看一看TListOptions类。

1)TListOptions类定义和Create方法

//用于存放引脚对象的列表对象。

TListOptions = Class(TList)//从一个TList继承。

SortBy : TSortBy;//排序方式。

Constructor Create;

DestructorDestroy; Override;

Procedure AddPin (SpatialPin : TPin);

//增加一个引脚到TListOptions类实例的列表中。

Procedure SetState_PerformSortByPinName;

//按引脚名称对TListOptions对象实例对象中的引脚进行排序。

Procedure SetState_PerformSortByPinNumber;

//按引脚号码对TListOptions对象实例对象中的引脚进行排序。

Procedure SetState_PerformSort;

//按引脚名称对TListOptions对象实例对象中的引脚进行排序。

Procedure ImportFrom_APIDataStructure;

//对一个TListOptions的实例列表中每一个项目来调用TConnective类定义的ImportFrom_APIDataStructure方法。

Procedure AddData(ADataHandle : HData);

//对TListOptions类的一个实例列表增加对象。

Procedure ForEach(Proc : Pointer);

//对列表中的每一个对象按其地址进行遍历,来调用某一个过程进行处理。

End; {………………………………………………………………………………………………………………}

Create方法定义如下:

//创建TListOptions类的实例并设置排序方式。

Constructor TListOptions.Create;

Begin

SortBy := eSortByPinNumber;//按元件的引脚号码排序。

Inherited Create;

End;

在Create方法中,定义了一种排序方式。

到目前为止,我们仅分析了TNetFormatter.Create方法中相关的类及其方法。下面再回到上面“10.2.4 NetForms单元”。

……

NetFormatter.Run(NetListOptions,Parameters);//建立网络列表。

……

再来学习NetFormatter的Run过程。

本文为e-works原创投稿文章,未经e-works书面许可,任何人不得复制、转载、摘编等任何方式进行使用。如已是e-works授权合作伙伴,应在授权范围内使用。e-works内容合作伙伴申请热线:editor@e-works.net.cn tel:027-87592219/20/21。

责任编辑:王阳
3