乐筑天下

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

[编程交流] IF函数存在问题

[复制链接]

26

主题

210

帖子

184

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
130
发表于 2022-7-5 23:13:51 | 显示全部楼层 |阅读模式
大家好,谁能澄清一下这段代码中的问题是什么,我该如何修复它。
  1.   (setq lnam (getstring"\nEnter lay name:"))
  2. (if ( = lnam t)
  3.    (setvar "clayer" lnam))
  4. (if ( = lnam nil)
  5.    (setvar "clayer" "0"))
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-5 23:20:01 | 显示全部楼层
lnam变量应包含字符串,因此无法将其与T进行比较;也可能有助于验证用户输入的层的存在性:
  1. (if (and (setq lnam (getstring"\nEnter lay name:"))
  2.         (tblsearch "LAYER" lnam))
  3. (setvar "CLAYER" lnam)
  4. (setvar "CLAYER" "0")
  5. )
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 23:28:38 | 显示全部楼层
由于getstring将在用户按enter键时返回空字符串,因此可以使用:
 
  1. (if (tblsearch "layer" (setq l (getstring t "\nLayer name: ")))
  2.    (setvar 'clayer l)
  3.    (setvar 'clayer "0")
  4. )
回复

使用道具 举报

26

主题

210

帖子

184

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
130
发表于 2022-7-5 23:33:28 | 显示全部楼层
 
谢谢大家的回复,
它工作得很好。我需要另一件事,我想用entmake创建层,并将其添加到以前的代码中。我正在尝试,但它不起作用。它创建层,但不是当前层。我如何解决这个问题。
谢谢你的帮助。
试试这个
  1. (defun c:test (/)
  2. (if (and (setq lnam (getstring"\nEnter lay name:"))
  3.         (tblsearch "LAYER" lnam))
  4. (setvar "CLAYER" lnam)
  5. (setvar "CLAYER" "0")
  6. )
  7. (entmake
  8.   (list
  9.     (cons 0 "LAYER")
  10.     (cons 100 "AcDbSymbolTableRecord")
  11.     (cons 100 "AcDbLayerTableRecord")
  12.     (cons 2 lnam)
  13.     '(70 . 0)
  14.     '(62 . 2)
  15.     '(6 . "Continuous")))
  16. )
或此
  1. (defun c:test (/)
  2. (if (tblsearch "layer" (setq l (getstring t "\nLayer name: ")))
  3.    (setvar 'clayer l)
  4.    (setvar 'clayer "0")
  5. )
  6. (entmake
  7.   (list
  8.     (cons 0 "LAYER")
  9.     (cons 100 "AcDbSymbolTableRecord")
  10.     (cons 100 "AcDbLayerTableRecord")
  11.     (cons 2 lnam)
  12.     '(70 . 0)
  13.     '(62 . 2)
  14.     '(6 . "Continuous")))
  15. )
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-5 23:36:50 | 显示全部楼层
这样地?
  1. (if (not (tblsearch "layer" (setq lnam (getstring t "\nLayer name: "))))
  2. (if (entmake (list (cons 0 "LAYER")
  3.                   (cons 100 "AcDbSymbolTableRecord")
  4.                   (cons 100 "AcDbLayerTableRecord")
  5.                   (cons 2 lnam)
  6.                   '(70 . 0)
  7.                   '(62 . 2)
  8.                   '(6 . "Continuous")))
  9. (setvar "CLAYER" lnam)
  10. (setvar "CLAYER" "0")
  11. )
  12. )
回复

使用道具 举报

26

主题

210

帖子

184

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
130
发表于 2022-7-5 23:42:39 | 显示全部楼层
我错过什么了吗?
 
001400c3a7qf88ts8pzikp.jpg
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-5 23:48:02 | 显示全部楼层
请注意,如果aleady已关闭,则只需关闭DEFUN语句。
回复

使用道具 举报

26

主题

210

帖子

184

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
130
发表于 2022-7-5 23:52:40 | 显示全部楼层
 
很抱歉,我想是不是有什么问题,这对我不起作用。
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-5 23:54:57 | 显示全部楼层
希望这能帮助您理解这个问题:
  1. (defun c:test( / lnam )
  2. (if (not (tblsearch "layer" (setq lnam (getstring t "\nLayer name: "))))
  3. (if (entmake (list (cons 0 "LAYER")
  4.                    (cons 100 "AcDbSymbolTableRecord")
  5.                    (cons 100 "AcDbLayerTableRecord")
  6.                    (cons 2 lnam)
  7.                    '(70 . 0)
  8.                    '(62 . 2)
  9.                    '(6 . "Continuous")))
  10.   (setvar "CLAYER" lnam)
  11.   (setvar "CLAYER" "0")
  12. )
  13. )
  14. (princ)
  15. )
回复

使用道具 举报

26

主题

210

帖子

184

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
130
发表于 2022-7-6 00:02:31 | 显示全部楼层
我真的很感谢你的努力。
你测试过了吗?不再工作!!
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-11 00:43 , Processed in 0.482772 second(s), 74 queries .

© 2020-2025 乐筑天下

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