C++中的事务管理器,适用于 Bricscad Brx
**** Hidden Message *****您是否正在尝试编写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 哇酷,另一个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);
}
嗨,Daniel,
你有没有在你的智能指针调用中实现create()的使用?-如果你这样做了,在这样的调用中也是:
我没有,只是在这个:
作为您关于智能指针的主题......顺便说一句 对,我不会在第一个例子中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);
}
}
是的。。。。
想知道为什么它可用....今天晚些时候会做一些测试。
谢谢! 我认为,AutoCAD 09中的智能指针更像是一个共享指针,而不像以前的版本那样只是一个新的/删除 打开/关闭机制 谢谢你们的帖子。
我已经下载了V9.2.2 SDK并试用了一下。
Daniel,与TransactionManager相比,“智能指针”有什么优势?
顺便说一句,我在布里斯卡德玩过你们的ARX.NET包装图书馆。无法让V9版本工作,但V8还可以。
获得与VBA相当的速度,您的资料大约。比VBA快20%。干杯。
我想这只是个人偏好,一般来说,我会尽可能地使用智能指针,无论是AcDbObjectPointer、std::auto_ptr还是boost的一些智能指针。
我想知道为什么我的drxnet不能为您工作,它可以在我的V9.2.2机器上工作。您得到任何错误信息吗?我承认由于缺乏兴趣,我没有在这方面投入太多精力。
页:
[1]
2