明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1156|回复: 4

[LISP群(2)] 2013-06-02 明经 AutoLISP 编程②群(177027547) 群聊记录:如何对三维点选择集按照X或Y排序

 关闭 [复制链接]
发表于 2013-6-2 00:23:53 | 显示全部楼层 |阅读模式
等你 00:23:53
如何对三维点选择集按照X或Y排序
 楼主| 发表于 2013-6-2 08:52:03 | 显示全部楼层
[kkppp123]小唐 08:52:03
请问打开了vlisp编辑器,用程序怎么关闭它呢
 楼主| 发表于 2013-6-2 10:09:04 | 显示全部楼层
等你 10:09:04
(defun sort-pt-1 (plts fun n)

  (vl-sort plts

       '(lambda (a b)

          (fun (nth n a) (nth n b))

        )

  )

)

(defun sort-pt (plst xyz / fun)

  (setq xyz (vl-string->list xyz))

  (foreach n-xyz (reverse xyz)

    (if    (< n-xyz 100)

      (setq fun      >

        n-xyz (- n-xyz 88)

        plst  (sort-pt-1 plst fun n-xyz)

      )

      (setq fun      <

        n-xyz (- n-xyz 120)

        plst  (sort-pt-1 plst fun n-xyz)

      )

    )

  )

)


                    ;-------------------------------------------------
(defun C:hdm (/ S1 S2 I)
  (setq en (entsel "选择一条直线:"))
                    ;(setq size 0.1)
  (SETQ S1 (ssget '((0 . "OINT"))))
  (SETQ n 0)

  (repeat (sslength s1)
    (setq lst (cons (ssname s1 n) lst)
      n   (1+ n)
    )
  )


  (setq
    x (mapcar '(lambda (x) (car (cdr (assoc 10 (entget x))))) lst)
  )

  (setq
    y (mapcar '(lambda (x) (cadr (cdr (assoc 10 (entget x)))))
          lst
      )
  )

  (setq    maxx (eval (cons 'max x))
    minx (eval (cons 'min x))
  )
  (setq    maxy (eval (cons 'max y))
    miny (eval (cons 'min y))
  )
  (setq    dx (- maxx minx)
    dy (- maxy miny)
  )
  (if (> dx dy)
    ;;x坐标排序:
    (setq S2 (sort-pt-1 s1 "x"))
    ;;y坐标排序:
    (setq S2 (sort-pt-1 s1 "y"))
  )
  (progn
    (setq I 0)
    (repeat (sslength S2)
      (setq pen_data (entget (ssname s2 i)))
      (setq ppt (assoc 10 pen_data))
      (setq pp (cdr ppt))
      (setq erpt (vlax-curve-getClosestPointTo (car en) pp T))
                    ;找出垂点
      (entmake (APPEND '((0 . "LINE")
             (100 . "AcDbEntity")
             (100 . "AcDbLine")
             (8 . "0")
            )
               (LIST (CONS 10 pp) (CONS 11 perpt))

           )
      )
      (princ "\n")
      (princ (cdddr (assoc 10 (entget (ssname S2 I)))))
                    ;显示排序结果。
      (setq I (1+ I))
    )
  )

  (princ)
)
 楼主| 发表于 2013-6-2 17:37:02 | 显示全部楼层
[ZZXXQQ] 17:37:02
sort-pt-1函数要求三个参数,你只给了两个。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-12-23 17:55 , Processed in 0.173928 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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