乐筑天下

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

[编程交流] 使用vla getboundin移动文本

[复制链接]

21

主题

155

帖子

135

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
105
发表于 2022-7-5 18:16:28 | 显示全部楼层 |阅读模式
这无疑是以前做过的,但我找不到一个简单的(?)lisp将文字对象移动到拾取的x或y值(见图)。
有李Mac的动态文本对齐,但我更喜欢非动态。
还有CAB的alignall,但我有一些问题。
 
我得到的代码是:
  1. (defun c:mtx ( / ap ent obj point1 point2 ss )
  2. (vl-load-com)
  3. (setq ap (getpoint "select alignment point"))
  4. (setq ss (ssget "_:L" '((0 . "TEXT,MTEXT"))))
  5. (setq ent (ssname ss 0))
  6. (setq obj (vlax-ename->vla-object ent))
  7. (if obj
  8.    (progn
  9.      ;;obj is a vla-object
  10.      ;;point1 is the lower left point of the bounding box around the object
  11.      ;;point2 is the upper right point of the bounding box around the object
  12.      (vla-getboundingbox obj 'point1 'point2)
  13.       ;;point1 and point2 are returned as a safearray and need to be converted to a list
  14.      (setq point1 (vlax-safearray->list point1))
  15.      (setq point2 (vlax-safearray->list point2))
  16.      (command  "_.move" ent "" point1 "_none" (list (car ap) (cadr point1) 0.0))
  17.    );; progn
  18. );; if
  19. (princ)
  20. )

 
它在移动命令时崩溃
 
我只添加了ent,因为我认为MOVE命令可能无法在vla对象上工作(?)
191629sdqy9m8q5vyz79zt.jpg
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 18:29:19 | 显示全部楼层
我看不出你当前的代码有什么问题,只是它只会对选择中的第一个对象进行操作;除此之外,它应该按照您所描述的那样执行(至少对于零旋转的文本/多行文字,并且位于与WCS平面平行的平面中)。
 
忽略UCS和旋转问题,您可能会发现以下方式有助于重新构造代码,以便在指定新位置时,可以将左下角点用作视觉辅助:
  1. (defun c:mtx ( / bpt llp sel urp )
  2.    (if (setq sel (ssget "_+.:E:S:L" '((0 . "TEXT,MTEXT"))))
  3.        (progn
  4.            (vla-getboundingbox (vlax-ename->vla-object (ssname sel 0)) 'llp 'urp)
  5.            (setq llp (vlax-safearray->list llp))
  6.            (if (setq bpt (getpoint "\nSpecify alignment point: " llp))
  7.                (command "_.move" sel "" "_non" (list (car llp) 0.0) "_non" (list (car bpt) 0.0))
  8.            )
  9.        )
  10.    )
  11.    (princ)
  12. )
  13. (vl-load-com) (princ)
回复

使用道具 举报

21

主题

155

帖子

135

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
105
发表于 2022-7-5 18:36:57 | 显示全部楼层
你好,李
它不起作用!我打算把它放在一个重复的循环中,从
  1. ssget "_:L
和通常递增的ssname函数等。因此我的代码中有ent函数。我总是先让代码在单个项目上运行,然后再围绕它进行循环。我看到您的代码从ssget中移动了选择集(目前为单个项),而不是结果实体。类似于:
 
但是它还没有工作。
所以,我将把选择对齐点放在代码的顶部,然后重复循环,并在循环的每个回合中移动所有选定的合格实体。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 18:45:24 | 显示全部楼层
 
这对我来说很有效——当测试原始代码时,你会收到什么错误?
 
 
原因如下:
 
我建议:
你可能也会发现这个程序很有用。
回复

使用道具 举报

21

主题

155

帖子

135

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
105
发表于 2022-7-5 18:56:35 | 显示全部楼层
它在线路上出错,其中包含移动命令。
 
我意识到llp是未定义的,但不知道放在哪里,我仍然不太熟悉VL函数。
 
这正是我想要的,谢谢李。
添加“按Y坐标对齐”选项以及使用initget/cond的选项将是一件轻而易举的事&对该行进行必要的更改:
  1. 5

 
 
我以前没见过,很好。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 19:03:35 | 显示全部楼层
 
错误消息是什么?
 
 
不客气
 
 
谢谢
回复

使用道具 举报

21

主题

155

帖子

135

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
105
发表于 2022-7-5 19:14:07 | 显示全部楼层
我刚重新测试过&没问题**
 
自从我上次试过之后,电脑就关机了,后来又重新启动了,可能是代码在没有完全重新加载的情况下发生了变化
 
我真的不知道,我一定比我想象的要近。
回复

使用道具 举报

21

主题

155

帖子

135

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
105
发表于 2022-7-5 19:24:12 | 显示全部楼层
如果其他人可以使用/改进/调整它以适应其他内容,以下是我最终确定的代码:
 
  1. 6
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-12 19:43 , Processed in 1.098993 second(s), 71 queries .

© 2020-2025 乐筑天下

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