明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1821|回复: 9

一个儿复杂条件选择题目

[复制链接]
发表于 2003-12-19 10:35:00 | 显示全部楼层 |阅读模式
为了达成以下目的我思考试验多次都未有一明确的编程思路请高手赐教!!!!!!

1、有两个同心圆,大圆与小圆的直径差为有规律性的几个值(大圆为直径3、4、5、6、8mm小圆为对应的2.5
、3.4、4.2、5.8mm)
2、在一张图中有很多这种圆环(如在同一个中心点大圆为8小圆为5.8mm,,,以另一个点为圆心有大圆为6
小圆为4.2)
3、现要做一个程式能够过滤选取到直径为3、4、5、6、8mm圆并将其改为3/4圆弧
发表于 2003-12-19 10:58:00 | 显示全部楼层

  1. (defun c:test( / ss i ent ents pt r pts pte os)
  2.   (setq os (getvar "osmode"))
  3.   (setvar "osmode" 0)
  4.   (setq ss (ssget "x" '((0 . "CIRCLE") (-4 . "<or") (40 . 1.5) (40 . 2) (40 . 2.5) (40 . 3) (40 . 4) (-4 . "or>"))))
  5.   (setq i 0)
  6.   (while (< i (sslength ss))
  7.     (setq ent (ssname ss i))
  8.     (setq ents (entget ent))
  9.     (setq pt (cdr (assoc 10 ents)))
  10.     (setq r (cdr (assoc 40 ents)))
  11.     (setq pts (polar pt (+ pi (/ pi 12)) r))
  12.     (setq pte (polar pt (+ (/ (* pi 3) 2) (/ pi 12)) r))
  13.     (command "_.break" (list ent pts) pte)
  14.     (setq i (1+ i))
  15.   )
  16.   (setvar "osmode" os)
  17.   (princ)
  18. )
 楼主| 发表于 2003-12-19 12:35:00 | 显示全部楼层
看到您的笑脸心中真高兴!!!!!!!!!!!!!!
请教版主
(-4 . "<or")
怎么理解?
发表于 2003-12-19 12:43:00 | 显示全部楼层
这是SSGET的一个过滤的逻辑判断测试式,
详细的可以参考帮助文件中的SSGET,
 楼主| 发表于 2003-12-19 17:16:00 | 显示全部楼层
你的程式只满足了一条件请再赐教

选择的圆有另一个条件,比如选8mm的圆那么在它的同心上要有一个5.8mm的圆才能选到8mm的圆将它变为圆弧.????
这个够难的吧!!!!???
发表于 2003-12-19 18:13:00 | 显示全部楼层
你可以通过修改参数lst来达到不同的要求,这个列表应该能明白是怎么回事吧。。。
注意不要写错,点两边都有空格,详细查看帮助文件中的点表。。。

  1. (defun c:test (/ ss i ent ents pt d pts pte os lst lst2 rL)
  2.   (setq lst '((3 . 2.5) (4 . 3.4) (5 . 4.2) (8 . 5.8)))
  3.   (setq i 0)
  4.   (repeat (length lst)
  5.     (setq lst2 (append lst2 (list (cons 40 (/ (car (nth i lst)) 2.0)))))
  6.     (setq i (1+ i))
  7.   )
  8.   (setq os (getvar "osmode"))
  9.   (setvar "osmode" 0)
  10.   (setq        ss (ssget "x"
  11.                   (append (list '(0 . "CIRCLE"))
  12.                         (list '(-4 . "<or"))
  13.                         lst2
  14.                         (list '(-4 . "or>"))
  15.                   )
  16.            )
  17.   )
  18.   (setq i 0)
  19.   (while (< i (sslength ss))
  20.     (setq ent (ssname ss i))
  21.     (setq ents (entget ent))
  22.     (setq d (* 2.0 (cdr (assoc 40 ents))))
  23.     (setq pt (cdr (assoc 10 (entget ent))))
  24.     (setq rL (assoc d lst))
  25.     (if        rl
  26.       (if (ssget "x"
  27.                  (list '(0 . "CIRCLE")
  28.                        '(-4 . "<and")
  29.                        (cons 40 (/ (cdr rL) 2.0))
  30.                        (cons 10 pt)
  31.                        '(-4 . "and>")
  32.                  )
  33.           )
  34.         (progn
  35.           (setq pts (polar pt (+ pi (/ pi 12)) (/ d 2.0)))
  36.           (setq pte (polar pt (+ (/ (* pi 3) 2) (/ pi 12)) (/ d 2.0)))
  37.           (command "_.break" (list ent pts) pte)
  38.         )
  39.       )
  40.     )
  41.     (setq i (1+ i))
  42.   )
  43.   (setvar "osmode" os)
  44.   (princ)
  45. )
 楼主| 发表于 2003-12-20 00:14:00 | 显示全部楼层
感谢版主赐教,,待我试过后回复版主结果!!!!
先谢谢啦!!!!!
越看您的笑容越亲切可爱!!!!!
人因梦想而伟大!!!!!
人因可爱而美丽!!!!!
 楼主| 发表于 2003-12-20 00:47:00 | 显示全部楼层
测试可以但如何能出现一个选取取,,没有选取让人感觉怪怪的。
 楼主| 发表于 2003-12-20 08:23:00 | 显示全部楼层
请版主对程式做一下说明好吗?昨天晚上搞到1:30也未弄明白
以下程式如何理解.
(setq lst '((3 . 2.5) (4 . 3.4) (5 . 4.2) (8 . 5.8)))

(setq rL (assoc d lst))


这两句关系是什么?如何理解?
发表于 2003-12-20 10:19:00 | 显示全部楼层
一个个选取是怎么个选取法,说说操作过程。。。

这个程序的思路是,先根据直径选取你需要变为3/4圆,然后判断每一个是否具有与其同心并且半径对应的圆,如果有,则操作,否则不操作。。。

这个列表是一系列需要操作的圆的直径列表,点前面表示需要操作圆的直径,点后面表示对应的同心圆的直径,你可以增加或减少这个列表的数量(就是如(3 . 25)同类型的数量),但格式要保证不变。。。
(setq rL (assoc d lst))取出与直径D对应的小圆直径(后面会使用CDR),
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-10-2 06:33 , Processed in 0.193141 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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