找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1535|回复: 16

[编程申请] 求文字批量自动移动到矩形内的小程序

[复制链接]
发表于 2020-7-3 09:59:10 | 显示全部楼层 |阅读模式
悬赏50D豆已解决
小女子出版时,由于图纸是几家施工单位发出来的竣工图,换图框的时候需要将图纸名称保留并移动到自己公司图框的相应位置,能不能帮我写个小程序,是实现如图所示,左上为原文字和矩形位置示意,能否实现运行程序后文字位置变成右边所示,或者是文字按照上下顺序连接后变成下边所示,基本每个图框中的文字和矩形位置都类似,或者相距很近,有的甚至已经在矩形内(但是没有居中,改为居中就最好),要能批量进行就更好,有大神愿意帮帮我吗,谢谢了
111.png

最佳答案

查看完整内容

注意: 自己按实际修改第1-4句关于X1,X2,Y1,Y2的赋值,程序中都是50,无需画出小矩形 注意: 自己按实际修改第1-4句关于X1,X2,Y1,Y2的赋值,程序中都是50,无需画出小矩形
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 586个

财富等级: 财运亨通

发表于 2020-7-3 09:59:11 | 显示全部楼层
本帖最后由 王鹏_pBZlo 于 2020-7-16 16:19 编辑

