乐筑天下

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

[编程交流] 条件块插入

[复制链接]

9

主题

55

帖子

47

银币

初来乍到

Rank: 1

铜币
45
发表于 2022-7-5 16:44:12 | 显示全部楼层 |阅读模式
我想我已经接近这个代码了。在发布这部分lisp之前,代码设置了MFRMODEL和ORN变量。我想要做的是让LISP插入现有块(如果可用)。如果该块不可用,请根据之前输入的ORN变量选择要插入的块,然后按照命令操作。问题是,此代码仅在图形中当前存在块时有效。我的所有块都作为外部DWG文件定位,它们不会插入。任何帮助都将不胜感激。
 
  1. (if (tblsearch "BLOCK" MFRMODEL)
  2.    (command "layer" "s" "QF-EQPM" "" "insert" MFRMODEL pause "1" "1" pause "setvar" "clayer" CL)
  3.    (
  4.        (cond
  5.            ((wcmatch ORN "PLAN")(command "layer" "s" "QF-EQPM" "" "insert" "GTC005P" pause "1" "1" pause "setvar" "clayer" CL "rename" "block" "GTC005P" MFRMODEL))
  6.            ((wcmatch ORN "ELEV")(command "layer" "s" "QF-EQPM" "" "insert" "GTC005E" pause "1" "1" pause "setvar" "clayer" CL "rename" "block" "GTC005E" MFRMODEL))
  7.            ((wcmatch ORN "SIDE")(command "layer" "s" "QF-EQPM" "" "insert" "GTJ011S" pause "1" "1" pause "setvar" "clayer" CL "rename" "block" "GTJ011S" MFRMODEL))
  8.            ((wcmatch ORN "3D")(command "layer" "s" "QF-EQPM" "" "insert" "GTC0053" pause "1" "1" pause "setvar" "clayer" CL "rename" "block" "GTC0053" MFRMODEL))
  9.        )
  10.    )
  11. )
回复

使用道具 举报

9

主题

55

帖子

47

银币

初来乍到

Rank: 1

铜币
45
发表于 2022-7-5 16:48:27 | 显示全部楼层
我现在大部分时间都在工作。然而,一旦到达重命名部分,它就会崩溃。必须在区块名称周围加引号。
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-5 16:52:22 | 显示全部楼层
当目标块名称已存在于数据库中时,重命名阻止。
 
MFRMODEL也应该用引号括起来吗?
  1. (tblsearch "BLOCK" MFRMODEL)

-大卫
回复

使用道具 举报

9

主题

55

帖子

47

银币

初来乍到

Rank: 1

铜币
45
发表于 2022-7-5 16:57:43 | 显示全部楼层
如果我上面有这些就不行了。在发出命令的LISP部分之前设置MFRMODEL。
 
如果这些块已经存在,则不应重命名或插入它们。块将插入tblsearch的真实部分。
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

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

铜币
325
发表于 2022-7-5 16:59:18 | 显示全部楼层
为什么使用附加语法?
  1. (if (tblsearch "BLOCK" MFRMODEL)
  2. (command "layer" "s" "QF-EQPM" "" "insert" MFRMODEL pause "1" "1" pause "setvar" "clayer" CL)
  3. [b][color=red]([/color][/b]
  4.    (cond
  5.      ((wcmatch ORN "PLAN")(command "layer" "s" "QF-EQPM" "" "insert" "GTC005P" pause "1" "1" pause "setvar" "clayer" CL "rename" "block" "GTC005P" MFRMODEL))
  6.      ((wcmatch ORN "ELEV")(command "layer" "s" "QF-EQPM" "" "insert" "GTC005E" pause "1" "1" pause "setvar" "clayer" CL "rename" "block" "GTC005E" MFRMODEL))
  7.      ((wcmatch ORN "SIDE")(command "layer" "s" "QF-EQPM" "" "insert" "GTJ011S" pause "1" "1" pause "setvar" "clayer" CL "rename" "block" "GTJ011S" MFRMODEL))
  8.      ((wcmatch ORN "3D")(command "layer" "s" "QF-EQPM" "" "insert" "GTC0053" pause "1" "1" pause "setvar" "clayer" CL "rename" "block" "GTC0053" MFRMODEL))
  9.    )
  10. [b][color=red])[/color][/b]
  11. )

 
