乐筑天下

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

AcDbGripData::setAppData(void * appData)

[复制链接]
933

1

主题

1

帖子

1

银币

初来乍到

Rank: 1

铜币
5
发表于 2010-6-3 03:29:26 | 显示全部楼层 |阅读模式
AcDbGripData::set appData(void * appData)
appData可以是什么类型?可以是类/结构吗?谁负责释放内存?谢谢

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

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

使用道具 举报

0

主题

14

帖子

7

银币

初来乍到

Rank: 1

铜币
15
发表于 2010-6-3 05:35:56 | 显示全部楼层
不Acad不会删除appdata指针
它可以是您想要的任何东西,只要它不为空
Acad不会释放资源,但您可以释放项目...如果需要...在您的自定义对象的析构函数
回复

使用道具 举报

0

主题

10

帖子

5

银币

初来乍到

Rank: 1

铜币
14
发表于 2010-6-3 05:57:15 | 显示全部楼层
所以这很酷。这有点像在抓地力中存储自己的自定义类。

这样简单的东西
  1. //
  2. class MyAppData
  3. {
  4. private:
  5.   int m_val;
  6. public:
  7.   MyAppData (int val): m_val(val){}
  8.   virtual ~MyAppData(){ }
  9.   void printval(void){acutPrintf(_T("\nGrip# %ld"),m_val);}
  10.   int Val() const { return m_val; }
  11. };

然后
  1. Acad::ErrorStatus ExtCircle::getGripPoints (
  2.         AcDbGripDataPtrArray &grips, const double curViewUnitSize, const int gripSize,
  3.         const AcGeVector3d &curViewDir, const int bitflags) const
  4. {
  5.         assertReadEnabled () ;
  6.   AcDbGripData *pGrpCenter = new AcDbGripData();
  7.   pGrpCenter->setGripPoint(this->center());
  8.   pGrpCenter->setAppData((void*)new MyAppData(100));
  9.   grips.append(pGrpCenter);
  10.   double ang = 0.0;
  11.   for(int idx = 1 ; idx center();
  12.     p.x += this->radius() *cos(ang);
  13.     p.y += this->radius() *sin(ang);
  14.     ang += 6.28318531 / 32;
  15.     pGrp->setGripPoint(p);
  16.     // give the AcDbGripData a ptr
  17.     pGrp->setAppData((void*)_data);
  18.     pGrp->setAlternateBasePoint(new  AcGePoint3d(this->center()));
  19.     grips.append(pGrp);
  20.     // keep a copy of ptr to free later
  21.     ptrs->push_back(_data);
  22.   }
  23.   return Acad::eOk;
  24. }

然后
  1. Acad::ErrorStatus ExtCircle::moveGripPointsAt (
  2.         const AcDbVoidPtrArray &gripAppData, const AcGeVector3d &offset,
  3.         const int bitflags) {
  4.     assertWriteEnabled();
  5.     for(int i = 0; i Val())
  6.       {
  7.       case 100:
  8.           transformBy(AcGeMatrix3d::translation(offset));
  9.         break;
  10.       default:
  11.         this->setRadius(offset.length());
  12.       }
  13.       // run a method from the class
  14.       p->printval();
  15.     }
  16.     return Acad::eOk;
  17. }
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-2-5 20:59 , Processed in 0.249431 second(s), 58 queries .

© 2020-2025 乐筑天下

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