乐筑天下

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

[编程交流] 记住用户输入以备将来使用

[复制链接]

15

主题

64

帖子

49

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
75
发表于 2022-7-5 18:25:33 | 显示全部楼层 |阅读模式
大家好,
 
我有Lisp程序,效果很好,但我想把它提高到一个新的水平。我的LISP询问用户他们想要使用的半径。然后继续执行命令。
 
如果该命令稍后在同一会话中再次使用,我希望LISP能够记住用户的最后输入。很像offset命令;首次使用时,指定偏移量并完成命令。如果您在执行完20个其他命令后返回,它会记住最后使用的值并将其显示在括号中,用户只需点击回车键,不需要再次输入值。我希望这有意义。。。
 
有人能教我怎么做,或者至少给我指出正确的方向吗?
 
提前谢谢!
回复

使用道具 举报

55

主题

402

帖子

357

银币

后起之秀

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

铜币
274
发表于 2022-7-5 18:32:10 | 显示全部楼层
你能把你的代码贴在这里吗。。。所以我可以通过编辑给你看
 
示例:-
 
  1. (setq a b)
  2. (setq b        (getint        (strcat        "\nSpecify Radius "
  3.                 (if (not a)
  4.                   ": "
  5.                   (strcat "<" (itoa a) ">: ")
  6.                 )
  7.         )
  8. )
  9. )
  10. (if (and (not b) a)
  11. (setq b a)
  12. )
回复

使用道具 举报

4

主题

8

帖子

4

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-5 18:36:54 | 显示全部楼层
(setvar“users1”offsetdistance)
(atof(getvar“users1”))
回复

使用道具 举报

4

主题

8

帖子

4

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-5 18:40:59 | 显示全部楼层
;(setvar“users1”offsetdistance)
;(atof(getvar“users1”))
 
