乐筑天下

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

[编程交流] 视口错误(&R)

[复制链接]

2

主题

4

帖子

2

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-6 10:52:33 | 显示全部楼层 |阅读模式
我有一个LISP程序,我已经放在一起(在这里有一些帮助),它基本上基于拾取点绘制引线,并根据用户输入的高程添加文本标签。它工作正常,但我遇到了几个问题:
 
1) 如果我在paperspace中的视口中运行程序,并在例程中进行缩放,则命令行会显示
 
视口被视图锁定。切换到图纸空间。
切换回模型空间。
命令:
 
我的例程依赖于来自命令行的用户输入,因此在这一点上,用户在例程中迷失了方向。一旦将视口设置为适当的打印比例,我们通常会锁定视口。有没有办法抑制“不需要的”命令行文本?
 
2) 我有一个错误处理功能,但是如果我在下一次运行命令时在例程的中间输入或退出,它会在文本命令的中间启动(就像它仍然挂在例程的中间一样)。看来我错过了一些可以解决这个问题的东西。有什么想法吗?
 
谢谢
TJ公司
 
(希望我把这个代码发对了…)
  1. ;**************************************************************
  2. ; routine to place proposed spot elevations w/user entered elev
  3. ; places text labels above leader
  4. ; version 1.1 ~ Oct 2008 ~ TJ Frazier
  5. ;**************************************************************
  6. (defun c:pspot3 (/ spotloc E N Z BC scale loop lead1 lead2 elevstrtop elevstrbot *error*
  7. top height tempang1 tempang2 tempang3 tclabel bclabel oldtext)
  8. ; function to convert radians to degrees
  9. (defun r2d (tempang)
  10. (* 180.0 (/ tempang pi))
  11. ); end r2d
  12. ; error handling function
  13. (defun *error*(msg)
  14. (setvar "osmode" oldosnap)
  15. (setvar "cmdecho" oldcmdecho)
  16. (setvar "dimasz" olddimasz)
  17. (princ "\nConsole break or Error. Exit... ")
  18. (princ)
  19. ); end *error*
  20. (setq oldcmdecho (getvar "cmdecho"))
  21. (setvar "cmdecho" 0)
  22. (setq olddimasz (getvar "dimasz"))
  23. (setvar "dimasz" 0.0)
  24. (setq oldosnap (getvar "osmode"))
  25. (setq oldlayer (getvar "clayer"))
  26. (setq oldtext (getvar "textstyle"))
  27. (setq scale (getvar "dimscale"))
  28. (command "-layer" "m" "P Spot" "c" "7" "" "L" "" "" "") ; set current layer & color
  29. (command "-text" "s" "PSpot" "" "" "") ; set current text style
  30. (setq elevstrtop "6")
  31. (while (setq spotloc (getpoint "\nPick location for spot: ")) ; until "enter" get location for spot
  32.    (setq E (car spotloc))
  33.    (setq N (cadr spotloc))     
  34.    (progn
  35.       (setq lead1 (getpoint spotloc "\nPick label location: "))
  36.       (setq lead2 (getpoint lead1 "\nPick label angle: "))
  37.       (setq tempang1 (angle lead1 lead2))
  38.       (setq tempang2 (- tempang1 1.5708))
  39.       (setq tempang3 (+ tempang1 1.5708))
  40.       (command "pline" spotloc lead1 lead2 "")
  41.       
  42.       (initget "Yes No")
  43.       (setq top (getkword "\nLabeling curb elevs <Yes>/No? "))
  44.       (and (not top)
  45.         (setq top "Yes"))
  46.       
  47.       (if (= top "Yes") ; if spot is top also draw bottom
  48.         (progn
  49.    (setq Z (getreal "\nEnter top elevation: ")) ; get top elev
  50.           (setq elevstrtop (rtos Z 2 2))
  51.           (setvar "osmode" 0)
  52.           (command "-insert" "spt9" (list E N Z) (* scale 0.1) "" "") ; insert block at top elev
  53.           (setq height (getreal "\nHeight of curb (inches)? "))
  54.    (setq BC (- Z (* height 0.0833)))
  55.           (setq elevstrbot (rtos BC 2 2))
  56.    (command "-insert" "spt9" (list E N BC) (* scale 0.1) "" "") ; insert block at bottom elev
  57.    
  58.           (if (> (car lead2) (car lead1))
  59.      (progn
  60.        (command "text" "j" "br" lead2 (* scale 0.1) (r2d tempang1) (strcat "TC" elevstrtop))
  61.               (setq tclabel (entlast))
  62.        (command "text" "j" "tr" lead2 (* scale 0.1) (r2d tempang1) (strcat "BC" elevstrbot))
  63.               (setq bclabel (entlast))
  64.        (command "move" tclabel bclabel "" lead2 (polar lead2 tempang3 (/ (sqrt scale) 2)))
  65.      ) ; end progn
  66.      (progn
  67.        (command "text" "j" "bl" lead2 (* scale 0.1) (+ 180.0 (r2d tempang1)) (strcat "TC" elevstrtop))
  68.               (setq tclabel (entlast))
  69.        (command "text" "j" "tl" lead2 (* scale 0.1) (+ 180.0 (r2d tempang1)) (strcat "BC" elevstrbot))
  70.        (setq bclabel (entlast))
  71.        (command "move" tclabel bclabel "" lead2 (polar lead2 tempang2 2))
  72.      ) ; end progn
  73.           ) ;end if
  74.         ) ; end progn
  75.         (progn
  76.    (setq Z (getreal "\nEnter elevation: ")) ; get elev
  77.    (setq elevstrtop (rtos Z 2 2))
  78.    (setvar "osmode" 0)
  79.    (command "-insert" "spt9" (list E N Z) (* scale 0.1) "" "") ; insert block at elevation
  80.           (if (> (car lead2) (car lead1))
  81.      (command "text" "j" "br" lead2 (* scale 0.1) (r2d tempang1) elevstrtop)
  82.      (command "text" "j" "bl" lead2 (* scale 0.1) (+ 180.0 (r2d tempang1)) elevstrtop)
  83.    ) ; end if
  84. ) ; end progn
  85.       ) ; end if
  86.       
  87.       (setvar "osmode" oldosnap)
  88.    );end progn
  89. );end while
  90. (setvar "cmdecho" oldcmdecho)
  91. (setvar "dimasz" olddimasz)
  92. (setvar "clayer" oldlayer)
  93. (setvar "textstyle" oldtext)
  94. (princ)
  95. )
