乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 24|回复: 0

[求助]如何在图上标注坐标?

[复制链接]

1

主题

6

帖子

2

银币

初来乍到

Rank: 1

铜币
10
发表于 2003-3-1 02:05:00 | 显示全部楼层 |阅读模式
我是学测量的菜鸟,想直接在图上标注某点坐标:
                                             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)
)
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-6-3 12:01 , Processed in 1.186461 second(s), 65 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表