乐筑天下

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

[编程交流] Lisp来放置文本-做什么

[复制链接]

14

主题

719

帖子

706

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
70
发表于 2022-7-5 23:57:16 | 显示全部楼层 |阅读模式
我有一个lisp,实际上我有几个版本的lisp,但它似乎有一个增长的一个错误或东西,因为它现在的行为不像以前那样。问题是,它将X-text和Y-text放在彼此的顶部,并且无法读取LISP,我不知道是什么变量控制它,有谁可以帮助我?
 
  1. ;;--------------------------------------------------------------------------
  2. ;; COORD.LSP                        PLACE CO-ORDINATE TEXT OF SELECTED POINT
  3. ;;==========================================================================
  4. ;;DESCRIPTION:  This routine will place co-ordinate text alongside a defined
  5. ;;              (user selected) point.  The `x' & `y' values of the selected
  6. ;;              point will be preceded with an `E' & `N' respectively. This
  7. ;;              routine also places a donut at the point.  The co-ord text is
  8. ;;              then echoed to the screen alongside the selected point, and
  9. ;;              the user is prompted to select the desired location of the
  10. ;;              text.  
  11. ;;
  12. ;;START COMMAND........   coord
  13. ;;
  14. ;;WRITTEN BY:   ALAN CULLEN           December 1994
  15. ;;
  16. ;;AMENDED:      August 1995           Error handler included
  17. ;;              November 1999         Modified to read text settings from
  18. ;;                                    configuration file "COORD.CFG"
  19. ;;              October 2007          Re-written for Tiger
  20. ;;
  21. ;;---------------------------ERROR HANDLER------------------------------
  22. (defun clerr (s)
  23. (if (/= s "Function cancelled")
  24.   (if (= s "quit / exit abort")
  25.     (princ)
  26.     (princ (strcat "\nError: " s))
  27.   )
  28. )
  29. (setvar "donutid" olid)
  30. (setvar "donutod" olod)
  31. (setvar "blipmode" olblip)
  32. (setvar "LUPREC" oluprec)
  33. ;; (setvar "osmode" olsnap)
  34. (setq el1 nil el2 nil)
  35. (setvar "cmdecho" ocmd)
  36. (setvar "ANGBASE" oangbase)       ;;Angle zero direction to "north"
  37. (setvar "ANGDIR" oangdir)         ;;Clockwise angles
  38. (setvar "dragmode" odrag)
  39. (if olderr (setq *error* olderr))
  40. (princ "\nERROR...CONSOLE BREAK...PREVIOUS DRAWING STATUS RESTORED...")
  41. (princ)
  42. )
  43. ;;-----------------------------MAIN PROGRAM------------------------------
  44. (DEFUN C:cr  ()
  45. (princ "\n PLACE POINT CO-ORDINATE TEXT  -  November  1999 - Alan CULLEN")
  46. (setq txtang 90)                               ;;*** Set orientation angle for text (set for 0 deg = North, angles measured clockwise)
  47. (setq lnspace 1.5)                            ;;*** Set text line spacing factor (generally 1.
  48. (setq olderr *error* *error* clerr)        ;;Set new error handler
  49. (setq ocmd (getvar "CMDECHO"))
  50. (setvar "CMDECHO" 0)
  51. (setq olid (getvar "DONUTID"))
  52. (setvar "donutid" 0)
  53. (setq olod (getvar "DONUTOD"))
  54. (setvar "donutod" 300.0)                       ;;*** Sätter ytterdiameter på donut
  55. (setq oluprec (getvar "LUPREC"))
  56. (setvar "LUPREC" 3)                           ;;*** Sätter antal decimaler
  57. ;; (setq olsnap (getvar "osmode"))
  58. (setq ts 5)                                   ;;*** Sätter text storlek
  59. (setq olblip (getvar "blipmode"))
  60. (setvar "blipmode" 0)                       ;;*** Set BLIPMODE enviroment variable 0/1 ... 0=OFF, 1=ON
  61. (setq oangbase (getvar "ANGBASE"))
  62. (setvar "ANGBASE" (/ pi 2))                   ;;Angle zero direction to "north"
  63. (setq oangdir (getvar "ANGDIR"))
  64. (setvar "ANGDIR" 1)                           ;;Clockwise angles
  65. (setq odrag (getvar "dragmode"))
  66. (setvar "dragmode" 2)
  67. (setq pt T)
  68. (while pt
  69. (princ "\n PLACE POINT CO-ORDINATE TEXT  -  November  1999 - Alan CULLEN")
  70. ;; (setvar "osmode" 1)
  71. (setq pt (getpoint "\n Välj Punkt - <RETURN> för att avsluta :"))                     
  72. ;; (setvar "osmode" 0)
  73. (if (/= pt nil)
  74.   (progn
  75.    (setq ptx (car pt) pty (cadr pt))
  76.    (setq txtptx (/  ptx 1000))
  77.    (setq txtptx (strcat "Y: " (rtos txtptx)))
  78.    (setq txtpty (/  pty 1000))
  79.    (setq txtpty (strcat "X: " (rtos txtpty)))
  80.    (setq pt1 (list ptx pty 0))
  81.    (setq txtpt1 (list ptx (+ pty (* lnspace ts)) 0))
  82.    (command "doughnut" "" "" pt1 "")
  83.    (command "text" txtpt1 ts txtang txtpty)
  84.    (setq el1 (entlast))
  85.    (command "text" pt1 ts txtang txtptx)
  86.    (setq el2 (entlast))
  87.    (prompt "\n     Välj Plats För Koordinattext ")
  88.    (command "move" el1 el2 "" pt1 pause)
  89. )))
  90. (setvar "donutid" olid)
  91. (setvar "donutod" olod)
  92. (setvar "blipmode" olblip)
  93. (setvar "LUPREC" oluprec)
  94. ;; (setvar "osmode" olsnap)
  95. (setq el1 nil el2 nil)
  96. (setq *error* olderr)             ;; Restore old error handler
  97. (setvar "cmdecho" ocmd)
  98. (setvar "ANGBASE" oangbase)
  99. (setvar "ANGDIR" oangdir)
  100. (setvar "dragmode" odrag)
  101. (princ)
  102. )
回复

使用道具 举报

8

主题

1133

帖子

1164

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 00:02:58 | 显示全部楼层
AC可能在Ted上
 
不过,说真的,AC总是改变角度,使其成为测量角度,如果你不习惯,这会使事情变得复杂。
 
这里有两个简单的Lisp,它们将坐标(WC)写成米坐标中的文本。一个在图形单位为米时使用,另一个在图形单位为毫米时以米为单位写入坐标。没有错误检查,您必须在lisp中输入文本高度。看看他们能否给你一个主意。
 
  1. ;WC.LSP is a programme to write coordinates. eldon Nov 1999
  2. (defun C:WC (/ pt0 e east eastin n north northin)
  3. ;here begins the loop that gets the actual positions
  4.   (while (setq pt0 (getpoint "\nPick co-ordinate point:  "))
  5.          (setq e (car pt0)        ;easting coord as number
  6.                n (cadr pt0)       ;northing coord as number
  7.                east (rtos e 2 3)  ;easting coord as string
  8.                north (rtos n 2 3)  ;northing coord as string
  9.                eastin (strcat  east "mE" )
  10.                northin (strcat  north "mN")
  11.          )
  12.   (command "TEXT" pt0 "0.1" "0" eastin);size of text changed manually
  13.   (command "TEXT" "" northin)
  14.    )
  15.    (princ)
  16. )
  1. ;WCMM.LSP is a programme to write coordinates in m when dwg units are mm. eldon Nov 1999
  2. (defun C:WCmm (/ pt0 e east eastin n north northin)
  3. ;here begins the loop that gets the actual positions
  4.   (while (setq pt0 (getpoint "\nPick co-ordinate point:  "))
  5.          (setq e (car pt0)        ;easting coord as number
  6.                n (cadr pt0)       ;northing coord as number
  7.                east (rtos (/ e 1000) 2 3)  ;easting coord as string
  8.                north (rtos (/ n 1000) 2 3)  ;northing coord as string
  9.                eastin (strcat  east "mE" )
  10.                northin (strcat  north "mN")
  11.          )
  12.   (command "TEXT" pt0 "500" "0" eastin);size of text changed manually
  13.   (command "TEXT" "" northin)
  14.    )
  15.    (princ)
  16. )
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 00:04:50 | 显示全部楼层
嘿,老虎,
 
我会帮你看一下Lisp程序-但同时,这里有一些其他的可能会帮你:
 
http://www.cadtutor.net/forum/showthread.php?t=37762
http://www.cadtutor.net/forum/showthread.php?t=36668
http://www.cadtutor.net/forum/showthread.php?t=38525
http://www.cadtutor.net/forum/showthread.php?t=19666&page=4
http://www.cadtutor.net/forum/showthread.php?t=36328
http://www.cadtutor.net/forum/showthread.php?t=36808
 
有些可能比其他更相关。。。取自我的“链接库”lol
 
此外,VVA有一套很棒的任务程序:
http://www.cadtutor.net/forum/showthread.php?t=31653
 

 
编辑:
 
PS>Tiger,你确定要使用“甜甜圈”作为点-这使得从图形中提取点信息非常困难(与使用ACAD点相反)。只是一个想法
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 00:09:11 | 显示全部楼层
埃尔登,
 
只是一个提示-
 
我会小心使用TEXT命令-它有时可能会产生不想要的结果。TEXT命令的提示不一致,因此LISP有时会出错。我将使用entmake方法
 
另外,注意你的睡眠
 
回复

使用道具 举报

14

主题

719

帖子

706

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
70
发表于 2022-7-6 00:12:47 | 显示全部楼层
 
AC总是在Ted:wink:
 
这是他为我使用和采用的,因此它采用了调查方式——我来看看你的,干杯!
 
李-不,我不太确定我需要的油炸圈饼,但我没有费心把它去掉,有时我很想知道我的意思是什么。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 00:14:15 | 显示全部楼层
好的,如果你在这些链接中或者从Eldon提供的内容中找不到合适的东西,我很乐意用LISP帮助你(这种程序并不太复杂)
回复

使用道具 举报

14

主题

719

帖子

706

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
70
发表于 2022-7-6 00:18:06 | 显示全部楼层
好的,看看你提供的链接,李,我似乎找不到一个能满足我需要的,大多数人似乎想把这些点导出到一个txt或excel文件,这对我来说是不需要的。
 
实际上,我发布的CR.lsp确实需要我想要的,它拾取一个点的坐标,这个特定版本以米为单位,即使图形以毫米为单位,它也可以让我将文本放置在我想要的位置,并且除了坐标之外,它不会添加任何其他文本。只是,无论我把文本放在哪里,它都会把X和Y文本放在彼此的顶部,这取决于我把文本放在哪里。我只是想弄清楚是什么变量影响。。。
回复

使用道具 举报

NBC

4

主题

182

帖子

178

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 00:20:42 | 显示全部楼层
从初始代码Tiger开始,它使用el1作为y坐标,el2作为x坐标;然后使用定义为x和y坐标的pt1将x和y文本一起移动到同一点
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 00:25:42 | 显示全部楼层

 
试试这个。我花了比平时更长的时间来评论代码,这样你就知道“什么做什么”。
 
我试图使其与原始代码相似-但可能需要调整,因为原始代码有点小,我怎么能把它“关”。
 
[code]defunc:cr/[color=BLUE vl load com[color=BLUE b][color=BLUE b]]setqdocvla get ActiveDocumentvlax get acad object]]defun*错误*[color=RED b](msg[color=RED b][color=RED=BLUE]ifdocvla ENDUDOMARK[color]doc如果[color]ov b][color=BLUE mapcar][color=BLUE setvar][color]vl ov b]ifnot[color]wcmatch[color=BLUE strcasemsg)[/color b]“*中断,*取消*,*退出*”(princstrcat“\n**错误:msg”**“[/color b][color=BLUE b]]princsetq[color]lFac1.5[color];;
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 00:26:11 | 显示全部楼层
 
是的,我注意到您正在移动刚刚放置的文本-但我认为这是有意的,所以我将其保留在新代码中。
 
它很容易看到,必要时可以发表评论。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-10 21:11 , Processed in 0.787327 second(s), 72 queries .

© 2020-2025 乐筑天下

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