乐筑天下

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

金砖四国的爆炸装置。

[复制链接]

1

主题

1

帖子

1

银币

初来乍到

Rank: 1

铜币
5
发表于 2008-9-2 08:54:32 | 显示全部楼层 |阅读模式
此例程尝试分解块并将属性转换为 Text。
我附上了编译好的DRX模块,命令名称是burst
  1. class CommandBlockEx : public OdStaticRxObject
  2. {
  3. public:
  4.   const OdString localName() const { return globalName(); }
  5.   const OdString groupName() const { return  OdString(_T("DRXGLOBAL")); }
  6.   const OdString globalName() const { return OdString(_T("burst")); }
  7.   void execute(OdEdCommandContext* pCmdCtx)
  8.   {
  9.     ASSERT(pCmdCtx != NULL);
  10.     if(pCmdCtx == NULL)
  11.       return;
  12.     OdDbCommandContextPtr pDbCmdCtx(pCmdCtx);
  13.     OdDbUserIOPtr pDbIO = pDbCmdCtx->dbUserIO();
  14.     OdDbDatabasePtr pDb = pDbCmdCtx->database();
  15.     if(pDb.isNull())
  16.       return;
  17.     OdRxObjectPtrArray entsToAdd;
  18.     OdString message = DD_T("\nSelect Blocks to Explode: ");
  19.     OdDbSelectionSetPtr pSelectionSet = pDbIO->select(message);
  20.     OdDbObjectIdArray ids = pSelectionSet->objectIdArray();
  21.     pDbIO->putString(DD_T("\nFiltering non Block Entities: "));
  22.     ProgressMeter meter(ids.length());
  23.     meter.start();
  24.     for(unsigned int i = 0 ; i isKindOf(OdDbBlockReference::desc()))
  25.         continue;
  26.       OdDbBlockReferencePtr pBlockReference = objectPtr;
  27.       if(pBlockReference.isNull())
  28.         continue;
  29.       OdDbObjectIteratorPtr pAttributeIterator =
  30.                 pBlockReference->attributeIterator();
  31.       for (pAttributeIterator->start();
  32.            !pAttributeIterator->done();
  33.            pAttributeIterator->step())
  34.       {
  35.         OdDbAttributePtr pAttribute =
  36.           pAttributeIterator->objectId().openObject(OdDb::kForRead);
  37.         OdDbTextPtr pText = OdDbText::createObject();
  38.         pText->setTextString(pAttribute->textString());
  39.         pText->setColor(pAttribute->color());
  40.         pText->setHeight(pAttribute->height());
  41.         pText->setPosition(pAttribute->position());
  42.         pText->setRotation(pAttribute->rotation());
  43.         pText->setTextStyle(pAttribute->textStyle());
  44.         pText->setVerticalMode(pAttribute->verticalMode());
  45.         entsToAdd.push_back((OdRxObjectPtr)pText);
  46.       }
  47.       pBlockReference->explode(entsToAdd);
  48.       pBlockReference->upgradeOpen();
  49.       pBlockReference->erase();
  50.       OdDbBlockTableRecordPtr pBtr =
  51.         pBlockReference->ownerId().openObject(OdDb::kForWrite);
  52.       if(pBtr.isNull())
  53.         continue;
  54.       for(unsigned int j = 0 ; j isKindOf(OdDbAttributeDefinition::desc()))
  55.           pBtr->appendOdDbEntity(ePtr);
  56.       }
  57.     }
  58.     meter.stop();
  59.     pDbIO->putString(DD_T("\n "));
  60.   }
  61. };


1kfzy1m1q30.png

1kfzy1m1q30.png

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

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

使用道具 举报

0

主题

9

帖子

7

银币

初来乍到

Rank: 1

铜币
11
发表于 2008-9-2 10:22:59 | 显示全部楼层

你好Daniel,
作为DRX的200%新手,我正在阅读上面的函数,有些东西吸引了我的注意力,为什么所有的铸件?
这里:
OdDbTextPtr pText=OdDbText::createObject(); // 这样开始
然后:
entsToAdd.push_back((OdRxObjectPtr)pText);//保存在这样的向量中
和:
OdDbEntityPtr ePtr=(OdDbEntityPtr)entsToAdd[j];//然后它是这样使用的
只是好奇,它可能是DRX需要的东西,不知道......(是的,我没有阅读您附加的zip文件中的内容)
谢谢!
回复

使用道具 举报

0

主题

5

帖子

6

银币

初来乍到

Rank: 1

铜币
6
发表于 2008-9-2 10:30:33 | 显示全部楼层
我不知道,编译器抱怨说它需要一个造型。
我可能应该编造一个OdDbObjectPtrArray,而不是使用OdRxObjectPtrArray
回复

使用道具 举报

0

主题

13

帖子

5

银币

初来乍到

Rank: 1

铜币
15
发表于 2008-9-2 10:36:13 | 显示全部楼层
不,虽然explode不需要ODRxObjectPtraray,但这些智能指针确实有一个cast方法,我应该研究一下
回复

使用道具 举报

0

主题

8

帖子

5

银币

初来乍到

Rank: 1

铜币
10
发表于 2008-9-2 10:46:21 | 显示全部楼层

Daniel,
所以智能指针是那些以Ptr结尾的指针,我看到,与我在ObjectARX中使用的指针不同。
谢谢!
回复

使用道具 举报

0

主题

7

帖子

6

银币

初来乍到

Rank: 1

铜币
11
发表于 2008-9-2 11:10:07 | 显示全部楼层

Daniel,
所以智能指针是那些以Ptr结尾的指针,我看到,与我在ObjectARX中使用的指针不同。
谢谢!

DRX非常光滑,几乎所有东西都C++类(RAII),甚至 ODA 版本的 resbuf 也是一个类。几乎每个类都有一个 create 方法,该方法返回指向对象新实例的智能指针。DRX 为您管理堆内存和 DbObjects 的状态。它的设计非常好,编码真的很愉快。
回复

使用道具 举报

0

主题

4

帖子

3

银币

初来乍到

Rank: 1

铜币
4
发表于 2008-9-2 11:17:28 | 显示全部楼层

那听起来很不错....我有一个朋友,他正在将一个非常庞大的应用程序(ARX)移植到DRX....我需要拜访他,看看代码....
糟糕的是,我仍然坚持只使用autocad...
回复

使用道具 举报

0

主题

12

帖子

5

银币

初来乍到

Rank: 1

铜币
12
发表于 2008-9-2 11:46:35 | 显示全部楼层
好吧,你可能想习惯智能指针,欧特克现在也在使用它们
回复

使用道具 举报

0

主题

4

帖子

5

银币

初来乍到

Rank: 1

铜币
5
发表于 2008-9-2 11:53:29 | 显示全部楼层

哇,太简单了......我不想那样......
但是,它似乎在a2009上可用-我还在a2007
但是很高兴知道!!!
谢谢。
我在所有编码中使用智能指针,但这些对我来说看起来很新......没有调用
if(ent.openStatus () == Acad::eOk)
{
}
回复

使用道具 举报

0

主题

8

帖子

5

银币

初来乍到

Rank: 1

铜币
13
发表于 2008-9-3 11:06:28 | 显示全部楼层
在做ARX工作时,我一直在使用它们...漂亮的小特色。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-2-6 06:58 , Processed in 0.243747 second(s), 77 queries .

© 2020-2025 乐筑天下

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