明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: lidaxiu

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

  [复制链接]
发表于 2013-8-5 13:40 | 显示全部楼层
学习了,好东西
发表于 2013-8-5 14:13 | 显示全部楼层
G版的....样样精华啊
发表于 2013-8-5 14:32 | 显示全部楼层
顶,G版
发表于 2013-8-5 17:49 | 显示全部楼层
又是回复看看,多看多学
发表于 2013-8-5 18:55 | 显示全部楼层
学习学习。谢谢分享
发表于 2013-9-21 17:22 | 显示全部楼层
我又修改了一下程序 ,看看能不能


;;修改的程序


;;对齐

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

      )


      (initget "H S")

      (setq key (getkword "[横向对齐(H)/竖向对齐(S)]:  " ) )

   (cond

    (

    (= key "H")  


      ;_ 按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    )


         

      )

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

       )   

    )



   


      (

      (= key "S")  

          ;_ 按X从大到小排序

          (setq s1 (mapcar '(lambda (x) (list x (GXL-GETBOXCENTER x))) s1))  

          (setq s1 (vl-sort s1 '(lambda (a b) (> (car(cadr a)) (car(cadr b)) ) ) ))


          (setq s2 (mapcar '(lambda (x) (list x (GXL-GETBOXCENTER x))) s2))  

          (setq s2 (vl-sort s2 '(lambda (a b) (> (car(cadr a)) (car(cadr b)) ) ) ))

               ;_ 表长比较

          (if  (> (length s1) (length s2) )


             (setq  TMP s2  s2 s1  s1 TMP    )


          )





          (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 p1) (cadr p2)  (caddr p2))) ;;得到对齐点      

                (command "move" e2 "" p2 p3)        

              ) )   

             (setq n (1+ n))   

          )   

      )

    )


      (setvar 'osmode osmode)   

      (setvar 'cmdecho cmdecho)

      (princ)  

)


评分

参与人数 1明经币 +1 收起 理由
lidaxiu + 1 赞一个!

查看全部评分

发表于 2013-9-23 10:06 | 显示全部楼层
顶G版,强,太牛
发表于 2013-9-23 11:37 | 显示全部楼层
厉害!!!!!!!!!!!!!
发表于 2013-9-24 15:10 | 显示全部楼层
学习一下 看看思路
发表于 2013-9-25 16:14 | 显示全部楼层
回帖只为看帖。
感谢gu版主。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-19 19:23 , Processed in 0.337796 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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