AutoCAD自动标注坐标和坐标输出宏

需求说明

本人在制造业机加工领域工作多年,手动CNC编程时需要显示和输出坐标点,故开发此Lisp的宏。

CAD支持

AutoCAD的各标准版本均可使用此宏(轻化版除外),中望CAD也可以使用。

加载

选择"管理"->"加载应用程序",然后选择本AutoLisp宏并加载。也可以添加到"启动组"中,每次打开AutoCAD即可自定加载。

使用方法

  1. 输入命令:zb,再输入字号(默认3.5),即可在图上标注X、Y直角坐标;
  2. 输入命令:jzb,再输入字号(默认3.5),即可在图上标注R、α极坐标;
  3. 输入命令:zbsc,指定文件,即可将指定点的X、Y坐标输出到文件;
  4. 输入命令:jzbsc,指定文件,即可将指定点的R、α坐标输出到文件;
  5. 输入命令:z0,可将非块图形的Z值回零。

 

将下面的代码保存为zb.lsp,再按上面的方法加载即可使用:

version 3.3 by liuweilhy 2018-10-31

; 坐标标识 X Y
(defun c:zb()
  (graphscr)
  (setvar "cmdecho" 0)
  (setq size (getreal "\n请输入字号<3.5>:"))
  (if(null size) (setq size 3.5))
  (setq size (* size (getvar "DIMSCALE")))
  (while (setq pt1 (getpoint "\n请指定点位置:"))
    (setq point_x (rtos (car pt1) 2 3))
    (setq point_y (rtos (cadr pt1) 2 3))
    (setq strxy (strcat "X" point_x " Y" point_y))
    (command "_text" pt1 size "0" strxy)
  )
  (setvar "cmdecho" 1)
  (princ)
)

; 坐标输出 X Y
(defun c:zbsc()
  (graphscr)
  (setvar "cmdecho" 0)
  (setq fname (getfiled "写出文件" "" "txt" 1))
  (setq file (open fname "A"))
  (while (setq pt1 (getpoint "\n请指定点位置:"))
    (setq point_x (rtos (car pt1) 2 3))
    (setq point_y (rtos (cadr pt1) 2 3))
    (setq strxy (strcat "X" point_x " Y" point_y))
    (command "_point" pt1)
    (princ strxy file)
    (princ "\n" file)
  )
  (princ "\n" file)
  (close file)
  (setvar "cmdecho" 1)
  (princ)
)

; 极坐标标识 R A
(defun c:jzb()
  (graphscr)
  (setvar "cmdecho" 0)
  (setq size (getreal "\n请输入字号<3.5>:"))
  (if(null size) (setq size 3.5))
  (setq size (* size (getvar "DIMSCALE")))
  (while (setq pt1 (getpoint "\n请指定点位置:"))
    (setq point_a (angtos (angle '(0 0) pt1) 0 4))
    (setq point_r (rtos (distance '(0 0) pt1) 2 3))
    (setq strar (strcat "R" point_r " A" point_a))
    (command "_text" pt1 size "0" strar)
  )
  (setvar "cmdecho" 1)
  (princ)
)

; 极坐标标识2 X C
(defun c:jzb2()
  (graphscr)
  (setvar "cmdecho" 0)
  (setq size (getreal "\n请输入字号<3.5>:"))
  (if(null size) (setq size 3.5))
  (setq size (* size (getvar "DIMSCALE")))
  (while (setq pt1 (getpoint "\n请指定点位置:"))
    (setq point_c (angtos (angle '(0 0) pt1) 0 4))
    (setq point_x (rtos (* (distance '(0 0) pt1) 2) 2 3))
    (setq strar (strcat "X" point_x " C" point_c))
    (command "_text" pt1 size "0" strar)
  )
  (setvar "cmdecho" 1)
  (princ)
)

; 极坐标输出 R A
(defun c:jzbsc()
  (graphscr)
  (setvar "cmdecho" 0)
  (setq fname (getfiled "写出文件" "" "txt" 1))
  (setq file (open fname "A"))
  (while (setq pt1 (getpoint "\n请指定点位置:"))
    (setq point_a (angtos (angle '(0 0) pt1) 0 4))
    (setq point_r (rtos (distance '(0 0) pt1) 2 3))
    (setq strar (strcat "R" point_r " A" point_a))
    (command "_point" pt1)
    (princ strar file)
    (princ "\n" file)
  )
  (princ "\n" file)
  (close file)
  (setvar "cmdecho" 1)
  (princ)
)

; 极坐标输出2 X C
(defun c:jzbsc2()
  (graphscr)
  (setvar "cmdecho" 0)
  (setq fname (getfiled "写出文件" "" "txt" 1))
  (setq file (open fname "A"))
  (while (setq pt1 (getpoint "\n请指定点位置:"))
    (setq point_c (angtos (angle '(0 0) pt1) 0 4))
    (setq point_x (rtos (* (distance '(0 0) pt1) 2) 2 3))
    (setq strar (strcat "X" point_x " C" point_c))
    (command "_point" pt1)
    (princ strar file)
    (princ "\n" file)
  )
  (princ "\n" file)
  (close file)
  (setvar "cmdecho" 1)
  (princ)
)

;Z轴归零
(defun c:z0 ( / #os1 &kw)
  (setvar "cmdecho" 0)
  (setvar "blipmode" 0)
  (setq #os1 (getvar "osmode"))
  (command "ucs" "")
  (if (setq &kw (ssget "x" (list (cons 0 "~INSERT"))));;选择所有对象
    (progn
    (setvar "osmode" 0)
    (princ "\n请等待,正在归零")
    (command "MOVE" &kw "" '(0 0 1e99) "" "move" "p" "" '(0 0 -1e99) "")
    (princ "\nOK已经归零");;如果有块的话,选择除了块以外的对象z坐标归零
    (setvar "osmode" #os1))
  )
  (setvar "cmdecho" 1)
  (princ)
)

  

posted @ 2018-10-27 23:18  鸿远科技  阅读(44)  评论(0)    收藏  举报  来源