找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 5457|回复: 17

[点表] 给定起点、终点、数量--------定数等分线段,得点表

[复制链接]
发表于 2013-6-18 22:56:10 | 显示全部楼层 |阅读模式
函数发布
函数名称: YY-np1p2
调用格式: (YY-np1p2 P1 P2 N)
参数说明: P1 --- 线段起点坐标 (2D / 3D)
P2 --- 线段终点坐标 (2D / 3D)
N --- 等分数量 (> 1)
返回值: 按据p1的距离返回有序的--------点表
表长为n-1.
函数简介: 给定起点、终点、数量--------定数等分线段,得点表
函数来源: 原创
函数作者: wowan1314
适用版本: 不限 
最后更新时间: 2013-06-18
备注: 函数内p1 p2参数的前后有点区别。
返回的点表是按据第一个参数P1由近及远的有序点表。
修正为不包括起点与终点。
N=2就是求中点函数了。
演示图片: -

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

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

×
本帖最后由 wowan1314 于 2013-6-19 13:45 编辑

想到XD发布的“ 给起点和角度、距离和数量,求点表
所以就做了这个函数“给定起点、终点、数量--------定数等分线段,得点表”
  1. ;;给定起点、终点、数量--------定数等分线段,得点表
  2. ;;调用: (YY-np1p2 P1 P2 N)----- BY wowan1314
  3. ;;返回值:点表   按据第一个参数P1由近及远的有序点表。
  4. ;;       如:(P11 P12 P13 . . .) 不包括起点终点
  5. (defun YY-np1p2  (p1 p2 n / v m plst)
  6.   (setq  m 0 v (mapcar '(lambda (x y) (/ (- x y) n)) P2 P1) n (1- n))
  7.   (while (< m n)
  8.     (setq m (1+ m)
  9.      plst (cons (mapcar '(lambda(x y)(- x (* m y))) p2 v) plst)
  10.      )
  11.   )
  12. )

评分

参与人数 3D豆 +20 收起 理由
XDSoft + 10 很给力!经验;技术要点;资料分享奖!
xshrimp + 5 很给力!经验;技术要点;资料分享奖!
QiaoCheng + 5 很给力!经验;技术要点;资料分享奖!

查看全部评分

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

已领礼包: 394个

财富等级: 日进斗金

发表于 2013-6-18 22:59:19 | 显示全部楼层
谢谢分享,
好象看过论坛里也有这个功能的lsp, 看看这个有什么不同.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-6-18 23:18:42 | 显示全部楼层
本帖最后由 wowan1314 于 2013-6-19 13:46 编辑

点为2D/3D点,也勉强算是向量的一点运用。
代码还可以再精简一下,明天来改吧
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-6-19 19:07:51 | 显示全部楼层
  1. (defun XD::PTS:DivN (p1 p2 n / v ptl)
  2.   (setq v   (mapcar '(lambda (x) (/ x n)) (mapcar '- p2 p1))
  3. ptl (list p1)
  4.   )
  5.   (repeat n
  6.     (setq ptl (cons (mapcar '+ (car ptl) v) ptl))
  7.   )
  8.   (reverse ptl)
  9. )

评分

参与人数 1D豆 +5 收起 理由
wowan1314 + 5 很给力。可少个m

查看全部评分

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

使用道具 举报

 楼主| 发表于 2013-6-20 14:01:46 | 显示全部楼层
根据“Free-Lancer”的指导。。
调整下代码如下: 此版是包括P1 P2点的版本
  1. ;;给定起点、终点、数量--------定数等分线段,得点表
  2. ;;调用: (YY-np1p2 P1 P2 N)----- BY wowan1314
  3. ;;返回值:点表   按据第一个参数P1由近及远的有序点表。
  4. ;;       如:(P1 P11 P12 P13 . . . P2) 包括起点终点
  5. (defun YY-np1p2X  (p1 p2 n / v m plst)
  6.   (setq v (mapcar '(lambda (x y) (/ (- x y) n)) P2 P1) plst (cons p2 plst) )
  7.   (repeat n
  8.     (setq plst (cons (mapcar '- (car plst) v) plst))
  9.   )
  10. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

发表于 2013-6-20 14:46:10 | 显示全部楼层
  1. (defun 2pts-npts (p1 p2 intval / dis an intv pts)
  2.   (setq        dis  (distance p1 p2)
  3.         an   (angle p1 p2)
  4.         intv (/ dis (* 1.0 intval))
  5.   )
  6.   (setq pts (list p1))
  7.   (repeat (- intval 1)
  8.     (setq p1  (polar p1 an intv)
  9.           pts (cons p1 pts)
  10.     )
  11.   )
  12.   (setq pts (cons p2 pts))
  13.   (reverse pts)
  14. )

点评

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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-6-20 16:00:11 | 显示全部楼层

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

使用道具 举报

 楼主| 发表于 2013-7-16 18:32:59 | 显示全部楼层
本帖最后由 wowan1314 于 2013-7-27 13:03 编辑

复制代码
  1. ;============{ 在指定位置删除或插入元素 }===============
  2. ;nil表示要删除。如果有值为要插入的元素---by wowan1314
  3. ;(t11 '(1 2 3 4 5 6) 2 0);;->(1 2 0 3 4 5 6)
  4. ;(t11 '(1 2 3 4 5 6) 2 nil);;->(1 2 4 5 6)
  5. ;2013年7月20日 星期六
  6. (defun t11 (lst pos mod / qlst a hlst)
  7.     (setq a -1)
  8.     (setq hlst (vl-member-if-not
  9.             '(lambda(x)
  10.                 (setq a (1+ a))
  11.                 (if (= a pos) nil
  12.                     (setq qlst (cons x qlst))
  13.                 )
  14.             )
  15.             lst
  16.         )
  17.     )
  18.     (if mod
  19.         (apply 'append (list (reverse(cons mod qlst)) hlst))
  20.         (apply 'append (list (reverse qlst) (cdr hlst)))
  21.     )
  22. )
练习着玩
  1. ;中点函数
  2. (defun t1 (p1 p2)
  3.     (mapcar '(lambda(a b) (* 0.5 (+ a b))) p1 p2)
  4. )
  5. (defun t2 (p1 p2)
  6.     (mapcar '* (mapcar '+ p1 p2)'(0.5 0.5 0.5))
  7. )
  1. ;按新的点对表修改组码表更新图元
  2. (defun t1 (en xin / enb)
  3.     (setq enb (entget en))
  4.     (mapcar '(lambda(x)
  5.             (entmod(subst x (assoc (car x) enb)enb))
  6.         )
  7.         xin
  8.     )
  9. )

  10. ;表中两个两个配对后的表
  11. (defun t3 (lst / a)
  12.   (setq a 0)
  13.     (vl-remove-if '(lambda(x)(= (rem (setq a (1+ a))2)0))
  14.         (mapcar 'cons lst (cdr lst))
  15.     )
  16. )
  17. ;得到表的奇偶项
  18. ;(T2 LST T)奇数项。(T2 LST NIL)为偶数
  19. (defun t2 (lst b / a)
  20.     (setq a 0
  21.         c '(lambda(x)(= (rem (setq a (1+ a))2)0))
  22.     )
  23.     (if b
  24.         (vl-remove-if c lst)
  25.         (vl-remove-if-not c lst)
  26.     )
  27. )
  1. ;选择集变图元名表
  2. (defun t1 (ss)
  3.     (cdr(reverse(mapcar 'cadr (ssnamex (ssget))
  4.             )
  5.         )
  6.     )
  7. )
  8. ;选择集变图元名表
  9. (defun t2 (ss / a en lst)
  10.     (setq a -1)
  11.     (while (setq en (ssname ss (setq a (1+ a))
  12.             )
  13.         )
  14.         (setq lst (cons en lst))
  15.     )
  16.     lst
  17. )
  18. ;图元名表变选择集
  19. (defun t3 (lst / ss)
  20.     (setq ss (ssadd))
  21.     (mapcar '(lambda(x)(setq ss (cons x ss)))lst)
  22.     ss
  23. )
  24. ;dxf_read 按值或值表读取组码表
  25. (defun dxf_read (a en / enb)
  26.     (setq enb (entget en))
  27.     (if (= 'list (type a))
  28.         (mapcar '(lambda(x)(cdr(assoc x enb))) a)
  29.         (cdr(assoc a enb))
  30.     )
  31. )
  1. ;单个图元包围盒
  2. (defun enbox (ename / ll ur)
  3.     (vla-getboundingbox (vlax-ename->vla-object ename) 'll 'ur)
  4.     (mapcar 'vlax-safearray->list (list ll ur))
  5. )
  6. ;选择集包围盒1
  7. (defun t12 (ss / enma enmi a en ll ur)
  8.     (setq a -1)
  9.     (while
  10.         (setq en (ssname ss (setq a (1+ a))
  11.             )
  12.         )
  13.         (setq entb (enbox en)
  14.             enma (cons (car entb) enma)
  15.             enmi (cons (cadr entb) enmi)
  16.         )
  17.     )
  18.     (mapcar '(lambda(a b)(apply 'mapcar (cons a b))) '(max min) (list enma enmi))
  19. )
  20. ;选择集包围盒2
  21. (defun t11 (ss / a en enma enmi ll ur)
  22.     (setq a -1)
  23.     (while
  24.         (setq en (ssname ss (setq a (1+ a))
  25.             )
  26.         )
  27.         (vla-getboundingbox (vlax-ename->vla-object en) 'll 'ur)
  28.         (setq enma (cons (vlax-safearray->list ll) enma)
  29.             enmi (cons (vlax-safearray->list ur) enmi)
  30.         )
  31.     )
  32.     (mapcar '(lambda(a b)(apply 'mapcar (cons a b))) '(max min) (list enma enmi))
  33. )
  34. ;图元名表包围盒
  35. (defun t13 (sslst / enma enmi ll ur)
  36.     (mapcar
  37.         '(lambda(x)
  38.             (vla-getboundingbox (vlax-ename->vla-object x) 'll 'ur)
  39.             (setq enma (cons (vlax-safearray->list ll) enma)
  40.                 enmi (cons (vlax-safearray->list ur) enmi)
  41.             )
  42.         )
  43.         sslst
  44.     )
  45.     (mapcar '(lambda(a b)(apply 'mapcar (cons a b))) '(max min) (list enma enmi))
  46. )
3/分割字符串--高飞鸟的   该代码不能处理字符串中带空格的字符
  1. (defun split (string del / str)
  2.     (setq str (vl-string-translate del " " string))
  3.     (mapcar 'vl-princ-to-string (read (strcat "(" str ")")))
  4. )
1/分隔字符串
  1. 按分隔符分解字符串成表.
  2. (defun t11 (str del / pos lst)
  3.         (while
  4.                 (setq pos (vl-string-search del str))
  5.                 (setq lst (cons (substr str 1 pos) lst)
  6.                         str (substr str (+ 1 pos (strlen del))
  7.                         )
  8.                 )
  9.         )
  10.         (reverse(cons str lst))
  11. )
2/圆弧三点求其 圆心 半径
  1. ;|
  2. =============={  三点求ARC:圆心+半径  }============
  3.     三点求ARC的圆心、半径。  返回值:(圆心坐标 半径) 、nil表示三点共线                              
  4.     (YY-3arc P1 P2 P3)   BY wowan1314                                    
  5.     2013年7月16日 星期二                                                  
  6. ============================================
  7. |;
  8. (defun YY-3arc (p1 p2 p3 / z1 z2 yxin)
  9.         (setq z1 (car (YY-np1p2 p1 p2 2))
  10.               z2 (car (YY-np1p2 p1 p3 2))
  11.         )
  12.         (if
  13.                 (setq yxin (inters
  14.                               z1 (polar z1 (+ (angle p1 p2)(* pi 0.5)) 0.1)
  15.                               z2 (polar z2 (+ (angle p1 p3)(* pi 0.5)) 0.1)
  16.                               nil
  17.                            )
  18.                 )
  19.                 (list yxin (distance yxin p1))
  20.         )
  21. )

点评

主要就有点浪费了,Lisp 尽量减少互相调用以提高效率  详情 回复 发表于 2013-7-16 19:34
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-7-16 19:34:35 | 显示全部楼层
本帖最后由 st788796 于 2013-7-16 19:35 编辑
wowan1314 发表于 2013-7-16 18:32
圆弧三点求其 圆心 半径

这就有点浪费了,Lisp 尽量减少互相调用以提高效率
  1. (defun 3parc (p1 p2 p3 / midp _pi2 an1 an2 p10 p20 p)
  2.   (defun midp (p1 p2)
  3.     (mapcar '* '(0.5 0.5 0.5) (mapcar '+ p1 p2))
  4.   )
  5.   (setq _pi2 (/ pi 2)
  6. an1  (+ (angle p1 p2) _pi2)
  7. an2  (+ (angle p2 p3) _pi2)
  8. p10  (midp p1 p2)
  9. p20  (midp p2 p3)
  10.   )
  11.   (if (setq p (inters p10
  12.         (polar p10 an1 10.)
  13.         p20
  14.         (polar p20 an2 10.)
  15.         nil
  16.        )
  17.       )
  18.     (list p (distance p p1))
  19.   )
  20.   p
  21. )

点评

呵呵。函数都做出来, 能用就用撒! 我这个函数还省了再做个中点函数了。  详情 回复 发表于 2013-7-16 19:48
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-7-16 19:48:22 | 显示全部楼层
本帖最后由 wowan1314 于 2013-7-25 13:12 编辑
st788796 发表于 2013-7-16 19:34
这就有点浪费了,Lisp 尽量减少互相调用以提高效率

呵呵。函数都做出来, 能用就用撒! 我这个函数还省了再做个中点函数了。
  1. ;删除相应组码
  2. (defun t1 (lst1 lst)
  3.     (vl-remove-if '(lambda(x)(member x lst1)) lst)
  4. )
  5. ;删除相应组码只删第一个
  6. (defun t2 (lst1 lst / lst2)
  7.     (vl-remove-if '(lambda(x)
  8.             (if
  9.                 (and(member x lst1)(not(member x lst2))
  10.                 )
  11.                 (setq lst2 (cons x lst2))
  12.             )
  13.         )
  14.         lst
  15.     )
  16. )
  17. ;替换组码表,如果没有就加到最后
  18. (defun t3 (lst1 lst / old)
  19.     (mapcar
  20.         '(lambda(x)
  21.             (if (setq old (assoc (car x) lst))
  22.                 (setq lst (subst x old lst))
  23.                 (setq lst (cons x (reverse lst))
  24.                 )
  25.             )
  26.         )
  27.         lst1
  28.     )
  29.     lst
  30. )
  31. ;从指定位置a截取指定长度b的表
  32. (defun t4 (lst a b / i c xlst)
  33.     (setq i -1 c (1-(+ a b)))
  34.     (vl-member-if
  35.         '(lambda(x)
  36.             (setq i (1+ i))
  37.             (if (<= a i c)
  38.                 (setq xlst (cons x xlst))
  39.             )
  40.             (if (> i c)
  41.                 t
  42.             )
  43.         )
  44.         lst
  45.     )
  46.     xlst
  47. )
  48. ;分解表内套的表
  49. (defun t5 (lst )
  50.     (mapcar '(lambda(x)(if (listp x)(setq lst2 (t5 x))(setq lst2 (cons x lst2))))lst)
  51.     lst2
  52. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-7-20 16:49:57 | 显示全部楼层
本帖最后由 wowan1314 于 2013-7-22 17:18 编辑

瞎玩!
  1. ;;消除字符串中的空格
  2. (defun t11 (str)
  3.     (apply
  4.         'strcat
  5.         (mapcar
  6.             'vl-princ-to-string
  7.             (read
  8.                 (strcat "(" str ")")
  9.             )
  10.         )
  11.     )
  12. )
  13. ;;消除字符串中的空格
  14. (defun t12 (str)
  15.     (while
  16.         (> (strlen str)
  17.             (strlen
  18.                 (setq str (vl-string-subst "" " " str))
  19.             )
  20.         )
  21.     )
  22.     str
  23. )
  1. ;求字符串表 或 数表中 最大的数 或最长的字符串
  2. (defun t11 (lst)
  3.     (if (= (type (car lst)) 'str)
  4.         (cdr
  5.             (assoc
  6.                 (apply
  7.                     'max
  8.                     (mapcar
  9.                         '(lambda(x)
  10.                             (strlen x)
  11.                         )
  12.                         lst
  13.                     )
  14.                 )
  15.                 (mapcar
  16.                     '(lambda(x)
  17.                         (list (strlen x) x)
  18.                     )
  19.                     lst
  20.                 )
  21.             )
  22.         )
  23.         (apply 'max lst)
  24.     )
  25. )
  1. ;图元之后所有图元组成的选择集
  2. (defun t12 (en / ss)
  3.     (setq ss (ssadd))
  4.     (while
  5.         (setq en (entnext en))
  6.         (if (member
  7.                 (cdr (assoc 0 (entget en))
  8.                 )
  9.                 '("attrib" "vertex" "seqend")
  10.             )
  11.             nil
  12.             (setq ss (ssadd en ss))
  13.         )
  14.     )
  15.     ss
  16. )
  17. ;;图元之后所有图元的表
  18. (defun t11 (en / lst)
  19.     (while
  20.         (setq en (entnext en))
  21.         (if (member
  22.                 (cdr (assoc 0 (entget en))
  23.                 )
  24.                 '("attrib" "vertex" "seqend")
  25.             )
  26.             nil
  27.             (setq lst (cons en lst))
  28.         )
  29.     )
  30.     lst
  31. )
  1. ; (t11 '("1" "2" "3" "4" "5" "6") ":")
  2. ;==> "1:2:3:4:5:6"
  3. (defun t11 (lst del)
  4.     (vl-string-right-trim
  5.         del
  6.         (apply
  7.             'strcat
  8.             (mapcar
  9.                 '(lambda
  10.                     (
  11.                         x
  12.                     )
  13.                     (strcat
  14.                         x
  15.                         del
  16.                     )
  17.                 )
  18.                 lst
  19.             )
  20.         )
  21.     )
  22. )
  1. ;将字符串表合并为按指定分隔符分隔的字符串
  2. ; (t11 '("1" "2" "3" "4" "5" "6") ":")
  3. ;==> "1:2:3:4:5:6"
  4. (defun t11 (lst del / ss lst p1 p2 p3)
  5.     (vl-string-right-trim
  6.         del
  7.         (eval
  8.             (cons 'strcat
  9.                 (mapcar
  10.                     '(lambda(x)
  11.                         (strcat x del)
  12.                     )
  13.                     lst
  14.                 )
  15.             )
  16.         )
  17.     )
  18. )
  1. ;计算点集中距离原点 (最大 最小)
  2. (defun t11 (plst)
  3.     (setq lst (vl-sort lst '(lambda(a b) (> (distance a '(0 0 0)) (distance b '(0 0 0)) ))
  4.         )
  5.     )
  6.     (list (car lst)(last lst))
  7. )
  8. ;计算点集围成的包围盒的 对角点  
  9. (defun t12 (plst)
  10.     (mapcar '(lambda(a b)(apply 'mapcar (cons a b))) '(min max) (list lst lst))
  11. )
  12. ;计算实数表中 最大 最小值  
  13. (defun t13 (plst)
  14.     (mapcar '(lambda(a b)(apply 'mapcar (cons a b))) '(min max) (list lst lst))
  15. )
  1. ;;等分表,没考虑表的顺序。
  2. (defun t1 (n lst / a ll zll)
  3.     (setq a 1)
  4.     (mapcar
  5.         '(lambda(x)
  6.             (if (< a n)
  7.                 (setq ll (cons x ll) a (1+ a))
  8.                 (setq zll (cons (cons x a) zll)
  9.                     ll nil
  10.                     a 1
  11.                 )
  12.             )
  13.         )
  14.         lst
  15.     )
  16.     (if ll (cons ll zll) zll)
  17. )
  1. ;;用新项替换表中的旧项,只替换第一个。
  2. (defun t2 (new old lst)
  3. (read(apply 'vl-string-subst (mapcar 'vl-princ-to-string (list new old lst))))
  4. )
  1. ;;点集按pl线的pl起点到点到曲线的最近点的距离排序
  2. ;;pl为vla实体. 返回排序后的点表
  3. (defun t11 (pl pts)
  4.     (mapcar
  5.         'cadr
  6.         (vl-sort
  7.             (mapcar
  8.                 '(lambda (x)
  9.                     (list (vlax-curve-getdistatpoint
  10.                             pl
  11.                             (vlax-curve-getclosestpointto pl x)
  12.                         )
  13.                         x
  14.                     )
  15.                 )
  16.                 pts
  17.             )
  18.             '(lambda (a b)
  19.                 (< (car a) (car b))
  20.             )
  21.         )
  22.     )
  23. )
  1. ;;得到表中重复次数 及 删除重复后的表
  2. ;; (t1 '(1 2 1 2 (1 1) (1 2) (1 2) 1 2))
  3. (defun t1 (lst / lst1 lst2)
  4.     (mapcar
  5.         '(lambda(x)
  6.             (if (member x lst2)
  7.                 (setq lst1 (cons x lst1))
  8.                 (setq lst2 (cons x lst2))
  9.             )
  10.         )
  11.         lst
  12.     )
  13.     (list (length lst1) lst2)
  14. )
  1. ;;=============={ 返回表m-n之间的所有元素 }===============
  2. ;;测试: (T66 3 5 '(2334 556 33 44 66 77 22))==> (33 44 66)
  3. (DEFUN T66 (n m LST / A)
  4. (setq A 0)
  5. (vl-remove-if-not '(lambda(x)(setq A (1+ A)) (<= n A m) ) lst)
  6. )
  1. ;;=============={ 返回表第N个元素之前的所有元素 }===================
  2. ;;测试: (T2 3 '(2334 556 33 44 66 77 22))==> (2334 556 33)
  3. (DEFUN T2 (n lst / m NEW)
  4. (setq m 0)
  5. (WHILE (< M N)
  6.   (SETQ NEW (CONS (CAR LST) NEW) LST (CDR LST) m (1+ m))
  7. )
  8. (REverse NEW)
  9. )
  10. ;;=============={ 返回表第N个元素之前的所有元素 }===================
  11. ;;测试: (T1 3 '(2334 556 33 44 66 77 22))==> (2334 556 33)
  12. (DEFUN T1 (n lst / m)
  13. (setq m 0)
  14. (vl-remove-if '(lambda(x)(setq m (1+ m))(< n m) ) lst)
  15. )
  1. ;;=============={ 用member的话,对于有重复元素的表是不行的 }===================
  2. ;;测试: (T3 3 '(2334 556 33 44 66 77 22))==> (44 66 77 22)
  3. (DEFUN T3 (n lst)
  4. (setq n (nth n lst))
  5. (member n lst)
  6. )
  7. ;;=============={ 返回表第N个元素之后的所有元素 }===================
  8. ;;测试: (T31 3  '(2334 556 33 44 66 77 22))==> (44 66 77 22)
  9. (DEFUN T31 (n LST / A)
  10. (setq A 0)
  11. (vl-member-if '(lambda(x)(setq A (1+ A)) (< n A) ) lst)
  12. )
  13. ;;=============={ 返回表第N个元素之后的所有元素 }===================
  14. ;;测试: (T32 3  '(2334 556 33 44 66 77 22))==> (44 66 77 22)
  15. (DEFUN T32 (n LST / A)
  16. (setq A 0)
  17. (vl-remove-if '(lambda(x)(setq A (1+ A)) (<= A n) ) lst)
  18. )
  19. ;;=============={ 返回表第N个元素之后的所有元素 }===================
  20. ;;测试: (T33 3  '(2334 556 33 44 66 77 22))==> (44 66 77 22)
  21. (DEFUN T33 (n LST / A)
  22.   (setq A 0)
  23.   (vl-catch-all-apply
  24.     'mapcar
  25.     (LIST '(lambda (x)
  26.        (SETQ A (1+ A))
  27.        (if (< N A)
  28.          (EXIT)
  29.          (setq lst (cdr lst))
  30.        )
  31.      )
  32.     lst
  33.     )
  34.   )
  35.   lst
  36. )
  37. ;;=============={ 返回表第N个元素之后的所有元素(最优版) }=================
  38. ;;测试: (T6 3  '(2334 556 33 44 66 77 22))==> (44 66 77 22)
  39. (DEFUN T6 (n LST / A NLST L)
  40. (setq A 0 L (LENGTH LST))
  41. (IF (< N (* L 0.65))
  42. (SETQ NLST (vl-member-if '(lambda(x)(setq A (1+ A)) (< n A) ) lst))
  43. (vl-member-if '(lambda(x)(SETQ L (1- L) Nlst (CONS X NLST)) (<= L N) ) (reverse lst))
  44. )
  45. NLST
  46. )
  1. ;vl-position返回第一个元素出现的索引位置
  2. ;这个函数返回元素出现的所有索引位置
  3. (defun t11 (at lst / a nlst)
  4.     (setq a 0)
  5.     (mapcar '(lambda(x)(and(eq x at)(setq nlst(cons a nlst)))(setq a(1+ a))) lst)
  6.     (reverse nlst)
  1. ;TEXT的四个交点坐标
  2. (defun t11 (ent / p0 p12 ang lst)
  3.     (setq ent (entget ent)
  4.         p0 (cdr (assoc 10 ent))
  5.         ang (cdr (assoc 50 ent))
  6.         p12 (textbox ent)
  7.         lst
  8.         (list
  9.             (car p12)
  10.             (list (caar p12)(cadadr p12))
  11.             (cadr p12)
  12.             (list (caadr p12)(cadar p12))
  13.         )
  14.     )
  15.     (mapcar '(lambda(x)(polar p0 (+ ang (angle '(0 0) x)) (distance '(0 0) x))) lst)
  16. )
用正则也许更简单!
  1. ;得到文字内容
  2. (defun gps->txt-getvalue1 (ename)
  3.     (cdr(assoc 1 (entget enmae))
  4.     )
  5. )
  6. ;设置文字内容
  7. (defun gps->txt-setvalue1 (ename val)
  8.     (entmod(subst (cons 1 val)(assoc 1 (entget enmae)) (entget enmae))
  9.     )
  10. )
  11. ; 得到带数字后缀的字符串的 (文字前缀、数字后缀、小数点位数)
  12. (defun t11 (txt1 / nums lop a1 txt len a2)
  13.     (setq nums '(49 50 51 52 53 54 55 56 57 48 43 45 46)
  14.         lop t
  15.         a1 0
  16.         txt (reverse(vl-string->list txt1))
  17.     )
  18.     (while lop
  19.         (if (member (car txt) nums)
  20.             (progn
  21.                 (if (= (car txt) 46) (setq a2 a1))
  22.                 (setq a1 (1+ a1) txt (cdr txt))
  23.             )
  24.             (setq lop nil)
  25.         )
  26.     )
  27.     (if (/= a1 0)
  28.         (progn
  29.             (setq len (- (strlen txt1) a1))
  30.             (list (substr txt1 1 len) (substr txt1 (1+ len)) a2)
  31.         )
  32.     )
  33. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-7-20 18:42:04 | 显示全部楼层
呵呵,葛老这功力,真是不简单呀!!!我啥时候也能这样呀:lol
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-8-28 16:54:56 | 显示全部楼层
厉害哦,这些东西对我来说,是本天书呀!向大师们致敬!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-9-2 13:30:47 | 显示全部楼层
wowan1314:老师!您真厉害!向您学习!

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

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-25 14:38 , Processed in 0.524633 second(s), 71 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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