乐筑天下

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

[编程交流] lisp例程帮助

[复制链接]

7

主题

32

帖子

25

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 17:18:23 | 显示全部楼层 |阅读模式
大家好
 
 
我已经在这个lisp例程上工作了几个星期,每次我完成它,老板都会要求额外的功能。
这次我卡住了。
我附上了lisp文件的副本供您评论。
我现在不知道我改变了什么,原因是什么。
感谢您的帮助。
谢谢
清理-S1a。lsp
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 17:44:52 | 显示全部楼层
你好
 
您需要在以下代码之前添加cond函数:
  1. ((wcmatch ent_name "ROMANS") .....

然后,函数wcmatch的工作方式与程序中显示的if函数不同。
 
  1. ((wcmatch ent_name "ROMANS")
  2.      (setq ans "T")
  3.      (setq ans "F")......

因此,应该考虑最后一个表达式,即变量“ans”在任何情况下都不会等于“t”。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 17:52:47 | 显示全部楼层
我只是盲目地修改了代码,并没有改变您编写代码的方式,以便您能够在以后需要时修改它,所以只需测试以下mod并让我知道;
  1. (defun c:cleanup  (/ col count ent ent_data ent_lay ent_name hgt1 len new_lay new_tstyle obj_lay ssetmtxt)
  2. (if (setq ssetmtxt (ssget "_X" '((0 . "*TEXT"))))
  3.    (progn
  4.      (setq len   (sslength ssetmtxt)
  5.            count 0)
  6.      (while (< count len)
  7.        (setq ent      (ssname ssetmtxt count)
  8.              ent_data (entget ent)
  9.              ent_name (cdr (assoc 7 ent_data))
  10.              ent_lay  (cdr (assoc 8 ent_data))
  11.              hgt1     (cdr (assoc 40 ent_data))
  12.              )
  13.        (cond
  14.          ((wcmatch ent_name "ROMANS")
  15.           (setq new_tstyle
  16.                  (cond ((vl-position hgt1 '(1.3 2.6 6.5 13.0 26.0 32.5 65.0 130.0)) "13-TEXT")
  17.                        ((vl-position hgt1 '(1.8 3.6 9.0 18.0 36.0 45.0 90.0 180.0)) "18-TEXT")
  18.                        ((vl-position hgt1 '(2.5 12.5 62.5 250.0)) "25-TEXT")
  19.                        ((vl-position hgt1 '(3.5 7.0 17.5 35.0 70.0 87.5 175.0 350.0)) "35-TEXT")
  20.                        ((vl-position hgt1 '(5.0 10.0 25.0 50.0 100.0 125.0 500.0)) "5-TEXT")
  21.                        (t "7-TEXT")
  22.                        )
  23.                 ))
  24.          ((wcmatch ent_name "TXT-#,TXT-##")
  25.           (setq new_tstyle
  26.                  (cons 7
  27.                        (strcat (substr ent_name 5) "-TEXT")))
  28.           (setq obj_lay (strcat "TEXT-" (substr ent_name 5)))
  29.           (setq new_lay
  30.                  (cons 8 (strcat "TEXT-" (substr ent_name 5))))
  31.           (cond
  32.             ((= obj_lay "TEXT-13") (setq col 1))
  33.             ((= obj_lay "TEXT-18") (setq col 7))
  34.             ((= obj_lay "TEXT-25") (setq col 7))
  35.             ((= obj_lay "TEXT-35") (setq col 2))
  36.             ((= obj_lay "TEXT-5") (setq col 5))
  37.             ((= obj_lay "TEXT-7") (setq col 6))
  38.             )
  39.           (or (tblsearch "LAYER" obj_lay)
  40.               (command "-Layer" "m" obj_lay "C" col "" "")
  41.               )
  42.           (vla-put-layer (vlax-ename->vla-object ent) obj_lay)
  43.           )
  44.          )
  45.        (entmod
  46.          (subst (cons 7 new_tstyle) (assoc 7 ent_data) ent_data))
  47.        (setq count (1+ count))
  48.        )
  49.      )
  50.    )
  51. (princ)
  52. )
  53. (vl-load-com)
回复

使用道具 举报

7

主题

32

帖子

25

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 18:15:48 | 显示全部楼层
嗨Tharwat
 
 
谢谢你的回复。
 
 
我只需要编辑1到2行,现在可以了。
 
 
另一个问题,通过下面的cond语句,我试图匹配文本样式和文本高度。
 
 
我的问题是,不止一种样式可以具有相同的高度,正如下面的代码所示。
 
 
你能提供更好的编程方法吗?
 
 
所以我要做的是检查样式是否是罗马语,然后检查文本高度,这将确定要将obj更改为的新样式。
 
 
如果没有匹配项,则使用默认样式18-TEXT。
 
 
  1. (cond
  2.          ((wcmatch ent_name "ROMANS")
  3.           (setq new_tstyle
  4.                  (cond ((vl-position hgt1 '(1.3 2.6 6.5 13.0 26.0 32.5 65.0 130.0)) "13-TEXT")
  5.                        ((vl-position hgt1 '(1.8 3.6 9.0 18.0 36.0 45.0 90.0 180.0)) "18-TEXT")
  6.                        ((vl-position hgt1 '(2.5 5.0 12.5 25.0 50.0 62.5 125.0 250.0)) "25-TEXT")
  7.                        ((vl-position hgt1 '(3.5 7.0 17.5 35.0 70.0 87.5 175.0 350.0)) "35-TEXT")
  8.                        ((vl-position hgt1 '(5.0 10.0 25.0 50.0 100.0 125.0 500.0)) "5-TEXT")
  9.                        ((vl-position hgt1 '(7.0 14.0 35.0 70.0 140.0 175.0 350.0 700.0)) "7-TEXT")
  10.                        (t "18-TEXT")
  11.                        )
  12.                 ))
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 18:21:58 | 显示全部楼层
 
玩一玩:
 
  1. (cond
  2. ((wcmatch ent_name "ROMANS")
  3.   (if (not (vl-some '(lambda (_h _s) (and (vl-position hgt1 _l) (setq new_tstyle _s)))
  4.                     '((1.3 2.6 6.5 13.0 26.0 32.5 65.0 130.0)
  5.                       (1.8 3.6 9.0 18.0 36.0 45.0 90.0 180.0)
  6.                       (2.5 5.0 12.5 25.0 50.0 62.5 125.0 250.0)
  7.                       (3.5 7.0 17.5 35.0 70.0 87.5 175.0 350.0)
  8.                       (5.0 10.0 25.0 50.0 100.0 125.0 500.0)
  9.                       (7.0 14.0 35.0 70.0 140.0 175.0 350.0 700.0)
  10.                       )
  11.                     '("13-TEXT" "18-TEXT" "25-TEXT" "35-TEXT" "5-TEXT" "7-TEXT")))
  12.     (setq new_tstyle "18-TEXT")
  13.     )
  14.   )
  15. )
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-13 07:14 , Processed in 0.396564 second(s), 62 queries .

© 2020-2025 乐筑天下

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