Тема: Кому-то эта мелочь может оказаться ОЧЕНЬ полезной

//мои дефайны
#define PI 3.1415926535897932384626433832795
#define ABS(val) ( val<0 ? -val : val)
#define AI(nnnn) acutPrintf("\n"#nnnn" =\t%i", nnnn);
#define AF(nnnn) acutPrintf("\n"#nnnn" =\t%f", nnnn);
#define AS(nnnn) acutPrintf("\n"#nnnn" =\t%s", nnnn);
#define AP(nnnn) acutPrintf("\n"#nnnn"\t%f,%f,%f", nnnn[X], nnnn[Y], nnnn[Z]);
#define AA(nnnn) acutPrintf("\n"#nnnn);
#define AAA(nnnn) acutPrintf(#nnnn);
#define AE(nnnn) acutPrintf("\n"#nnnn" =\t%s", acadErrorStatusText(nnnn));
#define AMX(nnnn) acutPrintf("\n\
        MATRIX("#nnnn")\n\
        =============================================\n\
        %f\t%f\t%f\t%f\n\
        %f\t%f\t%f\t%f\n\
        %f\t%f\t%f\t%f\n\
        %f\t%f\t%f\t%f\n\n"\
        , \
        nnnn(0,0), nnnn(0,1), nnnn(0,2), nnnn(0,3), \
        nnnn(1,0), nnnn(1,1), nnnn(1,2), nnnn(1,3), \
        nnnn(2,0), nnnn(2,1), nnnn(2,2), nnnn(2,3), \
        nnnn(3,0), nnnn(3,1), nnnn(3,2), nnnn(3,3)  \
        );

особенно строка

#define AE(nnnn) acutPrintf("\n"#nnnn" =\t%s", acadErrorStatusText(nnnn));

которая выводит на печать результат выполнения функции
например, пытаемся открыть объект, что-то с ним сделать и закрыть, и при этом посмотреть на результаты операций. Делаем так

    AE(acdbOpenObject(pDict, idDict, AcDb::kForRead));
    AE(pDict->getAt("Model", idLyt));
    ...
    AE(pDict->close());

остальное - печать целого, плавающего, трёх координат точки (как ads_point так и AcGePoint3d), матрицы и пр.
буду рад, если кому-то это поможет

Re: Кому-то эта мелочь может оказаться ОЧЕНЬ полезной

Вообще-то PI определено в math.h, ну и ABS там же.
А при открытии объектов лучше пользоватся умными указателями.
Но для отладки может быть полезно. Особенно, если сделать условную компиляцию для DEBUG, RELEASE версий.

Re: Кому-то эта мелочь может оказаться ОЧЕНЬ полезной

Ещё к этому можно добавить вывод на печать значений типа RTNORM.
А вот функции, распечатывающей содержимое resbuf у меня нет :(
Не совсем понял "А при открытии объектов лучше пользоватся умными указателями"?

Re: Кому-то эта мелочь может оказаться ОЧЕНЬ полезной

> samdurak
Не совсем понял "А при открытии объектов лучше пользоватся умными указателями"?
Идиому "smart pointer" в ObjectArx реализуют класс AcDbObjectPointer и его наследники.
При их использовании вместо, например
AcDbEntity *entityPtr;
if(acdbOpenAcDbEntity(entityPtr, entityId, AcDb::kForRead) != Acad::eOk)
{
//не смогли открыть
}
//работаем с entityPtr
entityPtr->close();
можно писать
AcDbEntityPointer smartEntityPtr(entityId, AcDb::kForRead);
if(smartEntityPtr.openStatus != Acad::eOk)
{
}
//работаем с entityPtr
Закрывает ассоциированный со smartEntityPtr объект деструктор smartEntityPtr.
В этом случае не нужно думать как-бы не забыть вызвать close.
Не нужно перехватывать исключения лишь для того чтобы вызвать close.

Re: Кому-то эта мелочь может оказаться ОЧЕНЬ полезной

Еще одна полезная мелочь - рекурсиврое разбиение сложного объекта

void recurseExplode(AcDbEntity *pEnt)
{
    int static st=0;
    acutPrintf("\n");
    for (int i=0; i<st; i++) acutPrintf("    ");
    acutPrintf("%s", pEnt->isA()->name());
    AcDbVoidPtrArray entitySet;
    if (pEnt->explode(entitySet)==Acad::eOk)
    {
        st++;
        for (int i=0; i<entitySet.length(); i++)
        {
            AcDbVoidPtrArray entitySet2;
            recurseExplode((AcDbEntity*)entitySet[i]);
        }
        st--;
    }
}

разбивает объект на все возможные составляющие части и пишет его тип
в виде

AcDbBlockReference
    AcDb3dSolid
        AcDbBody
            AcDbArc
            AcDbSpline
            AcDbSpline
            AcDbLine
            AcDbArc
            AcDbSpline
        AcDbBody
            AcDbSpline
            AcDbSpline
            AcDbSpline
            AcDbSpline
        AcDbBody
            AcDbLine
            AcDbSpline
            AcDbSpline
            AcDbLine
        AcDbBody
            AcDbSpline
            AcDbSpline
            AcDbSpline
            AcDbSpline
        AcDbBody
            AcDbArc
            AcDbSpline
            AcDbSpline
            AcDbArc
            AcDbLine
            AcDbSpline
        AcDbRegion
            AcDbArc
            AcDbSpline
            AcDbLine
            AcDbLine
            AcDbArc
            AcDbSpline
        AcDbBody
            AcDbSpline
            AcDbLine
            AcDbLine
            AcDbSpline
        AcDbBody
            AcDbSpline
            AcDbLine
            AcDbLine
            AcDbSpline
        AcDbRegion
            AcDbArc
            AcDbLine
            AcDbSpline
            AcDbArc
            AcDbLine
            AcDbSpline
        AcDbRegion
            AcDbLine
            AcDbLine
            AcDbLine
            AcDbLine

кому надо - пользуйтесь на здоровье