找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1570|回复: 12

[求助] [求助]:如何删除同心圆中的小圆

[复制链接]
发表于 2005-5-4 22:12:46 | 显示全部楼层 |阅读模式

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

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

×
请问如何删除选择集中(setq test (ssget "x" '((0 . "CIRCLE"))))同心圆中的小圆?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-2-26 08:35:31 | 显示全部楼层
本帖最后由 st788796 于 2014-2-26 08:37 编辑
kwok 发表于 2014-2-26 07:46
找不到(fy:cset->objs)能提供一个吗?

应该是
  1. (defun fy:cset->objs (/ lst)
  2.    (vlax-for obj (vla-get-activeselectionset (fy:cset))
  3.       (setq lst (cons obj lst))
  4.    )
  5.    lst
  6. )
  7. (defun fy:cset () (vla-get-activeselectionset (fy:acsets)))
  8. (defun fy:acsets () (vla-get-selectionsets (fy:acdoc))

按照 ActiveX Modelspace 那个表很简单的
这个 fy app.vlx 函数中都是最基础的,没有什么高级地方

评分

参与人数 1D豆 +5 收起 理由
kwok + 5 热心帮忙奖!

查看全部评分

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

使用道具 举报

已领礼包: 10506个

财富等级: 富甲天下

发表于 2005-5-4 23:34:04 | 显示全部楼层

  1. (DEFUN C:DELSMC ()
  2. (IF (SETQ SS (SSGET '((0 . "CIRCLE")))) (PROGN
  3.   (SETQ SL (SSLENGTH SS) I 0 SMC (SSADD))
  4.   (WHILE (< I SL)
  5.    (SETQ SN1 (SSNAME SS I) I (1+ I)
  6.          EN1 (ENTGET SN1)
  7.          PC1 (CDR (ASSOC 10 EN1))
  8.          R1  (CDR (ASSOC 40 EN1))
  9.          J I)
  10.    (WHILE (< J SL)
  11.     (SETQ SN2 (SSNAME SS J)
  12.           EN2 (ENTGET SN2)
  13.           PC2 (CDR (ASSOC 10 EN2))
  14.           R2  (CDR (ASSOC 40 EN2)))
  15.     (IF (EQUAL (DISTANCE PC1 PC2) 0.0 1E-3)
  16.      (IF (< R1 R2)
  17.       (SETQ SMC (SSADD SN1) SN1 SN2 EN1 EN2 PC1 PC2 R1 R2
  18.             SS (SSDEL SN1) SL (1- SL))
  19.       (SETQ SMC (SSADD SN2) SS (SSDEL SN2) SL (1- SL))
  20.      )
  21.      (SETQ J (1+ J))
  22.     )
  23.    )
  24.   )
  25.   (IF (> (SSLENGTH SMC) 0) (COMMAND "ERASE" SMC ""))
  26. ))
  27. (PRINC)
  28. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-5-5 00:41:59 | 显示全部楼层
最初由 zxq0220 发布
[B][code]
(DEFUN C:DELSMC ()
(IF (SETQ SS (SSGET '((0 . "CIRCLE")))) (PROGN
  (SETQ SL (SSLENGTH SS) I 0 SMC (SSADD))
  (WHILE (< I SL)
   (SETQ SN1 (SSNAME SS I) I (1+ I)
         EN1 (ENTGET SN1... [/B]


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

使用道具 举报

发表于 2005-5-5 11:33:59 | 显示全部楼层
程序完成显示有错误,未调试完:
[php]
(load "xyp_lib")
;|
如果已经下载xyp_lib并放到搜索路径下可以不再下载!
利用以下任何一种方式即可加载和运行通用函数内的所有子程序:
1.在每个程序内增加(load"xyp_lib")
2.在acad.lsp中增加(load"xyp_lib")
3.在command下输入(load"xyp_lib")
4.在菜单.mnl中增加(load"xyp_lib")
下载地址:http://www.xdcad.net/forum/showthread.php?s=&threadid=325268
|;
(defun c:test (/ ss pt ss1 s1 s2 i rad-max rad)
  (cmdla0)
  (setq ss (ssget "x" '((0 . "CIRCLE"))))
  (command ".undo" "BE")
  (while (setq s1 (ssname ss 0))
    (setq pt  (dxf 10 (entget s1))
          ss1 (ssget "x" (list (cons 0 "CIRCLE") (cons 10 pt)))
          ss  (ssdiff ss ss1)
    )
    (if        (<= (sslength ss) 1)
      (setq ss nil)
    )
    (if        (> (sslength ss1) 1)
      (progn
        (setq i              -1
              rad-max (dxf 40 (entget (ssname ss1 0)))
        )
        (while (setq s2 (ssname ss1 (setq i (1+ i))))
          (setq rad (dxf 40 (entget s2)))
          (if (> rad-max rad)
            (entdel s2)
            (setq rad-max rad)
          )
        )
      )
    )
  )
  (command ".undo" "E")
  (cmdla1)
)
[/php]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 10506个

财富等级: 富甲天下

发表于 2005-5-5 22:27:17 | 显示全部楼层
调试过的程序:

  1. (DEFUN C:DELSMC ()
  2. (IF (SETQ SS (SSGET '((0 . "CIRCLE")))) (PROGN
  3.   (SETQ SL (SSLENGTH SS) I 0 SMC (SSADD))
  4.   (WHILE (< I SL)
  5.    (SETQ SN1 (SSNAME SS I) I (1+ I)
  6.          EN1 (ENTGET SN1)
  7.          PC1 (CDR (ASSOC 10 EN1))
  8.          R1  (CDR (ASSOC 40 EN1))
  9.          J I)
  10.    (WHILE (< J SL)
  11.     (SETQ SN2 (SSNAME SS J)
  12.           EN2 (ENTGET SN2)
  13.           PC2 (CDR (ASSOC 10 EN2))
  14.           R2  (CDR (ASSOC 40 EN2)))
  15.     (IF (< (DISTANCE PC1 PC2) 1E-3) (PROGN
  16.      (SETQ SL (1- SL) J SL I 0)
  17.      (IF (< R1 R2)
  18.       (SETQ SMC (SSADD SN1 SMC) SS (SSDEL SN1 SS))
  19.       (SETQ SMC (SSADD SN2 SMC) SS (SSDEL SN2 SS))
  20.      )
  21.     )
  22.      (SETQ J (1+ J))
  23.     )
  24.    )
  25.   )
  26.   (IF (> (SSLENGTH SMC) 0) (COMMAND "ERASE" SMC ""))
  27. ))
  28. (PRINC)
  29. )

点评

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

使用道具 举报

发表于 2005-5-5 22:40:50 | 显示全部楼层
啊,楼主的程序是删除同心圆的啊,我还以为只是删除同心且相等的圆呢,看错了~
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-5-6 01:37:44 | 显示全部楼层
最初由 zxq0220 发布
[B]调试过的程序:
[code]
(DEFUN C:DELSMC ()
(IF (SETQ SS (SSGET '((0 . "CIRCLE")))) (PROGN
  (SETQ SL (SSLENGTH SS) I 0 SMC (SSADD))
  (WHILE (< I SL)
   (SETQ SN1 (SSNAME SS I) I (1+ I)
        ... [/B]


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

使用道具 举报

已领礼包: 106个

财富等级: 日进斗金

发表于 2014-2-24 10:49:57 | 显示全部楼层
zxq0220 发表于 2005-5-5 22:27
调试过的程序:

请问如何删除大圆

点评

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

使用道具 举报

已领礼包: 10506个

财富等级: 富甲天下

发表于 2014-2-24 20:54:26 | 显示全部楼层
ymcui2005 发表于 2014-2-24 10:49
请问如何删除大圆

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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-2-24 23:08:40 | 显示全部楼层
  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.                                  (list (xdrx_getpropertyvalue x "Radius")
  7.                                        x
  8.                                  )
  9.                            )
  10.                          )
  11.                         (xdrx_pickset->ents ss)
  12.                 )
  13.             lst        (XD::List:GroupByIndex lst 1e-3)
  14.             lst        (vl-sort (mapcar 'cdr lst)
  15.                          '(lambda (e1 e2)
  16.                             (> (car e1) (car e2)) ;_半径由大到小
  17.                           )
  18.                 )
  19.       )
  20.       (mapcar '(lambda (x)
  21.                  (mapcar 'xdrx_entity_delete (cdr (mapcar 'cadr x)));_留最大圆
  22.                )
  23.               lst
  24.       )
  25.     )
  26.   )
  27.   (princ)
  28. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2014-2-25 07:28:01 | 显示全部楼层
用几个函数替换就是 a/vlisp 版

  1. (defun c:tt (/ lst)
  2.   (fy:begin)
  3.   (if (ssget '((0 . "circle")))
  4.     (progn
  5.       (setq lst        (mapcar        '(lambda (x)
  6.                            (list (vlax-get x "Center")
  7.                                  (list (vlax-get x "Radius")
  8.                                        x
  9.                                  )
  10.                            )
  11.                          )
  12.                         (fy:cset->objs)
  13.                 )
  14.             lst        (XD::List:GroupByIndex lst 1e-3)
  15.             lst        (vl-sort (mapcar 'cdr lst)
  16.                          '(lambda (e1 e2)
  17.                             (> (car e1) (car e2)) ;_半径由大到小, 小于号就是留最小圆
  18.                           )
  19.                 )
  20.       )
  21.       (mapcar '(lambda (x)
  22.                  (mapcar 'vla-delete (cdr (mapcar 'cadr x))) ;_留最大圆
  23.                )
  24.               lst
  25.       )
  26.     )
  27.   )
  28.   (fy:end)
  29.   (princ)
  30. )

点评

找不到(fy:cset->objs)能提供一个吗?[/backcolor]  详情 回复 发表于 2014-2-26 07:46
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 394个

财富等级: 日进斗金

发表于 2014-2-26 07:46:17 | 显示全部楼层
Free-Lancer 发表于 2014-2-25 07:28
用几个函数替换就是 a/vlisp 版

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-23 03:58 , Processed in 0.509671 second(s), 63 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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