AsdkEllipse(const AcDbObjectIdArray& ellipses,

const AcGePoint3d& center,

const AcGeVector3d& unitNormal,

const AcGeVector3d& majorAxis,

double radiusRatio,

double startAngle = 0.0,

double endAngle = 6.28318530717958647692);

AcDbObjectId ellipseId(unsigned short which);

Acad::ErrorStatus setEllipseId(

const AcDbObjectId& objId, unsigned short which);

Acad::ErrorStatus setEllipseIds(

const AcDbObjectIdArray& Ids);

Acad::ErrorStatus appendId(const AcDbObjectId& objId);

Acad::ErrorStatus appendIds(

const AcDbObjectIdArray& objIds);

inline Adesk::Boolean removeId(

const AcDbObjectId& objId);

// AcDbObject overrides.

//

virtual Acad::ErrorStatus subErase(

Adesk::Boolean pErasing);

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;

virtual Acad::ErrorStatus wblockClone(

AcRxObject* pOwnerObject,

AcDbObject*& pClonedObject,

AcDbIdMapping& idMap,

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

// AcDbEntity overrides.

//

virtual void list() const;

// AcRxObject overrides.

//

virtual AcRxObject* clone() const;

private:

AcDbObjectIdArray mEllipseIds;

static int mInFlux; // == 1 when first object’s

// subErase is active.

};

ACRX_DXF_DEFINE_MEMBERS(AsdkEllipse, AcDbEllipse,

AcDb::kDHL_CURRENT, AcDb::kMReleaseCurrent, 0, ASDKELLIPSE,

НЕ нашли? Не то? Что вы ищете?

REFERENC);

// Static class data member definition.

//

int AsdkEllipse::mInFlux = Adesk::kFalse;

AsdkEllipse::AsdkEllipse(const AsdkEllipse& master)

{

set(master. center(), master. normal(),

master. majorAxis(), master. radiusRatio(),

master. startAngle(), master. endAngle());

mEllipseIds = master. mEllipseIds;

}

AsdkEllipse::AsdkEllipse(const AcGePoint3d& center,

const AcGeVector3d& unitNormal,

const AcGeVector3d& majorAxis,

double radiusRatio,

double startAngle,

double endAngle) :

AcDbEllipse(center, unitNormal, majorAxis, radiusRatio,

startAngle, endAngle)

{ }

AsdkEllipse::AsdkEllipse(const AcDbObjectIdArray& ellipses,

const AcGePoint3d& center,

const AcGeVector3d& unitNormal,

const AcGeVector3d& majorAxis,

double radiusRatio,

double startAngle,

double endAngle) :

AcDbEllipse(center, unitNormal, majorAxis, radiusRatio,

startAngle, endAngle), mEllipseIds(ellipses)

{ }

AcDbObjectId

AsdkEllipse::ellipseId(unsigned short which)

{

assertReadEnabled();

if (which > mEllipseIds. length())

return AcDbObjectId::kNull;

return mEllipseIds[which];

}

Acad::ErrorStatus

AsdkEllipse::setEllipseId(const AcDbObjectId& objId,

unsigned short which)

{

assertWriteEnabled();

if (which > mEllipseIds. length())

return Acad::eInvalidIndex;

mEllipseIds[which] = objId;

return Acad::eOk;

}

Acad::ErrorStatus

AsdkEllipse::setEllipseIds(const AcDbObjectIdArray& objIds)

{

assertWriteEnabled();

if (objIds. length() == 0)

return Acad::eNullObjectId;

mEllipseIds = objIds;

return Acad::eOk;

}

Acad::ErrorStatus

AsdkEllipse::appendId(const AcDbObjectId& objId)

{

assertWriteEnabled();

if (objId == AcDbObjectId::kNull)

return Acad::eNullObjectId;

mEllipseIds. append(objId);

return Acad::eOk;

}

Acad::ErrorStatus

