乐筑天下

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

[编程交流] 一点相对于另一点

[复制链接]

9

主题

21

帖子

12

银币

初来乍到

Rank: 1

铜币
45
发表于 2022-7-6 07:16:11 | 显示全部楼层 |阅读模式
在这个lisp中,我试图替换4个块,它们几乎做相同的事情。我想让用户点击他们想要用作文本中心的点,让代码计算出一定的距离,比如说,下一行文本的Y轴上的3.5。
 
 
  1. ;INSERT STREET NAME & R.O.W.
  2. (DEFUN C:STRN ()
  3. (SETQ CL (GETVAR "CLAYER"))
  4. (command ".osnap" "NONE")
  5. (setq DS (getvar 'dimscale))
  6. (SETQ SNTW (* DS 3))
  7. (SETQ RWTW (* DS 1.5))
  8. (SETQ SHS (* DS 0.13))
  9. (setq pt1 (getpoint "\nPick insertion point for Street Name : "))
  10. (setq sn (getstring t "\nType the Street Name: "))
  11. (setq sr (getstring t "\nType the Right Of Way Enter VW for Variable Width or P for Public: "))
  12. (SETQ SRW (STRCAT SR "' R.O.W."))
  13. (COMMAND "LAYER" "S" "STREET_NAME" "")
  14. (COMMAND "MTEXT" "_non" pt1 "J" "BC" "S" "STANDARD" "H" SHS "W" SNTW sn "")
  15. (SETQ RHS (* DS 0.08))
  16. (SETVAR "CECOLOR" "140")
  17. (COMMAND "MTEXT" PAUSE "J" "BC" "S" "STANDARD" "H" RHS "W" RWTW sRW "")
  18. (SETVAR "CECOLOR" "BYLAYER")
  19. (COMMAND "CLAYER" CL)
  20. (command ".osnap" "NOD,end,INT,CEN,mid")
  21. (setq OldTxt "VW' R.O.W.")
  22. (SETQ vwrw (STRCAT "VARIABLE WIDTH R.O.W."))
  23. (setq ss (ssget "x" '((0 . "TEXT,MTEXT"))))
  24.        
  25. (setq i (sslength ss))
  26. (while (not (minusp (setq i (1- i))))
  27.         (setq oText (vlax-ename->vla-object (ssname ss i)))
  28.         (setq Txt (vlax-get-property oText 'TextString))
  29.        
  30.         (if (vl-string-search OldTxt txt)
  31.                 (progn
  32.                         (setq newChg (vl-string-subst VWRW OldTxt txt))
  33.                         (vlax-put-property oText 'TextString newchg)
  34.                         (vlax-invoke-method oText 'Update)
  35.                 )
  36.         )
  37. )
  38. (setq P "P' R.O.W.")
  39. (SETQ PRW (STRCAT "PUBLIC R.O.W."))
  40. (setq ss (ssget "x" '((0 . "TEXT,MTEXT"))))
  41.        
  42. (setq i (sslength ss))
  43. (while (not (minusp (setq i (1- i))))
  44.         (setq oText (vlax-ename->vla-object (ssname ss i)))
  45.         (setq Txt (vlax-get-property oText 'TextString))
  46.        
  47.         (if (vl-string-search P txt)
  48.                 (progn
  49.                         (setq newChg (vl-string-subst PRW P txt))
  50.                         (vlax-put-property oText 'TextString newchg)
  51.                         (vlax-invoke-method oText 'Update)
  52.                 )
  53.         )
  54. )
  55. )
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-6 07:41:49 | 显示全部楼层
从VL中可以得到的一个信息是“Vla get Insertionpoint txt”,然后只需使用极坐标来计算下一个文本点。
回复

使用道具 举报

9

主题

21

帖子

12

银币

初来乍到

Rank: 1

铜币
45
发表于 2022-7-6 08:00:04 | 显示全部楼层
哇,伙计!谢谢那太棒了!
 
  1. ;INSERT STREET NAME & R.O.W.
  2. (DEFUN C:STR ()
  3. (SETQ CL (GETVAR "CLAYER"))
  4. (command ".osnap" "NONE")
  5. (setq DS (getvar 'dimscale))
  6. (SETQ SNTW (* DS 3))
  7. (SETQ RWTW (* DS 1.5))
  8. (SETQ SHS (* DS 0.13))
  9. (SETQ RWO (* DS 0.175))
  10. (setq pt1 (getpoint "\nPick Insertion Point: "))
  11. (SETQ PT2 (polar PT1 (DTR 270.0) RWO))
  12. (setq sn (getstring t "\nType the Street Name: "))
  13. (setq sr (getstring t "\nType the Right Of Way Enter V for Variable Width or P for Public: "))
  14. (SETQ SRW (STRCAT SR "' R.O.W."))
  15. (COMMAND "LAYER" "S" "STREET_NAME" "")
  16. (COMMAND "MTEXT" "_non" pt1 "J" "BC" "S" "STANDARD" "H" SHS "W" SNTW sn "")
  17. (SETQ RHS (* DS 0.08))
  18. (SETVAR "CECOLOR" "140")
  19. (COMMAND "MTEXT" "_NON" PT2 "J" "BC" "S" "STANDARD" "H" RHS "W" RWTW sRW "")
  20. (SETVAR "CECOLOR" "BYLAYER")
  21. (COMMAND "CLAYER" CL)
  22. (command ".osnap" "NOD,end,INT,CEN,mid")
  23. (setq OldTxt "V' R.O.W.")
  24. (SETQ vwrw (STRCAT "VARIABLE WIDTH R.O.W."))
  25. (setq ss (ssget "x" '((0 . "TEXT,MTEXT"))))
  26.        
  27. (setq i (sslength ss))
  28. (while (not (minusp (setq i (1- i))))
  29.         (setq oText (vlax-ename->vla-object (ssname ss i)))
  30.         (setq Txt (vlax-get-property oText 'TextString))
  31.        
  32.         (if (vl-string-search OldTxt txt)
  33.                 (progn
  34.                         (setq newChg (vl-string-subst VWRW OldTxt txt))
  35.                         (vlax-put-property oText 'TextString newchg)
  36.                         (vlax-invoke-method oText 'Update)
  37.                 )
  38.         )
  39. )
  40. (setq P "P' R.O.W.")
  41. (SETQ PRW (STRCAT "PUBLIC R.O.W."))
  42. (setq ss (ssget "x" '((0 . "TEXT,MTEXT"))))
  43.        
  44. (setq i (sslength ss))
  45. (while (not (minusp (setq i (1- i))))
  46.         (setq oText (vlax-ename->vla-object (ssname ss i)))
  47.         (setq Txt (vlax-get-property oText 'TextString))
  48.        
  49.         (if (vl-string-search P txt)
  50.                 (progn
  51.                         (setq newChg (vl-string-subst PRW P txt))
  52.                         (vlax-put-property oText 'TextString newchg)
  53.                         (vlax-invoke-method oText 'Update)
  54.                 )
  55.         )
  56. )
  57. )
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-6 08:21:32 | 显示全部楼层
只是一个建议,你的方法适用于OSNAP真的没关系
.
  1. (setvar "osmode" 0) ; no snaps
  2. (setvar "osmode" 47)   ; (command ".osnap" "NOD,end,INT,CEN,mid")
  3. ;just set osnaps then OSMODE will give number
  4. ;also
  5. (setq oldsnap (getvar "osmode"))
  6. (setvar "osmode" oldsnap)
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-10 10:31 , Processed in 1.136593 second(s), 60 queries .

© 2020-2025 乐筑天下

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