• Nenhum resultado encontrado

Propriedades Comuns das Entidades

No documento ObjectARX.pdf (páginas 34-38)

Todas as entidades têm propriedades comuns que quando se adiciona para o block table record, automaticamente o AutoCAD (AcDbEntity::setDatabaseDefaults()) define os valores default, isso se a definição não estiver explícita em seu código:

Color

A cor das entidades pode ser um valor numérico de 0 até 256, sendo que as cores padrão são:

A seguinte função seta a cor da entidade e assim ignora o valor default: virtual Acad::ErrorStatus

AcDbEntity::setColorIndex(Adesk::UInt16 color); Adesk::UInt16

AcDbEntity::colorIndex() const;

Linetype

Quando uma entidade é instanciada, sua linetype é do tipo NULL. Quando a entidade é adicionada no banco de dados, se não tiver sido especificado pela entidade, a linetype é setada no valor default que é armazenado no sistema de variáveis CELTYPE.

A função seguinte permite estabelecer uma linetype para uma entidade: virtual Acad::ErrorStatus

Número da cor Nome da cor

1 Vermelho 2 Amarelo 3 Verde 4 Cinza 5 Blue 6 Magenta 7 Branco ou Preto 0 BYBLOCK 256 BYLAYER

AcDbEntity::setLinetype(const char* newVal); virtual Acad::ErrorStatus

AcDbEntity::setLinetype(AcDbObjectId newVal); A função retorna o nome da linetype corrente na entidade: char* AcDbEntity::linetype() const;

A função retorna o object ID para o symbol table record especificando a linetype: AcDbObjectId AcDbEntity::linetypeId() const;

Linetype

Scale

Quando uma entidade é instanciada, sua linetype scale é inicializada para um valor inválido. Quando a entidade é adicionada no banco de dados, se não tiver sido especificado pela entidade, a linetype scale é setada no valor default que é armazenado no sistema de variáveis CELTSCALE.

Linetype Scale Especificada pela Entidade

Acad::ErrorStatus

AcDbEntity::setLinetypeScale(double newVal); double

AcDbEntity::linetypeScale() const;

Regenerando um Desenho

Quando uma entidade é regenerada, sua linetype scale é um produto da entidade linetype scale e também do banco de dados global linetype scale.. Assim a linetype scale é calculada da seguinte forma:

effltscale = ent->linetypeScale() * ent->database()->ltscale();

Visibilidade

Se for especificado que uma entidade é invisível ela será independente do que foi estabelecido pelo banco de dados.

Acad::ErrorStatus

AcDbEntity::setVisibility(AcDb::Visibility newVal); AcDb::Visibility

Layer

Pode-se especificar um layer para toda entidade, se isso não for feito ela terá o layer default 0. Cada layer tem uma série de propriedades associadas frozen/thawed, on/off, locked/unlocked, color,

linetype e viewport. As funções seguintes permitem que o layer seja estabelecido para uma entidade:

Acad::ErrorStatus

AcDbEntity::setLayer(const char* newVal); Acad::ErrorStatus

AcDbEntity::setLayer(AcDbObjectId newVal);

Essa função retorna o nome do layer corrente da entidade: char* AcDbEntity::layer() const;

Essa função retorna o object ID do layer corrente: AcDbObjectId AcDbEntity::layerId() const;

Funções Comuns das Entidades

 intersectWith( ) : é usada em operações de interseção;

 transformBy( ) : é usada como uma matriz de transformação quando o objeto sofre certas

mudanças;

 getTransformedCopy( ) : cria uma cópia e aplica uma transformação no objeto;

 getOsnapPoints( ) : retorna o osnap points e seu tipo;

 getGripPoints( ) : retorna o grip points que é um conjunto do stretch points  getStretchPoints( ) : defaults do para o getGripPoints( )

 moveStretchPointsAt( ) : é usado pelo comando STRETCH para mover certos pontos e defaults

para transformBy( );

 moveGripPointsAt( ) : é usado pelos grips para mover pontos específicos pontos e defaults para

