天气与日历 切换到窄版

 找回密码
 立即注册
中国膜结构网
十大进口膜材评选 十大国产膜材评选 十大膜结构设计评选 十大膜结构公司评选
查看: 13|回复: 0

【原创】AcDbObjectId、AcDbHandle与AcDbStub之间的关系

[复制链接]

该用户从未签到

主题

0

回帖

2912

积分

管理员

积分
2912
发表于 2024-6-22 09:46:18 | 显示全部楼层 |阅读模式
近期,由于项目的需要做一套撤销恢复机制,特地研究了一下AutoCAD(下文称为ACAD)的撤销恢复机制,ACAD的撤销和恢复是无限次的,也是就说,只要是同在一个会话(打开到关闭的一个过程)中的操作你都可以撤销到原来的状态或者是重做刚才被撤销的状态。而要实现整个一套机制的基础就包涵了所要说的三个主人公了。这篇文件就用来说明这三者之间的关系。

从ACAD R13 Release版本起,为了处理数据库对象在内存生存周期而设计了一套方案。这个方案为每一个对象都引用了两个部分的内容。第一部分,就是数据库对象本身,它是能够常驻内存并且,如果内存需要释放的话它也能被换页到磁盘上,第二部分是一个叫做桩(stub)的对象(AcDbStub类),这个对象是常驻内存的,并且担当着数据库对象入口的职责,当然,AcDbStub只是一个很小的对象。这么一来,也就是说,如果ACAD系统需要回收内存,第一部分是可以被回收的,但第二部分是不允许回收的(当前系统动态数据中与原数据库对象的唯一协议),这个可以理解成一种代理节点的机制。

当一个对象或者是实体加入数据库时,系统将自动为其建立一个AcDbStub对象,并将其指向到这个节点,然后再加入AcDbStub和被加入的对象或实体到数据库。而这个AcDbStub对象的内存地址就被当作是这个对象或实体的ads_name和AcDbObjectId了。同样的机制也应用在数据库从磁盘读入内存的时候。所以这也就是为什么ads_name与AcDbObjectId的能够提供转换接口的原因了,因为它们本来就是一种东东。我们还可以看到更深一点,就是当一个节点从数据库加载到内存时,它所对应的AcDbStub对象肯定是先于它本身来加载的。这样才能使这一套机制正确的执行下去。(AcDbStub对象也是需要编档的哦,当然这一部分工作是系统本身来做)。

         当一个数据库对象被打开时,ObjectARX应用程序使用数据库对象的objectId传入open接口,然后返回真正的数据库对象的指针。事实是怎么进行的呢?那就是这个objectId就是这个数据库对象所对应的AcDbStub对象在内存中的地址(这个可以证明,这个调用开始前,这个AcDbStub对象肯定已经被加载到内存),然后通过这个桩就可以得到真正需要得到的数据库对象的指针。如果此时这个数据库对象已经被卸载掉(从内存中移除),系统机制会把这个对象重新加载然后AcDbStub指向这个对象的新地址。

         因此,一个AcDbObjectId对象是一个包括着真正数据库对象所对应的桩的地址的容器。并且,它是一个非常重要的对象,因为它是一个会话过程中数据库节点的分配唯一的标识的机制(这样处理确保其在一个会话过程中不会重复,你有没有见过,同一个内存地址包括两个对象啊?)。

         很多情况下,有可能用户定义了一些自定义对象或者是自定义实体,并且在其中需要编档一些其它节点的objectId,这是允许的(如果你写过自定义对象和自定义实体,你就知道用得很广泛),因为,在编档的时候,这套机制会自动把objectId转换成对应数据库对象的句柄(AcDbHandle),所以,它们通常能够在不同地会话过程中识别为同一个对象或实体,因为objectId是会话时期唯一的(内存地址嘛),而句柄是数据库唯一的,所以,只要确实转换正确,就能够跨会话来标识为同一个数据库对象,这样,下一个会话再使用的时候,节点之间的关系是正确保存了也能够正确给读进来的。当编档对象的objectId的时候,要明确的编档成为正确的关系类型(AcDbHardPointerId, AcDbSoftOwnershipId等等),相信写过自定义实体的人都编过,呵呵,只有这个ObjectARX内部机制才能正确的将它们之前的关系正确的转向成句柄,并编档好。

         如果你需要把一个对象正确的保存到一个扩展文件中(非dwg或dxf文件),这时你就不能使用objectId了(原因很简单,不能转换了啊,对象只有dwg和dxf的编档接口(可以看看AcDbObject类的接口)),因为,objectId的值在不同的会话中是不同的。可以使用的替代方案是,你必须保存这个数据库对象对应的句柄,跨会话就只能用数据库唯一的标识——句柄。如果你当前工作环境下有多个数据库文件(dwg文件),那么为了达到唯一标识一个对象的话,你必须保存好dwg文件名和对象对应的句柄了,因为,句柄只是在一个数据库中唯一,不同的数据库中,句柄是会重复的。

         如果你知道一个句柄,那么你可以通过来得到对应对句的objectId。为什么接口在AcDbDatabase上,这个很好理解吧,因为句柄才是数据库唯一的啊。

         如果你知道对象的objectId想得到对象对应的句柄,你可以打开这个对象并且使用接口来获取,因为,objectId保存的内存地址对应的AcDbStub对象保存着对应的数据库对象的指针,而句柄是这个数据库对象上一个属性而已,所以 很容易就得到了。



         由上面这些内容,可以想像得到,为数据库对象分配ID的机制就是使用了在同一会话中,不同节点加载的内存地址肯定是不同的这一原理和小技巧来实现的,而为数据库对象分配句柄的则是DWG数据库中实现的一套机制,很容易,句柄不就是一个64位值嘛,加一个节点累加一次就是了。 为了要灵活的管理内存,而使用了代理对象的这一个方案(AcDbStub对象)。

 

 

 

 

