明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1499|回复: 7

[函数] 请教热i心的朋友们.一个圆排列的问题。

[复制链接]
发表于 2013-12-24 21:15:00 | 显示全部楼层 |阅读模式
;排列圆.以半径为距离排列圆.有问题.
目的。
    (defun c:tt()
    (princ " \n 点选圆");
     (setvar "CMDECHO" 0);_关闭命令提示
    (Setvar "osmode" 0);_关闭捕捉
          (if (setq ss (ssget '((0 . "circle"))))
          (progn
          (setq  pt0 (getpoint "排列起始点"));可运行成功
            (setq i 0)
            (repeat (sslength ss)
            (setq ss0 (ssname ss i)
                   en (entget ss0)
                cen-10(cdr (assoc 10 en)) ;pt=圆心坐标
                rad-40(cdr (assoc 40 en)) ;pt=圆半径
            i (1+ i)
              ); (setq ss0
;------------------------------------------------------------------
     (setq  ptz(polar  pt0  pi  rad-40 ) );圆左边点。         
     (setq  pty (polar  pt0  0  rad-40 ) );圆右边点。
         (setq  pt0    ptz );圆左边点赋值给pt0 。
;------------------------------------------------------------------
      ( command  "move"
                  ss0
                  ""
             cen-10
                  pty
                  ""
                   );command
          ); (repeat
     )
        )
       )
   

本帖子中包含更多资源

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

x
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2013-12-24 23:06:43 | 显示全部楼层
  1. ;; 需要e派工具箱(XCAD)的支持:http://yunpan.cn/QXQKsW9gAPmpF

  2. (defun c:tt ()
  3.   (princ " \n选择圆: ")
  4.   (if (and (setq ss (ssget '((0 . "circle"))))
  5.            (setq pt0 (getpoint "排列起始点: "))
  6.       )
  7.     (progn
  8.       (setq lst (xyp-ss2list ss)
  9.             lst        (mapcar '(lambda (x) (list x (xyp-DXF 40 x))) lst)
  10.             lst        (vl-sort lst '(lambda (x y) (< (cadr x) (cadr y))))
  11.       )
  12.       (foreach a lst
  13.         (setq s1  (car a)
  14.               rr  (cadr a)
  15.               pt  (xyp-DXF 10 s1)
  16.               pt0 (xyp-Pt2X pt0 rr)
  17.         )
  18.         (xyp-move s1 pt pt0)
  19.         (setq pt0 (xyp-Pt2X pt0 rr))
  20.       )
  21.     )
  22.   )
  23.   (princ)
  24. )
 楼主| 发表于 2013-12-25 09:27:40 | 显示全部楼层
xyp1964 发表于 2013-12-24 23:06

谢谢院长的指导。这么晚了。还出手相助。真的很感动!
发表于 2013-12-25 10:51:59 | 显示全部楼层
434939575 发表于 2013-12-25 09:27
谢谢院长的指导。这么晚了。还出手相助。真的很感动!
  1. ;排列圆.以半径为距离排列圆.有问题.
  2. ;modfiy by edata @2013-12-25 10:51:17
  3.     (defun c:tt(/ CEN-10 EN I O_CMD O_OS PT0 PTY RAD-40 SS SS0);局部变量要设置
  4.     (princ " \n 按大小点选圆");无排序函数,按选择排序
  5.       (setq o_cmd (getvar "CMDECHO"));保存要更改的变量值
  6.       (setq o_os (getvar "osmode"));保存要更改的变量值
  7.      (setvar "CMDECHO" 0);_关闭命令提示
  8.     (Setvar "osmode" 0);_关闭捕捉
  9.           (if (setq ss (ssget '((0 . "circle"))))
  10.           (progn
  11.           (setq  pt0 (getpoint "排列起始点"));可运行成功
  12.             (setq i 0)
  13.             (repeat (sslength ss)
  14.             (setq ss0 (ssname ss i)
  15.                    en (entget ss0)
  16.                 cen-10(cdr (assoc 10 en)) ;pt=圆心坐标
  17.                 rad-40(cdr (assoc 40 en)) ;pt=圆半径
  18.             i (1+ i)
  19.               ); (setq ss0
  20. ;;;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-算法更改=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  21.               (setq pty(polar cen-10 0 rad-40));获得原来圆的右面点   
  22.               (setq pt0(polar pt0 0 (+ rad-40 rad-40)));设置新的右边点
  23. ;;;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-算法更改=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  24. ;;;;------------------------------------------------------------------
  25. ;;;     (setq  ptz(polar  pt0  pi  rad-40 ) );圆左边点。         
  26. ;;;     (setq  pty (polar  ptz  0    (* rad-40  2)  ) );圆右边点。
  27. ;;;         (setq  pt0    pty );圆左边点赋值给pt0 。
  28. ;------------------------------------------------------------------
  29.       (command "move" ss0 "" pty pt0 "") ;command
  30.           ); (repeat
  31.      )
  32.         )
  33.       (and o_cmd (setvar "CMDECHO" o_cmd));恢复更改的变量值
  34.       (and o_os (setvar "osmode" o_os));恢复更改的变量值
  35.        )
 楼主| 发表于 2013-12-25 15:44:44 | 显示全部楼层
edata 发表于 2013-12-25 10:51

谢谢这位朋友热心的帮助。乃冬日里的阳光。再次感谢!
发表于 2013-12-31 22:36:25 | 显示全部楼层
434939575 发表于 2013-12-25 15:44
谢谢这位朋友热心的帮助。乃冬日里的阳光。再次感谢!
  1. ;排列圆.以半径为距离排列圆.有问题.
  2. ;modfiy by edata @2013-12-25 10:51:17
  3. ;modfiy by edata @2013-12-31 22:32:28
  4.     (defun c:tt(/ CEN-10 EN I O_CMD O_OS PT0 PTY RAD-40 SS SS0);局部变量要设置
  5.     (princ " \n 按大小点选圆");无排序函数,按选择排序
  6.       (setq o_cmd (getvar "CMDECHO"));保存要更改的变量值
  7.       (setq o_os (getvar "osmode"));保存要更改的变量值
  8.      (setvar "CMDECHO" 0);_关闭命令提示
  9.     (Setvar "osmode" 0);_关闭捕捉      
  10.           (if (setq ss (ssget '((0 . "circle"))))
  11.           (progn
  12.           (setq  pt0 (getpoint "\n排列起始点"));可运行成功
  13.           (setq sk_gds(getdist "\n指定圆间距:"))
  14.           (or sk_gds (setq sk_gds 10))
  15.             (setq i 0)
  16.             (repeat (sslength ss)
  17.             (setq ss0 (ssname ss i)
  18.                    en (entget ss0)
  19.                 cen-10(cdr (assoc 10 en)) ;pt=圆心坐标
  20.                 rad-40(cdr (assoc 40 en)) ;pt=圆半径
  21.             i (1+ i)
  22.               ); (setq ss0
  23. ;;;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-算法更改=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  24.               (setq pty(polar cen-10 0 rad-40));获得原来圆的右面点   
  25.               (setq pt0(polar pt0 0 (+ (+ rad-40 rad-40) sk_gds)));设置新的右边点
  26. ;;;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-算法更改=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  27. ;;;;------------------------------------------------------------------
  28. ;;;     (setq  ptz(polar  pt0  pi  rad-40 ) );圆左边点。         
  29. ;;;     (setq  pty (polar  ptz  0    (* rad-40  2)  ) );圆右边点。
  30. ;;;         (setq  pt0    pty );圆左边点赋值给pt0 。
  31. ;------------------------------------------------------------------
  32.       (command "move" ss0 "" pty pt0 ) ;command 我的cad2006 move后无需""结尾
  33.           ); (repeat
  34.      )
  35.         )
  36.       (and o_cmd (setvar "CMDECHO" o_cmd));恢复更改的变量值
  37.       (and o_os (setvar "osmode" o_os));恢复更改的变量值
  38.       (princ)
  39.        )
发表于 2013-12-31 22:38:51 | 显示全部楼层
增加13行 14行
更正32行command函数调用move的语句,我的cad2006无需""结尾
相对增加了全局变量名 sk_gds 默认是10,可以自己更改。
其他暂无调整
 楼主| 发表于 2014-1-1 12:26:21 | 显示全部楼层
edata 发表于 2013-12-31 22:38
增加13行 14行
更正32行command函数调用move的语句,我的cad2006无需""结尾
相对增加了全局变量名 sk_gd ...

谢谢再次指导。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-25 21:05 , Processed in 0.210063 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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