找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1022|回复: 4

[研讨] 平面点集闭合回路

[复制链接]

已领礼包: 1883个

财富等级: 堆金积玉

发表于 2018-6-11 22:57:26 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 aimisiyou 于 2018-6-12 19:20 编辑

(defun fp ()
    (setq sn (ssget ":N" '((0 . "point"))))
    (setq i 0 n (sslength sn) plst nil)
    (while (< i n)
        (setq plst (cons (cdr (assoc 10 (entget (ssname sn i)))) plst))
         (setq i (+ i 1))
    )
    plst
)
(setq plst (fp)  n (length plst) )
(setq pt (list
             (/ (apply '+ (mapcar 'car plst)) n 1.0)
             (/ (apply '+ (mapcar 'cadr plst)) n 1.0)
             (/ (apply '+ (mapcar 'caddr plst)) n 1.0)
           )
)
(setq ptlst (mapcar '(lambda (p)
                             (list
                                (angle pt p)
                                (distance pt p)
                                (car p)
                                (cadr p)
                              )
                       )
                       plst                     
               )
)
(setq pplst (vl-sort ptlst '(lambda (a b)
                                    (if  (= (car a) (car b))
                                         (>= (cadr a) (cadr b))
                                         (< (car a) (car b))
                                     )
                              )
             )
)
(setq pts (mapcar '(lambda (c) (cdr (cdr c))) pplst))
(apply 'command (cons "pline" (reverse (cons "c" (reverse pts)))))
aa.png
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 6881个

财富等级: 富甲天下

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

使用道具 举报

已领礼包: 5604个

财富等级: 富甲天下

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

使用道具 举报

已领礼包: 3904个

财富等级: 富可敌国

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

使用道具 举报

已领礼包: 1883个

财富等级: 堆金积玉

 楼主| 发表于 2018-6-12 20:44:30 | 显示全部楼层

(defun fp ()
    (setq sn (ssget ":N" '((0 . "point"))))
    (setq i 0 n (sslength sn) plst nil)
    (while (< i n)
        (setq plst (cons (cdr (assoc 10 (entget (ssname sn i)))) plst))
         (setq i (+ i 1))
    )
    plst
)
(defun pick (lst i j)
   (setq count (length lst) nc 0 picklst nil)
   (while (<= nc j)
       (if (<= i nc)
           (setq picklst (cons (nth nc lst) picklst))
       )
      (setq nc (+ nc 1))
   )   
   (reverse picklst)
)
(setq plst (fp)  n (length plst) m (/ n 3) )
(setq pt (list
             (/ (apply '+ (mapcar 'car plst)) n 1.0)
             (/ (apply '+ (mapcar 'cadr plst)) n 1.0)
             (/ (apply '+ (mapcar 'caddr plst)) n 1.0)
           )
)
(setq ptlst (mapcar '(lambda (p)
                             (list
                                (angle pt p)
                                (distance pt p)
                                (car p)
                                (cadr p)
                              )
                       )
                       plst                     
               )
)
(setq pplst (vl-sort ptlst '(lambda (a b)
                                         (<= (cadr a) (cadr b))
                              )
             )
)
(setq pflst (pick pplst 0 (- m 1)))
(setq pllst (pick pplst m (- n 1)))
(setq pllst (mapcar '(lambda (v) (list
                                      (- (* pi 4) (car v))
                                      (cadr v)
                                      (caddr v)
                                      (cadddr v)
                                   )
                       )
               pllst
             )
)
(setq pvlst (append pflst pllst))
(setq pvlst (vl-sort pvlst '(lambda (a b)
                                    (if  (= (car a) (car b))
                                         (>= (cadr a) (cadr b))
                                         (< (car a) (car b))
                                     )
                              )
             )
)
(setq pts (mapcar '(lambda (c) (cdr (cdr c))) pvlst))
(apply 'command (cons "pline" (reverse (cons "c" (reverse pts)))))
bb.png
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-22 10:44 , Processed in 0.430782 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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