找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 523|回复: 0

[LISP程序]:点坐标读去排序输出

[复制链接]
发表于 2005-2-28 14:09:15 | 显示全部楼层 |阅读模式

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

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

×
  1. ;;;;;;;;;;;;;;
  2. ;;;;;;;;;;;;;;点暂时设置为圆心,想要其它点的可以自己改一下
  3. ;;;;;;;;;;;;;;(sta)(end)我其它程序里都有,大家可以去拿一下。
  4. (defun c:zb(/ szcs xhgd wzgd bghg bglk bghs dzb_ss n fgs pt_n pt_x pt_y pt_z mx my )
  5.   (sta);;;;;;;
  6.   ;;;默认设置
  7.      (if (= xhgd0 nil)(setq xhgd0 3.5))
  8.      (setq xhgd xhgd0)
  9.      (if (= wzgd0 nil)(setq wzgd0 2.5))
  10.      (setq wzgd wzgd0)
  11.      (if (= bghg0 nil)(setq bghg0 5))
  12.      (setq bghg bghg0)
  13.      (if (= bglk0 nil)(setq bglk0 15))
  14.      (setq bglk bglk0)
  15.      (if (= bghs0 nil)(setq bghs0 20))
  16.      (setq bghs bghs0)
  17.   (princ "\n欢迎使用圆心坐标读取书写程序")
  18.   (princ "\n[序号高度x]")(princ xhgd)
  19.   (princ "[文字高度w]")(princ wzgd)
  20.   (princ "[表格行高h]")(princ bghg)
  21.   (princ "[表格列宽l]")(princ bglk)
  22.   (princ "[表格行数s]")(princ bghs)
  23.   (princ "[恢复默认f]:")
  24.   (setq szcs (getstring))
  25.   ;;;参数设置
  26.   (while (or (equal szcs "x")(equal szcs "X")(equal szcs "w")(equal szcs "W")
  27.              (equal szcs "h")(equal szcs "H")(equal szcs "l")(equal szcs "L")
  28.              (equal szcs "s")(equal szcs "S")(equal szcs "f")(equal szcs "F"))
  29.     (cond
  30.       ((or (equal szcs "x")(equal szcs "X"))
  31.      (if (= xhgd0 nil)(setq xhgd0 3.5))
  32.      (princ "\n请输入序号高度(")(princ xhgd0)(princ "):")
  33.      (setq xhgd (getreal))
  34.      (if (= xhgd nil)(setq xhgd xhgd0) (setq xhgd0 xhgd))
  35.        );

  36.       ((or (equal szcs "w")(equal szcs "W"))
  37.      (if (= wzgd0 nil)(setq wzgd0 2.5))
  38.      (princ "\n请输入文字高度(")(princ wzgd0)(princ "):")
  39.      (setq wzgd (getreal))
  40.      (if (= wzgd nil)(setq wzgd wzgd0) (setq wzgd0 wzgd))
  41.        );

  42.       ((or (equal szcs "h")(equal szcs "H"))
  43.      (if (= bghg0 nil)(setq bghg0 5.0))
  44.      (princ "\n请输入表格行高(")(princ bghg0)(princ "):")
  45.      (setq bghg (getreal))
  46.      (if (= bghg nil)(setq bghg bghg0) (setq bghg0 bghg))
  47.        );

  48.       ((or (equal szcs "l")(equal szcs "L"))
  49.      (if (= bglk0 nil)(setq bglk0 15.0))
  50.      (princ "\n请输入表格列宽(")(princ bglk0)(princ "):")
  51.      (setq bglk (getreal))
  52.      (if (= bglk nil)(setq bglk bglk0) (setq bglk0 bglk))
  53.        );

  54.       ((or (equal szcs "s")(equal szcs "S"))
  55.      (if (= bghs0 nil)(setq bghs0 20))
  56.      (princ "\n请输入表格行数(")(princ bghs0)(princ "):")
  57.      (setq bghs (getint))
  58.      (if (= bghs nil)(setq bghs bghs0)(setq bghs0 bghs));
  59.       )
  60.       ((or (equal szcs "f")(equal szcs "F"))
  61.      (setq xhgd0 3.5)     (setq xhgd xhgd0)
  62.      (setq wzgd0 2.5)     (setq wzgd wzgd0)
  63.      (setq bghg0 5)       (setq bghg bghg0)
  64.      (setq bglk0 15)      (setq bglk bglk0)
  65.      (setq bghs0 20)      (setq bghs bghs0)
  66.        );
  67.       );
  68.   (princ "\n[序号高度x]")(princ xhgd)
  69.   (princ "[文字高度w]")(princ wzgd)
  70.   (princ "[表格行高h]")(princ bghg)
  71.   (princ "[表格列宽l]")(princ bglk)
  72.   (princ "[表格行数s]")(princ bghs)
  73.   (princ "[恢复默认f]:")
  74.   (setq szcs (getstring))
  75.     )   
  76.   
  77.   (setq dzb_ss (ssget (list (cons 0' "CIRCLE")))); (list (cons 0' "POINT") (cons 0' "CIRCLE"))));
  78.   (setq pt0 (getpoint "请选择表格起点"))
  79.   (setq n 0)
  80.   ;;;画表格
  81.   (setq fgs (fix (/ (sslength dzb_ss) bghs)))
  82.   (if (< fgs (/ (sslength dzb_ss) bghs))
  83.     (setq fgs (+ 1 fgs)))
  84.   (setq fgs (+ 1 fgs))
  85.   (command "line" (list (- (nth 0 pt0) (* 0.5 bglk)) (+ (nth 1 pt0) (* 0.5 bghg)) 0)
  86.            (list (+ (nth 0 pt0) (* 3.5 bglk)) (+ (nth 1 pt0) (* 0.5 bghg)) 0) "");画横线
  87.   (command "-array" (ssget "l") ""  "r" (+ 2 (fix bghs)) fgs (* -1 bghg) (* 4 bglk))
  88.   (command "line" (list (- (nth 0 pt0) (* 0.5 bglk)) (+ (nth 1 pt0) (* 0.5 bghg)) 0)
  89.            (list (- (nth 0 pt0) (* 0.5 bglk)) (- (nth 1 pt0) (* bghg (+ 0.5 bghs))) 0) "");画竖线
  90.   (command "-array" (ssget "l") ""  "r" "1" (+ 1 (* 4 fgs)) bglk)
  91.   ;;;书写表头
  92.   (command "text" "j" "mc" (list (nth 0 pt0) (- (nth 1 pt0) (* bghg n)) 0)
  93.              wzgd "0" "序号")
  94.     (if (> (sslength dzb_ss) bghs)
  95.   (command "-array" (ssget "l") ""  "r" "1" fgs (* 4 bglk))
  96.       )
  97.   (command "text" "j" "mc" (list (+ bglk (nth 0 pt0)) (- (nth 1 pt0) (* bghg n)) 0)
  98.              wzgd "0" "X")
  99.   (if (> (sslength dzb_ss) bghs)
  100.       (command "-array" (ssget "l") ""  "r" "1" fgs (* 4 bglk))
  101.       )
  102.   (command "text" "j" "mc" (list (+ (* 2 bglk) (nth 0 pt0)) (- (nth 1 pt0) (* bghg n)) 0)
  103.              wzgd "0" "Y")
  104.   (if (> (sslength dzb_ss) bghs)
  105.       (command "-array" (ssget "l") ""  "r" "1" fgs (* 4 bglk))
  106.       )
  107.   (command "text" "j" "mc" (list (+ (* 3 bglk) (nth 0 pt0)) (- (nth 1 pt0) (* bghg n)) 0)
  108.              wzgd "0" "Z")
  109.   (if (> (sslength dzb_ss) bghs)
  110.   (command "-array" (ssget "l") ""  "r" "1" fgs (* 4 bglk))
  111.       )
  112.   ;;;循环
  113.   (while (< n (sslength dzb_ss))
  114.     (setq pt_n (cdr (assoc '10 (entget(ssname dzb_ss n)))))
  115.     (setq pt_x (nth 0 pt_n))
  116.     (setq pt_y (nth 1 pt_n))
  117.     (setq pt_z (nth 2 pt_n))
  118.    
  119.     (setq n (1+ n))
  120.    
  121.     (command "text" "j" "mc" pt_n wzgd "0" n);原点书写序号
  122.    
  123.     ;;;书写表格内容
  124.     (setq mx (* 4 (fix (/ (- n 1) bghs)) bglk))
  125.     (setq my (* (- n (* bghs (fix (/ (- n 1) bghs)))) bghg))
  126.     (command "text" "j" "mc" (list (+ mx (nth 0 pt0)) (- (nth 1 pt0) my) 0)
  127.              wzgd "0" n)
  128.     (command "text" "j" "mc" (list (+ mx bglk (nth 0 pt0)) (- (nth 1 pt0) my) 0)
  129.              wzgd "0" (rtos pt_x 2 0))
  130.     (command "text" "j" "mc" (list (+ mx (* 2 bglk) (nth 0 pt0)) (- (nth 1 pt0) my) 0)
  131.              wzgd "0" (rtos pt_y 2 0))
  132.     (command "text" "j" "mc" (list (+ mx (* 3 bglk) (nth 0 pt0)) (- (nth 1 pt0) my) 0)
  133.              wzgd "0" (rtos pt_z 2 0))           
  134.   )
  135.    ;;结束
  136.   (princ "\n总共读取并输出")(princ n)(princ "个坐标。")
  137.   (end);;;;;;;;;;;
  138.   
  139.   (princ)
  140.   )


;;;;又完善了一些

;;;;;;;;;;;;;;
;;;;;;;;;;;;;;
;;;;;;;;;;;;;;
(defun c:zb(/ szcs xhgd wzgd bghg bglk bghs bgbl dzb_ss n fgs pt_n pt_x pt_y pt_z mx my )
  (sta);;;;;;;
  ;;;默认设置
     (if (= xhgd0 nil)(setq xhgd0 3.5))
     (setq xhgd xhgd0)
     (if (= wzgd0 nil)(setq wzgd0 2.5))
     (setq wzgd wzgd0)
     (if (= bghg0 nil)(setq bghg0 5.0))
     (setq bghg bghg0)
     (if (= bglk0 nil)(setq bglk0 15.0))
     (setq bglk bglk0)
     (if (= bghs0 nil)(setq bghs0 20))
     (setq bghs bghs0)
     (if (= bgbl0 nil)(setq bgbl0 1))
     (setq bgbl bgbl0)
  (princ "\n欢迎使用圆心坐标读取书写程序")
  (princ "\n[序号高度x]")(princ xhgd)
  (princ "[文字高度w]")(princ wzgd)
  (princ "[表格行高h]")(princ bghg)
  (princ "[表格列宽l]")(princ bglk)
  (princ "[表格行数s]")(princ bghs)
  (princ "[比例调整b]")(princ bgbl)
  (princ "[恢复默认f]:")
  (setq szcs (getstring))
  ;;;参数设置
  (while (or (equal szcs "x")(equal szcs "X")(equal szcs "w")(equal szcs "W")
             (equal szcs "h")(equal szcs "H")(equal szcs "l")(equal szcs "L")
             (equal szcs "s")(equal szcs "S")(equal szcs "f")(equal szcs "F")
             (equal szcs "b")(equal szcs "B"))
    (cond
      ((or (equal szcs "x")(equal szcs "X"))
     (if (= xhgd0 nil)(setq xhgd0 3.5))
     (princ "\n请输入序号高度(")(princ xhgd0)(princ "):")
     (setq xhgd (getreal))
     (if (= xhgd nil)(setq xhgd xhgd0) (setq xhgd0 xhgd))
       );

      ((or (equal szcs "w")(equal szcs "W"))
     (if (= wzgd0 nil)(setq wzgd0 2.5))
     (princ "\n请输入文字高度(")(princ wzgd0)(princ "):")
     (setq wzgd (getreal))
     (if (= wzgd nil)(setq wzgd wzgd0) (setq wzgd0 wzgd))
       );

      ((or (equal szcs "h")(equal szcs "H"))
     (if (= bghg0 nil)(setq bghg0 5.0))
     (princ "\n请输入表格行高(")(princ bghg0)(princ "):")
     (setq bghg (getreal))
     (if (= bghg nil)(setq bghg bghg0) (setq bghg0 bghg))
       );

      ((or (equal szcs "l")(equal szcs "L"))
     (if (= bglk0 nil)(setq bglk0 15.0))
     (princ "\n请输入表格列宽(")(princ bglk0)(princ "):")
     (setq bglk (getreal))
     (if (= bglk nil)(setq bglk bglk0) (setq bglk0 bglk))
       );

      ((or (equal szcs "s")(equal szcs "S"))
     (if (= bghs0 nil)(setq bghs0 20))
     (princ "\n请输入表格行数(")(princ bghs0)(princ "):")
     (setq bghs (getint))
     (if (= bghs nil)(setq bghs bghs0)(setq bghs0 bghs))
      );
      ((or (equal szcs "b")(equal szcs "B"))
     (if (= bgbl0 nil)(setq bgbl0 1))
     (princ "\n请输入表格比例(")(princ bgbl0)(princ "):")
     (setq bgbl (getint))
     (if (= bgbl nil)(setq bgbl bgbl0)(setq bgbl0 bgbl))
      (setq wzgd (* bgbl wzgd0))
      (setq bghg (* bgbl bghg0))
      (setq bglk (* bgbl bglk0))
      );
      
      ((or (equal szcs "f")(equal szcs "F"))
     (setq xhgd0 3.5)    (setq xhgd xhgd0)
     (setq wzgd0 2.5)    (setq wzgd wzgd0)
     (setq bghg0 5.0)    (setq bghg bghg0)
     (setq bglk0 15.0)   (setq bglk bglk0)
     (setq bghs0 20)     (setq bghs bghs0)
     (setq bgbl0 1)      (setq bgbl bgbl0)
       );
      );
  (princ "\n[序号高度x]")(princ xhgd)
  (princ "[文字高度w]")(princ wzgd)
  (princ "[表格行高h]")(princ bghg)
  (princ "[表格列宽l]")(princ bglk)
  (princ "[表格行数s]")(princ bghs)
  (princ "[比例调整b]")(princ bgbl)
  (princ "[恢复默认f]:")
  (setq szcs (getstring))
    )   
  
  (setq dzb_ss (ssget (list (cons 0' "CIRCLE")))); (list (cons 0' "POINT") (cons 0' "CIRCLE"))));
  (setq pt0 (getpoint "请选择表格起点"))
  (setq n 0)
  ;;;画表格
  (setq fgs (fix (/ (sslength dzb_ss) bghs)))
  (if (= (sslength dzb_ss) (* fgs bghs))
    (setq fgs (- fgs 1)))
  (setq fgs (+ 1 fgs))
  (command "line" (list (- (nth 0 pt0) (* 0.5 bglk)) (+ (nth 1 pt0) (* 0.5 bghg)) 0)
           (list (+ (nth 0 pt0) (* 3.5 bglk)) (+ (nth 1 pt0) (* 0.5 bghg)) 0) "");画横线
  (if (= 1 fgs)
    (command "-array" (ssget "l") ""  "r" (+ 2 (fix bghs)) fgs (* -1 bghg))
    (command "-array" (ssget "l") ""  "r" (+ 2 (fix bghs)) fgs (* -1 bghg) (* 4 bglk)))

  (command "line" (list (- (nth 0 pt0) (* 0.5 bglk)) (+ (nth 1 pt0) (* 0.5 bghg)) 0)
           (list (- (nth 0 pt0) (* 0.5 bglk)) (- (nth 1 pt0) (* bghg (+ 0.5 bghs))) 0) "");画竖线
  (command "-array" (ssget "l") ""  "r" "1" (+ 1 (* 4 fgs)) bglk)
  ;;;书写表头
  (command "text" "j" "mc" (list (nth 0 pt0) (- (nth 1 pt0) (* bghg n)) 0)
             wzgd "0" "序号")
    (if (> (sslength dzb_ss) bghs)
  (command "-array" (ssget "l") ""  "r" "1" fgs (* 4 bglk))
      )
  (command "text" "j" "mc" (list (+ bglk (nth 0 pt0)) (- (nth 1 pt0) (* bghg n)) 0)
             wzgd "0" "X")
  (if (> (sslength dzb_ss) bghs)
      (command "-array" (ssget "l") ""  "r" "1" fgs (* 4 bglk))
      )
  (command "text" "j" "mc" (list (+ (* 2 bglk) (nth 0 pt0)) (- (nth 1 pt0) (* bghg n)) 0)
             wzgd "0" "Y")
  (if (> (sslength dzb_ss) bghs)
      (command "-array" (ssget "l") ""  "r" "1" fgs (* 4 bglk))
      )
  (command "text" "j" "mc" (list (+ (* 3 bglk) (nth 0 pt0)) (- (nth 1 pt0) (* bghg n)) 0)
             wzgd "0" "Z")
  (if (> (sslength dzb_ss) bghs)
  (command "-array" (ssget "l") ""  "r" "1" fgs (* 4 bglk))
      )
  ;;;循环
  (while (< n (sslength dzb_ss))
    (setq pt_n (cdr (assoc '10 (entget(ssname dzb_ss n)))))
    (setq pt_x (nth 0 pt_n))
    (setq pt_y (nth 1 pt_n))
    (setq pt_z (nth 2 pt_n))
   
    (setq n (1+ n))
   
    (command "text" "j" "mc" pt_n wzgd "0" n);原点书写序号
   
    ;;;书写表格内容
    (setq mx (* 4 (fix (/ (- n 1) bghs)) bglk))
    (setq my (* (- n (* bghs (fix (/ (- n 1) bghs)))) bghg))
    (command "text" "j" "mc" (list (+ mx (nth 0 pt0)) (- (nth 1 pt0) my) 0)
             wzgd "0" n)
    (command "text" "j" "mc" (list (+ mx bglk (nth 0 pt0)) (- (nth 1 pt0) my) 0)
             wzgd "0" (rtos pt_x 2 0));
    (command "text" "j" "mc" (list (+ mx (* 2 bglk) (nth 0 pt0)) (- (nth 1 pt0) my) 0)
             wzgd "0" (rtos pt_y 2 0))
    (command "text" "j" "mc" (list (+ mx (* 3 bglk) (nth 0 pt0)) (- (nth 1 pt0) my) 0)
             wzgd "0" (rtos pt_z 2 0))           
  )
   ;;结束
  (princ "\n总共读取并输出")(princ n)(princ "个坐标。")
  (end);;;;;;;;;;;
  
  (princ)
  )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-9-27 22:56 , Processed in 0.368861 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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