找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2846|回复: 8

[求助] 请高手帮忙;取圆半径排列圆(Y坐标不变.只水平方向移动)

[复制链接]

已领礼包: 1336个

财富等级: 财源广进

发表于 2014-2-13 21:45:51 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
本帖最后由 434939575 于 2014-2-13 21:53 编辑

;modfiy by edata @2013-12-25 10:51:17
;现有程序按半径排列
    (defun c:tt(/ CEN-10 EN I O_CMD O_OS PT0 PTY RAD-40 SS SS0);局部变量要设置
    (princ " \n 按大小点选圆");无排序函数,按选择排序
      (setq o_cmd (getvar "CMDECHO"));保存要更改的变量值
      (setq o_os (getvar "osmode"));保存要更改的变量值
     (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 pty(polar cen-10 0 rad-40));获得原来圆的右面点   
              (setq pt0(polar pt0 0 (+ rad-40 rad-40)));设置新的右边点
      (command "move" ss0 "" pty pt0 "") ;command
          ); (repeat
     )
        )
      (and o_cmd (setvar "CMDECHO" o_cmd));恢复更改的变量值
      (and o_os (setvar "osmode" o_os));恢复更改的变量值
       )

2014-2-13.jpg
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2014-2-13 22:35:02 | 显示全部楼层
圆Y轴相切排序.gif
  1. ;; 需要e派工具箱(XCAD)的支持:[url]http://yunpan.cn/QXQKsW9gAPmpF[/url]
  2. ;; 圆Y轴相切排序
  3. (defun c:tt ()
  4.   (princ "\n按大小点选圆: ")
  5.   (if (setq ss (ssget '((0 . "circle"))))
  6.     (progn
  7.       (setq lst (vl-sort (xyp-ss2list ss)
  8.                          '(lambda (x y)(< (cadr (xyp-DXF 10 x)) (cadr (xyp-DXF 10 y))))
  9.                 )
  10.       )
  11.       (while (and (setq s1 (car lst))
  12.                   (setq s2 (cadr lst))
  13.              )
  14.         (setq lst (cdr lst)
  15.               rr  (+ (xyp-DXF 40 s1) (xyp-DXF 40 s2))
  16.               p2  (xyp-DXF 10 s2)
  17.               p1  (xyp-Pt2X (xyp-DXF 10 s1) rr)
  18.               p1  (list (car p1) (cadr p2))
  19.               s2  (xyp-move s2 p2 p1)
  20.         )
  21.       )
  22.     )
  23.   )
  24.   (princ)
  25. )

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 1 反对 0

使用道具 举报

已领礼包: 1336个

财富等级: 财源广进

 楼主| 发表于 2014-2-13 23:09:20 | 显示全部楼层
感谢院长出手这么快!多谢了!


论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1742个

财富等级: 堆金积玉

发表于 2014-2-14 08:27:10 | 显示全部楼层
其他的函数 院长好像有公布,
我分享下这个函数(临时的)
(defun xx-pt2x(p num)
(list(+ (car p) num)(cadr p))
)

















承接CAD二次开发项目(价格实惠)
QQ:2363673534

评分

参与人数 1D豆 +1 收起 理由
zhuizhu + 1 很给力!经验;技术要点;资料分享奖!

查看全部评分

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1742个

财富等级: 堆金积玉

发表于 2014-2-14 08:28:44 | 显示全部楼层
(xx-pt2x '(0 0) 5)-->(5 0)
(xx-pt2x '(0 0) -5)-->(-5 0)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-2-14 08:39:53 | 显示全部楼层
  1. (defun c:tt (/ ss lst)
  2.   (if (setq ss (ssget '((0 . "circle"))))
  3.     (progn
  4.       (setq lst        (mapcar        '(lambda (x)
  5.                            (list (xdrx_getpropertyvalue x "Center")
  6.                                  (xdrx_getpropertyvalue x "Radius")
  7.                                  x
  8.                            );((pcen1 r1 e1) (pcen2 r2 e2) ....)
  9.                          )
  10.                         (xdrx_pickset->ents ss)
  11.                 )
  12.             lst        (vl-sort lst
  13.                          '(lambda (x y)
  14.                             (if        (equal (cadar x) (cadar y) 1e-3)
  15.                               (< (caar x) (caar y))
  16.                               (< (cadar x) (cadar y))
  17.                             )
  18.                           )
  19.                 );_ y (x) sort
  20.       )
  21.       (mapcar '(lambda (e1 e2 / p1 r1)
  22.                  (setq p1 (xdrx_getpropertyvalue (last e1) "Center")
  23.                        r1 (cadr e1)
  24.                  )
  25.                  (xdrx_setpropertyvalue
  26.                    (last e2)
  27.                    "Center"
  28.                    (list (+ (car p1) r1 (cadr e2))
  29.                          (cadar e2)
  30.                          (last (car e2))
  31.                    )
  32.                  );_根据前一个圆调整下一个圆位置
  33.                )
  34.               lst
  35.               (cdr lst)
  36.       )
  37.     )
  38.   )
  39.   (princ)
  40. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-2-14 08:56:01 | 显示全部楼层
借用几个函数,和上面的完全一致
  1. (defun c:tt (/ lst)
  2.   (fy:clearcset)
  3.   (if (ssget '((0 . "circle")))
  4.     (progn
  5.       (setq lst        (mapcar        '(lambda (x)
  6.                            (list (vlax-get x 'Center)
  7.                                  (vlax-get x 'Radius)
  8.                                  x
  9.                            )
  10.                          )
  11.                         (fy:cset->objs)
  12.                 )
  13.             lst        (vl-sort lst
  14.                          '(lambda (x y)
  15.                             (if        (equal (cadar x) (cadar y) 1e-3)
  16.                               (< (caar x) (caar y))
  17.                               (< (cadar x) (cadar y))
  18.                             )
  19.                           )
  20.                 )
  21.       )
  22.       (mapcar '(lambda (e1 e2 / p1 r1)
  23.                  (setq p1 (vlax-get (last e1) 'Center)
  24.                        r1 (cadr e1)
  25.                  )
  26.                  (vlax-put
  27.                    (last e2)
  28.                    'Center
  29.                    (list
  30.                      (+ (car p1) r1 (cadr e2))
  31.                      (cadar e2)
  32.                      (last (car e2))
  33.                    )
  34.                  )
  35.                )
  36.               lst
  37.               (cdr lst)
  38.       )
  39.     )
  40.   )
  41.   (princ)
  42. )

评分

参与人数 1D豆 +2 收起 理由
zhuizhu + 2 很给力!经验;技术要点;资料分享奖!

查看全部评分

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1336个

财富等级: 财源广进

 楼主| 发表于 2014-2-14 11:30:58 | 显示全部楼层
十分感谢大家热心的帮助!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2014-2-15 10:35:14 | 显示全部楼层
谢谢各位楼主的分享!很有意思的代码,收藏备用。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-9-25 00:33 , Processed in 0.325987 second(s), 49 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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