Появилась необходимость изменить графические свойства узлов дерева сборки (графа).
В документации CAA RADE есть пример "Document / The Object Navigator".
Там показано как можно создать дерево объектов и изменить графические свойства узлов (иконка, цвет).
Для изменения графического представления в примере создаётся компонент, унаследованный от класса-адаптера CATNodeExtension и реализующий интерфейс CATINavigModify:
- Код: Выделить всё
#include "TIE_CATINavigModify.h"
TIE_CATINavigModify(CAAOmbNavigModifyRoot);
CATImplementClass(CAAOmbNavigModifyRoot, DataExtension, CATBaseUnknown, CAASysGeomRootObj_node);
Только главное, что этот класс реализует интерфейс CATINavigModify для созданного в примере ранее объекта CAASysGeomRootObj_node.
Скажите, пожалуйста, как можно создать такой же компонент, только реализующий интерфейс CATINavigModify для стандартных объектов CATIA - узлов дерева сборки. Я пробовал по аналогии написать класс CAATreeNodeExtension:
- Код: Выделить всё
CAATreeNodeExtension.h:
class CAATreeNodeExtension: public CATNodeExtension
{
CATDeclareClass;
public:
CAATreeNodeExtension();
virtual ~CAATreeNodeExtension();
// Реализация метода интерфейса CATINavigModify::UpdateElem
// Определяет графическое представление узла (node)
void UpdateElem (CATNavigInstance *iInstance);
};
CAATreeNodeExtension.cpp:
#include "TIE_CATINavigModify.h"
TIE_CATINavigModify(CAATreeNodeExtension);
CATImplementClass(CAATreeNodeExtension, DataExtension, CATBaseUnknown, ASMPRODUCT_node);
// Дополнительно, в файле словаря CAATreeAccessFW.dico:
// ASMPRODUCT_node CATINavigModify libCAATreeAccessAddIn
CAATreeNodeExtension::CAATreeNodeExtension(): CATNodeExtension()
{
}
CAATreeNodeExtension::~CAATreeNodeExtension()
{
}
void CAATreeNodeExtension::UpdateElem(CATNavigInstance *iInstance)
{
CATIGraphNode *piGraphNode = NULL;
HRESULT rc = QueryInterface(IID_CATIGraphNode, (void**)&piGraphNode);
if (SUCCEEDED(rc))
{
piGraphNode->SetColor(50);
piGraphNode->SetPixelImage("CustomIcon");
piGraphNode->Release();
piGraphNode = NULL;
}
}
Здесь ASMPRODUCT_node - это имя класса узла сборки. Этот класс стандартный, я его не создавал, а нашёл имя с помощью утилиты "CAAV5 Object Browser".
Однако класс-компонент не загружается.
Скажите, пожалуйста, может быть нужно указать вместо класса ASMPRODUCT_node другой.
И вообще, можно ли это реализовать не для своего класса, как в примере, а для стандартного, уже существующего (в моём случае, узел дерева сборки).
Как я понял из документации CAA RADE, есть классы-адаптеры и они для этого и предназначены.
Можно создать свой компонент, наследовать его от класса-адаптера и реализовать нужные методы интерфейсов.
Или это не так? Буду рад вашей помощи, спасибо!