乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 12|回复: 9

[编程交流] 保存属性列表

[复制链接]

2

主题

20

帖子

18

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 07:00:26 | 显示全部楼层 |阅读模式
我有一个简单的块(只是一个点)和一个attibute(一个no)。
是否可以使用lisp保存图形中使用的所有数字?
如果是,有什么方法可以做到?
因此,当我再次插入该块时,我可以检索使用的no,并且没有任何重复。
如果添加/删除no,则应修改no列表。
有什么想法吗?
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-6 07:12:10 | 显示全部楼层
保存所有数字是什么意思?
回复

使用道具 举报

2

主题

20

帖子

18

银币

初来乍到

Rank: 1

铜币
10
发表于 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文件中并检索该列表,但我不确定这是否可行。。。。
我在这个论坛上读过关于使用“字典”的文章,但我从来没有用过它。。。知道这是否是我需要的。
我甚至不知道将它们保存为列表是否可以容纳这么多值/项。
我希望你能更清楚地了解这一点。
谢谢你抽出时间
回复

使用道具 举报

2

主题

20

帖子

18

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 07:21:08 | 显示全部楼层
顺便说一句,我已经看到李Mac的程序称为自动标签属性和它的伟大(感谢李与我们分享所有的代码),但不适合在我的情况下,因为我省略了数字,不希望他们重新编号。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

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

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-6 07:36:23 | 显示全部楼层
一个简单的方法是只读取一个点块,然后以最大的数字结束,然后下一个插入值就是+1,类似这样
 
  1. (setq tag1 "SETOUT_POINT_NUMBER") ; change to your tag name
  2. (setq ptno 0)
  3. (setq ss1 (ssget "x"  '((0 . "INSERT") (2 . "SETOUT_POINT_NO"))))   ; change to your block name
  4. (setq x (sslength ss1))
  5. (repeat x      
  6. (foreach att (vlax-invoke (vlax-ename->vla-object (ssname SS1 (setq x (1- x)) )) 'getattributes)
  7.    (if (= tag1 (strcase (vla-get-tagstring att)))
  8.    (PROGN  
  9.      (setq highnum (atoi (vla-get-textstring att)))
  10.      (if (> highnum ptno)
  11.      (setq ptno highnum)
  12.      ) ; IF
  13.    ) ; PROGN
  14.    ) ; IF  
  15. ) ; FOREACH
  16. ) ; REPEAT
  17. (setq ss1 nil)
  18. (princ (strcat "\nHighest ptno is " (rtos ptno)))
回复

使用道具 举报

2

主题

20

帖子

18

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 07:44:06 | 显示全部楼层
是的,已经有不同的层了!我只是想用艰难的方式去做!!!我真傻!
谢谢李为我们指出了最简单的方法!
感谢Bigal提供的代码。
谢谢大家。祝你周五或周五晚上愉快!
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-6 07:50:34 | 显示全部楼层
不用担心周五下午5点
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 07:58:38 | 显示全部楼层
不客气meracl周末愉快
回复

使用道具 举报

2

主题

20

帖子

18

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 08:04:20 | 显示全部楼层
谢谢你,李
该死,我想喝啤酒已经太晚了!
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-10 11:05 , Processed in 0.805326 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表