找回密码
 立即注册
查看: 300|回复: 0

设置图形属性

[复制链接]
发表于 2022-7-19 09:59 | 显示全部楼层 |阅读模式
设置图形属性
实现CATIVisProperties接口
CAAPstIntegrateNewFeatures > CAAPstINFCreateDocument > CAAPstINFInitCont > CAAPstINFNavigate > CAAPstINFVisu > CAAPstINFGraphicalProperties > CAAPstINFEdit > CAAPstINFCCP > CAAPstINFDelete > CAAPstINFUpdate
摘要本文展示了如何实现CATIVisProperties接口。 它使您能够将图形属性与特征相关联。 但是,有时,实现CATIVisProperties 接口是不够的,您应该覆盖CATIVisu接口的CATExtIVisu适配器类的方法。 本文也对其进行了描述。您将从这个用例中学到什么CAAPstINFGraphicProperties用例CAAPstINFGraphicProperties实现了什么怎样启动CAAPstINFGraphicProperties在哪可以找到 CAAPstINFGraphicProperties代码步骤总之引用


  • 您将从这个用例中学到什么
  • CAAPstINFGraphicProperties用例

    • CAAPstINFGraphicProperties实现了什么
    • 怎样启动CAAPstINFGraphicProperties
    • 在哪可以找到 CAAPstINFGraphicProperties代码



  • 步骤
  • 总之
  • 引用
摘要本文展示了如何实现CATIVisProperties接口。 它使您能够将图形属性与特征相关联。 但是,有时,实现CATIVisProperties 接口是不够的,您应该覆盖CATIVisu接口的CATExtIVisu适配器类的方法。 本文也对其进行了描述。您将从这个用例中学到什么CAAPstINFGraphicProperties用例CAAPstINFGraphicProperties实现了什么怎样启动CAAPstINFGraphicProperties在哪可以找到 CAAPstINFGraphicProperties代码步骤总之引用

您将从这个用例中学到什么
在阅读本文之前,建议阅读"图形属性"技术文章[1],以了解图形属性在可视化机制中的处理方式。 它基于三个接口:

  • CATIVisProperties, 主接口允许将一种或多种类型的几何图形与特征相关联。每个几何体类型都是CATVISGometype。 作为主要的预定义类型,有点类型(CATVPPoint)、线型(CATVPLine或CATVPEdge)或曲面类型(CATVPMesh)。 每种类型的几何图形都将一组图形特性重新组合在一起。颜色、线型等此类属性是CATVisPropertyType
  • CATIProperty,保存图形属性的接口。该接口是在每个特征上本机实现的。
  • 该接口源于CATIVisu,使用CATIVisProperties将图形特性与图形表示相关联。
当您想要将图形特性与功能关联时,需要问三个问题:

  • 要在特征上修改哪些图形特性?
  • "图形属性"工具栏中显示的图形属性所涉及的几何图形类型有哪些?
  • CATIVisu是否正确实现,以修改与特征相关的图形表示?
在本用例中,您将了解:

  • 要实现CATIVisProperties接口:IsGeomTypeDefined方法和GetSubTypeFromPath方法分别回答了第一个和第二个问题。
  • 必要时,覆盖CATIVisu 接口的CATExtIVisu适配器类的某些方法
[置顶]
CAAPstINFGraphicProperties用例
CAAPstINFGraphicProperties是http://CAAProductStructure.edu框架的一个用例,说明了Visualization和GeometryVisualization框架的功能。
[置顶]
CAAPstINFGraphicProperties实现了什么
此用例允许修改CAAPstINFPoint、CAAPstINFWire和CAAPstINFLine特征的图形属性。 有关这三个特性的更多详细信息,请参阅"创建新的StartUp目录"用例[2]。 由“"在产品文档中‘从头开始’创建新特征"用例[3]创建的文档CAAPstINFDocument[图1]包含这些特征的一些实例。
图1: CAAPstINFDocument 文档
在选择“属性”命令(上下文菜单或“编辑”菜单)时,可以修改这些特征的某些图形属性。 看一个例子 [图.2] 您可以获得:
图2: 经过一些图形修改后的CAAPstINFDocument文档
你可以在上面看到

  • 在CAAPstINFPoint2特征上:符号的颜色和类型已更改
  • 在CAAPstINFLine1特征上:线条的颜色、厚度和类型都发生了变化
  • 在CAAPstINFWire1特征上:标记的颜色和符号发生了变化,线条的颜色、厚度和类型也发生了变化。 请注意,现在,我们可以区分为线创建的标记和为点创建的标记。 在之前的图像[图1]中,视觉区分是不可能的,因为标记具有相同的表示(白色十字)。
