• Nenhum resultado encontrado

Mostrando a Entidade

No documento ObjectARX.pdf (páginas 79-84)

iterateDictionary); MyClass::rxInit(); acrxBuildClassHierarchy(); } void unloadApp() { acedRegCmds->removeGroup("ASDK_DICTIONARY_COMMANDS"); deleteAcRxClass(AsdkMyClass::desc()); }

Suporte para Versões de Objetos

Vários mecanismos podem ser usados para administrar as versões das classes de objetos customizados:

 Renomear as classes para cada nova versão;

 Manter o número da versão como o primeiro membro da classe;

 Manter o número da versão como dado extendido (xdata) ou uma extensão do dicionário.

X.

Derivando de AcDbEntity

Essa sessão demonstra como derivar uma classe customizada de AcDbEntity. A criação de uma classe de entidade customizada exige a utilização da biblioteca AcGi, operações com object osnap points, grip points e stretch points.

Mostrando a Entidade

Para acessar AcGi tem-se algumas funções dentro da classe básica AcDbEntity:

AcDbEntity::worldDraw(AcGiWorldDraw *pWd); virtual void

AcDbEntity::viewportDraw(AcGiViewportDraw *pVd); virtual void

AcDbEntity::saveAs(AcGiWorldDraw *pWd, AcDb::SaveType saveType);

O AutoCAD chama as funções worldDraw( ) e viewportDraw( ) para mostra a entidade. Em alguns casos o AutoCAD chama a função saveAs( ), como na representação gráfica do objeto proxy ou quando se salva o desenho para o AutoCAD 12. A função worldDraw( ) deve ser sempre implementada para qualquer classe derivada de AcDbEntity, já as funções viewportDraw( ) e saveAs

( ) são opcionais.

Sempre que o AutoCAD necessita regenerar um desenho para mostrar uma entidade, as funções

worldDraw( ) e viewportDraw( ) são chamadas da seguinte maneira: if (!entity->worldDraw(pWd))

for (each relevant viewport)

entity->viewportDraw(pVd);

O objetivo da função worldDraw( ) é construir a parte gráfica da entidade que pode ser especificada independentemente do contexto da visualização. Se qualquer das entidades gráficas tem sua visualização dependente, o worldDraw( ) deve retornar kFalse e o viewportDraw( ) deve ser implementado. A função viewportDraw( ) então constroe a parte de visualização dependente da entidade gráfica.

A função AcDbEntity::worldDraw( ) leva um ponteiro para um objeto AcGiWorldDraw, que é uma classe container para o AcGi e objetos como:

 Objeto AcGiWorldGeometry, faz o tratamento analítico vetorial do AutoCAD trabalhando

com suas entidades primitivas:

 Circle  Circular arc  Polyline  Polygon  Mesh  Shell  Text  Xline  Ray

 Objeto AcGiSubEntityTraits, trabalha com um conjunto de atributos gráficos usando algumas

funções:

 Color

 Layer

 Linetype

 Polygon fill type  Selection marker

A função AcDbEntity::viewportDraw( ) leva um ponteiro para um objeto AcGiviewportDraw e constroe visualizações para a representação gráfica de uma entidade. O objeto AcGiviewportDraw é também um objeto container para outros objetos como:

 Objeto AcGiViewportGeometry, faz o tratamento analítico vetorial do AutoCAD para a

visualização trabalhando com suas entidades primitivas:

 Circle  Circular arc  Polyline  Polygon  Mesh  Shell  Text  Xline  Ray  polylineEye()  polygonEye()  polylineDc()  polygonDc()

 Objeto AcGiSubEntityTraits, trabalha com um conjunto de atributos gráficos usando algumas

funções:

 Color

 Layer

 Linetype

 Polygon fill type

 Selection marker

 Objeto AcGiViewport, fornece funções para trabalhar com visualização baseada em matrizes e

parâmetros.

Sobrecarregando AcDbEntity::saveAs( )

