乐筑天下

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

[编程交流] 实体名称参数

[复制链接]

2

主题

4

帖子

2

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-5 18:54:32 | 显示全部楼层 |阅读模式
现在我(刚刚开始)掌握了语法的诀窍,我几乎已经让lisp做了我想做的事情。但是
 
经过几次修改,我几乎达到了我想要的效果。“get”部分正是我想要的。我现在面临的挑战是“设置”部分。我的图形中有用“电路”和“地址”属性定义的块。目标是为函数提供一个电路和地址,并使其从该数字开始,并自动对所有地址等于或大于起始点的块重新编号。
 
我正在使用Lee Mac的get/setattributevalue函数。我坦率地承认,我还没有完全理解它们的处理过程——因为我还不理解AutoCAD图元——但我正在达到这一点。
 
我的挑战是,调用setattributevalue会给我带来一个错误,特别是“坏函数:”或任何句柄。我不理解,因为据我所知,实体名称与getattributevalue函数的名称相同,除非我的列表处理以某种方式使句柄无效。
 
有人告诉我我在哪里胡闹吗?
 
(defun c:重新编号地址()
(setq电路(getstring“\n输入电路:”)
(setq地址(getint“\n输入地址:”)
 
(setq ln(DM:gatheraddresses电路地址))
(foreach e ln(progn
(setq blk(cadr e))
(setq新值(itoa地址))
(LM:setattributevalue(blk“ADDRESS”newvalue))
(setq地址(+地址1))
))
(普林斯)
)
 
(defun DM:gatheraddresses(电路地址/ssfilter ss numblocks i ln entityname entity\u circuit entity\u地址e e1 e2)
(setq ssfilter’((0。“插入”)(66.1));定义过滤器以选择所有插入的块
(setq ss(ssget“_X”ssfilter));使用过滤器查询图形
(setq numblocks(sslength ss));获取块数
 
(if(>numblocks 0)(progn;假设我们发现一些块开始。。。
(setq i 0);将i初始化为0
(setq ln(列表));将ln初始化为空列表
 
; 遍历搜索匹配项时找到的所有块
(重复numblocks(progn;在所有块中循环)
(setq entityname(ssname ss i));从选择集中弹出下一个要检查的实体
 
;这个街区在右环路吗?
(setq entity_电路(LM:getattributevalue entityname“电路”)
 
(if(=实体电路)(progn)
 
;此块的地址是否等于或大于目标?
(setq entity_地址(LM:getattributevalue entityname“地址”)
 
(如果(>=(atoi实体地址)地址)(progn
(setq ln(cons(list entity\u address entityname)ln))
))
))
 
(setq i(+i 1))
))
 
; 按地址按数字升序对列表排序
(setq ln(vl sort ln’(λ(e1 e2))(
))
)
 
;; 获取属性值-Lee Mac
;; 返回所提供块中指定标记所保留的值(如果存在)。
;; blk-[ent]块(插入)实体名称
;; 标记-[str]属性标记字符串
;; 返回:[str]属性值,如果未找到标记,则返回nil。
 
(定义LM:getattributevalue(blk tag/val enx)
(虽然
(和
(空值)
(=“ATTRIB”(cdr(assoc 0(setq enx(entget(setq blk(entnext blk))))))))
)
(if(=(strcase标记)(strcase(cdr(assoc 2 enx))))
(setq val(cdr(assoc 1 enx)))
)
)
)
 
;; 设置属性值-Lee Mac
;; 使用在块中找到的给定标记(如果存在)设置第一个属性的值。
;; blk-[ent]块(插入)实体名称
;; 标记-[str]属性标记字符串
;; val-[str]属性值
;; 如果成功,则返回[str]属性值,否则返回nil。
 
(定义LM:setattributevalue(blk tag val/end enx)
(虽然
(和
(空结束)
(=“ATTRIB”(cdr(assoc 0(setq enx(entget(setq blk(entnext blk))))))))
)
(if(=(strcase标记)(strcase(cdr(assoc 2 enx))))
(if(entmod(subst(cons 1 val)(assoc 1 enx)enx))
(程序
(entupd blk)
(setq end val)
)
)
)
)
)
回复

使用道具 举报

2

主题

4

帖子

2

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-5 19:51:06 | 显示全部楼层
睡了一夜之后。。。
 
(LM:setattributevalue(blk“ADDRESS”newvalue))不工作。任何使用Lisp的人都会认识到这一点。因为我仍然停留在C类型语法上。。。让我们试试:
 
(LM:setattributevalue blk“ADDRESS”newvalue)
现在奇迹发生了。最终我会掌握这个诀窍,然后我将永远无法用另一种语言调用函数。叹气
回复

使用道具 举报

4

主题

2143

帖子

2197

银币

限制会员

铜币
-24
发表于 2022-7-5 20:10:11 | 显示全部楼层
请阅读代码发布指南,并将代码放入代码标签中。
[noparse]
  1. Code goes here
[/noparse]。
 
应该是这样的。。。
 
  1. Code goes here
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-12 13:56 , Processed in 0.848777 second(s), 58 queries .

© 2020-2025 乐筑天下

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