然而,尝试一下这样的[未经测试的](我记得出于某种原因,你不喜欢setq):
 
  1. (
  2. (lambda ( nbnm obnm nlyr olyr cmd )
  3.    (cond
  4.      ( (not (tblsearch "LAYER" nlyr)) (princ (strcat "\nLayer "" nlyr "" does not exist.")) )
  5.      ( (not olyr) (princ "\nInvalid "CL" symbol.") )
  6.      ( (not (tblsearch "LAYER" olyr)) (princ (strcat "\nLayer "" olyr "" does not exist.")) )
  7.      (
  8.        (setvar 'cmdecho 0)(setvar 'clayer nlyr)
  9.        (cond
  10.          ( (not nbnm) (princ "\nInvalid "MFRMODEL" symbol.") )
  11.          ( (tblsearch "BLOCK" nbnm) (not (command "_.INSERT" nbnm "\" "1" "1" "\")) )
  12.          ( (not obnm) (princ "\nInvalid "ORN" symbol.") )
  13.          ( (not (tblsearch "BLOCK" obnm)) (princ (strcat "\nBlock "" obnm "" does not exist.")) )
  14.          (T (not (command "_.INSERT" obnm "\" "1" "1" "\")) (command "_.RENAME" "block" obnm nbnm) )
  15.        )
  16.        (setvar 'clayer olyr)(setvar 'cmdecho cmd)
  17.      )
  18.    )
  19.    (princ)
  20. )
  21. (if (and (eq 'STR (type MFRMODEL)) (snvalid MFRMODEL)) MFRMODEL)
  22. (cdr (assoc ORN '(("PLAN" . "GTC005P") ("ELEV" . "GTC005E") ("SIDE" . "GTJ011S") ("3D" . "GTC0053"))))
  23. "QF-EQPM"
  24. (if (and (eq 'STR (type CL)) (snvalid CL)) CL)
  25. (getvar 'cmdecho)
  26. )

 
P、 别评判我,罗伊!
回复

使用道具 举报

9

主题

55

帖子

47

银币

初来乍到

Rank: 1

铜币
45
发表于 2022-7-5 17:04:23 | 显示全部楼层
谢谢您的邮件Grrr。第二组引号是因为这是tblsearch的错误声明。对不起,我不知道你发布的第二个代码是什么。我决不是这方面的专家。我发布的代码花了我大约一整天的时间才达到这一点。
 
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

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

铜币
325
发表于 2022-7-5 17:09:38 | 显示全部楼层
您应该会得到错误:错误函数:。。。如果if函数的测试表达式为false(我的意思是nil)。
 
应与您的行为相同,等待MFRMODEL或CL符号输入并运行“INSERT”命令,否则指出无效输入。
回复

使用道具 举报

9

主题

55

帖子

47

银币

初来乍到

Rank: 1

铜币
45
发表于 2022-7-5 17:14:03 | 显示全部楼层
它似乎运行良好。谢谢Grrr
 
我有一些其他模型,但我想我知道在哪里修改代码。这就是我需要改变的那一行,对吗?列为以下内容的行:
 
  1. cdr (assoc ORN '(("PLAN" . "GTC005P") ("ELEV" . "GTC005E") ("SIDE" . "GTJ011S") ("3D" . "GTC0053"))))
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

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

铜币
325
发表于 2022-7-5 17:15:21 | 显示全部楼层
 
是的,这个协会列表可以替代你使用的cond。
顺便说一句,我在帖子中修改了代码(有很多拼写错误)。
回复

使用道具 举报

9

主题

55

帖子

47

银币

初来乍到

Rank: 1

铜币
45
发表于 2022-7-5 17:20:33 | 显示全部楼层
我们必须对此进行一点调查。只是没有动力深入研究这个问题。谢谢你的帮助
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-7-12 12:42 , Processed in 0.644692 second(s), 83 queries .

© 2020-2025 乐筑天下

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