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。

  • 相关阅读:
    java中的多线程
    PSCollectionView瀑布流实现
    直接拿来用!最火的iOS开源项目(一~三)
    iOS6新特征:UICollectionView介绍
    mac os颜色拾取工具/软件/器推荐
    ios/object-c中的UIColor一些比较偏的颜色展示/示例
    UIColor和 同 CIColor 与 CGColor 之间的联系、转换
    IOS开发自定义CheckBox控件
    IOS常用的第三方开发库
    JVM -XX: 参数介绍
  • 原文地址:https://www.cnblogs.com/Hisin/p/2432011.html
Copyright © 2011-2022 走看看