乐筑天下

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

[编程交流] 请对此进行评论

[复制链接]

4

主题

19

帖子

15

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 12:56:13 | 显示全部楼层 |阅读模式
我已经获得了执行简单操作的一系列命令的原始代码;它们在Acad 14中运行良好,但不会在2010年执行。有什么可识别的问题吗?i、 e列出的“MC27”应该将文本改为MC27,但实际上没有。
  1. (defun c:27 ()                                                     ;ECN MC27 REV BENDS ADD DECIMALS (6/9/08)
  2. (setvar "cmdecho" 0)
  3. (setq obj (entsel "\nPick Location :"))
  4. (setq a "MC27" )
  5. (setq j (strcat a))
  6. (command "change" obj "" "" "" "" "" "" j))

 
我还有一个PDF附件,显示了DCL所需的选项
它是263 kb,我无法通过Cad tutor附加它。有兴趣看一看的人请发邮件给我mcclain@aaon.com
谢谢你的回复
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 13:00:48 | 显示全部楼层
有几件事,
[列表]
  • 不需要:
    [/列表]
    您只处理一个字符串,因此不需要连接它。
     
    [列表]
  • 您没有本地化变量,这不是良好的编程实践,函数定义应该类似于:
    [/列表]
    1. (defun c:27 (/ obj a)

     
    [列表]
  • 我建议您使用更具描述性的变量名,“obj”可以,但不要使用单个字母。这样代码就会更容易阅读。
    [/列表]
    [列表]
  • 您需要使用:
    [/列表]
    1. (car (entsel "\nPick Text: "))

     
    由于entsel返回一个包含两个元素的列表,第一个是实体名称,第二个是拾取点。
     
    [列表]
  • 我不会使用change命令来更改文本,而是查看entmod。
    [/列表]
    [列表]
  • 重要提示:您尚未重置系统变量CMDECHO。虽然这在CMDECHO中可能不太明显,但这是一种非常糟糕的做法,可能会导致不期望的结果,尤其是在使用其他sys变量时。
    [/列表]
    [列表]
  • 我会使用一个条件语句,比如IF函数,以允许漏选或没有用户输入。
    [/列表]
    [列表]
  • 在程序结束时使用(princ)以干净地退出程序,即抑制最后一个函数返回。
    希望这有帮助,
     
  • 回复

    使用道具 举报

    4

    主题

    19

    帖子

    15

    银币

    初来乍到

    Rank: 1

    铜币
    20
    发表于 2022-7-6 13:03:49 | 显示全部楼层
    谢谢李的提示。如果你想把这段代码加载进去,输入一个文本字符串(任何内容),然后把27输入到命令行,看看为什么它不会把文本改成MC27。
     
    1. (defun c:27 (/ obj a)                               ;ECN MC27 REV BENDS ADD DECIMALS (6/9/08)
    2. (setvar "if" 0)
    3. (car (entsel "\nPick Location: "))
    4. (setq a ("MC27")
    5. (setq j (strcat a)
    6. (command "entmod" obj "" "" "" "" "" "" j))
    7. (princ)
    回复

    使用道具 举报

    8

    主题

    125

    帖子

    117

    银币

    初来乍到

    Rank: 1

    铜币
    40
    发表于 2022-7-6 13:08:37 | 显示全部楼层
    它有什么作用?它在我的电脑上不起作用。
    回复

    使用道具 举报

    4

    主题

    19

    帖子

    15

    银币

    初来乍到

    Rank: 1

    铜币
    20
    发表于 2022-7-6 13:09:04 | 显示全部楼层
    您好,谢谢您的关注。
     
    我的目标是获取任意随机文本字符串,然后输入27作为then命令;它会提示用户选择一个点,然后将文本更改为MC27
    回复

    使用道具 举报

    41

    主题

    301

    帖子

    265

    银币

    后起之秀

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

    铜币
    209
    发表于 2022-7-6 13:14:30 | 显示全部楼层
    伙计,很好的努力,但我相信李的观点更像这样
     
     
    1. (defun c:27 (/ ss)
    2. (setvar "cmdecho" 0)
    3. (While (not ss) ;Entsel lets you only have one shot at selecting and item, So while lets you have as many attemps
    4. (setq ss (entget (car (entsel "\nSelect text :")))))
    5. (if (= (cdr (assoc 8 ss)) "text") ;Useing a If statement to make sure the item is text.
    6. (entmod ;Entmod is a way of altering entites,
    7. (subst (cons 1 "MC27") (assoc 1 ss) ss)) ;I used Subst, to substatue the text already there,
    8. (Princ "You did not select text")
    9. )
    10. (setvar "cmdecho" 1) ; Turn cmdecho back on.
    11. (princ)
    12. )
    回复

    使用道具 举报

    114

    主题

    1万

    帖子

    1万

    银币

    中流砥柱

    Rank: 25

    铜币
    543
    发表于 2022-7-6 13:16:35 | 显示全部楼层

    [列表=1]
  • 如果与nil一起提供,Entget将返回一个错误,因此您的while将无法工作。
  • “0”是实体类型的DXF代码,而不是8
    [/列表]
  • 回复

    使用道具 举报

    114

    主题

    1万

    帖子

    1万

    银币

    中流砥柱

    Rank: 25

    铜币
    543
    发表于 2022-7-6 13:20:21 | 显示全部楼层
    相反,我是这样想的:
     
    1. (defun c:27 (/ ent)
    2. (if (and (setq ent (car (entsel "\nPick Text: ")))
    3.           (wcmatch (cdr (assoc 0 (entget ent))) "*TEXT"))
    4.    (entmod
    5.      (subst
    6.        (cons 1 "MC27") (assoc 1 (entget ent))
    7.          (entget ent)))
    8.    (princ "\n** Object is not Text **"))
    9. (princ))
    回复

    使用道具 举报

    41

    主题

    301

    帖子

    265

    银币

    后起之秀

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

    铜币
    209
    发表于 2022-7-6 13:24:43 | 显示全部楼层
     
    啊,我不知道,我通常会这样做,而寻找文字,但并没有造成我的古怪工作
     
    如果你看文本和多行文字,它们都把dxf 8称为文本,所以我用它代替了wcmatch
    回复

    使用道具 举报

    114

    主题

    1万

    帖子

    1万

    银币

    中流砥柱

    Rank: 25

    铜币
    543
    发表于 2022-7-6 13:24:47 | 显示全部楼层
    DXF 8为层:眨眼:
    回复

    使用道具 举报

    发表回复

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

    本版积分规则

    • 微信公众平台

    • 扫描访问手机版

    • 点击图片下载手机App

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

    GMT+8, 2025-3-5 02:54 , Processed in 0.440891 second(s), 72 queries .

    © 2020-2025 乐筑天下

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