meracl 发表于 2022-7-6 07:00:26

保存属性列表

我有一个简单的块(只是一个点)和一个attibute(一个no)。
是否可以使用lisp保存图形中使用的所有数字?
如果是,有什么方法可以做到?
因此,当我再次插入该块时,我可以检索使用的no,并且没有任何重复。
如果添加/删除no,则应修改no列表。
有什么想法吗?

Tharwat 发表于 2022-7-6 07:12:10

保存所有数字是什么意思?

meracl 发表于 2022-7-6 07:18:18

我会尽量解释得更好。
我将该块插入到图形中,属性是一个数字,第一个块是1,然后是2、3、4、5、6,依此类推。
我省略了一些,然后从101、102、103开始,以此类推
像地图一样思考。。。我们有一个有84个点的边界,所以我使用从1到84的数字,然后下一个边界从101开始,比如说156。
现在,如果我想在第一个边界上添加一个点,我必须检查图纸,找出使用的最后一个数字,并使用下一个可用的85作为第一个边界。。。。第二个是157。
现在想象一下,我的画上已经有350多个点(使用的数字)从1到600,这只是开始。
我曾想过将它们保存到一个外部txt文件中并检索该列表,但我不确定这是否可行。。。。
我在这个论坛上读过关于使用“字典”的文章,但我从来没有用过它。。。知道这是否是我需要的。
我甚至不知道将它们保存为列表是否可以容纳这么多值/项。
我希望你能更清楚地了解这一点。
谢谢你抽出时间

meracl 发表于 2022-7-6 07:21:08

顺便说一句,我已经看到李Mac的程序称为自动标签属性和它的伟大(感谢李与我们分享所有的代码),但不适合在我的情况下,因为我省略了数字,不希望他们重新编号。

Lee Mac 发表于 2022-7-6 07:32:04

如果包含数字集的块位于每个边界的单独层上,则可以轻松创建一个程序,在插入块以使用新数字之前,收集与给定边界相关的所有数字的选择集,以确定最高或下一个可用数字。
 
我个人认为没有必要将数字列表存储在图形文件的其他位置或外部文件中,因为通过访问相关的属性值集,数据已经存储并在图形中可用。
 
如果要将数据存储两次,那么如果用户修改属性值、删除块、撤消块删除、复制、镜像、阵列块,您将很头痛,要确保重复数据是最新的和准确的。。。。我看到这涉及到反应堆,它有许多复杂的回调函数来解释每一种可能的情况——所有这些都只是为了更新已经可用且相对容易访问的数据。
 
我希望这能帮助你朝着正确的方向前进!

BIGAL 发表于 2022-7-6 07:36:23

一个简单的方法是只读取一个点块,然后以最大的数字结束,然后下一个插入值就是+1,类似这样
 
(setq tag1 "SETOUT_POINT_NUMBER") ; change to your tag name
(setq ptno 0)
(setq ss1 (ssget "x"'((0 . "INSERT") (2 . "SETOUT_POINT_NO"))))   ; change to your block name
(setq x (sslength ss1))
(repeat x      
(foreach att (vlax-invoke (vlax-ename->vla-object (ssname SS1 (setq x (1- x)) )) 'getattributes)
   (if (= tag1 (strcase (vla-get-tagstring att)))
   (PROGN
   (setq highnum (atoi (vla-get-textstring att)))
   (if (> highnum ptno)
   (setq ptno highnum)
   ) ; IF
   ) ; PROGN
   ) ; IF
) ; FOREACH
) ; REPEAT
(setq ss1 nil)
(princ (strcat "\nHighest ptno is " (rtos ptno)))

meracl 发表于 2022-7-6 07:44:06

是的,已经有不同的层了!我只是想用艰难的方式去做!!!我真傻!
谢谢李为我们指出了最简单的方法!
感谢Bigal提供的代码。
谢谢大家。祝你周五或周五晚上愉快!

BIGAL 发表于 2022-7-6 07:50:34

不用担心周五下午5点

Lee Mac 发表于 2022-7-6 07:58:38

不客气meracl周末愉快

meracl 发表于 2022-7-6 08:04:20

谢谢你,李
该死,我想喝啤酒已经太晚了!
页: [1]
查看完整版本: 保存属性列表