找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1202|回复: 9

[求助] [求助]:我搞不定了,哪位高人能指点一下!

[复制链接]
发表于 2006-11-4 21:29:23 | 显示全部楼层 |阅读模式

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

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

×
我想写一个程序,能把所选中的直线和圆弧的两个端点全都加到一个表里,但折腾了半天没搞定(plst的返回值始终不对)!谁能帮我瞧瞧到底哪里出错了?

  1. (defun c:ptlist (/     plst  bl          ss  i     n            ssn          entdata
  2.         p1    p2    dta          n a1    a2    cen          rad ang  ang1  ang2  arclen )

  3.    (setq ss (ssget))
  4.   (setq i 0)
  5.   (setq n (sslength ss))
  6.   (while (< i n)
  7.     (setq ssn (ssname ss i))
  8.     (setq entdata (entget ssn))
  9.     (cond ((= "LINE" (cdr (assoc 0 entdata)))
  10.            (setq p1 (cdr (assoc 10 entdata))
  11.                  p2 (cdr (assoc 11 entdata))
  12.            )
  13.           )
  14.           ((= "ARC" (cdr (assoc 0 entdata)))
  15.            (setq
  16.              a1         (cdr (assoc 50 entdata))
  17.              a2         (cdr (assoc 51 entdata))
  18.              cen (cdr (assoc 10 entdata))
  19.              rad (cdr (assoc 40 entdata))
  20.            )
  21.            (if (< a1 a2)
  22.              (left)
  23.              (right)
  24.            )
  25.            (setq p1 (polar cen (cdr (assoc 50 entdata)) rad)
  26.                  p2 (polar cen (cdr (assoc 51 entdata)) rad)
  27.            )
  28.           )
  29.     )
  30.     (setq plst (cons p2 (cons p1 plst)))
  31.     (setq i (1+ i))
  32.   )

  33.   (prin1)
  34. )

另外,在上面程序中的表"plst" 中,如何才能使每两个距离最小的点组成一个点对.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 6个

财富等级: 恭喜发财

发表于 2006-11-4 21:51:09 | 显示全部楼层
上面的程序可以的啊!
可能是你将plst 做成了局部变量又没有返回它就看不出效果了!
还有就是用
vlax-curve-getStartPoint
vlax-curve-getEndPoint
这两个函数要好一点啦·
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-11-4 22:10:43 | 显示全部楼层
(left)
(right)
没贴上来.
还有,(setq plst (cons p2 (cons p1 plst)))这句肯定有问题,对你的情况应该用 (APPEND (LIST....))
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-11-4 22:15:01 | 显示全部楼层
2楼的朋友
我是在CAD2006中调试的,
但"plst"的返回值始终不对."plst"的返回值不能得到所有端点所组成的表!
你多选几条直线试一下,看看对不对!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-11-4 22:21:00 | 显示全部楼层
兄弟,cons是做点对表用的,你的要求肯定不是做那种点对表.
只是普通 的list.
你再仔细琢磨琢磨你的(setq plst (cons p2 (cons p1 plst)))这一句.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-11-4 22:21:36 | 显示全部楼层
TO三楼的朋友:

  1. (defun right ()
  2.   (setq        ang1   (angle ep cen)
  3.         ang2   (angle ep1 cen)
  4.         ang    (- ang1 ang2)
  5.         arclen (abs (* rad ang))
  6.   )
  7. )

  8. (defun left ()
  9.   (setq ang (- a1 a2))
  10.   (setq arclen (abs (* rad ang)))
  11. )

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
cons语法

    (cons new-first-element list)

功能及参数

    它是“构造”(construct) 表的最基本函数, 它将一个元素 (new-first-element) 与一个表 (list) 接合起来, 并返回以此新元素为首的新表。
  我觉得"CONS"可以这么用啊!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-11-4 22:46:56 | 显示全部楼层
;;;修改后的.经测试可以.

  1. (defun c:ptlist        (/     bl    ss           i         n     ssn   entdata         p1
  2.                  p2    dta   n           a1         a2    cen   rad   ang         ang1
  3.                  ang2  arclen
  4.                 )

  5.   (setq ss (ssget))
  6.   (setq i 0)
  7.   (setq n (sslength ss))
  8.   (repeat n
  9.     (setq ssn (ssname ss i))
  10.     (setq entdata (entget ssn))
  11.     (cond ((= "LINE" (cdr (assoc 0 entdata)))
  12.            (setq p1 (cdr (assoc 10 entdata))
  13.                  p2 (cdr (assoc 11 entdata))
  14.            )
  15.           )
  16.           ((= "ARC" (cdr (assoc 0 entdata)))
  17.            (setq
  18.              a1         (cdr (assoc 50 entdata))
  19.              a2         (cdr (assoc 51 entdata))
  20.              cen (cdr (assoc 10 entdata))
  21.              rad (cdr (assoc 40 entdata))
  22.            )
  23.            (if (< a1 a2)
  24.              (left)
  25.              (right)
  26.            )
  27.            (setq p1 (polar cen (cdr (assoc 50 entdata)) rad)
  28.                  p2 (polar cen (cdr (assoc 51 entdata)) rad)
  29.            )
  30.           )
  31.     )
  32.     (setq plst (append plst (list p2 p1)))
  33.     (setq i (1+ i))
  34.   )
  35.   (princ plst)
  36.   (prin1)
  37. )

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

使用道具 举报

 楼主| 发表于 2006-11-5 22:34:34 | 显示全部楼层
to :oyxx_1023  
"(princ plst)"返回值是对的.
但为什么我在命令行用"!plst"显示出的表却不对呢?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-11-6 13:32:46 | 显示全部楼层
你把它设成局部变量却又没返回值.肯定是不行的.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-11-6 16:12:33 | 显示全部楼层
哦!谢谢指点!
我用"cons"也可以了!

另外,在上面程序中的表"plst" 中,如何才能使每两个距离最小的点组成一个点对?

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-29 19:22 , Processed in 0.192786 second(s), 50 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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