明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 654|回复: 7

[函数] SLdesign V3.0 表格居中代码原理探讨

[复制链接]
发表于 2026-1-10 10:22:15 | 显示全部楼层 |阅读模式
本帖最后由 尘缘一生 于 2026-1-10 11:05 编辑

对于表格居中,本坛代码不少,但是满足要求却很难,
那么表格哪,里面可能各种实体,它并不一定仅是文字,表格的画法也不一定是直线,还有可能是多段线,多于两点的多段线,等等,
那么三领哪,力求一种框选表格,实现里面每个格中实体居中的办法,注意:是格中实体作为一个集合居中即可了
一直使用,一直不断修改,似乎完美达到要求,还很漫长的探索......
代码如下:期待高手进一步完善了,
  1. ;;表格实体居中------
  2. (defun sl-bjz (/ wt)
  3.   (if (setq wt (ssget '((0 . "*TEXT,CIRCLE,ARC,ELLIPSE,DIMENSION,LEADER,INSERT,ATTDEF,TCH_ARROW,TCH_TEXT,TCH_DRAWINGNAME,TCH_MULTILEADER,TCH_ELEVATION,SPLINE"))))
  4.     (ss-bjz wt)
  5.   )
  6. )
  7. ;三领设计功能代码原理展示
  8. ;Modify By SLdesign V3.0 尘缘一生 QQ:15290049
  9. ;;s1 框选(整体表格选择集)居中--注意:需排除了*P*LINE线类选择--(一级)----
  10. (defun ss-bjz (s1 / elis tp n d en p0 p1 p11 p13 pts pls ss nam obj)
  11.   (_undo1)
  12.   (setq elis (ss-enlst s1)) ;选择集转表
  13.   (while (setq en (car elis))
  14.     (setq tp (cdr (assoc 0 (entget en))))
  15.     (cond
  16.       ((= tp "CIRCLE")
  17.         (setq d (/ (vlax-curve-getdistatparam en (vlax-curve-getendparam en)) 30) pts nil n -1)
  18.         (repeat 31
  19.           (setq n (1+ n) pts (cons (vlax-curve-getpointatdist (vlax-ename->vla-object en) (* d n)) pts))
  20.         )
  21.       )
  22.       ((= tp "ELLIPSE")
  23.         (earc->pline en)
  24.         (setq pts (get-pl-pt (entlast)))
  25.       )
  26.       (t
  27.         (setq pts (slget-enbox en))
  28.         (entdel en)
  29.         (if (setq nam (sl-bound (mapcar '(lambda (x y) (* (+ x y) 0.5)) (car pts) (cadr pts))))
  30.           (progn
  31.             (setq pts (get-pl-pt nam))
  32.             (entdel nam)
  33.           )
  34.         )
  35.         (entdel en)
  36.       )
  37.     )
  38.     (if pts
  39.       (progn
  40.         (setq p0 (mapcar '(lambda (x y) (* (+ x y) 0.5)) (apply 'mapcar (cons 'min pts)) (apply 'mapcar (cons 'max pts))))
  41.         (setq ss (ssget "WP" pts))
  42.         (if (and ss (> (sslength ss) 0))
  43.           (progn
  44.             (setq n -1)
  45.             (while (setq nam (ssname ss (setq n (1+ n)))) (if (not (ssmemb nam s1)) (ssdel nam ss)))
  46.             (setq n (sslength ss))
  47.             (cond
  48.               ((= n 1)
  49.                 (setq obj (vlax-ename->vla-object (setq nam (ssname ss 0))))
  50.                 (vla-getboundingbox obj 'p11 'p13)
  51.                 (setq p11 (vlax-safearray->list p11) p13 (vlax-safearray->list p13))
  52.                 (setq p1 (mapcar '(lambda (x y) (* (+ x y) 0.5)) p11 p13))
  53.                 (if (> (distance p1 p0) 0.01) (vla-move obj (vlax-3d-point p1) (vlax-3d-point p0)))
  54.               )
  55.               ((> n 1)
  56.                 (setq pls (get-ssbox ss) p1 (mapcar '(lambda (x y) (* (+ x y) 0.5)) (car pls) (cadr pls))) (if (> (distance p1 p0) 0.01) (sl:move ss p1 p0))
  57.               )
  58.             )
  59.             (setq n -1)
  60.             (while (setq nam (ssname ss (setq n (1+ n))))
  61.               (if (member (cdr (assoc 0 (entget nam))) '("ELLIPSE" "CIRCLE"))
  62.                 (setq elis (append elis (list nam)))
  63.                 (vl-remove nam elis)
  64.               )
  65.             )
  66.           )
  67.         )
  68.       )
  69.     )
  70.     (setq elis (cdr elis))
  71.   )
  72.   (_undo2)
  73. )
SLdesign V3.0  三领设计下载如下:
通过网盘分享的文件:三领设计 V3.0
链接: https://pan.baidu.com/s/1UAWlIANHP1Vb9ICG0ZuPdA?pwd=8tny 提取码: 8tny
GIF不难看出,代码尚有个别区格失败了,^_^

本帖子中包含更多资源

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

x
"觉得好,就打赏"
还没有人打赏,支持一下
回复

使用道具 举报

发表于 2026-1-10 18:11:18 | 显示全部楼层
用mini插件,mini的居中写的蛮好的。
回复 支持 1 反对 0

使用道具 举报

发表于 2026-1-10 11:24:02 | 显示全部楼层
赞,这个功能非常不错
回复 支持 反对

使用道具 举报

发表于 2026-1-10 11:26:49 | 显示全部楼层
学习了,线条表格也遇到了这个问题,一直遗留到现在,总算有个领路的了
回复 支持 反对

使用道具 举报

发表于 2026-1-10 12:05:21 | 显示全部楼层
挺好的了,表格用的比较少
回复 支持 反对

使用道具 举报

发表于 2026-1-10 20:59:52 | 显示全部楼层
天正的表格炸开后文字居中都不怎么好用
回复 支持 反对

使用道具 举报

发表于 2026-1-11 11:18:57 | 显示全部楼层
陈总v5,这个还涉及到选择集分堆,有时候并不是希望每个图元对中。
回复 支持 反对

使用道具 举报

发表于 2026-1-11 11:36:52 | 显示全部楼层
直接用 Table 就得了,何必自己给自己找麻烦?
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-19 16:08 , Processed in 0.192878 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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