Se a entidade customizada não sobrecarrega AcDbEntity::saveAs( ), o AutoCAD deverá fazer com que a função worldDraw( ) suporte a representação gráfica ou arquivos DWG da versão release 12. A função AcDbEntity::saveAs( ) simplesmente chama a função worldDraw( ). É possível sobrecarregar

gráficas do tipo proxy, ou para arquivos DWG da versão 12, ou até mesmo para ambos os casos.

Objetos AcGi

Um objeto AcGi assim como o AcGiWorldDraw ou AcGiViewportDraw não deve ser armazenado como uma variável global ou estática, e também não deve se salvar cópias através das funções

worldDraw( ) e viewportDraw( ). Tipos de Regeneração

O tipo de regeneração viewport é dado pelo AutoCAD através da função

AcGiWorldDraw::regenType( ):

 kAcGiStandardDisplay é o modo típico de desenho e é usado quando o usuário entra com o

comando REGEN ou edita uma entrada;

 kAcGiHideOrShadeCommand indica que o comando HIDE ou SHADE foi emitido;

 kAcGiRenderCommand é usado quando o usuário emite o comando RENDER.

Propriedades das Entidades

 Entidades: Se você não atribui valores para cor, layer ou line type, sua entidade customizada

deverá receber valores prescritos pelo AutoCAD. Adicionalmente, sua aplicação pode chamar

AcDbEntity a função membro assim como AcDbEntity::setColorIndex() para atribuir valores

para as propriedades das entidades, mas não de dentro do worldDraw(), viewportDraw(), and

saveAs().

 Subentidades: Pode-se atribuir valores para cor, layer ou line type chamando as funções

AcGiSubEntityTraits das funções worldDraw(), viewportDraw(), and saveAs().

 Subprimitiva: As funções primitivas mesh e shell possuem parâmetros que levam você a

especificar um conjunto de propriedades. Esse mecanismo requer que você atribua valores para todos os lados ou faces.

Propriedades das Subentidades

As propriedades são: Color Layer Linetype Fill type GS marker

Antes de chamar o worldDraw() and viewportDraw(), o AutoCAD inicializa a cor, layer, e linetype das subentidades. O fill type corresponde ao tipo de regeneração, e o GS marker é inicializado em zero.

Fill Type

Existem dois tipos de fill type: kAcGiFillAlways

kAcGiFillNever

Antes do AutoCAD chamas o worldDraw(), ele atribui o fill type de acordo com o tipo de regeneração.

GS Markers

Os GS markers são utilizados nas conjunções com as funções ADS ads_ssget() and ads_ssnamex(), permitindo sua aplicação editar ou operar nas seções arbitrárias da sua entidade customizada.

Primitivas

Mesh

Uma mesh é um eficiente caminho para armazenar uma grade retangular de vértices. A geometria para uma mesh é especificada como o número de linhas ou número de colunas e uma lista de vértices. virtual Adesk::Boolean

AcGiWorldGeometry::mesh(const Adesk::UInt32 rows, const Adesk::UInt32 columns,

const AcGePoint3d* pVertexList,

const AcGiEdgeData* pEdgeData = NULL, const AcGiFaceData* pFaceData = NULL,

const AcGiVertexData* pVertexData = NULL) const = 0; Os três últimos parâmetros da função são opcionais.

Shell

Um shell é uma lista de faces que podem ser conectadas e podem Ter também furos. O shell é especificado pro uma lista de vértices, um número de faces e uma lista das faces.

virtual Adesk::Boolean

AcGiWorldGeometry::shell(const Adesk::UInt32 nbVertex, const AcGePoint3d* pVertexList,

const Adesk::UInt32 faceListSize, const Adesk::Int32* pFaceList,

const AcGiEdgeData* pEdgeData = NULL, const AcGiFaceData* pFaceData = NULL, const AcGiVertexData* pVertexData = NULL

const struct resbuf* pResBuf = NULL) const = 0;

No documento ObjectARX.pdf (páginas 79-84)

Documentos relacionados