明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2181|回复: 3

[源码] xy自由图框,测量、地质用得上

[复制链接]
发表于 2014-11-19 00:31:05 | 显示全部楼层 |阅读模式
本帖最后由 wzg356 于 2014-11-19 00:46 编辑
  1. ;;;
  2. ;;;    命令:BGTK
  3. ;;;
  4. ;;;   在地形图上插入图框(包括坐标十字符号)
  5. ;;;
  6. ;;;    作者:凉开水   2005.09.25
  7. ;;;WZG356 改于20140916,完善出错处理及十字丝判断退出
  8. ;;;-----------------------------------------------------------------
  9. ;;;
  10. (defun c:BGTK ( / newerr *olderror* x p1 p2 p3 p4 nx ny px1 px2 py1 py2 pyx pxy)

  11. ;自定义新的出错函数
  12.     (defun newerr (msg)
  13.       (mapcar 'eval sysvarlst);恢复变量设置
  14.       (if *olderror* (setq *error* *olderror*  *olderror* nil)) ;_ 恢复*error*函数
  15.       (if (not (member msg '(nil "函数被取消" ";错误:quit / exit abort")))
  16.         (princ (strcat ";错误:" msg))
  17.     )
  18.   )
  19.   ;;系统设置
  20.   (command "undo" "be");;命令编组开始
  21.   (setq sysvarlst(mapcar (function (lambda (n) (list 'setvar n (getvar n))))
  22.       '( "osmode" "cmdecho" "OSNAPCOORD" "dimzin" "plinewid" ))
  23.   );保存系统变量
  24.   (setq *olderror* *error*);保存出错函数
  25.   (setq  *error* newerr);设置自定义出错函数  
  26.   
  27.   (setvar "cmdecho" 0);;;关闭命令响应
  28.   (setvar "OSNAPCOORD" 1);;;坐标数据优先级设为:键盘输入替代对象捕捉设置
  29.   (setvar "OSMODE" 687);;;改变捕捉模式
  30.   (setvar "dimzin" 0);;;不对主单位值作消零处理

  31.   (if (= (Tblsearch "style" "MY_ST") nil)
  32.     (command "-style" "MY_ST" "宋体" 0 0.8 0 "n" "n");;;文字样式
  33.   )
  34.   (command "textstyle" "MY_ST")


  35.     (princ "\n假定CAD中绘制比例为1:1千")
  36.   (if (not (setq x (getreal "\n输入出图比例,1代表1:1千,10代表1:1万,以此类推<1>: ")))(setq x 1.0))  
  37.   
  38.   ;;;四角坐标点
  39.   (setq x (/ 1.0 x)
  40.         pt1 (getpoint "\n指定第一角点: ")
  41.         pt2 (getcorner pt1 "\n指定另一角点: ")
  42.   )
  43.   (if (> (car pt1) (car pt2))
  44.     (if  (> (cadr pt1) (cadr pt2))
  45.       (setq p1 pt2
  46.       p2 (list (car pt1) (cadr pt2))
  47.       p3 pt1
  48.       p4 (list (car pt2) (cadr pt1))
  49.       )
  50.       (setq p1 (list (car pt2) (cadr pt1))
  51.       p2 pt1
  52.       p3 (list (car pt1) (cadr pt2))
  53.       p4 pt2
  54.       )
  55.     )
  56.     (if  (> (cadr pt1) (cadr pt2))
  57.       (setq p1 (list (car pt1) (cadr pt2))
  58.       p2 pt2
  59.       p3 (list (car pt2) (cadr pt1))
  60.       p4 pt1
  61.       )
  62.       (setq p1 pt1
  63.       p2 (list (car pt2) (cadr pt1))
  64.       p3 pt2
  65.       p4 (list (car pt1) (cadr pt2))
  66.       )
  67.     )
  68.   )

  69.   (command "zoom" "w" (polar p1 (* pi 1.25) (* 2 (/ 20 x)))
  70.           (polar p3 (* pi 0.25) (* 2 (/ 20 x)))
  71.   )
  72.   
  73.   (command "rectang" p4 p2);;;画内框
  74.   
  75.   ;;;画外框
  76.   (command "pline" (list 0 0 0) "w" (/ 0.4 x) (/ 0.4 x) "");;;定义线宽
  77.   (command "pline" (list (-(car p1) (/ 10 x))(-(cadr p1) (/ 10 x)))
  78.              (list (+(car p2) (/ 10 x))(-(cadr p2) (/ 10 x)))
  79.                    (list (+(car p3) (/ 10 x))(+(cadr p3) (/ 10 x)))
  80.                    (list (-(car p4) (/ 10 x))(+(cadr p4) (/ 10 x)))
  81.      "c"
  82.   )
  83.   
  84.   ;;;画四角短线
  85.   (command "line" p1 (polar p1 (* pi 1) (/ 10 x)) "")
  86.   (command "line" p1 (polar p1 (* pi 1.5) (/ 10 x)) "")
  87.   (command "line" p2 (polar p2 (* pi 0) (/ 10 x)) "")
  88.   (command "line" p2 (polar p2 (* pi 1.5) (/ 10 x)) "")
  89.   (command "line" p3 (polar p3 (* pi 0) (/ 10 x)) "")
  90.   (command "line" p3 (polar p3 (* pi 0.5) (/ 10 x)) "")
  91.   (command "line" p4 (polar p4 (* pi 0.5) (/ 10 x)) "")
  92.   (command "line" p4 (polar p4 (* pi 1) (/ 10 x)) "")
  93.   
  94.   ;;;写四角坐标值
  95.   
  96.   (command "text" "br" (polar p1 (* pi 1.687) (/ 5.78 x)) (/ 2.5 x) 0 (rtos (/ (car p1) 1000.0) 2 2))
  97.   (command "text" "bc" (polar p1 (* pi 1) (/ 5 x)) (/ 2.5 x) 0 (rtos (/ (cadr p1) 1000.0) 2 2))
  98.   (command "text" "br" (polar p2 (* pi 1.687) (/ 5.78 x)) (/ 2.5 x) 0 (rtos (/ (car p2) 1000.0) 2 2))
  99.   (command "text" "bc" (polar p2 (* pi 0) (/ 5 x)) (/ 2.5 x) 0 (rtos (/ (cadr p2) 1000.0) 2 2))
  100.   (command "text" "br" (polar p3 (* pi 0.2618) (/ 4.776 x)) (/ 2.5 x) 0 (rtos (/ (car p3) 1000.0) 2 2))
  101.   (command "text" "bc" (polar p3 (* pi 0) (/ 5 x)) (/ 2.5 x) 0 (rtos (/ (cadr p3) 1000.0) 2 2))
  102.   (command "text" "br" (polar p4 (* pi 0.2618) (/ 4.776 x)) (/ 2.5 x) 0 (rtos (/ (car p4) 1000.0) 2 2))
  103.   (command "text" "bc" (polar p4 (* pi 1) (/ 5 x)) (/ 2.5 x) 0 (rtos (/ (cadr p4) 1000.0) 2 2))

  104.   ;;;坐标十字的行列数     
  105.   (setq nx (- (fix (/(car p2)(/ 100 x)))(fix (/( car p1)(/ 100 x))))
  106.   ny (- (fix (/(cadr p4)(/ 100 x)))(fix (/( cadr p1)(/ 100 x))))
  107.   )
  108.   
  109.    
  110.    ;;;写内外框间坐标值
  111.   (if (>=  nx 1)(progn
  112.     (setq px1 (list (* (1+ (fix (/(car p1)(/ 100 x))))(/ 100 x))(cadr p1))
  113.         px2 (list (* (1+ (fix (/(car p4)(/ 100 x))))(/ 100 x))(cadr p4)))
  114.     (repeat nx
  115.       (command "line" px1 (polar px1 (* pi 1.5) (/ 10 x)) "")
  116.       (command "text" "br" (polar px1 (* pi 1.687) (/ 5.78 x)) (/ 2.5 x) 0 (rtos (/ (car px1) 1000.0) 2 2))
  117.       (command "line" px2 (polar px2 (* pi 0.5) (/ 10 x)) "")
  118.       (command "text" "br" (polar px2 (* pi 0.2618) (/ 4.776 x)) (/ 2.5 x) 0 (rtos (/ (car px2) 1000.0) 2 2))
  119.       (setq px1 (list (+ (car px1)(/ 100 x))(cadr px1))
  120.           px2 (list (+ (car px2)(/ 100 x))(cadr px2)))
  121.   )
  122.   ))
  123.   (if (>=  ny 1)(progn
  124.   (setq py1 (list (car p1)(* (1+ (fix (/(cadr p1)(/ 100 x))))(/ 100 x)))
  125.       py2 (list (car p2)(* (1+ (fix (/(cadr p2)(/ 100 x))))(/ 100 x))))
  126.   (repeat ny
  127.     (command "line" py1 (polar py1 (* pi 1) (/ 10 x)) "")
  128.     (command "text" "bc" (polar py1 (* pi 1) (/ 5 x)) (/ 2.5 x) 0 (rtos (/ (cadr py1) 1000.0) 2 2))
  129.     (command "line" py2 (polar py2 (* pi 0) (/ 10 x)) "")
  130.     (command "text" "bc" (polar py2 (* pi 0) (/ 5 x)) (/ 2.5 x) 0 (rtos (/ (cadr py2) 1000.0) 2 2))
  131.     (setq py1 (polar py1 (* pi 0.5) (/ 100 x))
  132.         py2 (polar py2 (* pi 0.5) (/ 100 x))
  133.     )
  134.   )
  135.   ))

  136.   ;;;画坐标十字  
  137.   (if (or (>= nx 1) (>= ny 1))(progn
  138.   (setq pyx (list (* (1+ (fix (/(car p1)(/ 100 x))))(/ 100 x))
  139.       (* (1+ (fix (/(cadr p1)(/ 100 x))))(/ 100 x))));;;起始十字位置
  140.     (repeat ny
  141.       (setq pxy pyx)
  142.        (repeat nx
  143.         (command "line" (polar pxy (* pi 1) (/ 5 x)) (polar pxy (* pi 0) (/ 5 x))"")
  144.         (command "line" (polar pxy (* pi 0.5) (/ 5 x)) (polar pxy (* pi 1.5) (/ 5 x))"")
  145.         (setq pxy (list (+ (car pxy)(/ 100 x))(cadr pxy)))
  146.     )
  147.     (setq pyx (list (car pyx)(+ (cadr pyx)(/ 100 x))))
  148.   )
  149.   ))
  150.   
  151. ;;恢复设置
  152.     (command "_undo" "_e");;活动编组结束
  153.   (mapcar 'eval sysvarlst);恢复变量设置  
  154.   (setq *error* *olderror*);;恢复出错函数
  155.   (setq  *olderror* nil);;
  156.   (princ)
  157. )
  158. ;;;
  159. ;;;-----------------------------------------------------------------
  160. ;;;

本帖子中包含更多资源

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

x
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2015-8-31 19:11:30 来自手机 | 显示全部楼层
地质平面图有用吧
发表于 2015-8-31 19:14:18 来自手机 | 显示全部楼层
在作地质平面图时有大作用
发表于 2019-6-14 16:21:13 | 显示全部楼层
有错误啊,支持什么版本cad?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-18 20:49 , Processed in 0.175354 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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