明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 190|回复: 5

[提问] ObjectID

[复制链接]
发表于 前天 18:40 | 显示全部楼层 |阅读模式
在Vlisp中,用vla-get-pr…可以提取某VLA对像的ObjectID,那么请问大佬:这个ObjectID有何用途,怎么使用。
发表于 前天 20:17 | 显示全部楼层
ObjectID应该是图元在内存的软指针,可以通过它在内存中检索或者存取图元。lisp编程不操作内存,基本上不需要通过这个指针来存取图元,有更多其他简单的方式获取。
发表于 前天 22:39 | 显示全部楼层
本帖最后由 你有种再说一遍 于 2024-10-29 02:10 编辑

DWG就是一个数据库.
ObjectId就是数据库的行号,也就是自增主键.
句柄就是唯一键,它喜欢显示16进制,也可以显示为10进制.
Lisp图元名其实就是:本机某个前缀+句柄.

为什么需要id,因为id是不耦合的.
例如一个结构内,我引用你,你引用我,出现了菱形引用(循环引用),
然后序列化时候岂不是死循环了?
因此我们通过一个标识符进行区分,也就是id.
在CAD上面是通过id打开Entity,而Entity序列化遇到菱形引用就用id解耦.

我们可以通过循环:0~句柄长度,
数字转句柄,句柄转id,id转Entity,从而获取整个DWG内容.

这些东西学习C#或者ARX就会知道了.
在C#是没有图元名的,而是依照ObjectId作为基础的搭建的.


发表于 昨天 08:50 | 显示全部楼层
  1. (vla-ObjectIDToObject (vla-get-activedocument (vlax-get-acad-object)) ObjectID)

可以返回这个Vla对象
 楼主| 发表于 昨天 09:30 | 显示全部楼层
Gu_xl 发表于 2024-10-29 08:50
可以返回这个Vla对象

发现后面这个参数ObjectID不能用纯数字代替,只能用变量。
发表于 昨天 15:20 来自手机 | 显示全部楼层
zcsoft 发表于 2024-10-29 09:30
发现后面这个参数ObjectID不能用纯数字代替,只能用变量。

变量类型是objectid类,只是表现出来的是数字形式,而自己写的就是数字,并不是id类,所以不行。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-10-30 10:23 , Processed in 0.148157 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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