找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 893|回复: 8

[求助] [求助]:如何对多义线上各顶点之间距离排序

[复制链接]
发表于 2006-1-25 14:47:48 | 显示全部楼层 |阅读模式

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

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

×
对于多义线上各顶点坐标和距离用autolisp都好获得,想要获得各顶点之间距离的大小顺序,比如从大排到小,或者从小排到大。如何用autolisp实现?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2006-1-25 17:56:22 | 显示全部楼层
多义线上各顶点坐标和距离用autolisp如何获得?
先发上来看看。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-1-26 09:11:06 | 显示全部楼层
(defun c:dr(/ ent entdate pt)
  (setvar "cmdecho" 0)
  (setq ptlist '())
  (setq ent (car (entsel)))
  (setq entdate (entget ent))
(while (setq entdate (member (assoc 10 entdate) entdate))
  (setq pt (cdr (car entdate)))
  (setq ptlist (cons pt ptlist))
  (setq entdate (cdr entdate))
)
(setq ptlist (reverse ptlist))
(princ ptlist)
(ddlst)
(princ ddlist)
(princ)
)


(defun ddlst(/ i j m n pt1 pt2 dd)
  (setq i 0)
  (setq j 1)  
  (setq n (length ptlist))
  (setq n (1- n))  
  (setq ddlist '())
(repeat (<= j n)
  (setq pt1 (nth i ptlist))
  (setq pt2 (nth j ptlist))
  (setq dd (distance pt1 pt2))
  (setq ddlist (cons dd ddlist))
  (setq i (1+ i))
  (setq j (1+ j))
)
(princ)
)
主程序是获得pl的各顶点坐标的一个列表
子程序想获得各顶点之间距离并放到一个表中,但通不过,
提示:错误: 错误的参数类型
(REPEAT (<= J N) (SETQ PT1 (NTH I PTLIST)) (SETQ PT2 (NTH J PTLIST)) (SETQ DD
(DISTANCE PT1 PT2)) (SETQ DDLIST (CONS DD DDLIST)) (SETQ I (1+ I)) (SETQ J (1+
J)))
(DDLST)
(C:DR)
不知道为什么????
我的思路是获得各坐标顶点之间距离的表后,作一个循环,可以获得这个距离列表中的最大和最小距离,循环获得第二大,倒数第二小;
困惑:1 在获得最大和最小距离后,如何把这个值保存后,从上面
那个距离列表中剔除(这样就可以用max和min获得第二大和倒数第二小)
      2 如果上面1得到满足,如何对它们排序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
以上只是我的思路,比较烦琐,还不知道能否实现,如果要实现我的标题,谁有更好的代码(用LISP实现)请指教了。。。。。。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-1-26 10:51:11 | 显示全部楼层
回复:
困惑:1 在获得最大和最小距离后,如何把这个值保存后,从上面
那个距离列表中剔除(这样就可以用max和min获得第二大和倒数第二小)
用(setq newddlist(vl-remove 最大距离 ddlist))
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-1-26 13:07:07 | 显示全部楼层
[php]
错误的关键:
(REPEAT (<= J N)[/php]

  1. [FONT=courier new](defun c:dr (/ ent entdate pt)
  2.   (setvar "cmdecho" 0)
  3.   (setq        ptlist        '()
  4.         ent        (car (entsel))
  5.         entdate        (entget ent)
  6.   )
  7.   (while (setq entdate (member (assoc 10 entdate) entdate))
  8.     (setq pt          (cdr (car entdate))
  9.           ptlist  (cons pt ptlist)
  10.           entdate (cdr entdate)
  11.     )
  12.   )
  13.   (setq ptlist (reverse ptlist))
  14.   (princ ptlist)
  15.   (ddlst)
  16.   (setq ddlist (vl-sort ddlist '<))
  17.   (princ"\n")
  18.   (princ ddlist)
  19.   (princ)
  20. )


  21. (defun ddlst (/ i j m n pt1 pt2 dd)
  22.   (setq        i      0
  23.         j      1
  24.         n      (length ptlist)
  25.         n      (1- n)
  26.         ddlist '()
  27.   )
  28.   (while (<= j n)
  29.     (setq pt1         (nth i ptlist)
  30.           pt2         (nth j ptlist)
  31.           dd         (distance pt1 pt2)
  32.           ddlist (cons dd ddlist)
  33.           i         (1+ i)
  34.           j         (1+ j)
  35.     )
  36.   )
  37.   (princ)
  38. )[/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-1-26 13:25:47 | 显示全部楼层
呵呵。。。,有时候特别简单的错误自己就是看不出来。
不过,版主能用autolisp解决后面的排出大小顺序吗?请指教。。。。。。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-1-26 13:34:11 | 显示全部楼层
最初由 gucci218 发布
[B]呵呵。。。,有时候特别简单的错误自己就是看不出来。
不过,版主能用autolisp解决后面的排出大小顺序吗?请指教。。。。。。 [/B]

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

使用道具 举报

 楼主| 发表于 2006-1-27 07:55:18 | 显示全部楼层
班竹:要是在r14下,这个问题是不是不能解决,因为它不支持"vl-sort "这个函数。如果能解决的话,请明示。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2016-3-6 18:15:58 | 显示全部楼层
学习一下:lol:lol:lol:lol:lol
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-24 10:26 , Processed in 0.315194 second(s), 48 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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