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.