static int ads_EntPreviousFrom(void)
{
struct resbuf *rb = acedGetArgs();
if (!rb)
{
acutPrintf(_T("\nError: function requires an ENAME argument. \n"));
return RSERR;
}
AcDbObjectId objId;
ads_name objName;
if (rb && (rb->restype == RTENAME))
{
if (acdbGetObjectId(objId, rb->resval.rlname) == Acad::eOk)
{
AcDbObjectPointer<AcDbEntity> pObj(objId, AcDb::kForRead);
if (pObj.openStatus() == Acad::eOk)
{
if (pObj->isKindOf(AcDb2dVertex::desc()))
{
AcDbObjectPointer<AcDb2dPolyline> pPline(pObj->ownerId(), AcDb::kForRead);
if (pPline.openStatus() == Acad::eOk)
{
AcDbObjectIterator* pVertIterator = pPline->vertexIterator();
pVertIterator->start();
pVertIterator->setPosition(pObj->objectId());
pVertIterator->step(true);
AcDbObjectPointer<AcDb2dVertex> pVertex(pVertIterator->objectId(), AcDb::kForRead);
if (pVertex.openStatus() == Acad::eOk)
{
if (acdbGetAdsName(objName, pVertex->objectId()) == Acad::eOk)
{
acedRetName(objName, RTENAME);
}
}
else if (acdbGetAdsName(objName, pPline->objectId()) == Acad::eOk)
{
acedRetName(objName, RTENAME);
}
delete pVertIterator;
}
}
else if (pObj->isKindOf(AcDbAttribute::desc()))
{
AcDbObjectPointer<AcDbBlockReference> pRef(pObj->ownerId(), AcDb::kForRead);
if (pRef.openStatus() == Acad::eOk)
{
AcDbObjectIterator* pAttributeIterator = pRef->attributeIterator();
pAttributeIterator->start(true);
pAttributeIterator->setPosition(pObj->objectId());
pAttributeIterator->step(true);
AcDbObjectPointer<AcDbAttribute> pAttribute(pAttributeIterator->objectId(), AcDb::kForRead);
if (pAttribute.openStatus() == Acad::eOk)
{
if (acdbGetAdsName(objName, pAttribute->objectId()) == Acad::eOk)
{
acedRetName(objName, RTENAME);
}
}
else if (acdbGetAdsName(objName, pRef->objectId()) == Acad::eOk)
{
acedRetName(objName, RTENAME);
}
delete pAttributeIterator;
}
}
else
{
AcDbBlockTableRecordPointer pBTR(pObj->ownerId(), AcDb::kForRead);
if (pBTR.openStatus() == Acad::eOk)
{
AcDbBlockTableRecordIterator* pIterator = NULL;
if (pBTR->newIterator(pIterator) == Acad::eOk)
{
AcDbEntity* pEnt = NULL;
if (pIterator->seek(pObj) == Acad::eOk)
{
pIterator->step(false, true);
AcDbObjectId objId;
pIterator->getEntityId(objId);
AcDbObjectPointer<AcDbEntity> pEnt(objId, AcDb::kForRead);
if (pEnt.openStatus() == Acad::eOk)
{
if (acdbGetAdsName(objName, objId) == Acad::eOk)
{
acedRetName(objName, RTENAME);
}
}
}
delete pIterator;
}
}
}
}
}
}
return (RSRSLT);
}