乐筑天下

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

创建自定义的实体类,急呀!!

[复制链接]

1

主题

1

帖子

1

银币

初来乍到

Rank: 1

铜币
5
发表于 2003-8-22 16:13:00 | 显示全部楼层 |阅读模式
我想自己定义一个实体类,这个类由多个圆和矩形构成的图形,他的可以被整体的拖动,
点击这个实体的任何一部分时,整个实体被选中。我能够察看到我选择的实体的类名。
回复

使用道具 举报

21

主题

166

帖子

7

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
250
发表于 2004-3-13 21:57:00 | 显示全部楼层
没有人知道吗?
回复

使用道具 举报

cag

87

主题

265

帖子

10

银币

中流砥柱

Rank: 25

铜币
613
发表于 2004-3-14 18:21:00 | 显示全部楼层
是啊,下面这个怎么做?
        
C:\Documents and Settings\cag\桌面\ccd.bmp
回复

使用道具 举报

14

主题

230

帖子

5

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
286
发表于 2004-3-15 11:21:00 | 显示全部楼层
楼主的问题似乎可以通过块或者组来解决。ARX可以实现自定义实体类,这也是许多ACAD开发者从其它语言转入ARX的原因之一。不过,我认为楼主还没有理解ARX自定义实体的基本原理。自定义实体并不是从AcDbEntity类派生一个实体类就完事了的。要在ACAD图形数据库中绘图,必须重载AcDbObject基类的worldDraw()函数,在重载函数中调用AcGi几何接口库实现ACAD绘图(注意:这与调用AcDb类库绘图有很大的区别)。以下结合代码例子做个初步讲解:(注:本文代码经过裁剪,不是完整代码,可能不能编译。)
  1. #include
  2. class CMyEnt:public AcDbEntity
  3. {
  4. public:
  5.   ACRX_DECLARE_MEMBERS(CMyEnt);
  6. private:
  7.   char *property;
  8. public:
  9.   CMyEnt();
  10.   ~CMyEnt();
  11.   Acad::ErrorStatus getProperty(char *property);
  12.   virtual Acad::ErrorStatus dwgInFields(AcDbDwgFiler*);
  13.   virtual Acad::ErrorStatus dwgOutFields(AcDbDwgFiler*) const;
  14.   virtual Acad::ErrorStatus dxfInFields(AcDbDxfFiler*);
  15.   virtual Acad::ErrorStatus dxfOutFields(AcDbDxfFiler*) const;
  16.   virtual Adesk::Boolean worldDraw(AcGiWorldDraw *pMode);
  17. };
  18. Acad::ErrorStatus CMyEnt::getProperty(char *property)
  19. {
  20.   assertReadEnabled();
  21.   strcpy(property,this->property);
  22.        return Acad::eOk ;
  23. }
  24. Adesk::Boolean CMyEnt::worldDraw(AcGiWorldDraw *pMode)
  25. {
  26.   AcGePoint3d point[4];
  27.   pMode->subEntityTraits().setColor(5);
  28.   point[0].set(10.0,10.0,0.0);
  29.   point[1].set(20.0,10.0,0.0);
  30.   point[2].set(20.0,30.0,0.0);
  31.   point[3].set(10.0,30.0,0.0);
  32.   pMode->geometry().polyline(4,point);
  33.        AcGeVector3d nor(1.0,1.0,0.0);
  34.   pMode->geometry().circle(point[0],10.0,nor);
  35.   return Acad::eOk;
  36. };
以上代码未给出dwgInFields(),dwgOutFields(),dxfInFields(),dxfOutFields()等函数的重载实现,在实际编程时必须考虑如何重载这四个函数,以保证正确读写包含自定义类实体的DWG或者DXF文件。自定义类实现的关键问题在于worldDraw()函数的重载实现。在类定义中首先声明ACRX类:复制代码在随后的私有(private)段中可以添加自定义类的特有属性。在worldDraw()函数的重载实现中,首先调用pMode->subEntityTraits().setColor(5);设置实体颜色,然后定义四个点,并调用AcGi类库的polyline模板绘制矩形,调用circle模板绘制圆。根据编程需要,还可以重载基类中的其它函数实现更复杂的功能。最后,将自定义实体添加到ACAD图形数据库可参考以下代码:复制代码
回复

使用道具 举报

4

主题

11

帖子

3

银币

初来乍到

Rank: 1

铜币
27
发表于 2004-3-16 21:27:00 | 显示全部楼层
除此之外,还要定义,Transformby,grippoint,snappoint,explode,deepclone等等一些函数,ARX自带一些例子,你可以先读一下那些例子,对custom object有一些了解
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-2-4 18:00 , Processed in 0.166022 second(s), 62 queries .

© 2020-2025 乐筑天下

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