明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: lidaxiu

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

  [复制链接]
发表于 2012-5-23 20:49 | 显示全部楼层
已经用上了,好顺手呀,谢G版了。
发表于 2012-5-24 11:32 | 显示全部楼层
;; 对齐
;; 兴趣来了,GX基础上改了下,未测试,不行再改。


(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))  


;;主程序  
      (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 (GXL-SEL-SS->LIST s1)        
            s2 (GXL-SEL-SS->LIST s2)        
      )  
      ;_ 按Y从大到小排序
      (setq s1 (mapcar '(lambda (x) (list x (GXL-GETBOXCENTER x))) s1))  
      (setq s1 (vl-sort s1 '(lambda (a b) (> (cadadr a) (cadadr b))) ))

        
      (setq s2 (mapcar '(lambda (x) (list x (GXL-GETBOXCENTER x))) s2))  
      (setq s2 (vl-sort s2 '(lambda (a b) (> (cadadr a) (cadadr b))) ))

      ;_ 表长比较
      (if  (> (length s1) (length s2) )

         (setq  
  TMP s2    s2 s1   s1 TMP   )

         
      )



      
      (initget "H S")
      (setq key (getkword "[横向对齐(H)/竖向对齐(S)]:  " ) )
      (cond
        (
          (= key "H")  (hen)
        )
        (
          (= key "S")  (shu)
        )
      )



     (defun hen()
  
      (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 p2) (cadr p1) (caddr p2)))        
           (command "move" e2 "" p2 p3)        
         ) )   
         (setq n (1+ n))   
      )   

     )

     (defun shu()
  
      (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 (cadr p2) (car p1) (caddr p2)))        
           (command "move" e2 "" p2 p3)        
         ) )   
         (setq n (1+ n))   
      )   

     )



      (setvar 'osmode osmode)   
      (setvar 'cmdecho cmdecho)
      (princ)  
)
 楼主| 发表于 2012-5-24 21:17 | 显示全部楼层
恩不错,可是没运行成功呢,提示  no function definition: HEN
发表于 2012-5-25 10:03 | 显示全部楼层
crazylsp
运行你修改的那后,无反应。那对齐没效果。cad2010 64
发表于 2012-5-25 10:41 | 显示全部楼层
看看情况,拿分走人
发表于 2012-5-26 22:45 | 显示全部楼层
学习G版的招数
发表于 2012-6-10 00:31 | 显示全部楼层
G版太强大了
发表于 2012-6-19 14:34 | 显示全部楼层
看起来这个程序非常不错
发表于 2012-6-19 15:14 | 显示全部楼层
批量对齐不错不错
发表于 2012-6-19 15:21 | 显示全部楼层
谢谢分享程序。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-17 13:06 , Processed in 0.286170 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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