注意: 自己按实际修改第1-4句关于X1,X2,Y1,Y2的赋值,程序中都是50,无需画出小矩形

  1. (defun c:tt( / x1 x2 y1 y2 xi xa yi ya xc yu yc yd ss osm i ent ptlst sstxt txt1 txt2 txt3 txt1par txt2par)
  2.         (setq x1 50)
  3.         (setq x2 50)
  4.         (setq y1 50)
  5.         (setq y2 50)
  6.         (setq ss (ssget (list (cons 0 "LWPOLYLINE")(cons 90 4)(cons 70 1))))
  7.         (if (not ss) (vl-exit-with-value 0))
  8.         (command "undo" "be")
  9.         (setq osm (getvar "osmode"))
  10.         (setvar "osmode" 0)
  11.         (command "ucs" "")
  12.         (setq i -1)
  13.         (while (setq ent (ssname ss (setq i (1+ i))))
  14.         (setq ptlst (vl-remove-if (function (lambda(e) (/= 10 (car e)))) (entget ent)))
  15.         (setq ptlst (mapcar 'cdr ptlst))
  16.         (setq xi (min (car (car ptlst)) (car (caddr ptlst))))
  17.         (setq xa (max (car (car ptlst)) (car (caddr ptlst))))
  18.         (setq yi (min (cadr (car ptlst)) (cadr (caddr ptlst))))
  19.         (setq ya (max (cadr (car ptlst)) (cadr (caddr ptlst))))
  20.         (setq xc (* 0.5 (- (+ xi x1 xa) x2)))
  21.         (setq yc (* 0.5 (- (+ yi y1 ya) y2)))
  22.         (setq yu (+ (* 0.75 (- ya y2)) (* 0.25 (+ yi y1))))
  23.         (setq yd (+ (* 0.25 (- ya y2)) (* 0.75 (+ yi y1))))
  24.                 (command "zoom" "o" ent "")
  25.                 (if (setq sstxt (ssget "w" (car ptlst) (caddr ptlst) (list (cons 0 "TEXT"))))
  26.                     (progn        (setq txt1 (ssname sstxt 0) txt2 (ssname sstxt 1))
  27.                         (if (and txt2 (> (caddr (assoc 11 (entget txt2))) (caddr (assoc 11 (entget txt1)))))
  28.                             (setq txt3 txt1 txt1 txt2 txt2 txt3 txt3 nil)
  29.                         )
  30.             (setq txt1par (entget txt1))
  31.             (setq txt1par (subst (cons 71 0) (assoc 71 txt1par) txt1par))
  32.             (setq txt1par (subst (cons 72 4) (assoc 72 txt1par) txt1par))
  33.             (setq txt1par (subst (cons 73 0) (assoc 73 txt1par) txt1par))

  34.                         (if txt2
  35.                             (progn        (setq txt2par (entget txt2))
  36.                         (setq txt2par (subst (cons 71 0) (assoc 71 txt2par) txt2par))
  37.                         (setq txt2par (subst (cons 72 4) (assoc 72 txt2par) txt2par))
  38.                         (setq txt2par (subst (cons 73 0) (assoc 73 txt2par) txt2par))
  39.                         (setq txt2par (subst (list 11 xc yd) (assoc 11 txt2par) txt2par))
  40.                         (entmod txt2par)
  41.                         (setq txt1par (subst (list 11 xc yu) (assoc 11 txt1par) txt1par))
  42.                         (entmod txt1par)
  43.                             )
  44.                             (entmod (subst (list 11 xc yc)(assoc 11 txt1par) txt1par))
  45.                         )
  46.                     )
  47.                 )        (command "zoom" "P")
  48.         )        (setvar "osmode" osm)
  49.         (command "undo" "e")
  50.         (princ)
  51. )

注意: 自己按实际修改第1-4句关于X1,X2,Y1,Y2的赋值,程序中都是50,无需画出小矩形
000.png

点评

达到了想要的效果 非常感谢帮助  详情 回复 发表于 2020-7-16 16:43
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2020-7-3 12:41:59 | 显示全部楼层
文字居中,论坛有插件,搜索下
另外,有问题,除了图片外,上传下你的DWG

点评

图纸里 把文字自动移动到红色框的位置 然后要居中 效果的话如截图所示  详情 回复 发表于 2020-7-3 22:47
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 19个

财富等级: 恭喜发财

发表于 2020-7-3 12:52:35 | 显示全部楼层

点评

这几天一直上不了论坛 刚刚上来看看到 谢谢你的帮助 但是这不是我想要的  详情 回复 发表于 2020-7-6 22:05
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

 楼主| 发表于 2020-7-3 22:47:19 | 显示全部楼层
newer 发表于 2020-7-3 12:41
文字居中,论坛有插件,搜索下
另外,有问题,除了图片外,上传下你的DWG

图纸里   把文字自动移动到红色框的位置  然后要居中    效果的话如截图所示

图框.zip

582.06 KB, 下载次数: 22, 下载积分: D豆 -1 , 活跃度 1

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 225个

财富等级: 日进斗金

发表于 2020-7-4 08:33:51 | 显示全部楼层
谢谢分享!!!!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

 楼主| 发表于 2020-7-6 22:05:25 | 显示全部楼层
Lisphk 发表于 2020-7-3 12:52
  • 【排版】选集居中22 个回复 - 345 次查看**** 本内容被作者隐藏 ****2020-5-20 00:05 - newer - 每日 ...

  • 这几天一直上不了论坛   刚刚上来看看到   谢谢你的帮助  但是这不是我想要的

    点评

    哪里不是你要的? 文字居中与最近的曲线中心10 个回复 - 114 次查看**** 本内容被作者隐藏 ****2020-4-29 18:46 - newer - 每日插件  详情 回复 发表于 2020-7-7 00:05
    论坛插件加载方法
    发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
    如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
    如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
    回复

    使用道具 举报

    已领礼包: 40个

    财富等级: 招财进宝

    发表于 2020-7-7 00:05:30 | 显示全部楼层
    小小的人 发表于 2020-7-6 22:05
    这几天一直上不了论坛   刚刚上来看看到   谢谢你的帮助  但是这不是我想要的

    哪里不是你要的?

    文字居中与最近的曲线中心
    10 个回复 - 114 次查看
    **** 本内容被作者隐藏 ****
    2020-4-29 18:46 - newer - 每日插件

    点评

    这个文字必须要与曲线有交叉 而且只能执行一行文字 没有交叉 2行或者以上的 是不能被移动到矩形内的  详情 回复 发表于 2020-7-7 09:27
    论坛插件加载方法
    发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
    如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
    如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
    回复

    使用道具 举报

     楼主| 发表于 2020-7-7 09:27:01 | 显示全部楼层
    newer 发表于 2020-7-7 00:05
    哪里不是你要的?

    文字居中与最近的曲线中心10 个回复 - 114 次查看**** 本内容被作者隐藏 ****2020-4 ...

    这个文字必须要与曲线有交叉     而且只能执行一行文字      没有交叉   2行或者以上的  是不能被移动到矩形内的
    TIM截图20200707092325.png
    论坛插件加载方法
    发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
    如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
    如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
    回复

    使用道具 举报

    已领礼包: 586个

    财富等级: 财运亨通

    发表于 2020-7-9 20:45:39 | 显示全部楼层
    本帖最后由 王鹏_pBZlo 于 2020-7-9 20:52 编辑

    1. (defun c:tt( / ss osm i ent bp sstxt txt1 txt2 txt3)
    2.         (defun point(pbase sx sy) (list (+ (car pbase) sx)(+ (cadr pbase) sy)))
    3.         (setq ss (ssget "x" (list (cons 0 "INSERT")(cons 2 "杰赛图签"))))
    4.         (if (not ss) (vl-exit-with-value 0))
    5.         (command "undo" "be")
    6.         (setq osm (getvar "osmode"))
    7.         (setvar "osmode" 0)
    8.         (command "ucs" "")
    9.         (setq i -1)
    10.         (while (setq ent (ssname ss (setq i (1+ i))))
    11.                 (setq bp (cdr (assoc 10 (entget ent))))
    12.                 (command "zoom" "o" ent "")
    13.                 (if (setq sstxt (ssget "w" bp (point bp -180 30) (list (cons 0 "TEXT"))))
    14.                     (progn        (setq txt1 (ssname sstxt 0) txt2 (ssname sstxt 1))
    15.                         (if (and txt2 (> (caddr (assoc 11 (entget txt2))) (caddr (assoc 11 (entget txt1)))))
    16.                             (setq txt3 txt1 txt1 txt2 txt2 txt3 txt3 nil)
    17.                         )
    18.                         (if txt2
    19.                             (progn        (entmod (subst (cons 11 (point bp -45 12.75))(assoc 11 (entget txt1)) (entget txt1)))
    20.                                 (entmod (subst (cons 11 (point bp -45 8.25))(assoc 11 (entget txt2)) (entget txt2)))
    21.                             )
    22.                             (entmod (subst (cons 11 (point bp -45 10.5))(assoc 11 (entget txt1)) (entget txt1)))
    23.                         )
    24.                     )
    25.                 )        (command "zoom" "P")
    26.         )        (setvar "osmode" osm)
    27.         (command "undo" "e")
    28.         (princ)
    29. )

    点评

    最好是不用管图框 我会在图名的那里画一个小矩形 只要鞥呢识别那个矩形就行 因为我做的不止一家的出版 不同公司 图框不一样的  详情 回复 发表于 2020-7-16 11:04
    运行后没反应 怎么回事 是不是要设置什么东西啊  详情 回复 发表于 2020-7-16 11:00
    论坛插件加载方法
    发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
    如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
    如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
    回复

    使用道具 举报

     楼主| 发表于 2020-7-16 11:00:37 | 显示全部楼层

    运行后没反应  怎么回事    是不是要设置什么东西啊
    论坛插件加载方法
    发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
    如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
    如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
    回复

    使用道具 举报

     楼主| 发表于 2020-7-16 11:04:57 | 显示全部楼层

    最好是不用管图框   我会在图名的那里画一个小矩形      只要鞥呢识别那个矩形就行     因为我做的不止一家的出版    不同公司 图框不一样的
    论坛插件加载方法
    发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
    如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
    如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
    回复

    使用道具 举报

    已领礼包: 586个

    财富等级: 财运亨通

    发表于 2020-7-16 11:23:39 | 显示全部楼层
    选择图框标题栏图块是因为文字都在标题栏图块范围内。如果是矩形,不好判断在多大范围内搜索文字

    点评

    要怎么设置的 我运行一直不成功  详情 回复 发表于 2020-7-16 11:30
    论坛插件加载方法
    发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
    如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
    如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
    回复

    使用道具 举报

     楼主| 发表于 2020-7-16 11:30:23 | 显示全部楼层
    王鹏_pBZlo 发表于 2020-7-16 11:23
    选择图框标题栏图块是因为文字都在标题栏图块范围内。如果是矩形,不好判断在多大范围内搜索文字

    要怎么设置的   我运行一直不成功
    论坛插件加载方法
    发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
    如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
    如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
    回复

    使用道具 举报

    已领礼包: 586个

    财富等级: 财运亨通

    发表于 2020-7-16 11:39:23 | 显示全部楼层
    本帖最后由 王鹏_pBZlo 于 2020-7-16 11:40 编辑

    不用设置。我是按照你上传的图纸中的图块名称来做的。选择的是标题栏图块,不是你画的矩形框

    点评

    我试了一下 只有那个原文件可以运行 分解重新成块都不行了 而且换一家设计院的图框也是用不了了 能不能改为识别矩形呢 画一个大矩形一个小矩形 大矩形内的文字移动到小矩形也是可以的 这样就避免  详情 回复 发表于 2020-7-16 14:08
    论坛插件加载方法
    发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
    如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
    如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
    回复

    使用道具 举报

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

    本版积分规则

    QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

    GMT+8, 2024-5-29 13:21 , Processed in 0.466743 second(s), 60 queries , Gzip On.

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表