【原创】AcDbObjectId、AcDbHandle与AcDbStub之间的关系

该用户从未签到

主题

0

回帖

0

积分

管理员

积分
0
发表于 2024-7-28 09:28:43 | 显示全部楼层
  法拉利膜材作为一种高性能的建筑材料,在建筑、汽车及广告等多个领域有着广泛的应用。以下是对法拉利膜材型号、特点及优点的详细分析:
[img]http://www.mjgou.com/data/attachment/forum/202403/13/223041uiqmeujen4jjj6zv.jpg[/img]
[b]一、法拉利膜材型号[/b]
法拉利膜材有多种型号,包括但不限于以下几种:1302 S2 Flexlight Advanced:这是一种高性能IV型柔性复合膜材,以其卓越的透光性、耐久性和易维护性而受到青睐。942、1202 S2、1002 S2、902 S2、1212 S2、912 S2:这些型号同样属于法拉利膜材系列,各自具有不同的特性和适用范围,但具体特点需根据具体型号进一步分析。需要注意的是,法拉利膜材的型号可能随着产品更新换代而有所变化,具体型号及其特性请参考最新产品资料。
[img=860,1255]http://www.mjgou.com/data/attachment/forum/202403/13/223254bbblwlbvbvsbwlsl.jpg[/img]
[b]二、法拉利膜材特点[/b]
法拉利膜材的特点主要体现在以下几个方面:
1、高强度与耐用性:法拉利膜材采用高强度材料制成,具有良好的抗拉强度和撕裂强度,能够承受较大的外力作用而不易破损。耐用性强,能够在恶劣气候条件下保持稳定的性能,延长使用寿命。
2、透光性与美观性:部分型号如1302 S2 Flexlight Advanced具有高透光性,能够在保持室内光线充足的同时,提供清晰的视野。膜材表面平整光滑,色彩丰富多样,能够满足不同建筑和装饰需求,提升整体美观性。
3、轻质与灵活性:法拉利膜材重量较轻,便于运输和安装,能够降低施工成本和时间。膜材具有一定的柔韧性,能够适应各种复杂形状和结构的设计要求。
4、环保与可回收性:法拉利膜材符合环保要求,部分材料可回收利用,减少了对环境的影响。
[img]http://www.mjgou.com/data/attachment/forum/202403/13/223128owhn0099rrds5h5y.jpg[/img]
[b]三、法拉利膜材优点[/b]
法拉利膜材的优点主要体现在以下几个方面:
1、提升建筑性能:高强度与耐用性使得法拉利膜材能够提升建筑的稳定性和安全性,延长使用寿命。透光性与美观性使得建筑内部光线充足、视野开阔,同时提升整体美观度。
2、降低施工成本:轻质特性使得运输和安装成本降低,施工效率提高。膜材的柔韧性使得施工更加灵活多变,能够适应各种复杂地形和结构要求。
3、节能环保:部分材料可回收利用,符合环保要求,减少了对环境的影响。良好的透光性能够减少室内照明需求,降低能耗。
4、广泛应用领域:
法拉利膜材不仅适用于建筑领域(如体育设施、商业设施、文化设施、交通设施等),还广泛应用于汽车及广告领域(如高档车辆贴膜保护和装饰、广告招贴等),展现出其多功能的特性。