(定义c:mj()
(setq点1(getpoint“\n选择点
点2(getpoint pt1“\n选择点
距离(距离pt1 pt2))
;;拯救
(setvar“USERS1”(rtos ds 2 1))
(命令“move”(ssget)“pause(atof(getvar“users1”))
)
回复

使用道具 举报

15

主题

64

帖子

49

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
75
发表于 2022-7-5 18:42:02 | 显示全部楼层
 
非常感谢你!我会试试这个。我想试着用你先给我的信息自己弄清楚。(这样我学得更好。)但如果我被卡住了,我会大胆地把它贴出来,然后再次联系你。
 
再次非常感谢!
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 18:49:03 | 显示全部楼层
本教程可能会有所帮助:使用默认选项进行提示。
回复

使用道具 举报

15

主题

64

帖子

49

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
75
发表于 2022-7-5 18:52:04 | 显示全部楼层
 
谢谢你,李,这真是太棒了!!非常感谢!
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-5 18:55:51 | 显示全部楼层
我使用全局变量前缀场景来存储信息,以备将来使用:
 
前缀为gv_的所有变量仅对该会话是全局的
 
  1. (setq xdef (if gv_xval gv_xval 100))
  2. (setq x (getdist (strcat "\n X Axis Value <" (rtos xdef 2 2) ">:   ")))
  3. (or x (setq x xdef))
  4. (setq gv_xval x)

 
 
要查看所有gv_变量的当前设置:
  1. (defun c:gv (/ fl af)
  2. (setq af (reverse (acad_strlsort (atoms-family 1))))
  3. (foreach a af
  4.    (and (= "GV_"  (strcase (substr a 1 3)))
  5. (setq fl (cons (cons a (eval (read a))) fl))))
  6. (textpage)
  7. (princ "Global Variable Settings:")
  8. (foreach a fl (terpri) (prin1 a))
  9. (prin1))

 
一次设置10->20个gv_值并不罕见
 
-大卫
回复

使用道具 举报

55

主题

402

帖子

357

银币

后起之秀

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

铜币
274
发表于 2022-7-5 18:57:55 | 显示全部楼层
 
当然没问题:拇指支撑:
回复

使用道具 举报

15

主题

64

帖子

49

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
75
发表于 2022-7-5 19:04:56 | 显示全部楼层
 
李·麦克,
 
很高兴你回复了这篇文章,因为我正在尝试修改你的Lisp程序。最初,用户要求我修改它,以便他可以指定半径。所以我为他这么做了。现在他想要我指定的附加功能。
 
我已经阅读了你发给我的链接(顺便说一句,这很好),我有一个问题,不确定我是否完全理解。它始终不会读取最后输入的值。
 
您将看到,我注释掉了我的原始更改(setq bDis(getreal“\n为跳转半径输入新值:”),它确实有效。
 
  1. ;;; JMPR.lsp
  2. ;;;
  3. ;;; Description
  4. ;;; Jumper will auto-create the radius jump for pipe crossings.
  5. ;;;
  6. ;;; Author: Lee Mac (CADTutor)
  7. ;;; Date: 03/25/10
  8. ;;;
  9. ;;; Revision: 1
  10. ;;; Revision Date: 10/30/15
  11. ;;; Description - Modified by David Prontnicki
  12. ;;; Added the ability to select your radius at the beginning of the command.
  13. ;;; Changed interface verbage
  14. ;;;
  15. ;;; Command: JMPR
  16. ;;; -----------------------------------------------------------------------------;
  17. (defun c:jmpr (/ *error* A AENT B1 B2 BDIS BENT DOC ENT OV P1 P2 UFLAG VL O W)
  18. ;  (setq bDis (getreal "\n Enter new value for Jump Radius: ")) ; Modified by David Prontnicki
  19. (setq bDis
  20. (cond
  21.    (
  22.      (getreal
  23.        (strcat "\n Enter new value for Jump Radius <"
  24.          (itoa
  25.            (setq bDis
  26.              (cond ( bDis ) (1) )
  27.            )
  28.          )
  29.          ">: "
  30.        )
  31.      )
  32.    )
  33.    ( bDis )
  34. )
  35. )
  36. (defun *error* (msg)
  37.    (and uFlag (vla-EndUndoMark doc))
  38.    (and ov  (mapcar (function setvar) vl ov))
  39.    (and msg (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")
  40.                 (princ (strcat "\n** Error: " msg " **"))))
  41.    (princ))
  42. (setq doc (vla-get-ActiveDocument (vlax-get-acad-object))
  43.        vl '("PEDITACCEPT" "CMDECHO" "OSMODE") ov (mapcar (function getvar) vl))
  44. (setvar "PEDITACCEPT" 1)
  45. (while (and (setq uFlag (not (vla-StartUndoMark doc)))
  46.              (mapcar   (function setvar) (cdr vl) '(0 32))
  47.              (setq p1  (getpoint "\nPick the crossing intersection: ")) ; Modified by David Prontnicki
  48.              (setq ent (entsel "\nSelect the line to break: "))) ; Modified by David Prontnicki
  49.    (setq p2 (osnap (cadr ent) "_nea")
  50.          b1 (polar p1 (setq a (angle p1 p2)) bDis)
  51.          b2 (polar p1 (+ pi a) bDis))
  52.    
  53.    (setvar "OSMODE" 0)
  54.    (command "_.break" b1 b2)
  55.    (setq bEnt (entlast))
  56.    (if (> a (/ pi 2.))
  57.      (command "_.arc" b2 "_E" b1 "_A" 180.)
  58.      (command "_.arc" b1 "_E" b2 "_A" 180.))
  59.    (setq aEnt (entlast))
  60.    (if (eq "LWPOLYLINE" (cdr (assoc 0 (entget (setq ent (car ent))))))
  61.      (progn
  62.        (setq w (vla-get-ConstantWidth (setq o (vlax-ename->vla-object ent))))
  63.        (command "_.pedit" "_M" bEnt aEnt ent "" "_J" "" "")
  64.        (vla-put-ConstantWidth (vlax-ename->vla-object (entlast)) w)))
  65.    (setq uFlag (vla-EndUndoMark doc)))
  66. (*error* nil)  
  67. (princ))

 
任何帮助都将不胜感激。提前谢谢你。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-12 19:46 , Processed in 0.449105 second(s), 72 queries .

© 2020-2025 乐筑天下

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