• Nenhum resultado encontrado

Derivando de AcDbObject

No documento ObjectARX.pdf (páginas 55-65)

Classe de Inicialização ( Função de Inicialização)

IX. Derivando de AcDbObject

Para implementar uma classe customizada, tem-se tres macros:

 ACRX_NO_CONS_DEFINE_MEMBERS(CLASS_NAME, PARENT_CLASS)

Usa-se para classes abstratas e qualquer outra classe que não deve ser instanciada.

 ACRX_CONS_DEFINE_MEMBERS(CLASS_NAME, PARENT_CLASS, VERNO)

Usa-se para classes transientes que podem ser instanciadas, mas não escritas em arquivo.

 ACRX_DXF_DEFINE_MEMBERS(CLASS_NAME,PARENT_CLASS,

PROXY_FLAGS, DXF_NAME, APP)

Usa-se para classes que podem ser escritas, ou lidas de arquivos DWG e DXF. Cada uma dessas classes define:

 Classe de descrição do objeto;

 Classe inicialização (função);

 A função desc( ) para a classe;

 A função virtual isA( ) que a classe deverá sobrecarregar.

Classe de Inicialização ( Função de Inicialização)

A função da classe de inicialização para cada classe é rxInit( ). Uma aplicação que define uma classe customizada invoca essa função durante a inicialização da rotina.

Essa função é definida automaticamente por cada das tres macros

ACRX_XXX_DEFINE_MEMBERS( ) e executa as seguintes tarefas:

 Registra a classe customizada;

 Cria a classe que descreve o objeto e armazena no dicitonary;

IX.

Derivando de AcDbObject

Essa sessão descreve como derivar uma classe customizada de AcDbObject. Fornece detalhes sobre os arquivos, sobre os quatro tipos de objetos referênciados, sobre o undo e o redo.

Overview

Quando se utiliza subclasses de AcDbObject, há um número de funções virtuais que podem ser sobrecarregadas.

AcDbObject: Funções para Sobrecarregar Essencialmente

virtual Acad::ErrorStatus

dwgInFields(AcDbDwgFiler* filer); virtual Acad::ErrorStatus

dwgOutFields(AcDbDwgFiler* filer) const; virtual Acad::ErrorStatus

dxfInFields(AcDbDxfFiler* filer); virtual Acad::ErrorStatus

dxfOutFields(AcDbDxfFiler* filer) const;

<Destructor>

AcDbObject: Funções para Sobrecarregar Frequentemente

virtual Acad::ErrorStatus audit(AcDbAuditInfo*);

virtual Acad::ErrorStatus subClose(); virtual Acad::ErrorStatus

deepClone(AcDbObject* pOwnerObject, AcDbObject*& pClonedObject, AcDbIdMapping& idMap,

Adesk::Boolean isPrimary = Adesk::kTrue) const; virtual Acad::ErrorStatus

wblockClone(AcRxObject* pOwnerObject, AcDbObject*& pClonedObject, AcDbIdMapping& idMap,

Adesk::Boolean isPrimary = Adesk::kTrue) const;

AcDbObject: Funções para Sobrecarregar Eventualmente

subErase(Adesk::Boolean erasing); virtual Acad::ErrorStatus subHandOverTo(AcDbObject* newObject); virtual Acad::ErrorStatus subOpen(AcDb::OpenMode); virtual Acad::ErrorStatus subCancel(); virtual Acad::ErrorStatus subSwapIdWith(AcDbObjectId otherId,

Adesk::Boolean swapXdata = Adesk::kFalse);

AcDbObject: Funções para Sobrecarregar Raramente

virtual Acad::ErrorStatus setOwnerId(AcDbObjectId); virtual resbuf*

xData(const char* regappName = NULL) const; virtual Acad::ErrorStatus

setXData(const resbuf* xdata); virtual void

addPersistentReactor(AcDbObjectId objId); virtual Acad::ErrorStatus

removePersistentReactor(AcDbObjectId objId); virtual void

cancelled(const AcDbObject* dbObj); virtual void

copied(const AcDbObject* dbObj, const AcDbObject* newObj); virtual void

