明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: lidaxiu

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

  [复制链接]
发表于 2012-10-10 13:56:31 | 显示全部楼层
再来个实体均布,就更好了
发表于 2012-10-10 20:44:00 | 显示全部楼层
将G版的程序,稍微改动了一下,将物体横向和竖向同时批量对齐
(defun c:pldq ();;;将物体横向和竖向同时批量对齐
  ;;选择集转表
  (defun gxl-Sel-SS->List        (ss / i s )
  (if ss
  (repeat (setq i (sslength ss))
  (setq s (cons (ssname ss (setq i (1- i))) s))
    )
    )
)
  ;;计算物体中心点
  (defun gxl-getboxCenter (e1 / obj minpoint maxpoint)
  (if (= 'ENAME (type e1))
  (setq obj (vlax-ename->vla-object e1)) ;转换图元名
    (setq obj e1)
    )
  (vla-GetBoundingBox obj 'minpoint 'maxpoint)
                                        ;取得包容图元的最大点和最小点
  (setq minpoint (vlax-safearray->list minpoint)) ;把变体数据转化为表
;;;  (setq maxpoint (vlax-safearray->list maxpoint)) ;把变体数据转化为表
;;;  (setq p (mapcar '+ minpoint maxpoint))
;;;    (mapcar '(lambda (x) (* 0.5 x)) p)
    minpoint
)
  ;;主程序
  (setq cmdecho (getvar 'cmdecho))
  (setq osmode (getvar 'osmode))
  (setvar 'osmode 0)
  (setvar 'cmdecho 0)
  (princ "\n选择水平基准物体:")
  (setq s1 (ssget))
  (princ "\n选择要对齐物体:")  
  (setq s2 (ssget))
  (setq s1-1 (getpoint "选取竖直对齐点位置:"))
  (setq s1 (GXL-SEL-SS->LIST s1)
        s2 (GXL-SEL-SS->LIST s2)
        )
  (setq s1 (mapcar '(lambda (x) (list x (GXL-GETBOXCENTER x))) s1))
  (setq s1 (vl-sort s1 '(lambda (a b) (> (cadadr a) (cadadr b))) )) ;_ 按Y从大到小排序
  (setq s2 (mapcar '(lambda (x) (list x (GXL-GETBOXCENTER x))) s2))
  (setq s2 (vl-sort s2 '(lambda (a b) (> (cadadr a) (cadadr b))) )) ;_ 按Y从大到小排序
  (setq n 0)
  (repeat (length s1)
    (setq e1 (car (nth n s1))
          p1 (cadr (nth n s1))
          )
    (if (setq e2 (car (nth n s2)))
      (progn
        (setq p2 (cadr (nth n s2)))
        (setq p3 (list (car s1-1) (cadr p1) (caddr p2)))
        (command "move" e2 "" p2 p3)
        )
      )
    (setq n (1+ n))
    )
    (setvar 'osmode osmode)
    (setvar 'cmdecho cmdecho)
(princ)
  )
发表于 2012-10-10 22:38:18 | 显示全部楼层
本帖最后由 lz123456 于 2012-10-10 22:41 编辑

楼主改的还是只能水平对齐并不是物体中心对齐的,怎样以竖向物体为准对齐。最好是能加个选项,能水平,竖向对齐。2个功能合在一起

本帖子中包含更多资源

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

x
发表于 2012-10-11 18:35:16 | 显示全部楼层
有源码吗?
发表于 2012-10-11 19:47:17 | 显示全部楼层
灌水,不要惩罚我。。。
发表于 2012-10-11 20:17:34 | 显示全部楼层
本帖最后由 lz123456 于 2012-10-11 20:19 编辑

G大说只改几行就可以用于横向的,菜鸟一个实在是没懂。。最好是哪个老大帮忙改成横向,竖向的通用j,加个选项横,竖向。最好是UCS用。但是菜鸟一个,没一个老大帮忙。本来院长那能行,但不能为这功能按整个XCAD.

点评

研究了一下,没成功。竖向的对齐,用处不大吧。看哪位大侠出手!!!!  发表于 2012-10-12 21:15
发表于 2012-10-11 21:37:14 | 显示全部楼层
这个对齐程序,牛!
发表于 2012-10-12 09:03:13 | 显示全部楼层
G版程序必看,顶起来!
发表于 2012-10-12 09:51:32 | 显示全部楼层
学习了,集思广益!
发表于 2012-10-12 10:55:46 | 显示全部楼层
执行该段程序后返回:错误: no function definition: VLAX-ENAME->VLA-OBJECT
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-4-4 12:51 , Processed in 0.181412 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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