Arx面试题

1.描述一下 AcDbDatabase 中的方法 deepCloneObjects() 和 wblock() 区别以及和 AcDbObject 方法 clone() 和 deepClone() 的关系。

2.描述一下事务的嵌套、取消机制( abortTransaction() )、事务和打开关闭机制混合使用中 AcTransaction.getObject() 和 AcDbObject.close() 的关系以及事务(AcTransaction)中图形生成方法 queueForGraphicsFlush()、flushGraphics()、enableGraphicsFlush() 之间的关系。

3.描述紧密关联所有者和松散关联所有者的区别和实现方法。

4.描述紧密关联指针和松散关联指针的区别和实现方法。

5.描述一下从AcDbEntity继承的自定义实体必须重载的方法 worldDraw、getGeomExtents 、transformBy、getTransformedCopy、getGripPoints、 moveGripPointsAt 和经常需要重载的方法viewportDraw、intersectWith、getOsnapPoints、getStretchPoints、moveStretchPointsAt、explode、getSubentPathsAtGsMarker、applyPartialUndo,这些方法的用途。

6.描述一下自动撤销操作机制和部分撤销机制,并说明实现方法。

7.描述使用AcEdJig的一般步骤,drag()、sampler()、update() 之间的关系及各自的作用。

8.描述瞬时反应器 AcApDocManagerReactor、AcDbDataBaseReactor 的用处,详细描述一下持久反应器的作用和实现方法以及几个常用的方法 openedForModify、cancelled、objectClosed、goodbye、copied、erased、modified、modifiedGraphics、modifiedXData、subObjModified、modifyUndone、reappended、unappended在什么情况下触发。

9.描述一下3D实体的实现的常用的几种方法。

附加题:简单的描述一下C++的原生代码如何进行.NET封装。

 

 

 

 

 

 

 

先回答第7题:
一般的JIG步骤是 入口->drag->sampler->update->append
drag接口是告诉JIG类在CAD图形空间中动态拖态效果,sampler接口是在拖动过程中不断的调用的,是了一取样的接口(也就是采集数据),然后,根据采样接口中的返回值,由系统决定是不是调用update接口来更新图形和数据,等待JIG过程中的数据采样全都完成后,就可以调用append接口,将实体添加到图形空间数据库。

不知道这样写对不对,呵呵,欢迎指点。
 

2   2009年10月28日 星期三 上午 10:27 | 回复 第1题:
AcDbDataBase的deepCloneOjbects接口的功能
Acad::ErrorStatus
deepCloneObjects(AcDbObjectIdArray& objectIds,AcDbObjectId& owner,AcDbIdMapping& idMap,bool deferXlation = false);
objectIds
输入要深度克隆的对象的数组
owner
输入要作为克隆的拥有者的对象的对象ID
idMap
返回用于转化对象ID关系的AcDbIdPair对象的数组
deferXlation
输入布尔值,表示是否要执行ID转化
克隆objectId数组中的所有对象并将它们增加至由owner指定的容器对象中。idMap储存AcDbIdPair对象,这个AcDbIdPair对象包含原始的和克隆的对象对的objectId实体。这个数组可用于包含在深度克隆操作中的对象的前处理。
当所有要被克隆的对象没有相同的宿主,则必须建立独立的AcDbObjectIdArray实体,每一个AcDbObjectIdArray实体包含具有所有相同的宿主的对象。再将deferXlation设置为Adesk::kTrue,对每一个数组调用deepCloneObject方法,除了最后一个调用。

 

 

3   2009年10月28日 星期三 上午 10:29 | 回复
第一题:
AcDbObject的deepClone接口
AcDbIdMapping IdMap;
Acad::ErrorStatus es = spEntity->deepClone(spBlkTblRcd, pClonedObject, IdMap);
spEntity:被复制对象。
spBlkTblRcd: 新创建对象的Owner,如能要放到图里,通常就是当前的Model Space指针。
pClonedObject:新创建的对象。
IdMap:可以用来创建一个对应关系,原对象的ID和新对象的ID的对应关系。

 

 

4   2009年10月28日 星期三 上午 10:34 | 回复
第一题:
AcDbDatabase::wblock 函数
Acad::ErrorStatus wblock(AcDbDatabase*& pOutputDb,const AcDbObjectIdArray& outObjIds,const AcGePoint3d& basePoint);
pOutputDb
返回用于写出的数据库的指针
outObjIds
输入被写块的所有对象的对象ID实体的数组
basePoint
输入pOutputDb中使用的基点(在pOutputDb的WCS坐标中)
创建一个新的AcDbDatabase对象,设置pOutputDb指向它,再使用wblockClone机制将outObjId实体指定的对象的数组写出至pOutputDb指定的数据库的模型空间块表记录中,其中使用basePoint作为pOutputDb的基点值。
就是把指定的一些实体,拷贝指定数据库是的新建块中。

 

 

5   2009年10月28日 星期三 上午 10:40 | 回复
第一题:
AcDbObject中的clone就是所谓的浅克隆,并不会将实体与其它实体的关系等相关信息clone进去。

 

0

0

 
 
posted @   unicornsir  阅读(561)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示