erased(const AcDbObject* dbObj,

Adesk::Boolean pErasing = Adesk::kTrue); virtual void

goodbye(const AcDbObject* dbObj); virtual void

openedForModify(const AcDbObject* dbObj); virtual void

modified(const AcDbObject* dbObj); virtual void

modifyUndone(const AcDbObject* dbObj); virtual void

modifiedXData(const AcDbObject* dbObj); virtual void

unappended(const AcDbObject* dbObj); virtual void

objectClosed(const AcDbObjectId objId); virtual void

modifiedGraphics(const AcDbEntity* dbEnt);

AcRxObject: Funções para Sobrecarregar Raramente

virtual AcRxObject* clone() const;

virtual void

copyFrom(const AcRxObject* pSrc); virtual HRESULT __stdcall

QueryInterface ( REFIID riid, void ** ppvObject ); virtual ULONG __stdcall

virtual ULONG __stdcall Release();

AcDbEntity: Funções para Sobrecarregar

virtual Adesk::Boolean

worldDraw(AcGiWorldDraw* mode); virtual void

viewportDraw(AcGiViewportDraw* mode); virtual Acad::ErrorStatus

getGeomExtents(AcDbExtents& extents) const; virtual Acad::ErrorStatus

transformBy(const AcGeMatrix3d& xform); virtual Acad::ErrorStatus

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

getGripPoints(AcGePoint3dArray& gripPoints, AcDbIntArray& osnapModes,

AcDbIntArray& geomIds) const; virtual Acad::ErrorStatus

moveGripPointsAt(const AcDbIntArray& indices, const AcGeVector3d& offset);

AcDbEntity: Funções para Sobrecarregar Usualmente

virtual void list() const;

virtual Acad::ErrorStatus

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

AcGePoint3dArray& points, int thisGsMarker = 0,

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

