找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 901|回复: 10

[求助] [求助]:能不能很快知道图中小圆的个数?

[复制链接]

已领礼包: 3719个

财富等级: 富可敌国

发表于 2004-5-4 21:34:39 | 显示全部楼层 |阅读模式

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

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

×
请问各位老大,能不能分别自动求出图中水平中心线上小圆的个数和其它小圆的个数?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2004-5-4 21:40:28 | 显示全部楼层
这个题目又什么意义吗
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-5-5 05:06:03 | 显示全部楼层
请参考:
返回中心线上小圆的个数 和小圆总数

  1. (defun c:test ()
  2.   (setq bc (car (entsel "\nSelect Boundary:")))
  3.   (setq br (cdr (assoc 40 (entget bc))))
  4.   (vl-cmdf "divide" bc 60)
  5.   (setq pg (ssget "x" '((0 . "POINT"))))
  6.   (setq n 0)
  7.   (while (< n (sslength pg))
  8.     (setq pl (append pl (list (cdr (assoc 10 (entget (ssname pg n)))))))
  9.     (setq n (1+ n))
  10.   )
  11.   (vl-cmdf "erase" pg "")
  12.   (setq ss (ssget "wp" pl '((0 . "CIRCLE"))))
  13.   (setq n 0 cc (ssadd))
  14.   (while (< n (sslength ss))
  15.     (if (equal (cadr (cdr (assoc 10 (entget (ssname ss n)))))
  16.                (cadr (cdr (assoc 10 (entget bc)))))
  17.       (ssadd (ssname ss n) cc)
  18.     )
  19.     (setq n (1+ n))
  20.   )
  21.   (list (sslength cc)(sslength ss))
  22. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 3719个

财富等级: 富可敌国

 楼主| 发表于 2004-5-6 22:01:06 | 显示全部楼层
这个题目非常有意义!在化工设备中换热器布管就要用到这个题目。经常是有成百上千个圆,而又必须准确知道圆的个数。如能很快知道圆的个数,那就太省事了。
非常感谢lsjjm  的热心帮助!!!

to lsjjm  你的程序如何使用呵?刚才用了你的程序结果如下
命令: TEST

Select Boundary:divide
选择要定数等分的对象:
输入线段数目或 [块(B)]: 60
命令: erase
选择对象:   找到 60 个

选择对象:
命令:

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

使用道具 举报

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

使用道具 举报

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

使用道具 举报

发表于 2004-5-11 16:41:29 | 显示全部楼层
用’filter命令也可以啊!可以选择一定的直径或半径。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 3719个

财富等级: 富可敌国

 楼主| 发表于 2004-5-11 21:48:33 | 显示全部楼层
还是3楼的方法最好。经过下面改动,程序就能运行了
(defun c:test ()
  (setq bc  (entsel "\nSelect Boundary:"))
  ;;(setq br (cdr (assoc 40 (entget bc))))
  (vl-cmdf "divide"  (car bc)  60)
  (setq pg (ssget "x" '((0 . "POINT"))))
  (setq n 0)
  (while (< n (sslength pg))
    (setq pl (append pl (list (cdr (assoc 10 (entget (ssname pg n)))))))
    (setq n (1+ n))
  )
  (vl-cmdf "erase" pg "")
  (setq ss (ssget "wp" pl '((0 . "CIRCLE"))))
  (setq n 0 cc (ssadd))
  (while (< n (sslength ss))
    (if (equal (cadr (cdr (assoc 10 (entget (ssname ss n)))))
               (cadr (cdr (assoc 10 (entget (car bc))))))
      (ssadd (ssname ss n) cc)
    )
    (setq n (1+ n))
  )
  (list (sslength cc)(sslength ss))
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2004-5-17 17:47:29 | 显示全部楼层
使用快速选择,条件是小圆的半径.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-5-18 00:55:47 | 显示全部楼层
楼主似乎不是要全部的,只是要水平中心线上的
在lisp中(ssget "f" pt-list)
其中pt-list是点的列表,这样再筛选一下就可以了

下面的lisp可以返回选定直线上的相同半经的小圆
命令行,sx,然后选择需要的直线,再选择要求个数的小圆中的任何一个

[PHP]
(defun c:sx()
  (setq en (entsel "选择直线")
        obj (entsel "选择参照圆:"))
(setq r (cdr (assoc 40 (entget (car obj))))
        pt1 (assoc 10 (entget (car en)))
        pt2 (assoc 11 (entget (car en)))
        list_pt (list (cdr pt1) (cdr pt2))
        i 0
        n 0)
  (setq ss (ssget "f" list_pt))
  (repeat (sslength ss)
    (setq gg (ssname ss i))
    (setq rr (cdr (assoc 40 (entget gg))))
    (if (= rr r) (setq n (+ 1 n)))
    (setq i (+ 1 i))
    )
  (ALERT (STRCAT "共有圆" (rtos n 2) "个在直线上"))
  )
[/PHP]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-27 03:40 , Processed in 0.455175 second(s), 53 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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