transformBy( );

 worldDraw( ) : cria uma representação gráfica independente da entidade;

 vuewportDraw( ) : : cria uma representação gráfica dependente da entidade;

 draw( ) : desenha as entidades gráficas;

 list( ) : é usada pelo comando LIST e produz um ads_printf( );

 getGeomExtents ( ) : retorna as esquinas de uma caixa fechada da entidade;

 explode( ) : decompõe uma entidade em um conjunto de entidades elementares;

 getSubentPathsAtGsMarker( ) : retorna o caminho da subentidade que corresponde ao dado GS marker;

 getGsMarkersAtSubentPath( ) : retorna o GS marker que corresponde ao caminho da

subentidade;

 subentPtr( ) : retorna um ponteiro para o caminho da subentidade;

 highlight ( ) : torna as subentidades com uma representação na seleção do tipo highlight.

Object Snap

Para adquirir os snap points para os modos específicos usa-se a função getOsnapPoints( ). Os modos existentes são:

 kOsModeEnd Endpoint  kOsModeMid Midpoint  kOsModeCen Center  kOsModeNode Node  kOsModeQuad Quadrant  kOsModeIns Insertion  kOsModePerp Perpendicular  kOsModeTan Tangent  kOsModeNear Nearest

A função é da seguinte forma: virtual Acad::ErrorStatus

AcDbEntity::getOsnapPoints( AcDb::OsnapMode osnapMode, int gsSelectionMark,

const AcGePoint3d& pickPoint,

const AcGePoint3d& lastPoint, const AcGeMatrix3d& viewXform, AcGePoint3dArray& snapPoints, AcDbIntArray& geomIds) const;

Funções de Transformação

A classe AcDbEntity fornece duas funções de transformação: virtual Acad::ErrorStatus

AcDbEntity::transformBy(const AcGeMatrix3d& xform);

Essa função é chamada no Grip Move, ROTATE, SCALE e MIRROR virtual Acad::ErrorStatus

AcDbEntity::getTransformedCopy(const AcGeMatrix3d& xform, AcDbEntity*& ent) const;

Essa função é chamada quando houver a necessidade de criar uma nova entidade, como quando uma entidade é explodida e sofre uma escala não uniforme.

Interseção por Pontos

A função intersectWith( ) retorna os pontos onde uma entidade intercepta outra no desenho. Os tipos de interseção podem ser:

 kOnBothOperands (entidade extendida)

 kExtendThis

 kExtendArg

 kExtendBoth

A função intersectWith( ) é uma função sobrecarregada com duas formas, sendo que a Segunda leva um argumento adicional que o plano de projeção para determinar a aparente interseção:

virtual Acad::ErrorStatus

AcDbEntity::intersectWith( const AcDbEntity* ent, AcDb::Intersect intType,

AcGePoint3dArray& points,

int thisGsMarker = 0, int otherGsMarker = 0) const; virtual Acad::ErrorStatus

AcDbEntity::intersectWith( const AcDbEntity* ent, AcDb::Intersect intType,

const AcGePlane& projPlane, AcGePoint3dArray& points,

int thisGsMarker = 0,

int otherGsMarker = 0) const;

GS Markers e Subentidades

Toda entidade para ser desenhada chama as primitivas gráficas, assim como, lines, circles e etc que são contidas no AcGi library. Qualquer classe derivada do AcDbEntity pode associar um GS( sistema gráfico) marker e cada subclasse da entidade controla onde inserir seu GS markers. Onde um usuário seleciona uma entidade, o GS marker é usado para identificar qual parte da entidade foi selecionada.

Explodindo Entidades

Algumas entidades podem ser explodidas em um conjunto de simples elementos, pois a função explode( ) cria um array de objetos derivados de AcDbEntity. Quando um entidade é explodida:

 A aparencia visual é constante;

 A entidade explodida é apagada do banco de dados;

 Uma ou mais entidades são criadas e adicionadas ao banco de dados.

Criando Instancias de Entidades no AutoCAD

No documento ObjectARX.pdf (páginas 34-38)

Documentos relacionados