ObjectAr中,所属关系在deepclone和wblock的作用_第1页
ObjectAr中,所属关系在deepclone和wblock的作用_第2页
ObjectAr中,所属关系在deepclone和wblock的作用_第3页
ObjectAr中,所属关系在deepclone和wblock的作用_第4页
ObjectAr中,所属关系在deepclone和wblock的作用_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

ObjectArx中,所属关系在deepclone和wblock的作用(一)引用关系的介绍:引用关系包括两种:所有关系和指针关系,它们分别叙述如下:1.所有关系(owerrefrence):针对所有者与被所有者来叙述,它们具有双向关系硬所有(hardower):所有者的存在依赖于被所有者,并且被所有者的存在也依赖于所有者,它们之间相互依赖。一旦一个对象被其他对象硬所有了,它就不能被直接删除,除非这种硬所有关系解除。比如:|实体对其扩展字典是硬所有关系,实体中的数据保存在它的扩展字典中,如果这些数据不存在的话,实体本身就会出错。另外,扩展字典它也不能离开实体而独立存在,所以说它们是相互依赖的。软所有(softower):所有者的存在并不依赖于被所有者,但是被所有的存在依赖于所有者。它与硬所有的区别就是,一个对象被另外一个对象软所有之后,这个对象还可以被直接删除。比如:扩展字典对其字典里的条目是软所有关系,扩展字典本身的存在不依赖于其条目的存在,但是条目不能离开字典而独立存在。条目不被保护,它们可以被直接删除。一个对象只能有一个所有者;被另外一个对象所有的对象只能直接派生于AcDbObject而不能派生于AcDbEntity,因为直接派生于AcDbObject的对象可以直接加入至U数据库中,而派生于AcDbEntity的对象需要加入到块表中。2.指针关系(pointrefrence):针对指向与被指向来叙述硬指针(hardpoint):实体的存在依赖于被指向的实体,它保护被指向的实体不能被直接删除。另外,被指向的实体可以不依赖别的任何实体而独立存在。比如:|文字实体与其字体样式是硬指针关系,文字不能离开字体样式的存在而独立存在,一个字体样式如果被一个文字实体硬指向了的话,就不能被直接删除。而文字样式可以独立于具体的文字对象而存在。软指针(softpoint):实体的存在不依赖于被指向的实体,它们都可以被自由删除。它们的存在彼此间相互独立。由于这种关系的实质就是在实体中保存一个指向另外一个实体的软所有Id,其它的任何操作都由使用者自己明确制定,在此就不做例子了。注意:如果两个实体都派生于AcDbEntity,而想实现它们之间具有一定的关系,则必须是指针关系而不能是所有关系,原因在所有关系中已经叙述。ObjectArx中,所属关系在deepclone和wblock的作用(二)Deepclone操作中需要使用的引用关系:Deepclone操作默认使用所有关系,包括硬所有和软所有。一旦执行了Deepclone后,它自动将其所有关系拷贝一份至目标中。Deepclone不自动处理任何指针关系,如果需要处理时,我们必须重载此函数,然后明确的写出具体的操作。Wblock操作中需要使用的引用关系:Wblock操作默认使用硬引用关系,分别是硬所有和硬指针。一旦执行了Wblock后,它将自动将这两个种关系拷贝一份之目标中。Wblock不自动处理软引用关系,如果需要处理时,我们必须重载此函数,然后指定具体操作。注意:软指针关系没有一个操作默认使用,其使用方式需要使用者自己定义。在Deepclone中,如果想要操作指针关系,该怎么办:需要重载Deepclone函数,函数体中需要明确知道指针所指向的实体是派生于AcDbObject还是AcDbEntity,这样才能将正确的所有者传入给指针对象。如:指针对象派生于AcDbObject,则只需要将实体本身当作所有者传入即可;而如果指针对象派生于AcDbEntity,则需要将本对象的所有者当作指针对象的所有者传入在Wblock中,如果想要操作软引用关系,该怎么办:在Wblock实现函数中,需要区分软所有和软指针所引用的对象派生于哪个实体,分别作出处理。如果派生于AcDbObject,则将实体本身作为参数当作被引用对象的所有者传入;如果派生于AcDbEntity,则要区分实体本身是派生于AcDbObject还是派生于AcDbEntity;如果自己派生于AcDbObject,则需要得到块表记录,将块表记录作为被引用的所有者传入,而如果自己派生于AcDbEntity,贝懦要将自己的所有者作为被引用的所有者传入。ObjectArx中,所属关系在deepclone和wblock的作用(三)Deepclone中,为什么只默认使用所有关系:这是由所有关系的性质决定的,一般来说所有关系是建立在两个实体之间密切关系,一个实体如果拥有别的对象的话,要么是绝对依赖于它、要么就是它的容器,这样当复制实体本身时,就必须要将于它密切联系的实体拷贝一份。还要明确一点的就是Deepclone执行的时机,它在以下命令时被执行:Copy2)Array3)Mirror:(如果原对象不被删除时)4)Block5)Insert6)Wblock:(在执行对所有关系时)7)Explode:(分解一个块引用时)说明:Ctrl+C调用的是Wblock而非Deepclone;CAD的Copy命令,调用Deepcloneo如:实体对它的扩展字典而言,实体是扩展字典的硬所有者,扩展字典保存着这个实体存在所必需的数据,当这个实体被复制一份后,它的数据一定要一同被复制。层表也是这个道理,层表是它的层记录软所有者,当我们复制层表时,一定要将它所包含的层记录一同复制过去。如果在Deepclone中,默认使用了指针关系的话,就会导致出错,比如:文字实体硬指向字体样式表的字体样式,如果我们在拷贝文字实体时,将字体样式也拷贝了一份,这样字体样式表中就会出现两个相同的字体样式记录,这样就导致了错误。Wblock中,为什么只默认使用硬引用关系:这也是由硬引用关系性质及Wblock调用的时机决定的,硬引用时说明实体的存在绝对地依赖于被它引用的实体存在,如果实体被写出去了,它所依赖的实体一定要被写出去否则将会导致错误发生。Wblock被执行的时机是:WblockXrefBindXbind这些命令都是起将当前数据库中的实体写出去的作用。这就需要自动在目标数据库中建立没有的实体。女如:一个实体在数据库A中,它所在的图层是“1”,当将此实体Ctrl+C拷贝到数据库B中,而B中没有图层/r

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论