AsdkEllipse::appendIds(const AcDbObjectIdArray& objIds)

{

assertWriteEnabled();

if (objIds. length() == 0)

return Acad::eNullObjectId;

mEllipseIds. append(objIds);

return Acad::eOk;

}

inline Adesk::Boolean

AsdkEllipse::removeId(const AcDbObjectId& objId)

{

assertWriteEnabled();

return mEllipseIds. remove(objId);

}

// This implementation of subErase opens and erases all

// objects that this entity has hard pointer references

// to. The effect is that when one AsdkEllipse is erased,

// all the others it has hard pointers to also erase as

// a "group".

//

Acad::ErrorStatus

AsdkEllipse::subErase(Adesk::Boolean pErasing)

{

Acad::ErrorStatus es = AcDbEllipse::subErase(pErasing);

if (es!= Acad::eOk)

return es;

if (mInFlux == Adesk::kFalse) {

mInFlux = Adesk::kTrue;

AsdkEllipse *pEllipse;

int es;

for (int i = 0; i < mEllipseIds. length(); i++) {

es = acdbOpenObject(pEllipse, mEllipseIds[i],

AcDb::kForWrite, Adesk::kTrue);

if (es!= Acad::eOk)

continue;

pEllipse->erase(pErasing);

pEllipse->close();

}

mInFlux = Adesk::kFalse;

}

return Acad::eOk;

}

Acad::ErrorStatus

AsdkEllipse::dwgInFields(AcDbDwgFiler* filer)

{

assertWriteEnabled();

AcDbEllipse::dwgInFields(filer);

mEllipseIds. setLogicalLength(0);

int idCount;

filer->readInt32((long*)&idCount);

AcDbHardPointerId objId;

for (int i = 0; i < idCount; i++) {

filer->readItem(&objId);

mEllipseIds. append(objId);

}

return filer->filerStatus();

}

Acad::ErrorStatus

AsdkEllipse::dwgOutFields(AcDbDwgFiler* filer) const

{

assertReadEnabled();

AcDbEllipse::dwgOutFields(filer);

filer->writeInt32(mEllipseIds. length());

for (int i = 0; i < mEllipseIds. length(); i++) {

filer->writeHardPointerId(mEllipseIds[i]);

}

return filer->filerStatus();

}

Acad::ErrorStatus

AsdkEllipse::dxfInFields(AcDbDxfFiler* filer)

{

assertWriteEnabled();

Acad::ErrorStatus es = AcDbEllipse::dxfInFields(filer);

if (es!= Acad::eOk) {

return es;

}

// Check to see if we’re at the right subclass data

// marker.

//

if (!filer->atSubclassData("AsdkEllipse")) {

return Acad::eBadDxfSequence;

}

struct resbuf inbuf;

AcDbObjectId objId;

int idCount;

filer->readItem(&inbuf);

if (inbuf. restype == AcDb::kDxfInt32) {

idCount = inbuf. resval. rint;

} else {

filer->pushBackItem();

filer->setError(Acad::eInvalidDxfCode,

"\nError: expected group code %d",

AcDb::kDxfInt32);

return filer->filerStatus();

}

for (int i = 0; i < idCount; i++) {

es = filer->readItem(&inbuf);

if (es!= Acad::eOk) {

filer->setError(Acad::eMissingDxfField,

"\nError: expected more group code %d’s",

AcDb::kDxfHardPointerId);

return filer->filerStatus();

}

if (inbuf. restype == AcDb::kDxfHardPointerId) {

acdbGetObjectId(objId, inbuf. resval. rlname);

mEllipseIds. append(objId);

} else {

filer->pushBackItem();

filer->setError(Acad::eInvalidDxfCode,

"\nError: expected group code %d",

AcDb::kDxfHardPointerId);

return filer->filerStatus();

}

}

return filer->filerStatus();

}

Acad::ErrorStatus

