明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 6082|回复: 24

[提问] 物件居中问题

[复制链接]
发表于 2020-3-19 11:15:20 | 显示全部楼层 |阅读模式
找了很多论坛的居中效果都没有看到类似的
有没有A物件的相对位置不变居中在B物件上
现在的办法都是用小笨的中心线实施这个效果

抓取两物件的中心线居中放



本帖子中包含更多资源

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

x
发表于 2020-3-19 11:47:09 | 显示全部楼层
  1. (defun c:tt (/ A B CP1 CP2 E LL1 LL2 N1 N2 RU1 RU2 S1 S2)
  2.   (princ "\n选择第一组物件:")
  3.   (setq s1 (ssget))
  4.   (princ "\n选择第二组物件:")
  5.   (setq s2 (ssget))
  6.   (if (and s1 s2)
  7.     (progn
  8.       (repeat (setq n1 (sslength s1))
  9.         (setq e (ssname s1 (setq n1 (1- n1))))
  10.         (vla-GetBoundingBox (vlax-ename->vla-object e) 'a 'b)
  11.         (if ll1
  12.           (setq        ll1 (apply
  13.                       'mapcar
  14.                       (cons
  15.                         'min
  16.                         (cons ll1 (mapcar 'vlax-safearray->list (list a b)))
  17.                       )
  18.                     )
  19.                 ru1 (apply
  20.                       'mapcar
  21.                       (cons
  22.                         'max
  23.                         (cons ru1 (mapcar 'vlax-safearray->list (list a b)))
  24.                       )
  25.                     )
  26.           )
  27.           (setq        ll1 (apply
  28.                       'mapcar
  29.                       (cons 'min (mapcar 'vlax-safearray->list (list a b)))
  30.                     )
  31.                 ru1 (apply
  32.                       'mapcar
  33.                       (cons 'max (mapcar 'vlax-safearray->list (list a b)))
  34.                     )
  35.           )
  36.         )
  37.       )
  38.       (setq a nil
  39.             b nil
  40.       )
  41.       (setq cp1 (mapcar '* (mapcar '+ ll1 ru1) '(0.5 0.5 0.5)))
  42.       (repeat (setq n2 (sslength s2))
  43.         (setq e (ssname s2 (setq n2 (1- n2))))
  44.         (vla-GetBoundingBox (vlax-ename->vla-object e) 'a 'b)
  45.         (if ll2
  46.           (setq        ll2 (apply
  47.                       'mapcar
  48.                       (cons
  49.                         'min
  50.                         (cons ll2 (mapcar 'vlax-safearray->list (list a b)))
  51.                       )
  52.                     )
  53.                 ru2 (apply
  54.                       'mapcar
  55.                       (cons
  56.                         'max
  57.                         (cons ru2 (mapcar 'vlax-safearray->list (list a b)))
  58.                       )
  59.                     )
  60.           )
  61.           (setq        ll2 (apply
  62.                       'mapcar
  63.                       (cons 'min (mapcar 'vlax-safearray->list (list a b)))
  64.                     )
  65.                 ru2 (apply
  66.                       'mapcar
  67.                       (cons 'max (mapcar 'vlax-safearray->list (list a b)))
  68.                     )
  69.           )
  70.         )
  71.       )
  72.       (setq cp2 (mapcar '* (mapcar '+ ll2 ru2) '(0.5 0.5 0.5)))
  73.       (command "_.move" s1 "" (trans cp1 0 1) (trans cp2 0 1))
  74.     )
  75.   )
  76.   (princ)
  77. )

评分

参与人数 2金钱 +10 收起 理由
lxl217114 + 5 很给力!
tryhi + 5 赞一个!

查看全部评分

回复 支持 1 反对 0

使用道具 举报

发表于 2020-3-21 00:58:48 | 显示全部楼层
  • ;;;;取中点函数---enam 实体名-----------------------(一级)------------------------------
  • (defun e-mid (enam / ent typ obj cen_po pt pt10 pt13 pt14 pt15 dis ang)
  •   (setq ent (entget enam))
  •   (setq typ (dxf1 ent 0))
  •   (if (= typ "LINE")
  •     (setq pt (yy:mid (dxf1 ent 10) (dxf1 ent 11)))
  •   )
  •   (if (or (= typ "ARC") (= typ "SPLINE") (and (or (= typ "LWPOLYLINE") (= typ "OLYLINE")) (= (fy-recP enam) nil))) ;;;矩形非闭合多义线
  •     (progn
  •       (setq obj (en2obj enam))
  •       (setq dis (vlax-curve-getdistatparam obj (vlax-curve-getendparam obj)))
  •       (setq pt (vlax-curve-getPointAtDist obj (* dis 0.5))) ;取得中点
  •     )
  •   )
  •   (if (= typ "CIRCLE")
  •     (setq pt (dxf1 ent 10))
  •   )
  •   (if (= typ "DIMENSION")
  •     (progn
  •       (if (= (dxf1 ent 70) 37) ;;圆弧标注
  •         (progn
  •           (setq pt11 (dxf1 ent 11))
  •           (setq pt15 (dxf1 ent 15))
  •           (setq ang (angle pt11 pt15))
  •           (setq pt (polar pt11 ang (* (getvar "dimscale") (+ (* (getvar "dimtxt") 0.5) (getvar "dimgap")))))
  •         )
  •       )
  •       (if (= (dxf1 ent 70) 34) ;;角度标注
  •         (progn
  •           (setq pt11 (dxf1 ent 11))
  •           (setq pt13 (dxf1 ent 13))
  •           (setq pt15 (dxf1 ent 15))
  •           (setq ang (angle pt11 (yy:mid pt13 pt15)))
  •           (setq pt (polar pt11 ang (* (getvar "dimscale") (+ (* (getvar "dimtxt") 0.5) (getvar "dimgap")))))
  •         )
  •       )
  •       (if (vl-position "AcDbAlignedDimension" (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 100)) ent))) ;;;如果对齐32 线性 33 标注
  •         (progn
  •           (setq pt11 (dxf1 ent 10))
  •           (setq pt13 (dxf1 ent 13))
  •           (setq pt14 (dxf1 ent 14))
  •           (setq dis (distance pt14 pt13))
  •           (setq ang (angle pt14 pt13))
  •           (setq pt (polar pt10 ang (* dis 0.5)))
  •         )
  •       )
  •       (if (null pt)
  •         (setq pt (dxf1 ent 11))  ;;;标注文字中心,近似中点
  •       )
  •     )
  •   )
  •   (if (or (= typ "TEXT") (= typ "MTEXT"))
  •     (setq pt (yy:mid (car (txbox enam nil)) (caddr (txbox enam nil))))
  •   )
  •   (if (null pt)
  •     (setq cen_po (get-box (SL:PickSet-fromList (list enam)))
  •       pt (yy:mid (car cen_po) (cadr cen_po))
  •     )
  •   )
  •   pt
  • )
  • ;;----------------------------------------------------------------------------------------------
 楼主| 发表于 2020-3-19 12:02:16 | 显示全部楼层
G大出手,就是不一样阿,是我想要的效果
发表于 2020-3-20 13:10:06 | 显示全部楼层
G版又现江湖,支持支持
发表于 2020-3-20 13:17:15 | 显示全部楼层

终于重出江湖了
发表于 2020-3-20 13:29:21 | 显示全部楼层
G版又现江湖,支持支持
发表于 2020-3-20 13:34:03 | 显示全部楼层

   希望能实现这样的功能

本帖子中包含更多资源

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

x
发表于 2020-3-20 16:00:44 | 显示全部楼层

借楼问G版一个问题,不打开图的情况下,有没有办法执行类似于zoom那个的命令。即选择一个dwg文件后让其zoom到指定的角点坐标
发表于 2020-3-20 17:00:17 | 显示全部楼层
  批量执行某命令即可.很多批量工具.
发表于 2020-3-20 17:07:10 | 显示全部楼层
依然小小鸟 发表于 2020-3-20 13:34
希望能实现这样的功能

我的表格对齐工具,支持单行多行混排,水平竖直文本.只对齐文字,暂不处理其它图形.


本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2025-5-14 11:20 , Processed in 0.164850 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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