明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2642|回复: 7

求能查找最近孔并显示出来的lisp?谢谢

[复制链接]
发表于 2008-1-20 19:25:00 | 显示全部楼层 |阅读模式

有附图,请帮忙,谢谢

想求一个能够把会破孔的圆孔按边到边距离为0.254为准的那些圆用透明圈显示出来,以备修改用,谢谢

"0-0"距离小于0.254mm 圈出

"0-0"距离大于0.254mm不理会

请各位高手们解决!!!

本帖子中包含更多资源

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

x
发表于 2008-1-21 09:41:00 | 显示全部楼层

这是显示最后画的圆。

(DEFUN C:TT ()
 (IF (SETQ SS (SSGET '((0 . "CIRCLE"))))
  (REDRAW (SSNAME SS 0) 3)
 )
 (PRINC)
)

 楼主| 发表于 2008-1-21 10:39:00 | 显示全部楼层

程序试用:只能选两个圆,不论多远都会选中一个,呵%%

能不能调为在众多的圆中找出圆的边到圆小于0.254的圆显示出来呢

就是无论有多少对这样的小于0.254的距离的圆都选中.希望能帮忙修改

 楼主| 发表于 2008-11-12 14:28:00 | 显示全部楼层
请哪位老大帮忙完成这个功能??谢谢
发表于 2008-11-12 21:08:00 | 显示全部楼层

先试试这个

(DEFUN C:TEST ()
  (IF (SETQ SS (SSGET '((0 . "CIRCLE"))))
    (PROGN
      (setq i -1
     k 0
     n 0
      )
      (while (setq ent1 (ssname ss (setq i (1+ i))))
;;;取选集第1个图元
 (while (setq ent2 (ssname ss (setq k (1+ k))))
;;;取选集第2个图元,如果有继续
   (progn
     (setq obj1 (vlax-ename->vla-object ent1)
    obj2 (vlax-ename->vla-object ent2)
     )
     (setq r1   (vla-get-Radius obj1)
    r2   (vla-get-Radius obj2)
    cen1 (vlax-get obj1 'center)
    cen2 (vlax-get obj2 'center)
     )
     (setq d (distance cen1 cen2))
     (setq L (- d (+ r1 r2)))
     (if (and (<= L 0.254)(> L 0))
       (progn
  (REDRAW ent2 3)
  (setq n 1)
       )
     )
   )
 )
 (setq k (1+ i))
 (if (= n 1)
   (progn
     (REDRAW ent1 3)
     (setq n 0)
   )
 )
      )
    )
  )
)


 楼主| 发表于 2008-11-15 14:49:00 | 显示全部楼层
本帖最后由 作者 于 2008-11-15 15:12:51 编辑

ljpnb谢谢你的帮忙,程序可以应用,就是要这种效果.不过如果能将选出来的圆移到新的层或者用其它颜色来表达就好看多了,因为现在所选的如果多的话很难分辨,希望ljpnb能帮忙,谢谢

如果能在每个有破孔的所显示的地方作一个标识哽好,如:数学或字母

发表于 2008-11-15 16:01:00 | 显示全部楼层
  1. (DEFUN C:TEST ()
  2.   (if (not (tblobjname "layer" "临时"));;;;创建一个"临时"图层
  3.     (entmake
  4.       (list '(0 . "LAYER") ;_类型名称,不用改
  5.      '(100 . "AcDbSymbolTableRecord") ;_不可少
  6.      '(100 . "AcDbLayerTableRecord") ;_不可少
  7.      (cons 2 "临时") ;_图层名
  8.      '(70 . 0)
  9.      (cons 62 2)   ;颜色
  10.      (cons 6 "CONTINUOUS")
  11.      ;;线型
  12.       )
  13.     )
  14.   )
  15.   (IF (SETQ SS (SSGET '((0 . "CIRCLE"))))
  16.     (PROGN
  17.       (setq i -1
  18.      k 0
  19.      n nil
  20.      m 0
  21.       )
  22.       (while (setq ent1 (ssname ss (setq i (1+ i))))
  23. ;;;取选集第1个图元
  24. (while (setq ent2 (ssname ss (setq k (1+ k))))
  25. ;;;取选集第2个图元,如果有继续
  26.    (progn
  27.      (setq obj1 (vlax-ename->vla-object ent1)
  28.     obj2 (vlax-ename->vla-object ent2)
  29.      )
  30.      (setq r1   (vla-get-Radius obj1)
  31.     r2   (vla-get-Radius obj2)
  32.     cen1 (vlax-get obj1 'center)
  33.     cen2 (vlax-get obj2 'center)
  34.      )
  35.      (setq d (distance cen1 cen2))
  36.      (setq L (- d (+ r1 r2)))
  37.      (if (and (<= L 0.254) (> L 0))
  38.        (progn
  39.   (vla-put-layer obj2 "临时");;;;移到"临时"图层
  40.   (setq n T)
  41.   (setq m (1+ m))
  42.        )
  43.      )
  44.    )
  45. )
  46. (setq k (1+ i))
  47. (if n
  48.    (progn
  49.      (vla-put-layer obj1 "临时");;;;移到"临时"图层
  50.      (setq n nil)
  51.      (setq m (1+ m))
  52.    )
  53. )
  54.       )
  55.     )
  56.   )
  57.   (if (= m 0);;;如果没有找到符合条件的物体,则删除"临时"图层
  58.     (progn
  59.       (setq lay (vlax-ename->vla-object (tblobjname "layer" "临时")))
  60.       (vla-delete lay)
  61.     )
  62.   )
  63.   (princ (strcat "\n共有" (rtos m 2) "个物体需要修改"))
  64.   (princ)
  65. )
 楼主| 发表于 2008-11-15 16:40:00 | 显示全部楼层

非常感谢,ljpnb

呵&&&孔多的时候.程序好慢,晕死了 不知有没办法省去上些没必要的??就是说大于0.5距离的快速跳过

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

本版积分规则

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

GMT+8, 2025-2-27 21:04 , Processed in 0.187434 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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