回复

使用道具 举报

1

主题

12

帖子

11

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 11:38:56 | 显示全部楼层
我不确定是否有任何解决方案可用于在锁定的视口中缩放或平移生成的命令行消息垃圾邮件,即。,
 
  1.          Viewport is view-locked. Switching to Paper space.
  2.          Switching back to Model space.

 
我无法使用互联网搜索找到一个。以下解决方案适合我。如果您使用此解决方案,非常重要的是您已经为特定例程定义了一个错误函数,以便在出现错误时(SETVAR“NOMUTT”1)不会保持打开状态,因此将(SETVAR“NOMUTT”0)放在错误例程的早期。解决方案非常简单。只需在需要在命令行执行单个响应的代码之前输入所需消息并将“nomutt”设置为1,然后将nomutt设置为0。
 
(PRINC“您的函数的消息文本”)
(普林斯)
(SETVAR“NOMUTT”1)
>>
(SETVAR“NOMUTT”0)
 
下面是我使用的autolisp示例:
 
  1.          (PROGN
  2.            (PRINC "\nSelect objects: ")
  3.            (PRINC)
  4.            (SETVAR "nomutt" 1)
  5.            (SETQ mltss (SSGET
  6.                          (LIST (CONS -4 "<OR")
  7.                                (CONS 0 "TEXT")
  8.                                (CONS 0 "MTEXT")
  9.                                (CONS -4 "OR>")
  10.                          ) ;_ end of LIST
  11.                        ) ;_ end of SSGET
  12.            ) ;_ end of SETQ
  13.            (SETVAR "nomutt" 0)
  14.          ) ;_ end of PROGN

HTH公司
我知道我是
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

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

铜币
438
发表于 2022-7-6 12:14:04 | 显示全部楼层
哈哈,不久前我写了一个非常类似的子程序。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-6 17:12 , Processed in 0.489892 second(s), 58 queries .

© 2020-2025 乐筑天下

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