intersectWith( const AcDbEntity* ent, AcDb::Intersect intType, const AcGePlane& projPlane,

AcGePoint3dArray& points, int thisGsMarker = 0,

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

getOsnapPoints(AcDb::OsnapMode osnapMode, int gsSelectionMark,

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

virtual Acad::ErrorStatus

getStretchPoints(AcGePoint3dArray&) const; virtual Acad::ErrorStatus

moveStretchPointsAt(const AcDbIntArray& indices, const AcGeVector3d& offset);

virtual Acad::ErrorStatus

explode(AcDbVoidPtrArray& entitySet) const; virtual Acad::ErrorStatus

int gsMark,

const AcGePoint3d& pickPoint,

const AcGeMatrix3d& viewXform, int& numPaths,

AcDbFullSubentPath* & subentPaths, int numInserts = 0,

AcDbObjectId* entAndInsertStack = NULL) const;

virtual Acad::ErrorStatus

applyPartialUndo(AcDbDwgFiler* undoFiler, AcRxClass* classObj); virtual void

subSetDatabaseDefaults(AcDbDatabase* pDb); virtual void

getEcs(AcGeMatrix3d& retVal) const; virtual Acad::ErrorStatus

getGsMarkersAtSubentPath(const AcDbFullSubentPath& subPath, AcDbIntArray& gsMarkers) const;

virtual Acad::ErrorStatus

highlight(const AcDbFullSubentPath& subId = kNullSubent) const; virtual Acad::ErrorStatus

unhighlight(const AcDbFullSubentPath& subId = kNullSubent) const; virtual AcDbEntity*

subentPtr(const AcDbFullSubentPath& id) const; virtual void

saveAs(AcGiWorldDraw* mode, AcDb::SaveType st); virtual Adesk::Boolean

AcDbEntity: Funções para Sobrecarregar Raramente

virtual Acad::ErrorStatus

setColor(const AcCmColor &color); virtual Acad::ErrorStatus

setColorIndex(Adesk::UInt16 color); virtual Acad::ErrorStatus

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

setLinetype(AcDbObjectId newVal);

AcDbCurve: Funções para Sobrecarregar

virtual Adesk::Boolean isClosed () const; virtual Adesk::Boolean isPeriodic () const; virtual Adesk::Boolean isPlanar () const; virtual Acad::ErrorStatus

getPlane (AcGePlane&, AcDb::Planarity&) const; virtual Acad::ErrorStatus

getStartParam(double&) const; virtual Acad::ErrorStatus getEndParam (double&) const; virtual Acad::ErrorStatus

getStartPoint(AcGePoint3d&) const; virtual Acad::ErrorStatus

getEndPoint (AcGePoint3d&) const; virtual Acad::ErrorStatus

getPointAtParam(double, AcGePoint3d&) const; virtual Acad::ErrorStatus

getParamAtPoint(const AcGePoint3d&, double&)const; virtual Acad::ErrorStatus

getDistAtParam (double param, double& dist) const; virtual Acad::ErrorStatus

getParamAtDist (double dist, double& param) const; virtual Acad::ErrorStatus

getDistAtPoint (const AcGePoint3d&, double&)const; virtual Acad::ErrorStatus

getPointAtDist (double, AcGePoint3d&) const; virtual Acad::ErrorStatus

getFirstDeriv (double param,

AcGeVector3d& firstDeriv) const; virtual Acad::ErrorStatus

getFirstDeriv (const AcGePoint3d&,

AcGeVector3d& firstDeriv) const; virtual Acad::ErrorStatus

getSecondDeriv (double param,

AcGeVector3d& secDeriv) const; virtual Acad::ErrorStatus

getSecondDeriv (const AcGePoint3d&,

AcGeVector3d& secDeriv) const; virtual Acad::ErrorStatus

getClosestPointTo(const AcGePoint3d& givenPnt, AcGePoint3d& pointOnCurve, Adesk::Boolean extend

= Adesk::kFalse) const; virtual Acad::ErrorStatus

getClosestPointTo(const AcGePoint3d& givenPnt, const AcGeVector3d& normal, AcGePoint3d& pointOnCurve, Adesk::Boolean extend

= Adesk::kFalse) const; virtual Acad::ErrorStatus

getOrthoProjectedCurve(const AcGePlane&, AcDbCurve*& projCrv) const; virtual Acad::ErrorStatus

getProjectedCurve(const AcGePlane&,

const AcGeVector3d& projDir, AcDbCurve*& projCrv) const; virtual Acad::ErrorStatus

getOffsetCurves(double offsetDist,

AcDbVoidPtrArray& offsetCurves) const; virtual Acad::ErrorStatus

getSpline (AcDbSpline*& spline) const; virtual Acad::ErrorStatus

getSplitCurves (const AcGeDoubleArray& params, AcDbVoidPtrArray& curveSegments) const; virtual Acad::ErrorStatus

getSplitCurves (const AcGePoint3dArray& points, AcDbVoidPtrArray& curveSegments) const; virtual Acad::ErrorStatus

virtual Acad::ErrorStatus

extend(Adesk::Boolean extendStart, const AcGePoint3d& toPoint); virtual Acad::ErrorStatus

getArea(double&) const;

Implementando Funções Membro

Quando se define uma nova função membro ou se sobrecarrega uma função já existente, a primeira que usualmente deve-se chamar é assertReadEnabled( ), assertWriteEnabled( ), ou

assertNotifyEnabled( ) para verificar se o objeto foi aberto da forma certa.

Objetos abrem para:

Filing

A partir da derivação de uma nova classe de AcDbObject, é necessário adicionar aldumas informações o mecanismo de armazenamento do AutoCAD. As quatro funções abaixo são utilizadas para garantir esse armazenamento:

Acad::ErrorStatus AcDbObject::dwgOut(AcDbDwgFiler* filer); Acad::ErrorStatus AcDbObject::dwgIn(AcDbDwgFiler* filer); Acad::ErrorStatus AcDbObject::dxfOut(AcDbDxfFiler* filer, Adesk::Boolean allXdFlag,

Adesk::uchar* regAppTable) const); Acad::ErrorStatus

AcDbObject::dxfIn(AcDbDxfFiler* filer);

Read Write Notify

assertReadEnabled( ) returns returns returns

assertWriteEnabled( ) aborts returns aborts

No documento ObjectARX.pdf (páginas 55-65)

Documentos relacionados