这是可能的,因为:

  • CATIVisProperties接口在三个特征上的实现:CAAPstINFPoint, CAAPstINFWire和 CAAPstINFLine,
  • 为相同的功能覆盖(或不覆盖)CATI3DGeoVisu接口的CATExtIVisu类适配器的某些方法。
如果您阅读了"图形属性"[1] 技术文章,更准确地说是"可视化过程中图形属性的集成"部分,您就会知道可视化过程调用以下方法之一来更新图形表示(CATRep类):


    • SetPointGraphicAttribute
    • SetLineGraphicAttribute
    • SetMeshGraphicAttribute
    • SetEdgeGraphicAttribute
    • SetAsmGraphicAttribute
    • SetOtherGeomTypeGraphicAttribute


更准确地说,它是一个或多个被调用的方法。 它取决于特征定义的几何体类型的数量。 本文介绍了SetPointGraphicAttribute和SetLineGraphicAttribute方法的重写。
[置顶]
如何启动CAAPstINFGraphicProperties
有关如何启动该用例的详细描述,请参阅"在产品结构中集成新特征"用例中标题为"如何启动CAAPstIntegrateNewFeatures用例"的部分。
具体来说,本文中描述的代码是在将产品文档(您可以使用CAAPstINFDocument.CATProduct文档,该文档位于http://CAAProductStructure.edu 框架的CNext/resources/graphic目录[图1])加载到CATIA会话中时执行的。
CAAPstINFDocument.CATProduct加载后的交互场景:

  • 单击CAAPstINFPoint2上的左侧按钮
  • 按钮右键,单击属性命令
  • 此时会出现属性对话框

    • 单击图形选项卡

      • 框中

        • 颜色组合框中选择一种颜色
        • 符号组合框中选择新符号







    • 单击 确定



  • Click button left on the CAAPstINFLine1
  • 按钮右键,单击属性命令
  • 此时会出现属性对话框

    • 单击图形选项卡

      • 直线和曲线框中

        • 颜色组合框中选择一种颜色
        • 线型组合框中选择线型
        • 宽度组合框中选择宽度(线宽)







    • 单击确定



  • Click button left on the CAAPstINFWire1
  • 按钮右键,单击属性命令
  • 此时会出现属性对话框

    • 单击图形选项卡

      • 框中

        • 颜色组合框中选择一种颜色
        • 符号组合框中选择新符号







      • 直线和曲线框中

        • 颜色组合框中选择一种颜色
        • 线型组合框中选择线型
        • 宽度组合框中选择宽度(线宽)







    • 单击确定


[置顶]
在哪可以找到CAAPstINFGraphicProperties代码
CAAPstINFGraphicProperties用例由位于http://CAAProductStructure.edu框架的CAAPstINFModeler.m模块中的源文件组成。
WindowsInstallRootDirectory\http://CAAProductStructure.edu\CAAPstINFModeler.m\
UnixInstallRootDirectory/http://CAAProductStructure.edu/CAAPstINFModeler.m\


  • WindowsInstallRootDirectory\http://CAAProductStructure.edu\CAAPstINFModeler.m\
    UnixInstallRootDirectory/http://CAAProductStructure.edu/CAAPstINFModeler.m\

WindowsInstallRootDirectory\http://CAAProductStructure.edu\CAAPstINFModeler.m\
UnixInstallRootDirectory/http://CAAProductStructure.edu/CAAPstINFModeler.m\


  • WindowsInstallRootDirectory\http://CAAProductStructure.edu\CAAPstINFModeler.m\
    UnixInstallRootDirectory/http://CAAProductStructure.edu/CAAPstINFModeler.m\


其中InstallRootDirectory是安装CAA CD-ROM的目录。
[置顶]
步骤
CAAPstINFGraphicProperties的主要步骤是:

  • 创建CATIVisProperties数据扩展
  • 处理直线特征
  • 处理点特征
  • 处理线特征
[置顶]
创建CATIVisProperties数据扩展
对于这三个特征,在创建数据扩展时实现了CATIVisProperties接口。 简而言之,只描述了CAAPstINFPoint特征的情况。 对于直线和线,分别通过CAAPstINFLine和CAAPstINFWire更改CAAPstINFPoint。

  • 头源
#ifndef CAAEPstVisPropertiesPoint_H#define CAAEPstVisPropertiesPoint_H#include "CATExtIVisProperties.h"    // 需要从中派生class CAAEPstVisPropertiesPoint : public CATExtIVisProperties{  CATDeclareClass;  public:    CAAEPstVisPropertiesPoint();    virtual ~CAAEPstVisPropertiesPoint();    HRESULT IsGeomTypeDefined(CATVisGeomType & iGeomType) ;    HRESULT GetSubTypeFromPath(CATPathElement     & iPathElement,                               CATVisPropertyType   iPropertyType,                               CATVisGeomType     & oGeomType,                               unsigned int       & oPropertyNumber) ;  private:  CAAEPstVisPropertiesPoint(const CAAEPstVisPropertiesPoint &iObjectToCopy);  CAAEPstVisPropertiesPoint & operator = (const CAAEPstVisPropertiesPoint &iObjectToCopy);};#endif
CAAEPstVisPropertiesPoint C++类派生自CATIVisProperties,即CATExtIVisProperties接口的适配器类。 CATDeclareClass宏声明CAAEPstVisPropertiesPoint类属于组件。 复制构造函数和"="运算符设置为私有,以防止编译器自动将其创建为公共。
公共方法(构造函数和析构函数除外)是在CATIVisProperties接口中定义的方法

  • 代码源
//Local Framework#include "CAAEPstVisPropertiesPoint.h"#include "TIE_CATIVisProperties.h"TIE_CATIVisProperties(CAAEPstVisPropertiesPoint);CATImplementClass(CAAEPstVisPropertiesPoint, DataExtension, CATBaseUnknown, CAAPstINFPoint);CAAEPstVisPropertiesPoint::CAAEPstVisPropertiesPoint(){}CAAEPstVisPropertiesPoint::~CAAEPstVisPropertiesPoint(){}...
CAAEPstVisPropertiesPoint类表示,由于TIE_CATIVisProperties宏,它实现了CATIVisProperties接口。 此扩展类专用于CAAPstINFPoint特征。 CATImplementClass宏声明,由于DataExtension关键字,CAAEPstVisPropertiesPoint类是一个数据扩展类,并且它扩展了主类为CAAPstINFPoint的组件。 第三个参数必须始终设置为CATBaseUnknown(未使用的参数)
构造函数和析构函数为空。
...HRESULT CAAEPstVisPropertiesPoint::IsGeomTypeDefined(CATVisGeomType & iGeomType){  请参见point的实现  请参见line 的实现  请参见wire的实现} ...
该方法的目标是在输入参数iGeomType可用于特征时返回S_OK,否则返回E_FAIL。 本文稍后将针对每个特性解释此方法。
...HRESULT CAAEPstVisPropertiesPoint::GetSubTypeFromPath(CATPathElement & iPathElement,                                                         CATVisPropertyType        iPropertyType,                                                         CATVisGeomType          & oGeomType,                                                         unsigned int            & oPropertyNumber){  see the implementation for the point  see the implementation for the line   see the implementation for the wire}
自动调用此方法以更新"图形属性"工具栏。 此工具栏包含用于修改颜色、线类型等的组合... 所选特征的。 该方法的目标是返回与工具栏修改有关的输入图形特征iPropertyType的几何图形类型oGeomType。 返回的几何图形类型当然必须由特征定义。
评论:


    • oPropertyNumber 未被可视化机制使用,因此以零对其进行评估。
    • 不要处理属性CATVPGlobalType的类型。这是通过可视化机制完成的。


本文稍后将针对每个特特征解释此方法。

  • 修改接口字典
在专用于http://CAAProductStructure.edu框架的接口字典中,有必要添加以下行, 以表明CAAPstINFPoint、CAAPstINFLine和CAAPstINFWire 特征在libCAAPstINFModeler模块中实现了CATIVisProperties 接口。
...CAAPstINFPoint             CATIVisProperties             libCAAPstINFModelerCAAPstINFine               CATIVisProperties             libCAAPstINFModelerCAAPstINFWire              CATIVisProperties             libCAAPstINFModeler...
[置顶]
处理直线特征
CAAPstINFLine特征由构成它的两个CAAPstINFPoint之间的一条直线以图形方式表示。 请参阅"启用产品文档中新特征的可视化"[4]一文,了解如何实现CATI3DGeoVisu接口的BuildRep方法。

  • CATIVisProperties接口的IsGeomTypeDefined方法
HRESULT CAAEPstVisPropertiesLine::IsGeomTypeDefined(CATVisGeomType & iGeomType){    HRESULT rc = E_FAIL ;    if ( (CATVPLine == iGeomType) || (CATVPGlobalType == iGeomType) )        rc =  S_OK ;    return rc ;}
CAAPstINFLine特征定义CATVPLine几何类型,以修改直线的颜色、宽度和类型。 CATVPGlobalType类型允许修改显示/不显示标志、拾取/不拾取标志、lowint标志和层数。

  • CATIVisProperties接口的GetSubTypeFromPath方法
HRESULT CAAEPstVisPropertiesLine::GetSubTypeFromPath(CATPathElement & iPathElement,                                                     CATVisPropertyType           iPropertyType,                                                     CATVisGeomType             & oGeomType,                                                     unsigned int               & oPropertyNumber){    HRESULT rc = E_FAIL ;    switch ( iPropertyType )    {    case CATVPColor:    case CATVPLineType:    case CATVPWidth:        oGeomType = CATVPLine ;c        rc = S_OK ;        break;    }    oPropertyNumber = 0 ;    return rc ;}
对于CAAPstINFLine特征,没有歧义。对于CATVPColor、CATVPLineType和CATVPWidth属性,几何体的类型为CATVPLine。

  • CATExtIVisu方法
几何体的类型是CATVPLine,因此关注的是CATExtIVisu 适配器类的SetLineGraphicAttribute方法。 CAAPstINFLine特征的图形表示为CAT3DCustomRep,其中包含一个图形原型CAT3DLineGP。 因此,CATExtIVisu 适配器类的默认实现将正确处理属性修改。没有必要覆盖此方法。
[置顶]
处理点特征
CAAPstINFPoint特征由标记图形表示。请参阅"启用产品文档中新特征的可视化"[4]一文,了解如何实现CATI3DGeoVisu接口的BuildRep方法。

  • CATIVisProperties接口的IsGeomTypeDefined方法
HRESULT CAAEPstVisPropertiesPoint::IsGeomTypeDefined(CATVisGeomType & iGeomType){    HRESULT rc = E_FAIL ;    if ( (CATVPPoint == iGeomType) || (CATVPGlobalType == iGeomType) )        rc =  S_OK ;    return rc ;}
CAAPstINFPoint特征定义CATVPPoint几何类型,以修改标记的颜色和符号。 CATVPGlobalType类型允许修改显示/不显示标志、拾取/不拾取标志、lowint标志和层数。

  • CATIVisProperties接口的GetSubTypeFromPath方法
HRESULT CAAEPstVisPropertiesPoint::GetSubTypeFromPath(CATPathElement & iPathElement,                                                         CATVisPropertyType        iPropertyType,                                                         CATVisGeomType          & oGeomType,                                                         unsigned int            & oPropertyNumber){    HRESULT rc = E_FAIL ;    switch ( iPropertyType )    {    case CATVPColor:    case CATVPSymbol:        oGeomType = CATVPPoint ;        rc = S_OK ;        break;    }        oPropertyNumber = 0 ;    return rc ;}
对于CAAPstINFPoint特征,没有任何歧义,对于CATVPColor和CATVPSymbol属性,几何体类型为CATVPPoint。

  • CATExtIVisu方法
几何体的类型是CATVPPoint ,因此关注的是CATExtIVisu适配器类的SetPointGraphicAttribute方法。 CAAPstINFLine特征的图形表示是一个CAT3DCustomRep,其中包含一个图形原形CAT3DMarkerGP。 因此,CATExtIVisu适配器类的默认实现将无法正确处理属性修改。有必要覆盖此方法。
此方法的目标是修改标记的颜色(CATVPColor)和符号(CATVPSymbol)。 对于CATVPAllPropertyType,必须更改颜色和符号。

  • 标记的符号
void CAAEPstINFVisuPoint::SetPointGraphicAttribute(CATRep *iRep,                                                    CATVisPropertyType iPropertyType,                                                   CATVisPropertiesValues & iPropertyValue){   if ( NULL == iRep ) return;     CAT3DCustomRep * pRepPoint = (CAT3DCustomRep *) iRep ;   // 符号属性   if ( (iPropertyType == CATVPAllPropertyType ) || ( iPropertyType == CATVPSymbol))   {      // 检索新符号      unsigned int NewSymbol;      if (SUCCEEDED(iPropertyValue.GetSymbol(NewSymbol)))      {         // 检索当前GP         CATGraphicPrimitive * pOldGP = pRepPoint->GetGP(0) ;         if ( NULL != pOldGP )         {            CAT3DMarkerGP * pOldPointGP = (CAT3DMarkerGP *) pOldGP ;            // 检索坐标点和当前符号            float * points;            int nbPoints;            SymbolType OldSymbol;                        pOldPointGP->Get(&points, &nbPoints, &OldSymbol);            if ( NewSymbol != OldSymbol )            {               // 使用新符号创建新标记               CAT3DMarkerGP * pNewPointGP = new CAT3DMarkerGP(points,1,(SymbolType) NewSymbol);               //用相同的图形属性替换标记               pRepPoint->Modify(pOldPointGP,pNewPointGP,NULL);               //必须删除旧的GP               CATGraphicPrimitive::Destroy(pOldPointGP);               pOldPointGP = NULL ;            }         }     }   } ...}
CAT3DMarkerGP的符号未设置到CATGraphicAttributeSet实例中。 该值在图形原型(GP)构造中给出。 因此,要改变它,必须创建一个新的GP。
如果新符号与当前符号不同,将创建新的CAT3DMarkerGP。 由于CAT3DCustomRep类的Modify方法,新的GP取代了旧的GP。 由于使用了Destroy方法,必须销毁旧的GP。

  • 颜色
...  // 颜色属性  if ( (iPropertyType == CATVPAllPropertyType ) || ( iPropertyType == CATVPColor))     {    CATGraphicAttributeSet * pAg = &(pRepPoint->GetAttribut(0));    SetGraphicAttributeSet (pAg, CATVPColor, iPropertyValue);        }}
颜色在与CAT3DCustomRep的第一(0)个GP关联的CATGraphicAttributeSet实例上修改。 由于GetAttribut方法,您可以检索到它。 SetGraphicAttributeSet方法允许在pAg图形属性上修改iPropertyValue参数上读取的CATVPColor属性。
[置顶]
处理线特征
CAAPstINFWire特征以图形方式表示标记和每个标记之间的线。每个标记之间的线。请参阅"启用产品文档中新特征的可视化"[4]一文,了解如何实现CATI3DGeoVisu接口的BuildRep方法。

  • CATIVisProperties接口的IsGeomTypeDefined方法
HRESULT CAAEPstVisPropertiesWire::IsGeomTypeDefined(CATVisGeomType & iGeomType){    HRESULT rc = E_FAIL ;    if ( (CATVPLine == iGeomType) || (CATVPPoint == iGeomType) || (CATVPGlobalType == iGeomType) )        rc =  S_OK ;    return rc ;}
CAAPstINFWire特征定义CATVPLine几何类型以修改线的颜色、宽度和类型,并定义CATVPPoint几何类型以修改标记的颜色和符号。 CATVPGlobalType类型允许修改显示/不显示标志、拾取/不拾取标志、lowint标志和层数。

  • CATIVisProperties接口的GetSubTypeFromPath方法
HRESULT CAAEPstVisPropertiesWire::GetSubTypeFromPath(CATPathElement & iPathElement,                                                     CATVisPropertyType           iPropertyType,                                                     CATVisGeomType             & oGeomType,                                                     unsigned int               & oPropertyNumber){    HRESULT rc = E_FAIL ;    switch ( iPropertyType )    {    case CATVPColor:    case CATVPLineType:    case CATVPWidth:        oGeomType = CATVPLine ;        rc = S_OK ;        break;    case CATVPSymbol:        oGeomType = CATVPPoint ;        rc = S_OK ;        break;    }    oPropertyNumber = 0 ;    return rc ;}
对于CATVPLineType、CATVPWidth和CATVPSymbol属性类型,没有歧义,它是线型几何体的CATVPLine或标记的CATVPPoint。 但对于颜色,可以在线条和标记几何体之间进行选择。这里的选择是CATVPLine。

  • CATExtIVisu方法
几何图形的类型为CATVPPoint和CATVPLine,因此CATExtIVisu类适配器的相关方法为SetPointGraphicAttribute和SetLineGraphicAttribute。 CAAPstINFWire特征的图形表示是一个CAT3DCustomRep,它包含两个图形原型: 具有N个点的CAT3DMarkerGP和具有相同点的CAT3DLineGP。 默认的SetPointGraphicAttribute方法不处理CAT3DCustomRep,默认的SetLineGraphicAttribute修改CAT3DCustomRep的所有图形原型,而不测试图形原型的类型。 有必要覆盖这两种方法。


    • SetPointGraphicAttribute


该方法的目标是修改所有标记的颜色(CATVPColor)和符号(CATVPSymbol)。 对于CATVPAllPropertyType,必须更改颜色和符号。
void CAAEPstINFVisuWire::SetPointGraphicAttribute(CATRep *iRep,                                                    CATVisPropertyType iPropertyType,                                                   CATVisPropertiesValues & iPropertyValue){if ( NULL == iRep ) return;     CAT3DCustomRep * pRepWire = (CAT3DCustomRep *) iRep ;   // 检索CAT3DMarkerGP   int NbGP = pRepWire->GetGPSize();   if ( NbGP != 2 ) return ;   CATGraphicPrimitive * pGP = pRepWire->GetGP(0) ;   if ( 0 == pGP->IsAKindOf("CAT3DMarkerGP") ) return;   // 更改符号   if ( (iPropertyType == CATVPAllPropertyType ) || ( iPropertyType == CATVPSymbol))   {      // Retrieve the new symbol      unsigned int NewSymbol;      if (SUCCEEDED(iPropertyValue.GetSymbol(NewSymbol)))      {         // 检索当前GP         CAT3DMarkerGP * pOldPointGP = (CAT3DMarkerGP *) pGP ;         if ( NULL != pOldPointGP )         {            // 检索坐标的点和当前符号            float * points;            int nbPoints;            SymbolType OldSymbol;                        pOldPointGP->Get(&points, &nbPoints, &OldSymbol);            if ( NewSymbol != OldSymbol )            {               // 使用新符号创建新标记               CAT3DMarkerGP * pNewPointGP = new CAT3DMarkerGP(points,nbPoints,(SymbolType) NewSymbol);               //用相同的图形属性替换标记               pRepWire->Modify(pOldPointGP,pNewPointGP,NULL);               //必须删除旧的GP               CATGraphicPrimitive::Destroy(pOldPointGP);               pOldPointGP = NULL ;            }         }     }   }  // 更改颜色  if ( (iPropertyType == CATVPAllPropertyType ) || ( iPropertyType == CATVPColor))     {    // 标记的颜色已修改    CATGraphicAttributeSet * pAg = &(pRepWire->GetAttribut(0));    SetGraphicAttributeSet (pAg, CATVPColor, iPropertyValue);        } }
该方法与CAAPstINFPoint特征的方法稍有相同。 区别在于在CAT3DCustomRep中检索CAT3DMarkerGP。 如果在CAAPstINFPoint情况下,图形原型是唯一的,使用CAAPstINFWire,CAT3DCustomRep在创建时第一个位置包含标记GP,第二个位置包含直线GP。 始终保持此顺序,因为即使必须删除CAT3DMarkerGP才能修改符号,Modify方法也会用新的GP替换旧的GP。


    • SetLineGraphicAttribute


该方法的目标是修改所有直线的颜色(CATVPColor)、厚度(CATVPLineType)和线条类型(CATVPLineType)。 对于CATVPAllPropertyType,必须更改这三个属性。
void CAAEPstINFVisuWire::SetLineGraphicAttribute(CATRep *iRep,                                                    CATVisPropertyType iPropertyType,                                                   CATVisPropertiesValues & iPropertyValue){   if ( NULL == iRep ) return;     CAT3DCustomRep * pRepWire = (CAT3DCustomRep *) iRep ;   // 测试第二个GP是否为包含直线的GP   int NbGP = pRepWire->GetGPSize();   if ( NbGP != 2 ) return ;   CATGraphicPrimitive * pGP = pRepWire->GetGP(1) ;   if ( 0 == pGP->IsAKindOf("CAT3DLineGP") ) return ;    // 更改厚度   if ( (iPropertyType == CATVPAllPropertyType ) || ( iPropertyType == CATVPWidth))   {      CATGraphicAttributeSet * pAg = &(pRepWire->GetAttribut(1));                    SetGraphicAttributeSet (pAg, CATVPWidth, iPropertyValue);    }      // 改变类型   if ( (iPropertyType == CATVPAllPropertyType ) || ( iPropertyType == CATVPLineType ))   {      CATGraphicAttributeSet * pAg = &(pRepWire->GetAttribut(1));                    SetGraphicAttributeSet (pAg, CATVPLineType, iPropertyValue);    }   // 改变颜色   if ( (iPropertyType == CATVPAllPropertyType ) || ( iPropertyType == CATVPColor))      {      CATGraphicAttributeSet * pAg = &(pRepWire->GetAttribut(1));                    SetGraphicAttributeSet (pAg, CATVPColor, iPropertyValue);         }}
对于线图形属性,它比点更容易,所有属性都在CATGraphicAttributeSet值上。 CAT3DLineGP是CAT3DCustomRep的第二个图形原型,要修改的CATGraphicAttributeSet值是由GetAttribut方法返回的值,参数为1。
[置顶]

总之
本文说明了如何实现CATIVisProperties以将图形特性与要素相关联。 此接口有一个适配器类CATExtIVisProperties,,其两个方法将被覆盖:

  • IsGeomTypeDefined
该方法定义了由特征定义的属性类型。 A type 几何图形类型是一种CATVisGeomType,其主要预定义值为: CATVPPoint, CATVPLine, CATVPEdge , CATVPMesh 和 CATVPGlobalType

  • GetSubTypeFromPath
此方法为"图形属性"工具栏中显示的每个属性定义受影响的几何体类型。
图形表示考虑了图形属性,这得益于CATIVisu接口的CATExtIVisu类适配器的方法: SetPointGraphicAttribute, SetLineGraphicAttribute,等。 当这些方法的默认实现无法正确修改特征的图形表示时,有必要覆盖它们。
[置顶]

引用
[1]图形属性
[2]创建新的StartUp目录
[3]在产品文档中" 从头开始"创建新特征
[4]实现产品文档中新功能的可视化
[置顶]

历史版本
版本: 1 [2002年5月]文档创建
[置顶]
版权所有  2002, 达索系统. 保留所有权利.
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2025-5-17 09:26 , Processed in 0.143722 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表