乐筑天下

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

[编程交流] Princ打印提示

[复制链接]

41

主题

301

帖子

265

银币

后起之秀

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

铜币
209
发表于 2022-7-6 12:50:55 | 显示全部楼层 |阅读模式
早上好
我先说我搜索,我找不到答案。
 
如何在屏幕上动态打印?
 
我以为purhaps“grtext”可以做到,但不能精确到合适的值,似乎只有-2和-1可以做任何事情
 
我试图实现的是,在“Grread”模式下,每个按钮都被按到屏幕上。。
这很简单,如果我不想删除它,但是我不能以这种方式接受退格。
因此,我正在从命令行选项或动态选项中查找错误。
 
嗯,它有点有效,它不会删除东西,但会覆盖东西
 
Ive正在测试
  1. (while
  2. (setq hi (grread t 15 0))
  3. (if (= (car hi) 2)
  4.    (princ (chr (cadr hi)))))

 
 
任何建议都很好。
 
干杯花
回复

使用道具 举报

41

主题

301

帖子

265

银币

后起之秀

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

铜币
209
发表于 2022-7-6 13:00:34 | 显示全部楼层
看来我找到了一条路。
Back space在其a“”中起作用,或表明它起作用
因此,对于每个退格,执行一个“”,然后再次退格
 
  1. (while
  2. (setq hi (grread t 15 0))
  3. (if (= (car hi) 2)
  4.    (if (= (cadr hi)
  5.      (progn
  6.          (prompt (chr (cadr hi)))
  7.          (prompt " ")
  8.          (prompt (chr (cadr hi))))
  9.    (prompt (chr (cadr hi)))
  10.      )
  11.       
  12.    ))

 
如果有人知道更好的方法,请告诉我,
 
谢谢你抽出时间
回复

使用道具 举报

15

主题

687

帖子

169

银币

中流砥柱

Rank: 25

铜币
582
发表于 2022-7-6 13:08:26 | 显示全部楼层
你好
 
我是这样做的:
  1. (if (= (cadr gr)  ;_ backspace
  2.      (or
  3.        (and str
  4.             (/= str "")
  5.             (setq str (substr str 1 (1- (strlen str))))
  6.             (princ (chr )
  7.             (princ (chr 32))
  8.        )
  9.        (setq str nil)
  10.      )
  11.      (or
  12.        (and str (setq str (strcat str (chr (cadr gr)))))
  13.        (setq str (chr (cadr gr)))
  14.      )
  15.    )
  16.    (and str (princ (chr (cadr gr))))

 
整个例程只不过是grread使用的一个示例
  1. ;;; DSTAR (gile) 2009/03/09
  2. ;;; Draws a star polygon
  3. ;;; The user specify the number of brunches, the star center and a point vertex location.
  4. (defun c:dstar (/ *error* makestar br imax ind cen loop gr star str pt)
  5. ;;;======================== LOCAL SUB ========================;;;
  6. ;; Local *error*
  7. (defun *error* (msg)
  8.    (or        (= msg "Function cancelled")
  9. (princ (strcat "Error: " msg))
  10.     )
  11.    (and star (entdel star) (setq star nil))
  12.    (grtext)
  13.    (princ)
  14. )
  15. ;; Creates the pline
  16. (defun makestar (cen ang dist br ind / n zdir lst1 lst2)
  17.    (setq n    (* 2 br)
  18.   zdir (trans '(0 0 1) 1 0 T)
  19.    )
  20.    (and (= (getvar "ORTHOMODE") 1) (setq ang (OrthoRound ang)))
  21.    (repeat br
  22.      (setq
  23. lst1
  24. (cons
  25.    (polar cen (+ ang (/ (* (setq n (- n 2)) pi) br)) dist)
  26.    lst1
  27. )
  28.      )
  29.    )
  30.    (repeat br
  31.      (setq lst2
  32.      (cons (inters (nth n lst1)
  33.                    (nth (rem (+ n br (- ind)) br) lst1)
  34.                    (nth (rem (+ n (1- ind)) br) lst1)
  35.                    (nth (setq n (rem (+ n (1- br)) br)) lst1)
  36.            )
  37.            lst2
  38.      )
  39.      )
  40.    )
  41.    (entmakex
  42.      (append
  43. (list '(0 . "LWPOLYLINE")
  44.       '(100 . "AcDbEntity")
  45.       '(100 . "AcDbPolyline")
  46.       (cons 90 (* 2 br))
  47.       '(70 . 1)
  48.       (cons 38 (caddr (trans cen 1 zdir)))
  49.       (cons 210 zdir)
  50. )
  51. (mapcar
  52.   (function
  53.     (lambda (pt)
  54.       (cons 10 (trans pt 1 zdir))
  55.     )
  56.   )
  57.   (apply 'append
  58.          (apply 'mapcar (cons 'list (list lst1 lst2)))
  59.   )
  60. )
  61.      )
  62.    )
  63. )
  64. ;;;======================== MAIN ========================;;;
  65. (or *StarPointNumber* (setq *StarPointNumber* 5))
  66. (if (setq br (getint (strcat "\nSpecify the number of points: <"
  67.                        (itoa *StarPointNumber*)
  68.                        ">: "
  69.                )
  70.        )
  71.      )
  72.    (setq *StarPointNumber* br)
  73.    (setq br *StarPointNumber*)
  74. )
  75. (if (< 4 br)
  76.    (progn
  77.      (setq imax (fix (/ (- br 0.5) 2))
  78.     ind         imax
  79.      )
  80.      (initget 1)
  81.      (setq cen        (getpoint "\nSpecify the star center: ")
  82.     loop T
  83.      )
  84.      (princ "\nSpecify a point vertex (or enter circle radius): ")
  85.      ;; grread loop
  86.      (while (and (setq gr (grread T 12 0)) loop)
  87. (and star (entdel star) (setq star nil))
  88. (cond
  89.   ;; Dragging
  90.   ((= 5 (car gr))
  91.    (setq ang  (angle cen (cadr gr))
  92.          dist (distance cen (cadr gr))
  93.    )
  94.    (if (/= 0 dist)
  95.      (setq star (makestar cen ang dist br ind))
  96.    )
  97.    (grtext -1 (strcat "Radius: " (rtos dist)))
  98.   )
  99.   ;; Picked point = ends loop
  100.   ((= 3 (car gr))
  101.     (makestar cen ang dist br ind)
  102.     (setq loop nil)
  103.     (grtext)
  104.   )
  105.   ;; Right click = loops through available densities
  106.   ((member (car gr) '(11 25))
  107.    (setq ind (+ 2 (rem (- (1+ ind) 2) (1- imax))))
  108.   )
  109.   ;; Enter = reads the command line input
  110.   ((equal gr '(2 13))
  111.     (cond
  112.       ;; valid distance = ends loop
  113.       ((and str (setq dist (distof str)) (< 0 dist))
  114.         (makestar cen ang dist br ind)
  115.         (setq loop nil)
  116.         (grtext)
  117.       )
  118.       ;; valid point = ends loop
  119.       ((and str (setq pt (str->pt str)))
  120.         (makestar cen (angle cen pt) (distance cen pt) br ind)
  121.         (setq loop nil)
  122.         (grtext)
  123.       )
  124.       ;; invalid input
  125.       (T
  126.         (setq str nil)
  127.         (princ "\nInvalid point or distance. Specify a point vertex (or enter circle radius): ")
  128.       )
  129.     )
  130.   )
  131.   ;; F8 = toggles orthomode
  132.   ((equal gr '(2 15))
  133.     (setvar "ORTHOMODE" (boole 6 1 (getvar "ORTHOMODE")))
  134.     (princ (chr )
  135.     (princ (chr 32))
  136.   )
  137.   ;; getting and printing command line input
  138.   (T
  139.    (if (= (cadr gr)  ;_ backspace
  140.      (or
  141.        (and str
  142.             (/= str "")
  143.             (setq str (substr str 1 (1- (strlen str))))
  144.             (princ (chr )
  145.             (princ (chr 32))
  146.        )
  147.        (setq str nil)
  148.      )
  149.      (or
  150.        (and str (setq str (strcat str (chr (cadr gr)))))
  151.        (setq str (chr (cadr gr)))
  152.      )
  153.    )
  154.    (and str (princ (chr (cadr gr))))
  155.   )
  156. )
  157.      )
  158.    )
  159.    (prompt "\nThe number of points have to be greater than 4.")
  160. )
  161. (princ)
  162. )
  163. ;;;======================== SUB ROUTINES ========================;;;
  164. ;; OrthoRound
  165. ;; Returns the angle rounded to pi/2
  166. ;;
  167. ;; Argument: an angle (radians)
  168. (defun OrthoRound (ang)
  169. (* (/ pi 2) (fix (/ (+ (/ pi 4) ang) (/ pi 2))))
  170. )
  171. ;; STR2PT
  172. ;; Convert a string into a 3d point (input with grread)
  173. ;;
  174. ;; Argument: a string (ex: "25,63")
  175. ;; Return: a 3d point (ex (25.0 63.0 0.0) or nil if invalid string
  176. (defun str2pt (str)
  177. (setq str (mapcar 'read (str2lst str ",")))
  178. (if (and (vl-every 'numberp str)
  179.    (< 1 (length str) 4)
  180.      )
  181.    (trans str 0 0)
  182. )
  183. )
  184. ;; STR2LST
  185. ;; Transforms a string with separator into a list of strings
  186. ;;
  187. ;; Arguments
  188. ;; str = the string
  189. ;; sep = the separator pattern
  190. (defun str2lst (str sep / pos)
  191. (if (setq pos (vl-string-search sep str))
  192.    (cons (substr str 1 pos)
  193.   (str2lst (substr str (+ (strlen sep) pos 1)) sep)
  194.    )
  195.    (list str)
  196. )
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 13:12:07 | 显示全部楼层
从驾驶室检查:
 
  1. (defun c:test(/ user ent)
  2. (setq user (getpoint_or_text 2 "\nSelect or enter name. "))
  3. (cond
  4.    ((null user) (prompt "\nUser Quit."))
  5.    ((= (type user) 'STR) (prompt (strcase "\nUser entered " user)))
  6.    ((listp user)
  7.     (if (setq ent (nentselp user))
  8.       (prompt "\nObject selected.")
  9.       (prompt "\nNothing selected.")
  10.     )
  11.    )
  12.    (t (prompt "\nInvalid selection."))
  13. )
  14. (princ)
  15. )
  16. ;;  http://www.theswamp.org/index.php?topic=11342.msg143630#msg143630
  17. ;;;=======================[ getpoint_or_text.lsp ]=======================
  18. ;;; Author: Copyright© 2005 Charles Alan Butler
  19. ;;; Version:  1.0 Dec. 12, 2005
  20. ;;; Purpose: To get user entered text or picked point
  21. ;;; Sub_Routines: -None
  22. ;;; Requirements: -ctype is the cursor type
  23. ;;;                      0  Display the normal crosshairs.
  24. ;;;                      1  Do not display a cursor (no crosshairs).
  25. ;;;                      2  Display the object-selection "target" cursor
  26. ;;;               -prmpt is the user prompt, start it with \n
  27. ;;; Returns: - picked point or
  28. ;;;            the user entered text or
  29. ;;;            ""  for Enter Key
  30. ;;;            nil for Escape Key
  31. ;;;==============================================================
  32. (defun getpoint_or_text (ctype prmpt / char code data result flag p str)
  33. (vl-load-com)
  34. (vl-catch-all-apply
  35.    '(lambda ()
  36.       (setq flag t
  37.             str ""
  38.       )
  39.       (princ prmpt)
  40.       (while flag
  41.         (setq p    (grread t 15 ctype)
  42.               code (car p)
  43.               data (cadr p)
  44.         )
  45.         (cond
  46.           ((= code 3) ; clicked point
  47.            (setq result data
  48.                  flag nil
  49.            )
  50.           )
  51.           ((= code 2) ; keyboard
  52.            (setq char data)
  53.            (cond
  54.              ((<= 32 char 126)
  55.               (princ (chr char))
  56.               (setq str (strcat str (chr char)))
  57.              )
  58.              ((= char
  59.               ;; backspace was hit .. go chop off a character
  60.               (and (> (strlen str) 0)
  61.                    (princ (strcat (chr  " " (chr ))
  62.                    (setq str (substr str 1 (1- (strlen str))))
  63.               )
  64.              )
  65.              ((= char 13)
  66.               (setq result str
  67.                     flag nil
  68.               )
  69.              )
  70.            )
  71.           )
  72.         )
  73.       ) ;_ while
  74.     )
  75. )
  76. result
  77. )
回复

使用道具 举报

41

主题

301

帖子

265

银币

后起之秀

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

铜币
209
发表于 2022-7-6 13:15:20 | 显示全部楼层
谢谢你们,我最终用另一种方式完成了这件事,但对这些人来说非常简单。我会仔细看看你发布的这些代码,
 
谢谢你堆
 
作为参考,我就是这样做的
 
 
 
  1. (cond ....
  2. ((= (car reader) 2)
  3. (cond
  4. ((= (cadr reader)
  5. (if (> TxtCount 0)
  6. (progn
  7. (setq TxtCount (1- TxtCount)
  8. TextList (cdr TextList))
  9. (prompt (chr )
  10. (prompt (chr 32))
  11. (prompt (chr )
  12. )))
  13. ((or (= (cadr reader) 32)(= (cadr reader) 13))
  14. (setq ShortSnap (strcase (vl-list->string (reverse TextList)))
回复

使用道具 举报

20

主题

344

帖子

325

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2022-7-6 13:24:16 | 显示全部楼层
这是因为我试图在AutoCAD命令行上放置LISP shell。。。失败了,然后变成了我玩着俗气的电子游戏。。。
 
  1. (defun gr_main(op input / );
  2. (cond
  3.    ((= op 0)
  4.     (vl-load-com)
  5.     (setvar "cmdecho" 0)
  6.     (setq #p_mai "Prompt: " #m_run T #d_ist "" #d_sta T #m_csr 0)
  7.     (setq #d_lst nil #d_mps nil #p_ntf nil #p_dum nil #p_ret nil #d_pre nil #o_lnm "GR_ARCADE")
  8.     )
  9.    ((= op 1)
  10.     (if #d_sta
  11.       (cond
  12.     ((= (cadr input)
  13.      (if (> (strlen #d_ist) 0) (princ (strcat "\010" " " "\010")))
  14.      (setq #d_ist (substr #d_ist 1 (1- (strlen #d_ist)))))
  15.     ((or (= (cadr input) 13) (= (cadr input) 32))
  16.      (repeat (+ (strlen #d_ist) (strlen #p_cur)) (princ (strcat "\010" " " "\010")))
  17.      (princ #p_cur)
  18.      (setq #d_pre input)
  19.      (setq #d_lst (append #d_lst (list #d_ist)) #d_ist ""))
  20.     ((= (car input) 2)
  21.      (setq #d_ist (strcat #d_ist (chr (cadr input))) #d_pre input)
  22.      (princ (chr (cadr input))))
  23.     ((and (= (car input) 3) (= #d_ist ""))
  24.      (setq #d_pre (cadr input))
  25.      (setq #d_lst (append #d_lst (list (cadr input)))))
  26.     ((= (car input) 5)
  27.      (setq #d_mps (cadr input)))
  28.     )
  29.       (cond
  30.     ((= (car input) 2)
  31.      (setq #d_lst (append #d_lst (list (chr (cadr input)))))
  32.      (setq #d_pre input))
  33.     ((= (car input) 3)
  34.      (setq #d_lst (append #d_lst (list (cadr input))))
  35.      )
  36.     ((= (car input) 5)
  37.      (setq #d_mps (cadr input)))
  38.     )
  39.       )
  40.     )
  41.    ((= op 4)
  42.     (setq #d_pre nil)
  43.     )
  44.    )
  45. (princ)
  46. )

 
它有很多不必要的东西,主要是因为这是一个“黑客分离”版本的Pong,剥离到即时控制。不过,这是可行的。
 
只有我的两分钱。^
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 13:29:42 | 显示全部楼层
 
*克制说“我早就告诉过你了……”的冲动*
回复

使用道具 举报

41

主题

301

帖子

265

银币

后起之秀

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

铜币
209
发表于 2022-7-6 13:35:49 | 显示全部楼层
必须承认,这一点很难理解,只要你加一个,我的小脑袋就爆炸了。还没有解决,怎么做/做什么。
 
但毫无疑问,你了解我使用它的应用程序,如果你能推荐一种更好/更简单的方法,请告诉我。
 
谢谢
 
回复

使用道具 举报

20

主题

344

帖子

325

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2022-7-6 13:44:28 | 显示全部楼层
#符号没有任何意义。这只是一个变量。您看到的变量实际上是在“main”函数之外使用和修改的,这意味着它们是整个程序的全局变量。因此,由于整个程序将相当庞大(至少对我的水平而言),我希望跟踪我的所有变量。#d_表示它是一个数据变量,#p_表示提示等等。
 
这就像使用,比如说,“str1”和“str2”作为变量。你指出这是一个字符串,它不同于其他字符串。就是这样。
 
我所做的唯一不同的事情是将所有内容包装在一个整洁的界面中,并将其设置为当你点击“回车”或“空格键”时,它会获取成品,将其设置为一个变量,然后发送出去。嗯,有点像。你可以在我的代码中看到一个#d#lst。这是我的数据列表;它按输入顺序跟踪所有输入。相信我,这是有原因的。。
 
还有,我很抱歉昨天太累了。我似乎还没有发布我所有的代码。这里的循环实际上使用了我发布的条件。
 
  1. (defun c:test( / #p_mai #d_err #d_lst #d_mps #d_pre #d_grd #m_csr #m_run);
  2. (load "Y:\\Mercier Mark\\LISP\\#recstats.lsp" "nil")(#recstats "NOMNOM")
  3. (gr_main 0 nil)                    ; Setup program space
  4. (princ (strcat "\n" (setq #p_cur #p_mai)))        ; Display prompt
  5. (while (and #m_run                    ; Begin main loop
  6.          (setq #d_err (vl-catch-all-apply '(lambda ( ) (setq #d_grd (grread nil 13 #m_csr)))))
  7.          (not (vl-catch-all-error-p #d_err)))
  8.    (gr_main 1 #d_grd)                    ; Capture data
  9.    
  10.    ); End main While loop
  11. (princ "\nGoodbye.")(princ)
  12. )
  13. (defun gr_main(op input / );
  14. (cond
  15.    ((= op 0)
  16.     (vl-load-com)
  17.     (setvar "cmdecho" 0)
  18.     (setq #p_mai "Command :3 " #m_run T #d_ist "" #d_sta T #m_csr 0 #d_lst nil #d_mps nil #d_pre nil)
  19.    ((= op 1)
  20.     (if #d_sta
  21.       (cond
  22.     ((= (cadr input)
  23.      (if (> (strlen #d_ist) 0) (princ (strcat "\010" " " "\010")))
  24.      (setq #d_ist (substr #d_ist 1 (1- (strlen #d_ist)))))
  25.     ((or (= (cadr input) 13) (= (cadr input) 32))
  26.      (repeat (+ (strlen #d_ist) (strlen #p_cur)) (princ (strcat "\010" " " "\010")))
  27.      (princ #p_cur)
  28.      (setq #d_pre #d_ist)
  29.      (setq #d_lst (append #d_lst (list #d_ist)) #d_ist ""))
  30.     ((= (car input) 2)
  31.      (setq #d_ist (strcat #d_ist (chr (cadr input))))
  32.      (princ (chr (cadr input))))
  33.     ((and (= (car input) 3) (= #d_ist ""))
  34.      (setq #d_pre (cadr input))
  35.      (setq #d_lst (append #d_lst (list (cadr input)))))
  36.     ((= (car input) 5)
  37.      (setq #d_mps (cadr input)))
  38.     )
  39.       (cond
  40.     ((= (car input) 2)
  41.      (setq #d_lst (append #d_lst (list (chr (cadr input)))))
  42.      (setq #d_pre (chr (cadr input))))
  43.     ((= (car input) 3)
  44.      (setq #d_lst (append #d_lst (list (cadr input))))
  45.      ;(setq #d_pre (cadr input))
  46.      )
  47.     ((= (car input) 5)
  48.      (setq #d_mps (cadr input)))
  49.     )
  50.       )
  51.     )
  52.    )
  53. (princ)
  54. )

 
这里面也有回路。
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

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

铜币
438
发表于 2022-7-6 13:49:39 | 显示全部楼层
我想我不是唯一一个喜欢在变量前面加#的人
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

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

© 2020-2025 乐筑天下

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