Helios 发表于 2008-11-22 05:31:21

C++中的事务管理器,适用于 Bricscad Brx

**** Hidden Message *****

Helios 发表于 2008-11-22 11:52:22


您是否正在尝试编写ObjectARX命令?-它可以在intellicad内核下运行吗?-我是智能cad的新手。
如果您想编写一个ObjectARX应用程序,安装ARX向导会容易得多,并使用它在Visual Studio中为您创建一个框架,这样所有必要的东西都会包含在内。
现在,要知道头文件的位置,您可以突出显示函数的名称,右键单击并单击“转到定义”,这将带您进入头文件。另一种方法是打开帮助并在搜索下键入(在这种情况下是宏名)....
acdbTransactionManager->startTransaction();
for (UINT i = 0; i getObject((AcDbObject*&)pEnt, oid, AcDb::kForWrite) == Acad::eOk)
                pEnt->erase();
}
acdbTransactionManager->endTransaction();

dbtrans.h

Helios 发表于 2008-11-22 12:14:22

哇酷,另一个BRXer
我不怎么使用事务管理器,我喜欢使用智能指针,所以我提供了每个的例子。
//++-- Transcation Example
static void BRXDoit1(void)
{
    Acad::ErrorStatus es;
    long ssLength = 0;
    ads_name sel;
    AcDbObject *pObj;
    AcDbObjectIdArray ids;
    if(acedSSGet(NULL, NULL, NULL, NULL, sel) != RTNORM)
    {
      return;
    }
    if(acedSSLength(sel, &ssLength) != RTNORM || ssLength == 0)
    {
      acedSSFree(sel);
      return;
    }
    if(acedGetCurrentSelectionSet(ids) != Acad::eOk)
    {
      acedSSFree(sel);
      return;
    }
    AcTransaction *pTransaction = actrTransactionManager->startTransaction();
    for(int i = 0 ; i getObject(pObj,ids,AcDb::kForRead) == Acad::eOk)
      {
      AcDbEntity *pEnt = (AcDbEntity*) pObj;
      if(pEnt)
      {
          pEnt->upgradeOpen();
          pEnt->setLayer(_T("0"));
      }
      }
    }
    actrTransactionManager->endTransaction();
    acedSSFree(sel);
}
//++-- Smart pointer Example
static void BRXDoit2(void)
{
    Acad::ErrorStatus es;
    long ssLength = 0;
    ads_name sel;
    AcDbObjectIdArray ids;
    if(acedSSGet(NULL, NULL, NULL, NULL, sel) != RTNORM)
    {
      return;
    }
    if(acedSSLength(sel, &ssLength) != RTNORM || ssLength == 0)
    {
      acedSSFree(sel);
      return;
    }
    if(acedGetCurrentSelectionSet(ids) != Acad::eOk)
    {
      acedSSFree(sel);
      return;
    }
    for(int i = 0 ; i upgradeOpen();
      smartPointer->setLayer(_T("0"));
      }
    }
    acedSSFree(sel);
}

MickD 发表于 2008-11-22 12:21:53

嗨,Daniel,
你有没有在你的智能指针调用中实现create()的使用?-如果你这样做了,在这样的调用中也是:
我没有,只是在这个:
作为您关于智能指针的主题......顺便说一句

MickD 发表于 2008-11-22 12:39:32

对,我不会在第一个例子中e::create(),因为对象已经存在,而是会在创建新对象时使用I. e
typedef AcDbObjectPointer AcDbLinePointer;
static void CRPDBRXTransDoit3(void)
{
    AcDbDatabase* pDb = acdbHostApplicationServices()->workingDatabase();
    AcDbBlockTableRecordPointer pBTR(pDb->currentSpaceId(), AcDb::kForWrite); //setStartPoint(AcGePoint3d(0,0,0));
      pLine->setEndPoint(AcGePoint3d(100,100,0));
      pBTR->appendAcDbEntity(pLine);
    }
}

Helios 发表于 2008-11-22 13:15:20

是的。。。。
想知道为什么它可用....今天晚些时候会做一些测试。
谢谢!

Helios 发表于 2008-11-22 13:28:47

我认为,AutoCAD 09中的智能指针更像是一个共享指针,而不像以前的版本那样只是一个新的/删除

MickD 发表于 2008-11-22 13:47:32

打开/关闭机制

Helios 发表于 2008-11-23 08:50:31

谢谢你们的帖子。
我已经下载了V9.2.2 SDK并试用了一下。
Daniel,与TransactionManager相比,“智能指针”有什么优势?
顺便说一句,我在布里斯卡德玩过你们的ARX.NET包装图书馆。无法让V9版本工作,但V8还可以。
获得与VBA相当的速度,您的资料大约。比VBA快20%。干杯。

Helios 发表于 2008-11-23 12:54:30

我想这只是个人偏好,一般来说,我会尽可能地使用智能指针,无论是AcDbObjectPointer、std::auto_ptr还是boost的一些智能指针。
我想知道为什么我的drxnet不能为您工作,它可以在我的V9.2.2机器上工作。您得到任何错误信息吗?我承认由于缺乏兴趣,我没有在这方面投入太多精力。
页: [1] 2
查看完整版本: C++中的事务管理器,适用于 Bricscad Brx