zcsoft 发表于 2024-10-28 18:40:14

ObjectID

在Vlisp中,用vla-get-pr…可以提取某VLA对像的ObjectID,那么请问大佬:这个ObjectID有何用途,怎么使用。

kozmosovia 发表于 2024-10-28 20:17:09

ObjectID应该是图元在内存的软指针,可以通过它在内存中检索或者存取图元。lisp编程不操作内存,基本上不需要通过这个指针来存取图元,有更多其他简单的方式获取。

你有种再说一遍 发表于 2024-10-28 22:39:53

本帖最后由 你有种再说一遍 于 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作为基础的搭建的.


Gu_xl 发表于 2024-10-29 08:50:32

(vla-ObjectIDToObject (vla-get-activedocument (vlax-get-acad-object)) ObjectID)
可以返回这个Vla对象

zcsoft 发表于 2024-10-29 09:30:55

Gu_xl 发表于 2024-10-29 08:50
可以返回这个Vla对象

发现后面这个参数ObjectID不能用纯数字代替,只能用变量。

Bao_lai 发表于 2024-10-29 15:20:29

zcsoft 发表于 2024-10-29 09:30
发现后面这个参数ObjectID不能用纯数字代替,只能用变量。

变量类型是objectid类,只是表现出来的是数字形式,而自己写的就是数字,并不是id类,所以不行。
页: [1]
查看完整版本: ObjectID