综上所述,法拉利膜材以其高强度、耐用性、透光性、美观性、轻质灵活性以及环保可回收性等优点,在建筑、汽车及广告等多个领域发挥着重要作用。具体型号的选择应根据实际需求和应用场景进行综合考虑。
[url=http://www.mjgou.com/forum-17-1.html][size=92443][color=Red]法拉利膜材中国代理商 - 膜结构网[/color][/size][/url]
【原创】AcDbObjectId、AcDbHandle与AcDbStub之间的关系

该用户从未签到

主题

0

回帖

2

积分

新手上路

积分
2
发表于 2024-8-6 10:42:43 | 显示全部楼层
旭硝子ETFE膜材是一种高性能的建筑材料,由日本旭硝子公司生产。以下是对旭硝子ETFE膜材的详细分析:
[b]一、公司背景与实力[/b]
公司概况:旭硝子株式会社(AGC)是全球知名的材料制造商,成立于1907年,拥有超过百年的历史。作为全球第二大玻璃制品公司,旭硝子的产品不仅限于玻璃制品,还涵盖了ETFE膜材等多种高性能材料。
技术实力:旭硝子在材料科学领域具有深厚的技术积累,其ETFE膜材以其优异的性能和广泛的应用领域在市场上享有很高的声誉。
[b]二、产品特点[/b]
1、高性能:
耐候性:ETFE膜材具有极佳的耐候性,能够抵抗紫外线、高温、低温等极端天气条件的侵蚀,确保长期使用的稳定性。
透光性:ETFE膜材的透光率极高,可高达95%,能够最大限度地引入自然光,减少照明能耗。
自洁性:膜材表面具有自洁功能,雨水冲刷即可保持清洁,减少维护成本。
机械强度:ETFE膜材具有较高的抗拉强度和撕裂强度,能够承受较大的外力作用。
2、多功能性:
耐化学腐蚀:ETFE膜材具有良好的耐化学腐蚀性能,能够在多种化学环境中保持稳定。
防火性:部分ETFE膜材产品达到B1级防火标准,提高了建筑的安全性。
隔音与保温:通过合理的结构设计,ETFE膜材还能提供良好的隔音和保温效果。
3、环保性:
ETFE膜材可回收利用,符合绿色建筑和可持续发展的理念。
[b]三、应用领域[/b]
旭硝子ETFE膜材广泛应用于多个领域,包括但不限于:
建筑领域:作为体育场馆、展览馆、机场航站楼等大型公共建筑的屋顶和墙面覆盖材料,提供美观且耐用的解决方案。
工业领域:在污水处理、空气净化等环保设施中作为覆盖材料使用。
农业领域:用于温室覆盖材料,提高温室的保温性能和透光性。
[b]四、技术创新与发展[/b]
旭硝子不断投入研发资源,致力于ETFE膜材的技术创新和产品升级。通过引进先进的生产设备和工艺技术,不断提升产品的性能和品质。同时,旭硝子还积极与国内外知名科研机构和建筑设计师合作,共同推动ETFE膜材在各个领域的应用和发展。
[b]五、市场认可度与前景[/b]
旭硝子ETFE膜材凭借其优异的性能和广泛的应用领域在市场上赢得了广泛的认可。随着全球对绿色建筑和可持续发展的重视不断加深,旭硝子ETFE膜材的市场前景将更加广阔。未来,旭硝子将继续加大在技术创新和产品研发上的投入力度,为客户提供更加优质、高效、环保的建筑材料解决方案。
综上所述,旭硝子ETFE膜材是一种高性能、多功能的建筑材料,在建筑、工业、农业等多个领域具有广泛的应用前景。

 

 

 

 

【原创】AcDbObjectId、AcDbHandle与AcDbStub之间的关系
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|中国膜结构网|中国膜结构协会|进口膜材|国产膜材|ETFE|PVDF|PTFE|设计|施工|安装|车棚|看台|污水池|中国膜结构网_中国空间膜结构协会

GMT+8, 2024-11-1 11:42 , Processed in 0.132260 second(s), 27 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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