明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 454|回复: 12

[提问] 小白求助,框选实体在框选范围内自动居中且不改变相对位置???

[复制链接]
发表于 2023-10-30 14:12 | 显示全部楼层 |阅读模式
5明经币
画图的时候经常会遇到复制内容到图框中,但摆放位置都是大概得
能否实现执行命令,框选点1到点2,则点1到点2中实体对象不改变实体原有位置,整体居中到点1到点2的矩形中心
如图





附件: 您需要 登录 才可以下载或查看,没有账号?注册

最佳答案

查看完整内容

看下是不是(vl-load-com)没加载,我加进去了,用附件程序试下
发表于 2023-10-30 14:12 | 显示全部楼层
本帖最后由 ziyouwzb 于 2023-10-30 16:41 编辑
muai2010 发表于 2023-10-30 16:38
就是需要这个效果,为什么我测试,不是居中的呢

看下是不是(vl-load-com)没加载,我加进去了,用附件程序试下

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
回复

使用道具 举报

发表于 2023-10-30 14:36 | 显示全部楼层
本帖最后由 wungqiao3 于 2023-10-30 14:40 编辑

  • ;-----------------------------------------------------------
  • ;功    能:    居中
  • ;-----------------------------------------------------------
  • (defun C:TT (/ p1 p2 p5 q-2p-mid q-vla-9p s)
  •   (vl-load-com)
  •   (defun Q-2p-Mid (pt1 pt2)
  •     (mapcar '(lambda (x y) (/ (+ x y) 2.0)) pt1 pt2)
  •   )
  •   (defun Q-VLA-9P (ss pn / i maxx maxx0 maxy maxy0 minx minx0 miny miny0 name p1 p2 p3 p4 p5 p6 p7 p8 p9 pmax pmin pp1 pp2)
  •     (if (= 'ENAME (type ss))
  •       (setq ss (ssadd ss (ssadd)))
  •     )
  •     (cond
  •       ((listp ss)
  •         (progn (setq pp1 (car ss) pp2 (cadr ss))
  •           (setq
  •             minx0 (min (car pp1) (car pp2))
  •             miny0 (min (cadr pp1) (cadr pp2))
  •             maxx0 (max (car pp1) (car pp2))
  •             maxy0 (max (cadr pp1) (cadr pp2))
  •           )
  •         )
  •       )
  •       ((= 'PICKSET (type ss))
  •         (progn (setq minx0 1e99 miny0 1e99 maxx0 -1e99 maxy0 -1e99)
  •           (setq i -1)
  •           (while (setq name (ssname ss (setq i (1+ i))))
  •             (vla-getboundingbox (vlax-ename->vla-object name) 'minp 'maxp)
  •             (setq pmax (vlax-safearray->list maxp)
  •               pmin (vlax-safearray->list minp)
  •             )
  •             (setq minx (car pmin)  maxx (car pmax)  miny (cadr pmin)  maxy (cadr pmax))
  •             (if (> minx0 minx) (setq minx0 minx))
  •             (if (> miny0 miny) (setq miny0 miny))
  •             (if (< maxx0 maxx) (setq maxx0 maxx))
  •             (if (< maxy0 maxy) (setq maxy0 maxy))
  •           )
  •         )
  •       )
  •     )
  •     (setq p1 (list minx0 miny0 0.0))
  •     (setq p9 (list maxx0 maxy0 0.0))
  •     (setq p3 (list (car p9) (cadr p1) 0.0))
  •     (setq p7 (list (car p1) (cadr p9) 0.0))
  •     (setq p2 (Q-2p-Mid p1 p3))
  •     (setq p4 (Q-2p-Mid p1 p7))
  •     (setq p6 (Q-2p-Mid p3 p9))
  •     (setq p8 (Q-2p-Mid p7 p9))
  •     (setq p5 (Q-2p-Mid p1 p9))
  •     (nth (1- pn) (list p1 p2 p3 p4 p5 p6 p7 p8 p9))
  •   )
  •   (if (and
  •         (princ "\n 选择需要居中的对象:")
  •         (setq s (ssget ":S"))
  •         (setq p1 (getpoint "\n 指定矩形范围第1点:"))
  •         (setq p2 (getcorner p1 "\n 指定矩形范围第2点:"))
  •         (setq p5 (Q-VLA-9P s 5))
  •       )
  •     (vl-cmdf "MOVE" s "" p5 (Q-2p-Mid p1 p2))
  •   )
  •   (princ)
  • )

评分

参与人数 1明经币 +1 收起 理由
muai2010 + 1 赞一个!

查看全部评分

回复

使用道具 举报

发表于 2023-10-30 14:54 | 显示全部楼层
本帖最后由 ziyouwzb 于 2023-10-30 16:37 编辑

(defun C:jz ( / ss ssbox ptz ptz pt1 pt2 pt3 pt4 )
(setq ss (ssget))
(setq ssbox(getssbox ss))
(setq ptz(caddr ssbox))
(setq pt1 (getpoint "输入第一点"))
(setq pt2 (getcorner pt1 "输入第二点"))      
(setq pt3 (mapcar '* '(0.5 0.5) (mapcar '+ pt1 pt2)))
(setq pt4 (trans pt3 0 1))
(command "move" ss "" ptz pt4)
(princ);;静默退出
);;;end defun
;---获取选择集左下角,右上角,中心点坐标
(defun getssbox(*ss* / en n ptlx ptly ptrx ptry pysj pzxd pzxj ssbox)
        (vl-load-com)
        (setq ptlx '())
        (setq ptly '())
        (setq ptrx '())
        (setq ptry '())
        (repeat (setq n(sslength *ss*))
                (setq en(ssname *ss* (setq n(1- n))))
                (vla-getboundingbox (vlax-ename->vla-object en) 'minp 'maxp)
                (setq ptlx(cons (car (vlax-safearray->list minp)) ptlx));---选择集所有图元左下角X值形成的点表
                (setq ptly(cons (cadr (vlax-safearray->list minp)) ptly));---选择集所有图元左下角y值形成的点表
                (setq ptrx(cons (car (vlax-safearray->list maxp)) ptrx));---选择集所有图元右上角x值形成的点表
                (setq ptry(cons (cadr (vlax-safearray->list maxp)) ptry));---选择集所有图元右上角Y值形成的点表
        )
        (setq pzxj(list (apply 'min ptlx) (apply 'min ptly)))
        (setq pysj(list (apply 'max ptrx) (apply 'max ptry)))
        (setq pzxd (mapcar'(lambda (X Y) (/ (+ X Y) 2)) pzxj pysj))
        (setq ssbox(list pzxj pysj pzxd))
        ssbox
)

回复

使用道具 举报

 楼主| 发表于 2023-10-30 15:26 | 显示全部楼层
wungqiao3 发表于 2023-10-30 14:36
  • ;-----------------------------------------------------------
  • ;功    能:    居中
  • ;------ ...

  • 感谢提供,不过似乎有点问题,不能完全居中,什么问题呢?


    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?注册

    x
    回复

    使用道具 举报

     楼主| 发表于 2023-10-30 15:27 | 显示全部楼层
    ziyouwzb 发表于 2023-10-30 14:54
    (defun C:jz ( / ss ssbox ptz ptz pt1 pt2 pt3 pt4 )
    (setq ss (ssget))
    (setq ssbox(getssbox ss))

    谢谢,不过似乎有点问题,不能完全居中,和楼上提供什么问题呢?

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?注册

    x
    回复

    使用道具 举报

    发表于 2023-10-30 15:57 | 显示全部楼层
    本帖最后由 ziyouwzb 于 2023-10-30 16:07 编辑

    多行文字4个角点太大了,容易出现你说的问题,就是这几个角点也算文字的范围,把多行文字的角点缩小下就可以了,如图1改成图2那样,或者把多行文字炸开成单行文字,直线和圆 单行文字等实体不受影响。文字要是不处理,目前还不知道怎么解决。

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?注册

    x
    回复

    使用道具 举报

     楼主| 发表于 2023-10-30 16:10 | 显示全部楼层
    ziyouwzb 发表于 2023-10-30 15:57
    多行文字4个角点太大了,容易出现你说的问题,就是这几个角点也算文字的范围,把多行文字的角点缩小下就可 ...

    老哥,我截图的是单行文字,不是多行哈,多行我还没测试,嘿嘿,我吧附件传上来了,我是用这个测试不居中的,麻烦看下哈

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?注册

    x
    回复

    使用道具 举报

    发表于 2023-10-30 16:22 | 显示全部楼层
    本帖最后由 ziyouwzb 于 2023-10-30 16:39 编辑
    muai2010 发表于 2023-10-30 16:10
    老哥,我截图的是单行文字,不是多行哈,多行我还没测试,嘿嘿,我吧附件传上来了,我是用这个测试不居中 ...

    我这边出来的是右边的效果,看是不是你需要的。要是的话,看下程序运行有没有提示很么错误

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?注册

    x

    点评

    大佬厉害  发表于 2023-10-30 17:26
    回复

    使用道具 举报

     楼主| 发表于 2023-10-30 16:38 | 显示全部楼层
    ziyouwzb 发表于 2023-10-30 16:22
    我这边出来的是右边的效果,看是不是你需要的。要是的话,看下程序运行有没有提示很么错误

    就是需要这个效果,为什么我测试,不是居中的呢
    回复

    使用道具 举报

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

    本版积分规则

    小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
    ©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

    GMT+8, 2024-5-2 11:38 , Processed in 1.079163 second(s), 25 queries , Gzip On.

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

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