zoukankan      html  css  js  c++  java
  • Pro/Toolkit数据结构

    下载:Pro/Toolkit数据结构.docx

            Pro/Toolkit数据结构.pdf

    一、对象句柄

      Pro/Toolkit中的每个对象都有一个相应的C类型定义,称为一个句柄,它的名字通常在对象名字前加上前缀Pro。句柄作为类型被使用在所有指向那种类型对象的变量和参数中。例如,对实体模型执行一个操作的任何Pro/Toolkit函数都有一个ProSolid类型的输入参数。

    句柄根据他们被定义和使用的方式,分为以下两类:

      不透明句柄(Opaque Handle或OHandle)

      数据库句柄(Database Handle 或 DHandle)

     

    不透明句柄OHandle

      在ProE中,引用一个对象最简单的方法是,使用描述那个对象的ProE数据结构的内存地址。为了防止Pro/Toolkit应用程序直接访问那个对象数据结构的内容,数据结构的声明并没有提供。例如,对象句柄ProSurface的定义为

      typedef  struct  geom*  ProSurface;

      在ProE中,struct geom结构被用于描述一个表面,但是其数据结构的声明并不包含在Pro/Toolkit中。由于这个原因,这个句柄类型被称为一个不透明句柄或不透明指针。

           不透明句柄的优点为简单而有效。它们可以在Pro/Toolkit函数中被直接解除引用而无需任何搜索。它们还可以引用临时的或根本不在ProE数据库中的项,如在干涉体积计算中所得到的表面和边。

           其他一些Pro/Toolkit OHandle的对象范例如下:

           typedef  void*  ProMdl;

           typedef  struct  curve_header*  ProEdge;

           typedef  struct  sld_part*  ProSolid;

           typedef  struct  entity*  ProPoint;

           typedef  struct  entity*  ProAxis;

           typedef  struct  entity*  ProCsys;

           typedef  struct  entity*  ProCurve;

      因为不透明句柄只是内存指针,它们具有所有指针都有的可变缺点。如果它们指向的数据库对象移到不同的内存位置上,则指针会失效。例如,一个ProSurface句柄(一个指向ProE表面的指针),在其所在的零件再生后可能失效,因为它的内存可能已被重新定位。

      然而,大多数被不透明句柄引用的ProE数据结构,将包含一个整数型的标识符,对于那种类型的项而言,这个标识符在其所在模型中是唯一的。另外,这个标识符在项的整个生命周期中,将保持它的值,即使在ProE不同的工作任务之间,Pro/Toolkit也提供诸如ProSurfaceIdGet()和ProAxisIdGet()等函数,给您的应用程序一种持续的方法,来使用这些标识符引用对象。这些整数标识符在DHandle中也有使用。

      在模型中,名称和类型是持续的。ProMdlNameGet()ProMdlTypeGet()函数将给出一个特定不透明模型句柄的模型名称和类型。

     

    数据库句柄DHandle

      不透明句柄可以对数据结构进行保护。因此,在程序中无法访问结构中的具体成员,如理论上一个提供几何体名字的函数,就可作用于任何几何体对象(ProSurface, ProEdge, ProCsys等)。然而,这些不同几何体的不透明句柄并不相互兼容,所以Pro/Toolkit函数在对象可以内部地解除引用不透明指针前,还需要知道对象的类型。

      为了解决这个问题,Pro/Toolkit定义了一个新的、通用的对象类型,并用一个数据句柄或DHandle来声明这种对象类型。DHandle是一个明确的数据结构,包含恰好足够的信息,以唯一确定一个数据库项。这些信息包括:类型、整数型标识符和所在模型的句柄。因为DHandle必须包含整数型标识符(不是太特殊的不透明句柄),它同时还具有持续的优点。

      DHandle最典型的一个范例是ProGeomitem,它对于前面提到的几何体来说,是一个通用类型。另外,还有一个ProModelitem,它是一个包含ProGeomitem的更通用对象。其声明语句如下:

    typedef struct pro_model_item

        {

            ProType  type;

            int      id;

            ProMdl   owner;

         } ProModelitem, ProGeomitem;

    注意:因为owner使用OHandle ProMdl来定义,因此严格地说是可变的,但是这个句柄在它指向的ProE模型仍然保留在内存中时,保证是有效的。

      通用对象ProGeomitem可以用来表示一个实体模型中的任何一个几何体,例如:ProSurface,ProEdge,ProCurveProCsys等。特殊的对象类型可以说是从最通用类型演化而来的,且同时为那种类型的实例。ProGeomitem对象类型反过来就是ProModelitem的一个实例。ProModelitem还可以表示非几何体的数据库项。

      如ProModelitemProGeomitem这类的通用类型对象,常常作为Pro/Toolkit中对通用类型对象执行动作函数的输入参数。例如,ProGeomitemFeatureGet()函数,它可以作用于任何作为ProGeomitem实例对象(如ProSurface,ProEdge,ProCsys等)的任何类型中。ProModelitemNameGet()可应用于更广泛的数据库对象中,而不仅是在几何体中。

      如果你有一个指向对象的OHandle,如ProSurface,且想调用一个如ProGeomitemFeatureGet()这样的通用函数,那么就必须将其OHandle转化为更通用的DHandle。如ProGeomitemInit()ProModelitemInit()函数就提供了这样的功能。类似地,你可以使用ProSurfaceInit()将一个ProGeomitem转化为一个ProSurface

     

    工作区句柄Workspace Handles

      当你在Pro/Toolkit和ProE中,创建一个包含很多重要信息(如一个特征)的对象时,在将对象加入ProE数据库之前,先创建出所有的信息就变得很重要。然而,Pro/Toolkit面向对象的风格,并不允许明确的访问这样一个数据结构。所以,就出现这样一种替代的方法,即使用一个特殊的工作区对象,这个对象是由Pro/Toolkit应用程序分配和提供的。

      实际上,工作区是ProE中的一块内存区域,它包含数据结构,但不是设计数据库的一部分。

           工作区句柄存储的也是内存地址,这一点和OHandle很相像。为了把它和OHandle区分开来,Pro/Toolkit中称其为Workspace Handle。

  • 相关阅读:
    百度之星资格赛1001——找规律——大搬家
    HDU1025——LIS——Constructing Roads In JGShining's Kingdom
    DP(递归打印路径) UVA 662 Fast Food
    递推DP UVA 607 Scheduling Lectures
    递推DP UVA 590 Always on the run
    递推DP UVA 473 Raucous Rockers
    博弈 HDOJ 4371 Alice and Bob
    DFS(深度) hihoCoder挑战赛14 B 赛车
    Codeforces Round #318 [RussianCodeCup Thanks-Round] (Div. 2)
    DP(DAG) UVA 437 The Tower of Babylon
  • 原文地址:https://www.cnblogs.com/Hisin/p/2432011.html
Copyright © 2011-2022 走看看