明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3712|回复: 9

[源码] 批量将圆生成正方形,椭圆生成矩形,矩形生成椭圆,正方形生成圆

  [复制链接]
发表于 2013-11-20 15:02:46 | 显示全部楼层 |阅读模式
;;;批量将圆生成正方形,椭圆生成矩形,矩形生成椭圆,正方形生成圆
;;;by edata@2013年11月20日
;;;命令 e2r

  1. ;;;批量将圆生成正方形,椭圆生成矩形,矩形生成椭圆,正方形生成圆
  2. ;;;by edata@2013年11月20日
  3. ;;;命令 e2r
  4. (defun c:e2r(/ msg1 msg2 ss en e p0 longp0 shorts p02 ds ang1 ang2 ds2 pts
  5.        pt ANG ANG11 DS1 DS3 DS4 P1 P11 P11X P2 P3 P4 P40 PT C PT PX1 PX2 PX3 PX4)
  6.   (vl-load-com)
  7.   (setq *error*_Old *error*)  ;保存出错处理函数
  8.   (setq *error* *error*_New)
  9.   (setq msg1 "\n选择圆,椭圆,矩形:")
  10.   (setq msg2 "\n未选择对象")
  11.   (princ msg1)
  12.   (if (setq ss(ssget '((0 . "ELLIPSE,LWPOLYLINE,circle"))))
  13.     (progn
  14.       (vla-StartUndoMark(vla-get-ActiveDocument (vlax-get-acad-object)));结束标记
  15.     (while (setq en(ssname ss 0))
  16.       (setq e (entget en))
  17.       (cond
  18.   ((= (cdr(assoc 0 e)) "ELLIPSE" )
  19.       (progn
  20.       (setq p0 (cdr(assoc 10 e))
  21.       longp0(cdr (assoc 11 e))
  22.       shorts(cdr (assoc 40 e)))
  23.       (setq p02(list (+ (car p0) (car longp0))(+ (cadr p0) (cadr longp0))(+ (caddr p0) (caddr longp0))))
  24.       (setq ds(distance p0 p02)
  25.       ang1 (angle p0 p02)
  26.       ang2 (angle p02 p0)
  27.       )
  28.       (setq ds2(* ds shorts))
  29.       (setq p1(polar p02 (- ang1 (* pi 0.5)) ds2)
  30.       p4(polar p02 (+ ang1 (* pi 0.5)) ds2)
  31.       p2(polar p1 ang2 (* ds 2.0))
  32.       p3(polar p4 ang2 (* ds 2.0))
  33.       )
  34.       
  35.       (setq pts (list p1 p2 p3 p4))
  36.        (entmake (append    (list '(0 . "LWPOLYLINE") '(100 . "AcDbEntity") '(100 . "AcDbPolyline") (cons 90 (length pts))(cons 70 1))
  37.       (mapcar '(lambda (pt)(cons 10 pt)) pts ))
  38.   )
  39.       ))
  40.   ((= (cdr(assoc 0 e)) "CIRCLE" )
  41.       (progn
  42.       (setq p0 (cdr(assoc 10 e))      
  43.       c(cdr (assoc 40 e)))      
  44.       (setq px1(polar p0 (* pi 0.0) c)
  45.       px2(polar p0 (* pi 0.5) c)
  46.       px3(polar p0 (* pi 1.0) c)
  47.       px4(polar p0 (* pi 1.5) c)
  48.       )
  49.       (setq p1(polar px1 (* pi 0.5) c)
  50.       p2(polar px2 (* pi 1) c)
  51.       p3(polar px3 (* pi 1.5) c)
  52.       p4(polar px4 (* pi 2) c)
  53.       )      
  54.       (setq pts (list p1 p2 p3 p4))
  55.        (entmake (append    (list '(0 . "LWPOLYLINE") '(100 . "AcDbEntity") '(100 . "AcDbPolyline") (cons 90 (length pts))(cons 70 1))
  56.       (mapcar '(lambda (pt)(cons 10 pt)) pts ))
  57.   )
  58.       ))
  59.      ( (= (cdr(assoc 0 e)) "LWPOLYLINE" )
  60.       (progn
  61.         (setq pts (ayGetLWPolyLineVTX1 en))
  62.         (setq p1 (car pts) p2 (cadr pts) p3 (caddr pts) p4 (cadddr pts))
  63.         (setq ds1(distance p1 p2)
  64.         ds2 (distance p2 p3)
  65.         ds3 (distance p3 p4)
  66.         ds4 (distance p4 p1))
  67.         (setq ang1(angle p2 p1)
  68.         ang2(angle p2 p3)
  69.         ang11(angle p1 p2))        
  70.         (if (and(and (= (rtos ds1 2 4) (rtos ds3 2 4) )(= (rtos ds2 2 4) (rtos ds4 2 4)))(member (angtos (- ang2 ang1) 1 2) (list "90d0'" "270d0'")))
  71.         (progn
  72.     (setq p0(inters p1 p3 p2 p4 nil))
  73.     (setq p0(list (car p0 )(cadr p0) 0))
  74.     (if (> ds1 ds2)
  75.       (progn
  76.         (setq ang ang11)
  77.       (setq ds (* ds1 0.5))
  78.         (setq p40(/ ds2 ds1))
  79.       )
  80.       (progn
  81.         (setq ang ang2)
  82.       (setq ds (* ds2 0.5))
  83.         (setq p40(/ ds1 ds2))
  84.       ))
  85.     (setq p11x(polar p0 ang  ds))
  86.     (setq p11x(list (car p11x )(cadr p11x) 0))
  87.     (setq p11(list (- (car p11x)(car p0))(- (cadr p11x)(cadr p0))(- (caddr p11x)(caddr p0))))
  88.     (if(/= p40 1.0)
  89.     (progn      
  90.        (entmake (list
  91.             '(0 . "ELLIPSE")
  92.             '(100 . "AcDbEntity")
  93.             '(100 . "AcDbEllipse")
  94.             (cons 10 p0)
  95.             (cons 11 p11)
  96.             (cons 40 p40)
  97.             (cons 42 (* pi 2.0))
  98.             ))
  99.       )
  100.       (progn
  101.         (entmake(list(cons 0 "circle")(cons 10 p0)(cons 40 ds)))
  102.         )            
  103.       );end entmake
  104.     )
  105.     (princ"\n无效矩形")
  106.     )
  107.         );end progn2
  108.       );end cond part2
  109.       );end cond
  110.       (setq ss (ssdel en ss))
  111.       )
  112.       (vla-EndUndoMark(vla-get-ActiveDocument (vlax-get-acad-object)));结束标记
  113.       )
  114.     (princ msg2)
  115.     )
  116.   
  117.   (if *error*_Old (setq *error* *error*_Old))
  118.   (princ)
  119.   )

  120. ;;;-----------------------------------------------
  121. ;;; No.23-4-1 获取 LWPOLYLINE 对象所有顶点坐标   
  122. ;;;-----------------------------------------------
  123. (defun ayGetLWPolyLineVTX1 (EntName1 / Obj1 vtx vtxlst PtsList i)
  124.   (vl-load-com)
  125.   (setq Obj1 (vlax-ename->vla-object EntName1))
  126.   (setq vtx (vla-get-Coordinates Obj1))
  127.   (setq vtxLst (vlax-safearray->list (vlax-variant-value vtx)))
  128.   (setq i 0)
  129.   (setq PtsList nil)
  130.   (repeat (/ (length vtxLst) 2)
  131.     (setq PtsList (append PtsList (list (list (nth i vtxLst) (nth (1+ i) vtxLst)))))
  132.     (setq i (+ i 2))
  133.   );end_repeat
  134.   (setq PtsList PtsList)
  135. );end_defun

  136. (defun *error*_New (msg)
  137.   (vl-load-com)
  138.   (if *error*_Old (setq *error* *error*_Old))
  139.   (if (wcmatch (strcase msg t) "*break,*cancel*,*exit*,*取消*")
  140.     (if  (= (getvar "LOCALE") "CHS")
  141.       (princ "\n用户按了<Esc>强制退出")
  142.       (princ "\nYou cancelled The operation!")
  143.     )
  144.     (princ (strcat "\n" msg))
  145.   )
  146.   (vla-EndUndoMark      ;结束标记
  147.     (vla-get-ActiveDocument (vlax-get-acad-object))
  148.   )  
  149.   (princ)
  150. )
  151. (prompt "\n   圆\\椭圆<->矩形 互转,命令 e2r")
  152. (princ)

本帖子中包含更多资源

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

x

评分

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

查看全部评分

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

本帖被以下淘专辑推荐:

发表于 2013-11-20 18:20:47 | 显示全部楼层
折腾啥啊。
发表于 2013-11-21 09:05:14 | 显示全部楼层
画图的时候在什么时候用这个功能?
发表于 2013-11-21 10:05:41 | 显示全部楼层
太历害了,真的强大
感谢你的分享
发表于 2013-11-21 10:28:24 | 显示全部楼层
程序很好,不过好像用处不大.中看
发表于 2020-9-12 14:07:59 | 显示全部楼层
顶一下,收藏起来,功能不错
发表于 2020-9-12 14:52:34 | 显示全部楼层
程序不错,当我们做网罩类型产品时,把圆孔批量改为方孔就很方便了
发表于 2020-9-20 09:10:31 | 显示全部楼层
网罩,孔做成块啊。
发表于 2023-3-7 13:01:57 | 显示全部楼层
感谢你的分享
发表于 2023-3-8 11:50:38 | 显示全部楼层
好像用不了呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-12-23 14:33 , Processed in 0.198029 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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