|
我是学测量的菜鸟,想直接在图上标注某点坐标:
X=1111111.111
Y=1111111.111(小数点取后三位)
我用LISP写了一点,不过不能实现引出线和坐标X,Y,小数点也不能取后三位,
那位大虾能帮一下。我的EMAIL:SUPEID@163.NET
(defun C:spl ()
(setq p1 (getpoint"坐标点"))
(setq p2 (getpoint "标注位置"))
(command "line" p1 p2 "@0.5= bzang 0.0) (= bzang (/ pi 2.0)) (:"
)
)
)
(setq GDang tmp)
)
(if (= ucscfg 1)
(progn (if (> (rem GDang (* pi 2.0)) pi)
(setq GDang (- GDang pi))
)
)
(progn
(IF (AND (>= GDang (/ pi 2.0)) (= (+ xy1 (* 2 pi)) (+ GDang (/ pi 2) (* 2 pi)))
)
(progn (setq pt4 (list (- (car pt2) 0.0)
(- (cadr pt2) (/ Newtextsize 3.0))
)
)
(command "_.text" "S" cTstyle2 "j"
"br" pt2 Newtextsize
0 strx1
)
(setq op2 (entlast))
(command "_.text" "S" cTstyle2 "j"
"tr" pt4 Newtextsize
0 stry1
)
(setq op3 (entlast))
(command "_.rotate"
op1
op2
op3
""
pt2
(angtos (+ GDang pi) 1 5)
)
)
(progn
(setq pt4 (list (+ (car pt2) 0.0)
(+ (cadr pt2) (/ Newtextsize 3.0))
)
)
(command "_.text" "S" cTstyle1 "J"
"bl" pt2 Newtextsize
0 strx1
)
(setq op2 (entlast))
(command "_.text" "S" cTstyle1 "J"
"tl" pt4 Newtextsize
0 stry1
)
(setq op3 (entlast))
(command "_.rotate" op1 op2 op3 "" pt2 (angtos GDang 1 5))
)
)
)
;;若不为测量系
(progn
;;若小于GDang
(princ
(and
(= (+ xy1 (* 2.0 pi)) (+ GDang (/ pi 2.0) (* 2.0 pi)))
)
)
(if
(and
(= (+ xy1 (* 2.0 pi)) (+ GDang (/ pi 2.0) (* 2.0 pi)))
)
;;若标注位置在3 4象限
(progn (setq pt4 (list (- (car pt2) 0.0)
(+ (cadr pt2) (/ Newtextsize 3.0))
)
)
(command "_.text" "S" cTstyle2 "j"
"br" pt2 Newtextsize
180 strx1
)
(setq op2 (entlast))
(command "_.text" "S" cTstyle2 "j"
"tr" pt4 Newtextsize
180 stry1
)
(setq op3 (entlast))
(command "_.rotate"
op1
op2
op3
""
pt2
(angtos (+ GDang pi) 1 5)
)
)
(progn
(setq pt4 (list (+ (car pt2) 0.0)
(- (cadr pt2) (/ Newtextsize 3.0))
)
)
(command "_.text" "S" cTstyle1 "J"
"bl" pt2 Newtextsize
0 strx1
)
(setq op2 (entlast))
(command "_.text" "S" cTstyle1 "J"
"tl" pt4 Newtextsize
0 stry1
)
(setq op3 (entlast))
(command "_.rotate" op1 op2 op3 "" pt2 (angtos GDang 1 5))
)
)
)
)
;;恢复捕捉方式
(setvar "osmode" osmode_old)
(terpri)
)
)
;;;-----------------------------------------------------------------
;;;初始化函数
(defun setini_zb ()
(setq textstyle_old (getvar "textstyle"))
(setq TEXTEVAL_old (getvar "TEXTEVAL"))
(setq TEXTFILL_old (getvar "TEXTFILL"))
(setq TEXTQLTY_old (getvar "TEXTQLTY"))
(setq TEXTSIZE_old (getvar "TEXTSIZE"))
(setq DIMZIN_OLD (GETVAR "DIMZIN"))
(setq old_lay (getvar "clayer"))
(setq ucsx (getvar "ucsxdir"))
(setq ucsy (getvar "ucsydir"))
(setq err_old *error*
*error* err_new
)
(SETVAR "DIMZIN" 0)
(setvar "cmdecho" 0)
;;判断坐标系统是否为测量系
;;是则ucscfg=1
(if (and ( (abs (cadr ucsx)) (abs (cadr ucsy)))
)
(progn (setq ucscfg 1)
(setq cTstyle1 "ZB1")
(setq cTstyle2 "ZB2")
(princ "\n 测量坐标系!")
)
(progn (setq ucscfg 0)
(setq cTstyle1 "TXT")
(setq cTstyle2 "TXT")
(princ "\n 其他坐标系![X Y将会互换!!!!!!!!!!!!]")
)
)
;;判断有无图层Coord_bz
(setclayer '("Coord_bz" 3))
;;判断有无字类型ZB1
(setstyle (list
'(3 . "txt")
'(41 . 1)
'(71 . 4)
(cons 2 "ZB1")
)
)
;;判断有无字类型TXT
(setstyle (list
'(3 . "txt")
'(41 . 1)
'(71 . 0)
(cons 2 "TXT")
)
)
;;判断有无字类型ZB2
(setstyle (list
'(3 . "txt")
'(41 . 1)
'(71 . 2)
(cons 2 "ZB2")
)
)
)
;;;-----------------------------------------------------------------
;;;设置坐标前缀函数
(defun sethome (/ tmp)
(if (setq tmp
(progn
(initget 6 "No Xy Ab")
(getkword (strcat "用何前缀:No or Xy or Ab:"))
)
)
(setq bzhome tmp)
)
(cond ((= bzhome "No")
(setq sstr1 "")
(setq sstr2 "")
)
((= bzhome "Xy")
(setq sstr1 "X=")
(setq sstr2 "Y=")
)
((= bzhome "Ab")
(setq sstr1 "A=")
(setq sstr2 "B=")
)
)
)
;;;-------------------------------------------------------
;;;设置字高函数
(defun settexth (/ tmp)
(if (setq
tmp (getreal (strcat "\n输入字高::"))
)
(setq Newtextsize tmp)
) ;_结束if
) ;_结束defun
;;;--------------------------------------------------------------
;;;设置坐标标注方向模式函数
(defun setzbangle (/ tmp)
(initget 6 "G S")
(if (setq tmp (getkword (strcat "\n标注方向模式[固定(G)][动态(S)]:"
)
)
)
(cond ((= tmp "G")
(setq bz_angtype "固定")
)
((= tmp "S")
(setq bz_angtype "动态")
)
)
)
)
;;;--------------------------------------------------------------
;;;恢复初始环境
(defun setclose_zb ()
(setvar "textstyle" textstyle_old)
(setvar "TEXTEVAL" TEXTEVAL_old)
(setvar "TEXTFILL" TEXTFILL_old)
(setvar "TEXTQLTY" TEXTQLTY_old)
(setvar "TEXTSIZE" TEXTSIZE_old)
(SETVAR "DIMZIN" DIMZIN_OLD)
(setvar "clayer" old_lay)
(setq *error* error_old)
(setvar "cmdecho" 1)
(princ)
)
(defun err_new (msg)
(setclose_zb)
)
;;;=========================
(prompt "\n测量坐标标注程序")
;;;调用初始化函数
(setini_zb)
(setq downtemp nil
downtemp T
)
(while downtemp
(cond ((= bz_angtype "动态")
(zbbz_liberty)
(if (= bz_angtype "动态")
(setq downtemp nil)
(setq downtemp T)
)
)
((= bz_angtype "固定")
(zbbz_fixup)
(if (= bz_angtype "固定")
(setq downtemp nil)
(setq downtemp T)
)
)
)
)
(setclose_zb)
) |
|