找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 939|回复: 8

[求助] [求助]:MENBER函数应用

[复制链接]
发表于 2006-5-28 23:32:30 | 显示全部楼层 |阅读模式

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

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

×
命令: !yuan-xin-all
((135.742 42.9189 0.0) (218.064 -13.5589 0.0) (277.314 29.3284 0.0) (272.313
84.2349 0.0) (167.522 94.2029 0.0) . "")

命令: !pt
(167.988 93.7111)

(member pt yuan-xin-all);;;这个有问题怎么改????
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2006-5-29 02:03:42 | 显示全部楼层
你连问题都没说清楚。。。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-5-29 02:49:40 | 显示全部楼层
(member pt yuan-xin-all);;;MEMBER这个函数怎么用的? 在这里判断PT在表yuan-xin-all中是不时存在的?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 7235个

财富等级: 富甲天下

发表于 2006-5-29 08:17:46 | 显示全部楼层
(member pt yuan-xin-all) 语法如是
1.  pt  先转 ==> (x y z) 格式
2. 要考量精度的问题
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2006-5-29 08:52:35 | 显示全部楼层
先到这里每个帖子都看一看

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

使用道具 举报

 楼主| 发表于 2006-5-29 13:19:52 | 显示全部楼层
(member pt yuan-xin-all) 语法如是
1. pt 先转 ==> (x y z) 格式
2. 要考量精度的问题  
我把PT转成了(167.988 93.7111 0.00) 但还是不行,什么是精度问题?这个不懂,能说明怎么改嘛?

我看了关于精度的函数下面怎么用?这个函数也有问题!!!无法运行!
(defun LI_memb (ele Lst diff / len cnt Found)
  (if (zerop Diff)
    (progn
      (setq Found (member ele Lst))
      (if Found
        (setq Found T)
      )
    )
    (progn
      (setq
        len   (length Lst)
        cnt   0
        Found nil
      )
      (while (and (< cnt len) (not Found))
        (if (equal ele (nth cnt Lst) diff)
          (setq Found T)
          (setq cnt (1+ cnt))
        )
      )
    )
  )
  (if Found
    cnt
    nil
  )
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-5-29 13:52:32 | 显示全部楼层
  1. [FONT=courier new](setq        yuan-xin-all
  2.          '((135.742 42.9189 0.0)
  3.            (218.064 -13.5589 0.0)
  4.            (277.314 29.3284 0.0)
  5.            (272.313
  6.             84.2349
  7.             0.0
  8.            )
  9.            (167.522 94.2029 0.0)          
  10.            ""
  11.           )
  12.   )
  13.   (setq pt '(167.988 93.7111))
  14.   (member pt yuan-xin-all)[/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6530个

财富等级: 富甲天下

发表于 2006-5-29 14:32:50 | 显示全部楼层
本主题问题出在表 yuan-xin-all 中的点(.),函数逐条检索时,当检索至表 '(. "") 时是无效表,所以出错。如:
命令: (member '(1 2 3) '((1 2 3) (2 3 4) . "6"))
((1 2 3) (2 3 4) . "6")

命令: (member '(2 3 4) '((1 2 3) (2 3 4) . "6"))
((2 3 4) . "6")

命令: (member '(2 3 5) '((1 2 3) (2 3 4) . "6"))
error:参数类型错误: consp "6"

命令: (member 6 '((1 2 3) (2 3 4) . "6"))
error:参数类型错误: consp "6"

命令: (member 6 '((1 2 3) (2 3 4) "6"))
nil

命令: (member "6" '((1 2 3) (2 3 4) "6"))
("6")

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

使用道具 举报

 楼主| 发表于 2006-5-30 00:21:45 | 显示全部楼层
高手  一语中之  就是点的问题  现在函数可以了 但还有疑问  再帮忙看看 ::
(Defun c:CkJ()
  (Setvar "Cmdecho" 0)
  (setq  yuan-xin-all '() jie '())
   (Setq ssyuan (ssget "x" '((8 . "XZD")(0 . "Circle"))))
          (setq ssyuanl (sslength ssyuan))
          (setq l 0)
          (repeat ssyuanl;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;过滤界址圆
            (setq eny (ssname ssyuan l))
            (setq enydata (entget eny))
            (setq yuan (cdr (assoc 10 enydata)))
            ;(setq yuanj(cdr (assoc 5 enydata)))
            (setq yuan-xin-all (cons yuan yuan-xin-all))
            (setq l (1+ l))
            )
  (Setq Sslabel (Ssget "X" '((0 . "Polyline")(8 . "LAL"))))
  (Setq Ssn (Sslength Sslabel))
  (Setq M 0 )
  (Repeat Ssn             ;1顶点坐标                       
    (Setq En (Ssname Sslabel M))           
               (Setq Obj (Vlax-Ename->Vla-Object En))
        (Setq Vtx (Vla-Get-Coordinates Obj))
        (Setq Vtxlst (Vlax-Safearray->List (Vlax-Variant-Value Vtx)))
        (Setq PointL (/ (Length Vtxlst) 3))
        (Setq N 0 )
        (Repeat        PointL            ;11
         
          (Setq Pt (List (Nth N Vtxlst) (Nth (+ N 1) Vtxlst) (Nth (+ N 2) Vtxlst)))
          (setq jie (member pt yuan-xin-all))
          (if (NULL jie)
            (Princ (Strcat "\n:>>无属性Point......参考坐标:"(Rtos (Nth 0 pt))","(Rtos (Nth 1 pt))))
          )
          (Setq N (+ N 3))
         );11
        (Setq M (1+ M))
        )
   )
在上面的程序中是检查((0 . "Polyline")(8 . "LAL"))的每一顶点对应一圆的 ,在POLINE线较少的情况下是正确的,但线多了  就出错在(if (NULL jie)
            (Princ (Strcat "\n:>>无属性Point......参考坐标:"(Rtos (Nth 0 pt))","(Rtos (Nth 1 pt))))
          ) 不准了,有时候有圆也会输出,不知道何原因 !!期待
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-18 23:01 , Processed in 0.324509 second(s), 46 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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