乐筑天下

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

[编程交流] 文本间距Lisp例程

[复制链接]

1

主题

4

帖子

3

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 14:36:17 | 显示全部楼层 |阅读模式
我在互联网上搜索了一个LISP例程,它可以抓取单个文本的行,并将它们正确对齐并等距重新列出。
 
有谁知道LISP可以这样做或类似的东西,我可以编辑?
回复

使用道具 举报

1

主题

4

帖子

3

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 14:47:38 | 显示全部楼层
 
我在互联网上搜索了一个合适的LISP或类似的东西,但都没有用。实际上,web上有数千个LISP例程(许多都做相同的事情,甚至许多已经是AutoCAD命令)。我可能在某个地方错过了理想的一个,因为有这么多。
 
谢谢你的关注。
回复

使用道具 举报

2

主题

439

帖子

536

银币

限制会员

铜币
-14
发表于 2022-7-6 14:50:25 | 显示全部楼层
找到了一些:
 
  1. (defun c:daly (/ tHeight insPoint dtSet oldDisMode errFlag
  2.                 sStr tAlignPt tAlignment disDelta dtList
  3.                 oldStrDis hitStr alignList oldMinPt maxPt
  4.          minPt oldAlign oldDirect)
  5. (vl-load-com)
  6. (defun texAlign (item /)
  7.    (if(= daly:Direct "Y")
  8.      (progn
  9.          (setq disDelta(- disDelta daly:strDis)); end setq
  10.      (vla-put-Alignment (car str) tAlignment)
  11.      (cond
  12.   ((= tAlignment 0)
  13.      (vla-put-InsertionPoint (car str)
  14.        (vlax-3D-Point(car insPoint)
  15.          (+ disDelta(cadr insPoint))(nth 2 insPoint)))
  16.    )
  17.   ((member tAlignment '(1 2 4 6 7 8 9 10 11 12 13 14))
  18.      (vla-put-TextAlignmentPoint (car str)
  19.        (vlax-3D-Point(car tAlignPt)
  20.          (+ disDelta(cadr tAlignPt))(nth 2 tAlignPt)))
  21.    )
  22.   ((member tAlignment '(3 5))
  23.    (princ "\nCan't align string with Aligned or Fit alignment ")
  24.    )
  25.   ); end cond
  26. ); end progn
  27.      (progn
  28.      (setq disDelta(- disDelta daly:strDis)); end setq
  29.      (vla-put-Alignment (car str) tAlignment)
  30.      (cond
  31.   ((= tAlignment 0)
  32.      (vla-put-InsertionPoint (car str)
  33.        (vlax-3D-Point(-(car insPoint)disDelta)
  34.          (cadr insPoint)(nth 2 insPoint)))
  35.    )
  36.   ((member tAlignment '(1 2 4 6 7 8 9 10 11 12 13 14))
  37.      (vla-put-TextAlignmentPoint (car str)
  38.        (vlax-3D-Point(-(car tAlignPt)disDelta)
  39.          (cadr tAlignPt)(nth 2 tAlignPt)))
  40.    )
  41.   ((member tAlignment '(3 5))
  42.    (princ "\nCan't align string with Aligned or Fit alignment ")
  43.    )
  44.   ); end cond
  45.      ); end progn
  46.    ); end if
  47.    ); end of texAlign
  48. (if(not daly:Direct)(setq daly:Direct "Y"))
  49. (setq oldDirect daly:Direct)
  50. (if(not daly:Align)(setq daly:Align "H"))
  51. (setq oldAlign daly:Align)
  52. (if(not daly:disMode)(setq daly:disMode "S"))
  53. (setq oldDisMode daly:disMode)
  54. (if(not daly:strDis)(setq daly:strDis 4.167))
  55. (setq oldStrDis daly:strDis)
  56. (initget "Y X")
  57. (setq daly:Direct
  58.    (getkword
  59.      (strcat "\nSpecify alignment direction [X-axis/Y-axis] <"daly:Direct">: ")))
  60. (if(null daly:Direct)(setq daly:Direct oldDirect))
  61. (initget "H L C M R TL TC TR ML MC MR BL BC BR")
  62. (setq daly:Align
  63.    (getkword
  64.      (strcat "\nSpecify justification [Hitest string/Left/Center/Middle/Right/TL/TC/TR/ML/MC/MR/BL/BC/BR] <"daly:Align">: "))
  65. alignList '(("L" 0)("C" 1)("R" 2)("M" 4)("TL" 6)("TC" 7)("TR" ("ML" 9)("MC" 10)("MR" 11)("BL" 12)("BC" 13)("BR" 14))
  66.             ); end setq
  67. (if(null daly:Align)(setq daly:Align oldAlign))
  68. (initget "S C")
  69. (setq daly:disMode
  70.    (getkword
  71.      (strcat "\nSpecify distance between strings [standard/Custom] <"daly:disMode">: ")))
  72. (if(null daly:disMode)(setq daly:disMode oldDisMode))
  73. (if(= daly:disMode "C")
  74.    (progn
  75.    (setq daly:strDis(getdist(strcat "\nSpecify Custom distance <"(rtos daly:strDis)">: ")))
  76.    (if(null daly:strDis)(setq daly:strDis oldStrDis))
  77.    (princ(strcat "\nCustom distance is "(rtos daly:strDis)))
  78.     ); end progn
  79.    ); end if
  80. (while T
  81. (princ "\n<<< Select DText and press Enter or Esc to Quit >>> ")
  82.   (if
  83.     (setq dtSet(ssget '((0 . "TEXT"))))
  84.    (progn
  85.      (if(= "Y" daly:Direct)
  86.      (setq dtList(vl-sort(mapcar
  87.           '(lambda (x)(list x
  88.         (+(cadr(vlax-safearray->list
  89.             (vlax-variant-value
  90.               (vla-get-InsertionPoint x))))
  91.                 (cadr(vlax-safearray->list
  92.             (vlax-variant-value
  93.               (vla-get-TextAlignmentPoint x)))))))
  94.       (mapcar 'vlax-ename->vla-object
  95.                  (vl-remove-if 'listp
  96.                     (mapcar 'cadr(ssnamex dtSet)))))
  97.           (function(lambda(a b)(>(cadr a)(cadr b))))))
  98. (setq dtList(vl-sort(mapcar
  99.           '(lambda (x)(list x
  100.         (+(car(vlax-safearray->list
  101.             (vlax-variant-value
  102.               (vla-get-InsertionPoint x))))
  103.                 (car(vlax-safearray->list
  104.             (vlax-variant-value
  105.               (vla-get-TextAlignmentPoint x)))))))
  106.       (mapcar 'vlax-ename->vla-object
  107.                  (vl-remove-if 'listp
  108.                     (mapcar 'cadr(ssnamex dtSet)))))
  109.           (function(lambda(a b)(<(cadr a)(cadr b))))))
  110.       ); end if
  111.   
  112.     (setq hitStr(caar dtList))
  113.      
  114.      (if(/= "H" daly:Align)
  115. (progn
  116.   (vla-getBoundingBox hitStr 'oldMinPt 'MaxPt)
  117.   (foreach lst alignList
  118.              (if(=(car lst)daly:Align)
  119.                (progn
  120.                  (if
  121.                          (not
  122.                           (vl-catch-all-error-p
  123.                            (vl-catch-all-apply 'vla-put-Alignment(list hitStr(cadr lst)))))
  124.                   (progn
  125.                     (vla-getBoundingBox hitStr 'minPt 'maxPt)
  126.                     (vla-move hitStr minPt oldMinPt)
  127.                     ); end progn
  128.                   ); end if
  129.                  ); end progn
  130.                ); end if
  131.     ); end foreach
  132.   ); end progn
  133. ); end if
  134.                  
  135.     (setq tHeight(vla-get-Height hitStr)
  136.           insPoint(vlax-safearray->list
  137.                     (vlax-variant-value
  138.                       (vla-get-InsertionPoint hitStr)))
  139.           tAlignPt(vlax-safearray->list
  140.                     (vlax-variant-value
  141.                       (vla-get-TextAlignmentPoint hitStr)))
  142.           tAlignment(vla-get-Alignment hitStr)
  143.           dtList(cdr dtList)
  144.           disDelta 0.0
  145.     ); end setq
  146.    (if(= daly:disMode "S")(setq daly:strDis(* 1.6668 tHeight)))
  147.      (foreach str dtList
  148.     (if
  149.   (not
  150.       (vl-catch-all-error-p
  151.            (vl-catch-all-apply 'texAlign (list str))))
  152.       (princ)
  153.       (setq errFlag T)
  154.       ); end if
  155.   ); end foreach
  156.      (if errFlag(princ "\n<!> Some Entities on Locked Layer <!>"))
  157. ); end progn
  158.    (princ "\nStrings isn't selected. ")
  159.    ); end if
  160.    ); end while
  161.    (princ)
  162.    ); end of dali
  163. (princ "\nType DALY to Run ")

 
我无法回答这周我什么时候有空。也许只在假日
回复

使用道具 举报

1

主题

4

帖子

3

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 14:59:16 | 显示全部楼层
这意味着要将该部分添加到lisp中吗
(我没有lisp方面的经验)
回复

使用道具 举报

2

主题

439

帖子

536

银币

限制会员

铜币
-14
发表于 2022-7-6 15:04:36 | 显示全部楼层
如果这也能用于多行文字,那就太棒了
回复

使用道具 举报

1

主题

4

帖子

3

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 15:11:50 | 显示全部楼层
回复

使用道具 举报

51

主题

481

帖子

457

银币

后起之秀

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

铜币
262
发表于 2022-7-6 15:18:54 | 显示全部楼层
ASMI
whats a great website you have.
refer to DALY.lsp its great lisp that im looking for
what about adding another option aligning to an object
see attached
avoiding the object direction
see http://www.cadtutor.net/forum/showthread.php?p=168328#post168328
post #14
 
thanx again for DALY
153620zu88b4hws4zdks23.jpg
回复

使用道具 举报

2

主题

439

帖子

536

银币

限制会员

铜币
-14
发表于 2022-7-6 15:27:46 | 显示全部楼层
Hi. It's possible, but I havn't more time today. This code calculates angle in point of curve. May be you can to find and modify it and add an option? 'curDer' is First Derive in point specified.
 
  1. (if(=(cadr curDer) 0.0)                   (setq curAng (/ pi 2))                          (setq curAng                        (- pi                         (atan                          (/(car curDer)                            (cadr curDer)))))                  ); end if
 
I can't to answer when I will to have free time at this week. Maybe at holydays only
回复

使用道具 举报

51

主题

481

帖子

457

银币

后起之秀

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

铜币
262
发表于 2022-7-6 15:29:54 | 显示全部楼层
is it mean adding that part to the lisp
(i have no experience with lisp)
回复

使用道具 举报

10

主题

16

帖子

6

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 2022-7-6 15:39:30 | 显示全部楼层
it would be awesome if this could be used for mtext as well
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-4 23:59 , Processed in 0.686654 second(s), 74 queries .

© 2020-2025 乐筑天下

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