找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 819|回复: 1

[其他]:arx自学笔记

  [复制链接]
发表于 2002-11-11 23:06:20 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
写于两年前,刚学arx的朋友也许会有我学习过程中一样的疑惑,希望对他们有所帮助,少走点弯路。

现在看来,里面很多说(提)法明显有误,很多东西我也是逐渐明白的,后面的笔记里会自己驳倒自己。当然也欢迎朋友们即时批驳

希望有更多的朋友写写类似的文章,谈谈在学习过程中的体会。
[/COLOR]

第1章 概述

1.arx是DLL,不是COM,想来应该比较简单吧. Export就OK了。
2.使用MFC创建用户界面?!会累死人的。Autodesk的工程师们干嘛去了?
3.AcRx/AcEd/AcDb/AcGi/AcGe... 天书啊。一上来就唬人啊,看不下去了。谁写的,我可是什么都不懂啊
4.看不懂,pass,先安装吧。我的机器还可以。有个嵌入工具?不错,先看附录把它也装上


附录

1.ObjectArx AddIn, 看起来Autodesk的工程师还是干了点事,多少有点用处,先装上吧
2.看了半天,晕。Pass


第2章 AutoCAD数据库入门

1.数据库?  dwg = 数据库?
2.块表/层表/符号表/实体/词典/对象,实体在块表纪录里,实体有各种属性,某些属性在符号表里给出定义。表是不是对象?实体是不是对象?
3.句柄/对象ID/AcDbObject? AcDbObject要打开/关闭。
4.看得还算明白,dwg就是一棵树,树上有各种类型的节点。对dwg操作就是管理这棵树上的节点而已。
  数据库? 笑话,充其量一棵树而已,Autodesk真是大言不惭。
5.TNND, 这本书是随机Help的翻译,上当!到处都有Step by Step, 为什么ObjectArx就没有?

----------------------------------------------
不能跟贴,只能编辑,
:)


第3章 ObjectARX应用程序基础

1.Arx并没有Export一大堆函数,只有一个入口acrxEntryPoint。
2.在acrxEntryPoint中进行消息处理,高!高!
3.动手做例子,成了,总算有点成就感,ObjectArx Wizard 不错,挺方便。
4.acedDefun()注册的函数在kInvkSubrMsg中处理,自己添加( acedRegCmds->addCommand() )的命令函

数在那里处理/调用?
5.ARX的错误处理是不是太繁琐了?


批注:

1. 察看ObjectArx Wizard生成的Project中的def文件,

  1. LIBRARY      "LXDSample"

  2. EXPORTS
  3.         acrxEntryPoint                PRIVATE
  4.         acrxGetApiVersion        PRIVATE
复制代码

arx只引出了两个函数acrxEntryPoint/acrxGetApiVersion, acrxEntryPoint是arx的入口;
找了半天,也没找到acrxGetApiVersion在哪里,想来是在哪个lib里面吧(迄今也不知道)。

前几天有人问两个arx的通讯问题,就可以通过在def里引出需被调用的函数,让另外的arx/dll直接调用
,(关于这个,我没试验过,请时间充裕的朋友去试试,成功了请回个信儿)

2. acrxEntryPoint实在是高,比起PhotoShop等大张旗鼓宣扬的Plugin, arx(ACAD的插件机制/技术)要

高明得多。

3. ObjectArx Wizard 是个好工具。

4. acedRegCmds->addCommand()添加的命令不在acrxEntryPoint中处理,实际上已被ACAD视作内部命令,

在ACAD内部调用,arx已与ACAD融为一体。

5. ARX里有些东西是比较繁琐,Adesk::kFalse/Adesk::kTrue是不是画蛇添足?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
 楼主| 发表于 2002-11-20 23:42:49 | 显示全部楼层
第4章 数据库操作

1.长事务?用不着吧, pass
2.索引和筛选器, 怎不举两个例子?
  事务/索引/筛选器, 标准的数据库术语啊, dwg还像模像样的真成了数据库?


批注:

说来惭愧, 到现在我也不懂 长事务/索引/筛选器, 没去学习和研究. 请能者赐教

由于当时知道的ACAD的命令还不到10个, 这一章比较简单,但连带学习ACAD, 本人花的时间相当长.




第5章 数据库对象
1. AcDbHandle/AcDbObjectID/AcDbObject/ads_name之间的转换
   AcDbDatabase::getAcDbObjectId()  // AcDbHandle   => AcDbObjectID
   acdbOpenAcDbObject()             // AcDbObjectId => AcDbObject
   AcDbObject::objectId()           // AcDbObject   => AcDbObjectId
   AcDbObject::getAcDbHandle()      // AcDbObject   => AcDbHandle
   acdbGetObjectId()                // ads_name     => AcDbObjectId
   acdbGetAdsName()                 // AcDbObjectId => ads_name

2. new 的 AcDbObject 一旦加入Database 就不能 delete, 已经交由Acad管理,可由AcDbObject::erase();

3. 可以在xData里存放自己的数据, 好.

4. xRecord? 有了xData 足够了吧? pass



批注:
1. AcDbHandle/AcDbObjectID/AcDbObject/ads_name之间的关系及其互相转换很简单, 也很重要.
书上说, 指向AcDbObject的指针在其关闭对象之前一直有效, 可我在实际开发中发现: 其实在关闭之后也还能得到其objectId, 呵呵.

  1.     //...
  2.     pBtlRcd-> appendAcDbEntity(pObj);
  3.     pObj-> close();
  4.     //...
  5.     objId=pObj-> objectId();
  6.     //...
复制代码

2. 自己 new 的对象却不去 delete 让我很别扭, 过了好久我才习惯.
3. xData/xRecord都是好东西, 各有其适用场所. 但我当时的确是没去学习xRecord, 后来才补课的. :)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-15 15:03 , Processed in 0.155744 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表