乐筑天下

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

[编程交流] 为什么这不起作用

[复制链接]

33

主题

96

帖子

65

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
170
发表于 2022-7-6 06:39:17 | 显示全部楼层 |阅读模式
这就是我想要的,除了一件事。我不知道如何改变它。我只想让它问我一次间距是多少,但它是在问我每一行的间距。
 
  1. ;Version 1.00
  2. (defun c:cs (/)
  3. (and (setq ss (ssget "_:L" '((0 . "LINE"))))
  4.            (while (setq en (ssname ss 0))
  5.            (setq ed (entget en))
  6.            (setq p10 (cdr (assoc 10 ed)))
  7.            (setq p11 (cdr (assoc 11 ed)))
  8.            (setq mpt (mapcar '(lambda (a b) (* (+ a b) 0.5)) p10 p11))
  9.            (setq d2d (distance (cdr (reverse p10)) (cdr (reverse p11))))
  10.            ;(setq d1d (/ d2d 12.))
  11.            ;(setq d1c (fix (+ d1d 0.501)))
  12. (setq c (getstring "\nWhat is the spacing? (24,16,12): "))
  13.   (if (= c "24")
  14.       (cond  ((<= d2d 118)(setq e "2x6"))
  15.        ((and(>= d2d 118.01)(<= d2d 150))(setq e "2x8"))
  16.               ((and(>= d2d 150.01)(<= d2d 177))(setq e "2x10"))
  17.               ((and(>= d2d 177.01)(<= d2d 209))(setq e "2x12"))
  18.        ((and(>= d2d 209.01)(<= d2d 500))(setq e "Change Spacing"))
  19.                );end cond
  20.                );end if
  21. (if (= c "16")
  22.       (cond  ((<= d2d 144)(setq e "2x6"))
  23.        ((and(>= d2d 144.01)(<= d2d 183))(setq e "2x8"))
  24.               ((and(>= d2d 183.01)(<= d2d 217))(setq e "2x10"))
  25.               ((and(>= d2d 217.01)(<= d2d 256))(setq e "2x12"))
  26.        ((and(>= d2d 256.01)(<= d2d 500))(setq e "Change Spacing"))
  27.                );end cond
  28.                );end if
  29. (if (= c "12")
  30.       (cond  ((<= d2d 167)(setq e "2x6"))
  31.        ((and(>= d2d 167.01)(<= d2d 211))(setq e "2x8"))
  32.               ((and(>= d2d 211.01)(<= d2d 251))(setq e "2x10"))
  33.               ((and(>= d2d 251.01)(<= d2d 296))(setq e "2x12"))
  34.        ((and(>= d2d 296.01)(<= d2d 500))(setq e "Change Spacing"))
  35.                );end cond
  36.                );end if
  37. (defun radians->degrees (r)(cvunit r "radian" "degree"));end rad defun
  38.       
  39. ;-------TEXT JUSTIFICATION----------------------------------------     
  40. (setq lan (angle p10 p11))
  41.       (setq ad (radians->degrees lan))
  42.       (if (and (> ad 90.1) (<= ad 270.1))
  43.         (progn
  44.           (setq ptemp p10
  45.                 p10 p11
  46.                 p11 ptemp
  47.                 lan (angle p10 p11)  
  48.                 ad (radians->degrees lan))
  49.    );end progn
  50.    );end if
  51.                  
  52.       (setq dir (if (< (* pi 0.5) lan (* pi 1.5)) - +))
  53. (setq r3(entmake (list (cons 0 "TEXT")
  54.                           (cons 8 (getvar "CLAYER"))
  55.                           (cons 7 (getvar "TEXTSTYLE"))
  56.                           (cons 40 (getvar "TEXTSIZE"))
  57.                           (cons 41 0.80)
  58.      (cons 72 4)
  59.             (setq fg(cons 10 ' (0.0 0.0)));(setq r1(polar mpt (dir lan (+ 1))
  60.                                    ;(getvar "TEXTSIZE")))))
  61.                           (setq hg(cons 11 (setq r2(polar mpt (dir lan (* 0.5 pi));(+ 1))
  62.                                   (+ (* 0.5 (atof width)) (* 0.8 (getvar "TEXTSIZE")))))))
  63.                           (setq gg(cons 50 lan))
  64.                          (setq rg(cons 1 (strcat e)))
  65.    );end list
  66.           );end entmake
  67.                  );end setq r3
  68.       
  69.       
  70.                   (ssdel en ss)));end and
  71.     (prin1)
  72. );end defun
回复

使用道具 举报

33

主题

96

帖子

65

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
170
发表于 2022-7-6 06:55:01 | 显示全部楼层
我现在明白了,因为某种原因,它给了我一个错误。
; 错误:错误的参数类型:stringp nil
但是当我运行我的另一个LISP时,然后运行这个LISP,它就可以工作了。
你知道为什么吗?
 
  1. ;Version 1.00
  2. (defun c:cs (/)
  3. (setq c (getstring "\nWhat is the spacing? (24,16,12): "))
  4. (and (setq ss (ssget "_:L" '((0 . "LINE"))))
  5.            (while (setq en (ssname ss 0))
  6.            (setq ed (entget en))
  7.            (setq p10 (cdr (assoc 10 ed)))
  8.            (setq p11 (cdr (assoc 11 ed)))
  9.            (setq mpt (mapcar '(lambda (a b) (* (+ a b) 0.5)) p10 p11))
  10.            (setq d2d (distance (cdr (reverse p10)) (cdr (reverse p11))))
  11.            ;(setq d1d (/ d2d 12.))
  12.            ;(setq d1c (fix (+ d1d 0.501)))
  13.   (if (= c "24")
  14.       (cond  ((<= d2d 118)(setq e "2x6"))
  15.        ((and(>= d2d 118.01)(<= d2d 150))(setq e "2x8"))
  16.               ((and(>= d2d 150.01)(<= d2d 177))(setq e "2x10"))
  17.               ((and(>= d2d 177.01)(<= d2d 209))(setq e "2x12"))
  18.        ((and(>= d2d 209.01)(<= d2d 500))(setq e "Change Spacing"))
  19.                );end cond
  20.                );end if
  21.   (if (= c "16")
  22.       (cond  ((<= d2d 144)(setq e "2x6"))
  23.        ((and(>= d2d 144.01)(<= d2d 183))(setq e "2x8"))
  24.               ((and(>= d2d 183.01)(<= d2d 217))(setq e "2x10"))
  25.               ((and(>= d2d 217.01)(<= d2d 256))(setq e "2x12"))
  26.        ((and(>= d2d 256.01)(<= d2d 500))(setq e "Change Spacing"))
  27.                );end cond
  28.                );end if
  29.   (if (= c "12")
  30.       (cond  ((<= d2d 167)(setq e "2x6"))
  31.        ((and(>= d2d 167.01)(<= d2d 211))(setq e "2x8"))
  32.               ((and(>= d2d 211.01)(<= d2d 251))(setq e "2x10"))
  33.               ((and(>= d2d 251.01)(<= d2d 296))(setq e "2x12"))
  34.        ((and(>= d2d 296.01)(<= d2d 500))(setq e "Change Spacing"))
  35.                );end cond
  36.                );end if
  37. (defun radians->degrees (r)(cvunit r "radian" "degree"));end rad defun
  38.       
  39. ;-------TEXT JUSTIFICATION----------------------------------------     
  40. (setq lan (angle p10 p11))
  41.       (setq ad (radians->degrees lan))
  42.       (if (and (> ad 90.1) (<= ad 270.1))
  43.         (progn
  44.           (setq ptemp p10
  45.                 p10 p11
  46.                 p11 ptemp
  47.                 lan (angle p10 p11)  
  48.                 ad (radians->degrees lan))
  49.    );end progn
  50.    );end if
  51.                  
  52.       (setq dir (if (< (* pi 0.5) lan (* pi 1.5)) - +))
  53. (setq r3(entmake (list (cons 0 "TEXT")
  54.                           (cons 8 (getvar "CLAYER"))
  55.                           (cons 7 (getvar "TEXTSTYLE"))
  56.                           (cons 40 (getvar "TEXTSIZE"))
  57.                           (cons 41 0.80)
  58.      (cons 72 4)
  59.             (setq fg(cons 10 ' (0.0 0.0)));(setq r1(polar mpt (dir lan (+ 1))
  60.                                    ;(getvar "TEXTSIZE")))))
  61.                           (setq hg(cons 11 (setq r2(polar mpt (dir lan (* 0.5 pi));(+ 1))
  62.                                   (+ (* 0.5 (atof width)) (* 0.8 (getvar "TEXTSIZE")))))))
  63.                           (setq gg(cons 50 lan))
  64.                          (setq rg(cons 1 (strcat e)))
  65.    );end list
  66.           );end entmake
  67.                  );end setq r3
  68.       
  69.       
  70.                   (ssdel en ss)));end and
  71.     (prin1)
  72. );end defun
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 06:59:30 | 显示全部楼层
宽度变量没有值,它返回nil,这将导致代码在命令行返回错误。
 
  1. (setq    hg (cons 11
  2.                                 (setq r2 (polar mpt
  3.                                                 (dir lan (* 0.5 pi))
  4.                                                 (+ (* 0.5 (atof [color=red][b]width[/b][/color]))
  5.                                                    (* 0.8 (getvar "TEXTSIZE"))
  6.                                                 )
  7.                                          )
  8.                                 )
  9.                           )
  10.                      )

 
并将变量本地化,如下所示。
 
  1. (defun c:cs (/ A AD B C D2D DIR E ED EN FG GG HG LAN MPT P10 P11 PTEMP R2 R3 RG SS WIDTH)
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 07:05:48 | 显示全部楼层
你想完成什么?
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 07:19:33 | 显示全部楼层
正如Tharwat已经指出的那样,未分配宽度变量,因此当您尝试在评估中使用它时,它将生成错误。你说在使用了一个特定的例程之后,麻烦制造者一个才开始工作-你没有发布第二个例程的代码,但它有帮助的原因是你可能有一个同名的变量,所以当调用CS命令时,变量现在可以被评估。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 07:25:04 | 显示全部楼层
删除宽度变量后,立即尝试此拔模
 
[code](defun c:cs(/弧度->度a ad b c d2d dir e ed en lan mpt p10 p11 ptemp ss)(defun弧度->度(r)(cvunit r“radian”“degree”)(if(and(progn(initget 7“12 16 24”)(setq c(getkword”\n间距是什么?(24,16,12):))(setq ss(ssget“:L”((0。“LINE”))))(progn(while(setq en(ssname ss 0))(setq ed(entget en))(setq mpt(mapcar)(λ(a b)(*(+a b)0.5))(setq p10(cdr(assoc 10 ed))(setq p11(cdr(assoc 11 ed))))(setq d2d(距离(cdr(反向p10))(cdr(反向p11)))(if(=c“24”)(cond((=d2d 118.01)(=d2d 150.01)(=d2d 177.01)(=d2d 209.01)(
回复

使用道具 举报

33

主题

96

帖子

65

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
170
发表于 2022-7-6 07:32:01 | 显示全部楼层
我用了另一个Lisp程序的部分,这就是为什么在那里。我改了,效果很好。
塔尔瓦特,
我的目标是使用这个,尝试合并另一个lisp,这样我可以滑动很多行,让它用维度标记它们,并说出它们是什么。因此,任何等于相同结果的线都将用尺寸标注。从我的例子来看,这可能会有帮助。我还不擅长Lisp程序,所以我一步一步地做。
实例图纸
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 07:45:18 | 显示全部楼层
 
我说的是当前修改的lisp,我不知道你的第二个lisp,所以我猜不出第二个lisp做了什么。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-10 14:49 , Processed in 0.421314 second(s), 68 queries .

© 2020-2025 乐筑天下

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