明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 57424|回复: 476

能不能实现图元批量对齐,请大师们指教了

  [复制链接]
发表于 2012-3-13 09:43:17 | 显示全部楼层 |阅读模式

本帖子中包含更多资源

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

x

点评

谢谢分享  发表于 2012-3-14 08:22
"觉得好,就打赏"
还没有人打赏,支持一下

本帖被以下淘专辑推荐:

发表于 2012-3-13 15:59:45 | 显示全部楼层
顶G版的!~~
回复 支持 0 反对 1

使用道具 举报

发表于 2012-3-13 16:41:06 | 显示全部楼层
回帖只为看贴回帖只为看贴回帖只为看贴回帖只为看贴回帖只为看贴
灌水,不要惩罚我。。。
回复 支持 1 反对 0

使用道具 举报

发表于 2012-3-13 15:58:54 | 显示全部楼层
本帖最后由 Gu_xl 于 2012-3-13 19:23 编辑


;;批量物体对齐
  1. (defun c:pldq ()
  2.   ;;选择集转表
  3.   (defun gxl-Sel-SS->List        (ss / i s )
  4.   (if ss
  5.   (repeat (setq i (sslength ss))
  6.   (setq s (cons (ssname ss (setq i (1- i))) s))
  7.     )
  8.     )
  9. )
  10.   ;;计算物体中心点
  11.   (defun gxl-getboxCenter (e1 / obj minpoint maxpoint)
  12.   (if (= 'ENAME (type e1))
  13.   (setq obj (vlax-ename->vla-object e1)) ;转换图元名
  14.     (setq obj e1)
  15.     )
  16.   (vla-GetBoundingBox obj 'minpoint 'maxpoint)
  17.                                         ;取得包容图元的最大点和最小点
  18.   (setq minpoint (vlax-safearray->list minpoint)) ;把变体数据转化为表
  19.   (setq maxpoint (vlax-safearray->list maxpoint)) ;把变体数据转化为表
  20.   (setq p (mapcar '+ minpoint maxpoint))
  21.     (mapcar '(lambda (x) (* 0.5 x)) p)
  22. )
  23.   ;;主程序
  24.   (setq cmdecho (getvar 'cmdecho))
  25.   (setq osmode (getvar 'osmode))
  26.   (setvar 'osmode 0)
  27.   (setvar 'cmdecho 0)
  28.   (princ "\n选择基准物体:")
  29.   (setq s1 (ssget))
  30.   (princ "\n选择要对齐物体:")
  31.   (setq s2 (ssget))
  32.   (setq s1 (GXL-SEL-SS->LIST s1)
  33.         s2 (GXL-SEL-SS->LIST s2)
  34.         )
  35.   (setq s1 (mapcar '(lambda (x) (list x (GXL-GETBOXCENTER x))) s1))
  36.   (setq s1 (vl-sort s1 '(lambda (a b) (> (cadadr a) (cadadr b))) )) ;_ 按Y从大到小排序
  37.   (setq s2 (mapcar '(lambda (x) (list x (GXL-GETBOXCENTER x))) s2))
  38.   (setq s2 (vl-sort s2 '(lambda (a b) (> (cadadr a) (cadadr b))) )) ;_ 按Y从大到小排序
  39.   (setq n 0)
  40.   (repeat (length s1)
  41.     (setq e1 (car (nth n s1))
  42.           p1 (cadr (nth n s1))
  43.           )
  44.     (if (setq e2 (car (nth n s2)))
  45.       (progn
  46.         (setq p2 (cadr (nth n s2)))
  47.         (setq p3 (list (car p2) (cadr p1) (caddr p2)))
  48.         (command "move" e2 "" p2 p3)
  49.         )
  50.       )
  51.     (setq n (1+ n))
  52.     )
  53.     (setvar 'osmode osmode)
  54.     (setvar 'cmdecho cmdecho)
  55. (princ)
  56.   )

本帖子中包含更多资源

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

x

点评

gu版,vla-GetBoundingBox 对mtext符合的不好,如果有多行文字,这个对齐效果就不好了  发表于 2012-12-31 17:27
学习了,要是横向和竖向同时批量对齐,那多好啊,请G版再次出手!!!!!!  发表于 2012-3-21 20:42

评分

参与人数 8明经币 +10 金钱 +35 收起 理由
英明神武的大叔 + 1 + 5 很给力!
成仔 + 1 赞一个!
yoyoho + 1 赞一个! 不错!
vlisp2012 + 1 学习了,要是横向和竖向同时批量对齐,那多.
lincctw_ccl + 1 赞一个!
ZZXXQQ + 3 + 30 赞一个!
yjr111 + 1 我估计G版写这个程序不会超过半小时
lidaxiu + 1 赞一个!

查看全部评分

回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2012-3-13 09:44:01 | 显示全部楼层
本帖最后由 lidaxiu 于 2012-3-13 10:19 编辑

想做程序,实现框选一个图元集合,然后批量对齐另一个图元集合,也就是上面的图能不能批量 先选 左边图元集,再选右边图元集, 一步就全步搞定,上面的程序是MSTEEL里的,我稍加改动而已
发表于 2012-3-13 10:07:42 | 显示全部楼层
求此LSP,谢谢
发表于 2012-3-13 11:37:44 | 显示全部楼层
lidaxiu 发表于 2012-3-13 09:44
想做程序,实现框选一个图元集合,然后批量对齐另一个图元集合,也就是上面的图能不能批量 先选 左边图元集 ...

可以参考一下我写的
http://bbs.mjtd.com/forum-3-1.html
发表于 2012-3-13 16:12:10 | 显示全部楼层
批量对齐不错不错
发表于 2012-3-13 16:37:06 | 显示全部楼层
看G版的程序
发表于 2012-3-13 16:39:58 | 显示全部楼层
G版的....样样精华啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-4-1 10:27 , Processed in 0.279187 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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