乐筑天下

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

[编程交流] 请帮我解决Lisp程序的问题

[复制链接]

13

主题

58

帖子

45

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
65
发表于 2022-7-5 15:20:48 | 显示全部楼层 |阅读模式
大家好,
 
 
好的,我有一个小的lisp,我还在学习如何使用这些。我有以下代码。它可以正常工作一次,然后我必须重新键入“RBB1”,因为如果我右键单击以重复命令,它只会提示我“输入度数”,因为它会调用RRP(在lisp中),而不是重复RRB1。有人能帮我告诉我如何使右键点击功能再次使用RRB1吗?
 
  1. (Defun C:RRB1 ( / DES SCR )
  2.    (If (BoundP 'C:RRP)
  3.        (If (SetQ SCR (STRCAT (GetVar 'TempPrefix) "RRP1TMP.SCR") ;; Temp name to save
  4.                  DES (Open SCR "W")
  5.            );SetQ
  6.            (ProgN
  7.                (Write-Line "RRP 90" DES)
  8.                (Close DES)
  9.                (Command "_.SCRIPT" SCR)
  10.            );ProgN
  11.        );If
  12.        (Princ "\NC:RRP Function Not Defined.")
  13.    );If
  14.    (Princ)
  15. );Defun

 
尝试遵循此处的指导原则http://www.cadtutor.net/forum/showthread.php?9184-代码发布指南,当我单击预览时,它不会显示它的外观。我只是想确认一下,万一我点击“#”符号时它不起作用。
回复

使用道具 举报

rlx

21

主题

1505

帖子

1551

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
81
发表于 2022-7-5 15:35:50 | 显示全部楼层
  1. (defun c:rrb1 ( / des scr )
  2. (if (and rrp (setq scr (strcat (getvar "tempprefix") "rrp1tmp.scr")) (setq des (open scr "w")))
  3.    (progn (write-line "(rrp) 90" des)(close des)(command "_.script" scr))(princ "\nRRP not loaded"))
  4. (princ)
  5. )
  6. (defun rrp ()
  7. (setq s (getstring "\nEnter angle : "))
  8. (alert s)
  9. )
小提示:之间的差异(defun c:funky()…)和(defun funky()…)
回复

使用道具 举报

13

主题

58

帖子

45

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
65
发表于 2022-7-5 15:45:35 | 显示全部楼层
 
 
不过,感谢您的回复,在选择object(就像任何其他命令一样)后,它将关闭。然后我试着右击重复命令,但它只是说重复命令RRP,这是一个手动输入度。。。我希望lisp从原始插入点旋转90度,旋转后,单击鼠标右键并重复相同的命令,而不输入度数。
回复

使用道具 举报

rlx

21

主题

1505

帖子

1551

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
81
发表于 2022-7-5 15:48:52 | 显示全部楼层
我不知道你的rrp函数看起来像什么,但这不是重点,重点是,autocad重复命令,实际命令,如直线或旋转等,以及用C定义的函数(defuns):因此,如果你有两个defuns,每个都用C定义:它将重复调用的最后一个,在你的情况下,这将是C:rrp
 
 
这是不久前写的
  1. (defun c:rot13 ( / rot-list loop ss1 CtrPt inp)
  2. (vl-load-com)
  3. (setq rotlist (list 45 90 135 180 225 270) loop t)
  4. (setvar "CMDECHO" 0)
  5. (if (and (setq ss1 (ssget))
  6.       (setq CtrPt (getpoint "\nPick the rotation Point:... ")))
  7.    (progn
  8.      (princ "\nCycle angle with tab or L-mouse / accept use enter,space or R-mouse / Esc or x for exit")
  9.      (princ (strcat "\nChoose rotation angle<" (itoa (car rotlist)) "> : "))
  10.      (while loop
  11.    (setq inp (vl-catch-all-apply 'grread (list nil 8 0)))
  12.    (if (vl-catch-all-error-p inp)
  13.      (progn (princ "\nRotation function cancelled")(setq loop nil))
  14.      (progn
  15.        (cond
  16.          ;tab
  17.          ((or (equal inp '(2 9))(= (car inp) 3))
  18.           (setq rotlist (append (cdr rotlist)(list (car rotlist))))
  19.           (princ (strcat "\rChoose rotation angle<" (itoa (car rotlist)) "> : ")))
  20.          ;enter,space,r-mouse
  21.          ((or (equal inp '(2 13)) (equal inp '(2 32))(= (car inp) 25))
  22.           (command "rotate" ss1 "" CtrPt (car rotlist))(setq loop nil))
  23.          ;x or X
  24.          ((member inp '((2 88)(2 120)))(setq loop nil))
  25.        )
  26.      )
  27.    )
  28.      )
  29.    )
  30. )
  31. (setvar "CMDECHO" 1)
  32. (princ)
  33. )
回复

使用道具 举报

13

主题

58

帖子

45

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
65
发表于 2022-7-5 16:02:36 | 显示全部楼层
这是RRP命令。。。
 
 
  1. (defun c:RRP (/ rotateval ss len c e f degrees radians)
  2. (setq rotateval
  3. (atoi
  4. (getstring "\nHow many degrees rotation are required: "
  5. )
  6. )
  7. )
  8. (setq ss (ssget))
  9. (setq len (sslength ss))
  10. (setq c 0)
  11. (repeat len
  12. (setq f (entget (ssname ss c)))
  13. (setq e (cdr (assoc '50 (entget (ssname ss c)))))
  14. (setq degrees (Radian->Degrees e))
  15. (setq degrees (+ degrees rotateval))
  16. (while (>= degrees 360)
  17. (setq degrees (- degrees 360))
  18. )
  19. (setq radians (Degrees->Radians degrees))
  20. (setq f (subst (cons 50 radians) (assoc 50 f) f))
  21. (entmod f)
  22. (setq c (+ c 1))
  23. )
  24. )
  25. (defun Radian->Degrees (nbrOfRadians)
  26. (* 180.0 (/ nbrOfRadians pi))
  27. )
  28. (defun Degrees->Radians (numberOfDegrees)
  29. (* pi (/ numberOfDegrees 180.0))
  30. )
回复

使用道具 举报

rlx

21

主题

1505

帖子

1551

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
81
发表于 2022-7-5 16:09:41 | 显示全部楼层
给你
 
  1. (defun c:rrb1  (/ scr fp)
  2. (if (and rrp
  3.           (setq scr (strcat (getvar "tempprefix") "rrp1tmp.scr"))
  4.           (setq fp (open scr "w"))
  5.       )
  6.    (progn (write-line "(rrp)\n90" fp)(close fp)(command "_.script" scr))
  7.   (princ "\nRRP not loaded"))
  8. (princ)
  9. )
  10. (defun RRP  (/ rotateval ss ssl i e el ang degrees radians)
  11. (setq rotateval (atoi (getstring "\nHow many degrees rotation are required: ")))
  12. (if (setq ss (ssget))
  13.    (progn
  14.      (setq ssl (sslength ss) i 0)
  15.      (repeat ssl
  16.        (setq e (ssname ss i) el (entget e) ang (cdr (assoc '50 el))
  17.              degrees (Radian->Degrees ang) degrees (+ degrees rotateval))
  18.        (while (>= degrees 360) (setq degrees (- degrees 360)))
  19.        (setq radians (Degrees->Radians degrees)
  20.              el (subst (cons 50 radians) (assoc 50 el) el))
  21.        (entmod el)(entupd e)
  22.        (setq i (1+ i))
  23.      )
  24.    )
  25. )
  26. )
  27. (defun Radian->Degrees (nbrOfRadians) (* 180.0 (/ nbrOfRadians pi)))
  28. (defun Degrees->Radians (numberOfDegrees) (* pi (/ numberOfDegrees 180.0)))

 
 
如果你真的想玩得开心:
  1. (defun c:rrb1  (/ scr fp)
  2. (if (and rrp (setq scr (strcat (getvar "tempprefix") "rrp1tmp.scr")) (setq fp (open scr "w")))
  3.    (progn (write-line "(rrp)\n90" fp)(close fp)(command "_.script" scr)) (princ "\nRRP not loaded")) (princ))
  4. (defun RRP (/ rot)
  5. (and (setq rot (getreal "\nRotation : "))
  6.       (mapcar
  7. '(lambda (x)
  8.     (entmod (setq x (subst (cons 50 (rem (+ (cdr (assoc '50 x)) (* pi (/ rot 180.0))) (* 2 pi))) (assoc 50 x) x))))
  9.   (mapcar 'entget (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget)))))
  10.       )
  11. )
  12. )
回复

使用道具 举报

13

主题

58

帖子

45

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
65
发表于 2022-7-5 16:13:41 | 显示全部楼层
 
 
伙计!!!你是最棒的,非常感谢
回复

使用道具 举报

rlx

21

主题

1505

帖子

1551

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
81
发表于 2022-7-5 16:28:26 | 显示全部楼层
 
不客气
 
不管好坏
  1. (defun c:RRB1 ()
  2. (and (or myRot (setq MyRot (getreal "\nRotation : ")))
  3.       (mapcar
  4.         '(lambda (x)
  5.            (entmod (subst (cons 50 (rem (+ (cdr (assoc '50 x)) (* pi (/ MyRot 180.0))) (* 2 pi))) (assoc 50 x) x)))
  6.          (mapcar 'entget (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget)))))
  7.       )
  8.   )
  9. )

 
如果您第一次使用全局变量“MyRot”,它将没有值和(或MyRot(setq MyRot…)将设置它并继续进行其余的例行程序。如果您想更改它,只需键入(setq MyRot nil),例程将再次询问。或者你做一个快捷方式reset\u my\u旋转:(defun c:rsmr()(setq MyRot nil)(c:rrb1))
 
gr.Rlx
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-14 13:06 , Processed in 1.259238 second(s), 68 queries .

© 2020-2025 乐筑天下

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