乐筑天下

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

[编程交流] 将多重引线文本对齐到ar

[复制链接]

9

主题

27

帖子

20

银币

初来乍到

Rank: 1

铜币
48
发表于 2022-7-5 15:54:54 | 显示全部楼层 |阅读模式
我有点头痛。我想要一个lisp,当运行时,我将能够选择整个图形,所有多重引线将自动对齐到引线和箭头所在的一侧。有时,我们的领导人会有所行动,单独改变他们是很耗时的。任何帮助都将不胜感激。
回复

使用道具 举报

58

主题

3353

帖子

33

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1761
发表于 2022-7-5 16:07:45 | 显示全部楼层
干得好。。不检查锁定层。
  1. (defun c:foo (/ pts s)
  2. (if (setq s (ssget "_X" '((0 . "multileader"))))
  3.    (foreach ml        (mapcar 'vlax-ename->vla-object (mapcar 'cadr (ssnamex s)))
  4.      (setq pts (vlax-invoke ml 'getleaderlinevertices 0))
  5.      (cond ((equal (car pts) (cadddr pts) 1e- (print "Vertical leader.."))
  6.     ((< (car pts) (cadddr pts)) (vla-put-textjustify ml 1))
  7.     ((vla-put-textjustify ml 3))
  8.      )
  9.    )
  10. )
  11. (princ)
  12. )
  13. (vl-load-com)
回复

使用道具 举报

9

主题

27

帖子

20

银币

初来乍到

Rank: 1

铜币
48
发表于 2022-7-5 16:20:46 | 显示全部楼层
非常感谢你。我必须学习visual lisp函数以及如何使用它们,因为这比我试图通过更改DXF代码所做的要简单得多。
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

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

铜币
325
发表于 2022-7-5 16:26:09 | 显示全部楼层
起步不错,罗恩!
 
我刚刚决定试验一下你的代码到底是怎么回事,然后玩了这个:
 
  1. (defun C:test ( / SS i )
  2. (and
  3.    (setq SS (ssget "_:L" '((0 . "MULTILEADER"))))
  4.    (repeat (setq i (sslength SS))
  5.      (foo (ssname SS (setq i (1- i))))
  6.    )
  7. )
  8. (princ)
  9. )
  10. (setq foo
  11. (lambda ( e / e o L pts )
  12.    
  13.    (defun GroupByN ( n L / r )
  14.      (repeat n (and L (setq r (cons (car L) r))) (setq L (cdr L)) r)
  15.      (if L (cons (reverse r) (GroupByN n L)) (list (reverse r)))
  16.    ); defun GroupByN
  17.    
  18.    (cond
  19.      (
  20.        (and
  21.          ; (setq e (car (entsel "\nPick mleader: ")))
  22.          (setq o (vlax-ename->vla-object e))
  23.          (setq L (GroupByN 3 (vlax-invoke o 'GetLeaderLineVertices 0)))
  24.          (setq pts (list (car L)(last L)))
  25.        )
  26.        (vl-some
  27.          (function
  28.            (lambda ( x / xf yf al )
  29.              (mapcar 'set '(xf yf al) x)
  30.              (and
  31.                (apply xf (append (mapcar 'car pts) (if (eq eq xf) (list 1e-1))))
  32.                (apply yf (append (mapcar 'cadr pts) (if (eq eq yf) (list 1e-1))))
  33.                (progn
  34.                  (vla-put-TextJustify o (eval al))
  35.                  ; (alert (vl-symbol-name al))
  36.                  T
  37.                )
  38.              )
  39.            ); lambda
  40.          ); function
  41.          '(
  42.            (eq > acAttachmentPointBottomCenter) ; OK
  43.            (eq < acAttachmentPointTopCenter) ; OK
  44.            (< eq acAttachmentPointMiddleLeft) ; NOT
  45.            (> eq acAttachmentPointMiddleRight) ; NOT
  46.            (< < acAttachmentPointBottomLeft) ; OK
  47.            (> < acAttachmentPointBottomRight) ; OK
  48.            (< > acAttachmentPointTopLeft) ; OK
  49.            (> > acAttachmentPointTopRight) ; OK
  50.          ); list
  51.        ); vl-some
  52.      )
  53.    ); cond
  54.    (princ)
  55. ); lambda
  56. ); setq foo

 
我假设“GetLeaderLineVertices”方法的第一个点是指引线的第一个点(距离文本内容最近的顶点),而最后一个点代表箭头点-对吗?
回复

使用道具 举报

58

主题

3353

帖子

33

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1761
发表于 2022-7-5 16:35:25 | 显示全部楼层
 
很乐意帮忙。DXF代码很好,但MLEADER通过vla-*函数更容易操作。
回复

使用道具 举报

58

主题

3353

帖子

33

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1761
发表于 2022-7-5 16:46:26 | 显示全部楼层
 
根据我的测试,第一个点最接近箭头。
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

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

铜币
325
发表于 2022-7-5 16:59:56 | 显示全部楼层
 
短测试证实了这一点:
  1. (and
  2. (setq p ((lambda (L) (list (car L) (cadr L) (caddr L))) (vlax-invoke (vlax-ename->vla-object (car (entsel))) 'GetLeaderLineVertices 0)))
  3. (entmakex (list (cons 0 "POINT") (cons 62 1) (cons 10 p)))
  4. )

 
谢谢
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-13 21:23 , Processed in 0.915612 second(s), 77 queries .

© 2020-2025 乐筑天下

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