hvac_wh 发表于 2012-5-14 18:24:49

如何将实体名保存在文件中

我现在碰到一个问题,请高手指点。
我从图形数据库中,获得一个实体,如图块的文件名,(如<Entity name: 20a1858>),并且使用文件操作open prin1等命令(prin1 能将实体名原样输至文件),将图块的文件名原样写入文件中。请问在调用文件名时,利用命令(read-line f),取出来的是字符串(如"<Entity name: 20a1858>"),如何将这一字符串变成实体名?我使用read 函数,不能够得到实体,请指点。另外,处理码与实体名是唯一的吗?

牢固 发表于 2012-5-14 18:59:34

这样不行!图元名只能用Lisp函数读取和使用,不可以写成字符串,CAD将图元名显示为<Entity name: 20a1858>仅仅是给你看看而已!你何以使用句柄,句柄是唯一的,不随图形的打开和关闭而发生变化!

hvac_wh 发表于 2012-5-15 09:09:58

句柄也不是唯一的,在autolisp数据库中,如((-1 . <Entity name: 53f0df8>) (0 . "INSERT") (5 . "B9947") (100 .
"AcDbEntity") (67 . 0) (8 . "0") (100 . "AcDbBlockReference") (66 . 1) (2 .
"TYA1A") (10 593054.0 -563236.0 0.0) (41 . 100.0) (42 . 100.0) (43 . 100.0) (50
. 0.0) (70 . 0) (71 . 0) (44 . 0.0) (45 . 0.0) (210 0.0 0.0 1.0))

(5 . "B9947")对应的 B9947为句柄,但在不同的dwg文件里,有可能句柄相同。我编辑的数据可能涉及到不同的图形,可能造成句柄不是唯一的。对于CAD实体,实体名是唯一的,不管有多少dwg实体,哪怕不在同一个dwg文件中,每个实体均对应唯一的实体名。

xyh 发表于 2012-5-15 09:56:35

同一张图在不同的cad和机器打开,句柄是不变的,而实体名是变化的。

hvac_wh 发表于 2012-5-15 17:25:09

本帖最后由 hvac_wh 于 2012-5-15 17:27 编辑

xyh 发表于 2012-5-15 09:56 http://bbs.mjtd.com/static/image/common/back.gif
同一张图在不同的cad和机器打开,句柄是不变的,而实体名是变化的。

网友:曲解了我的意思。如打开两个相同模版的ACAD,开始在两个CAD界面,画同一条,起点、终点、标高,图层、颜色一样的直线。查得这两条直线的句柄是相同的,但是他们的实体名是不同的,如果将这两条直线以块的方式插入到对另外一张新图上,是可以合成的;但是如果将同一文件,分别改成不同的文件名,如b1.dwg、b2.dwg。以块的形式,将b1.dwg、 b2.dwg 插入到同一文件中,将会出错,因为他们实体名有重复。实体名不同,句柄一致,插入图形可以;但实体名相同,哪怕句柄不一致,插入图形将出错。由此看来,实体名是CAD绘图唯一的,句柄却不是唯一的。但对于同一张图而言,句柄与实体名是唯一对应的,可以利用handle 函数将句柄得出实体名。我估计,CAD实体名生成可能与时间有关系,不知道能否得到证实?

cabinsummer 发表于 2012-5-16 05:00:57

楼主应该反思自己的思路是否进入误区。同样的问题,没有人象你那样处理。好好研究下扩展数据

xyh 发表于 2012-5-16 09:23:06

hvac_wh 发表于 2012-5-15 17:25 static/image/common/back.gif
网友:曲解了我的意思。如打开两个相同模版的ACAD,开始在两个CAD界面,画同一条,起点、终点、标高,图 ...

块名同文件名,有个死循环,所以不能插入。
楼主最终想实现什么功能?是想保存些数据,在另外图中用?

国主 发表于 2023-4-18 17:17:38

你好请问那个批量加载手绘签名的lisp的插件能发我一个吗 最近项目中急需,图框太多 了谢谢   851059933@qq.com万分感谢
页: [1]
查看完整版本: 如何将实体名保存在文件中