ObjectARX, AutoCAD. Среда программирования библиотеки C++


         

Пример вложенных транзакций


Следующий пример включает три вложенных транзакции. Последовательность событий следует.

Создавать вложенные транзакции

1 Создают многоугольник и переносят это к базе данных.

2 Транзакция Начала 1:

  • Выбирают многоугольник и получают указатель на это. Откройте это для чтения.
  • Создают вытесненное твердое использование многоугольник.
  • Создают цилиндр в середине расширенного{*продленного*} многоугольника.
  • 3 Транзакция Начала 2: Вычтите цилиндр от вытеснения (создает отверстие в середине твердых).

    4 Транзакция Начала 3:

  • Сектор форма в половине по X/Z плану и перемещению это по X оси, так что Вы можете рассматривать эти две части.
  • Прерывают транзакцию? Ответ да.
  • 5 Транзакции Начала 3 (снова): Сектор форма в половине по Y/Z плану и перемещению это по Y.

    6 Конечных Транзакции 3.

    7 Конечных Транзакции 2.

    ОБРАТИТЕ ВНИМАНИЕ, прерываетесь ли Вы в этой точке, транзакции 2 и 3 оба отменены. Если Вы прерываете содержащую транзакцию, все вложенные транзакции прерваны, даже если они были успешно закончены.

    8 Конечных Транзакции 1.

    Следующее - код для этого примера:

    void

    transactCommand()

    {

    Adesk::Boolean interrupted;

    Acad::ErrorStatus es = Acad::eOk;

    AcDbObjectId savedCylinderId,savedExtrusionId;

    // Create a poly and post it to the database.

    //

    acutPrintf("\nCreating a poly...Please supply the"

    " required input.");

    if ((es = createAndPostPoly()) != Acad::eOk)

    return;

    // Start a transaction.

    //

    AcTransaction *pTrans = actrTransactionManager->startTransaction();

    assert(pTrans != NULL);

    acutPrintf("\n\n###### Started transaction one." " ######\n");

    // Select the poly and extrude it.

    //

    AcDbObject *pObj = NULL;

    AsdkPoly *pPoly = NULL;

    AcDb3dSolid *pSolid = NULL;

    AcDbObjectId objId;

    ads_name ename;

    ads_point pickpt;

    for (;;) {

    switch (acedEntSel("\nSelect a polygon: ", ename, pickpt))

    {

    case RTNORM:

    acdbGetObjectId(objId, ename);

    if ((es = pTrans->getObject(pObj, objId, AcDb::kForRead)) != Acad::eOk)



    Содержание  Назад  Вперед