AsdkEllipse::dxfOutFields(AcDbDxfFiler* filer) const

{

assertReadEnabled();

AcDbEllipse::dxfOutFields(filer);

filer->writeItem(AcDb::kDxfSubclass, "AsdkEllipse");

filer->writeInt32(AcDb::kDxfInt32,

mEllipseIds. length());

for (int i = 0; i < mEllipseIds. length(); i++) {

filer->writeObjectId(AcDb::kDxfHardPointerId,

mEllipseIds[i]);

}

return filer->filerStatus();

}

void

AsdkEllipse::list() const

{

assertReadEnabled();

AcDbEllipse::list();

acutPrintf("\nClass:\t%s", isA()->name());

for (int i = 0; i < mEllipseIds. length(); i++) {

acutPrintf("\nReferenceId[%d]:\t%ld", i,

(mEllipseIds[i]).asOldId());

}

}

// Called whenever an object of this class is dragged,

// moved, stretched, rotated, etc. so be careful what

// this function is made to do.

//

AcRxObject*

AsdkEllipse::clone() const

{

assertReadEnabled();

return new AsdkEllipse(*this);

}

Acad::ErrorStatus

AsdkEllipse::wblockClone(

AcRxObject* pOwnerObject,

AcDbObject*& pClonedObject,

AcDbIdMapping& idMap,

Adesk::Boolean isPrimary) const

{

assertReadEnabled();

static AcDbObjectId btr, pspace = AcDbObjectId::kNull;

AcTransaction *pTrans = NULL;

pClonedObject = NULL;

if (pspace == AcDbObjectId::kNull) {

AcDbBlockTable *pTable;

database()->getSymbolTable(pTable, AcDb::kForRead);

pTable->getAt(ACDB_PAPER_SPACE, pspace);

pTable->close();

}

if ( idMap. deepCloneContext() == AcDb::kDcXrefBind && ownerId() == pspace)

return Acad::eOk;

// Have we already done this entity?

//

AcDbIdPair idPair(objectId(), (AcDbObjectId)NULL, Adesk::kTrue);

if (pute(idPair) == TRUE && idPair. value() != NULL)

{

pClonedObject = NULL;

return Acad::eOk;

}

AcDbBlockTableRecord *pBTR = AcDbBlockTableRecord::cast(pOwnerObject);

if (pBTR != NULL) {

if (isPrimary == Adesk::kTrue)

btr = pBTR->objectId();

else

btr = AcDbObjectId::kNull;

} else if (btr!= AcDbObjectId::kNull) {

pTrans = actrTransactionManager->startTransaction();

pTrans->getObject((AcDbObject*&)pBTR, btr,

AcDb::kForWrite);

pOwnerObject = pBTR;

}

Acad::ErrorStatus es = AcDbEllipse::wblockClone(pOwnerObject,

pClonedObject, idMap, btr!= AcDbObjectId::kNull);

if (pTrans)

actrTransactionManager->endTransaction();

acutPrintf("\nWblockClone error status: %s",

acadErrorStatusText(es));

return Acad::eOk;

}

void

createEllipses()

{

const ellipseCount = 10;

AsdkEllipse *pEllipse;

pEllipse = new AsdkEllipse(AcGePoint3d(4.0, 4.0, 0.0),

AcGeVector3d(0.0, 0.0, 1.0),

AcGeVector3d(2.0, 0.0, 0.0),

0.5);

AcDbVoidPtrArray ellipses;

ellipses. append(pEllipse);

// Now use the getTransformedCopy() function with a

// scaling matrix (in X & Y only) to create new

// AsdkEllipses, each 0.5 units larger than the last in

// the X & Y direction, but identical in the Z

// direction. This would be similar to the

// getOffsetCurves() function, but that function

// returns AcDbSpline entities instead of AcDbEllipses.

//

double j = 1.1;

AcGeMatrix3d scale;

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132