乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 145|回复: 12

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

[复制链接]

6

主题

39

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
63
发表于 2008-11-22 05:31:21 | 显示全部楼层 |阅读模式

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

6

主题

39

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
63
发表于 2008-11-22 11:52:22 | 显示全部楼层

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

dbtrans.h
回复

使用道具 举报

6

主题

39

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
63
发表于 2008-11-22 12:14:22 | 显示全部楼层
哇酷,另一个BRXer
我不怎么使用事务管理器,我喜欢使用智能指针,所以我提供了每个的例子。
  1.   //++-- Transcation Example
  2.   static void BRXDoit1(void)
  3.   {
  4.     Acad::ErrorStatus es;
  5.     long ssLength = 0;
  6.     ads_name sel;
  7.     AcDbObject *pObj;
  8.     AcDbObjectIdArray ids;
  9.     if(acedSSGet(NULL, NULL, NULL, NULL, sel) != RTNORM)
  10.     {
  11.       return;
  12.     }
  13.     if(acedSSLength(sel, &ssLength) != RTNORM || ssLength == 0)
  14.     {
  15.       acedSSFree(sel);
  16.       return;
  17.     }
  18.     if(acedGetCurrentSelectionSet(ids) != Acad::eOk)
  19.     {
  20.       acedSSFree(sel);
  21.       return;
  22.     }
  23.     AcTransaction *pTransaction = actrTransactionManager->startTransaction();
  24.     for(int i = 0 ; i getObject(pObj,ids[i],AcDb::kForRead) == Acad::eOk)
  25.       {
  26.         AcDbEntity *pEnt = (AcDbEntity*) pObj;
  27.         if(pEnt)
  28.         {
  29.           pEnt->upgradeOpen();
  30.           pEnt->setLayer(_T("0"));
  31.         }
  32.       }
  33.     }
  34.     actrTransactionManager->endTransaction();
  35.     acedSSFree(sel);
  36.   }
  37.   //++-- Smart pointer Example
  38.   static void BRXDoit2(void)
  39.   {
  40.     Acad::ErrorStatus es;
  41.     long ssLength = 0;
  42.     ads_name sel;
  43.     AcDbObjectIdArray ids;
  44.     if(acedSSGet(NULL, NULL, NULL, NULL, sel) != RTNORM)
  45.     {
  46.       return;
  47.     }
  48.     if(acedSSLength(sel, &ssLength) != RTNORM || ssLength == 0)
  49.     {
  50.       acedSSFree(sel);
  51.       return;
  52.     }
  53.     if(acedGetCurrentSelectionSet(ids) != Acad::eOk)
  54.     {
  55.       acedSSFree(sel);
  56.       return;
  57.     }
  58.     for(int i = 0 ; i upgradeOpen();
  59.         smartPointer->setLayer(_T("0"));
  60.       }
  61.     }
  62.     acedSSFree(sel);
  63.   }

回复

使用道具 举报

69

主题

875

帖子

15

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1146
发表于 2008-11-22 12:21:53 | 显示全部楼层
嗨,Daniel,
你有没有在你的智能指针调用中实现create()的使用?-如果你这样做了,在这样的调用中也是:
我没有,只是在这个:
作为您关于智能指针的主题......顺便说一句
回复

使用道具 举报

69

主题

875

帖子

15

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1146
发表于 2008-11-22 12:39:32 | 显示全部楼层
对,我不会在第一个例子中e::create(),因为对象已经存在,而是会在创建新对象时使用I. e
  1.   typedef AcDbObjectPointer AcDbLinePointer;
  2.   static void CRPDBRXTransDoit3(void)
  3.   {
  4.     AcDbDatabase* pDb = acdbHostApplicationServices()->workingDatabase();
  5.     AcDbBlockTableRecordPointer pBTR(pDb->currentSpaceId(), AcDb::kForWrite); //setStartPoint(AcGePoint3d(0,0,0));
  6.       pLine->setEndPoint(AcGePoint3d(100,100,0));
  7.       pBTR->appendAcDbEntity(pLine);
  8.     }
  9.   }

回复

使用道具 举报

6

主题

39

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
63
发表于 2008-11-22 13:15:20 | 显示全部楼层
是的。。。。
想知道为什么它可用....今天晚些时候会做一些测试。
谢谢!
回复

使用道具 举报

6

主题

39

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
63
发表于 2008-11-22 13:28:47 | 显示全部楼层
我认为,AutoCAD 09中的智能指针更像是一个共享指针,而不像以前的版本那样只是一个新的/删除
回复

使用道具 举报

69

主题

875

帖子

15

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1146
发表于 2008-11-22 13:47:32 | 显示全部楼层
打开/关闭机制
回复

使用道具 举报

6

主题

39

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
63
发表于 2008-11-23 08:50:31 | 显示全部楼层
谢谢你们的帖子。
我已经下载了V9.2.2 SDK并试用了一下。
Daniel,与TransactionManager相比,“智能指针”有什么优势?
顺便说一句,我在布里斯卡德玩过你们的ARX.NET包装图书馆。无法让V9版本工作,但V8还可以。
获得与VBA相当的速度,您的资料大约。比VBA快20%。干杯。
回复

使用道具 举报

6

主题

39

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
63
发表于 2008-11-23 12:54:30 | 显示全部楼层
我想这只是个人偏好,一般来说,我会尽可能地使用智能指针,无论是AcDbObjectPointer、std::auto_ptr还是boost的一些智能指针。
我想知道为什么我的drxnet不能为您工作,它可以在我的V9.2.2机器上工作。您得到任何错误信息吗?我承认由于缺乏兴趣,我没有在这方面投入太多精力。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-2-6 03:59 , Processed in 0.448104 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表