输入距离

Lisp语言中输入距离的函数为getdist,但我们有时需要输入负值,有时需要在输入距离的同时得到角度,使用getdist函数就显得无能为力,这时,我们可以灵活使用其它交互输入函数如getpoint、getcorner等,通过计算得到我们所需要的值。
    例二是一段输入长度的同时得到默认角度的代码,使用getpoint函数。
************************************************
;;例二
  (setq    pt0  (getpoint "\n直线基点: ")
        pt1  (getpoint pt0 "\n直线长度: ")        ;长度及角度可用键盘或鼠标定位
        dst  (distance pt0 pt1)                   ;计算长度
        ang  (angle pt0 pt1)                      ;计算默认角度
        ang1 (getangle pt0 (strcat "\n直线方向<" (angtos ang 1) ">: "))
  )
************************************************
    例三是可以按阵列方式输入行列间距的代码,输入距离为正值,修改部分代码可输入负值,使用getcorner函数,同时使用initget的控制位128。
************************************************
;;例三
  (defun lc_dist ()
    (initget 128)                                          ;允许任意输入
    (setq disr (getpoint "\n指定单位单元或输入行间距: "))
    (if (= (type disr) LIST)                              ;鼠标输入
      (progn
        (initget 1)
        (setq dis (getcorner disr "\n指定对角点: ")        ;鼠标输入对角
              disc (abs (- (car dis) (car disr)))          ;正值行距
              disr (abs (- (cadr dis) (cadr disr)))        ;正值列距
          )                                                  ;计算行列间距
      )
      (if (= (type disr) STR)                             ;键盘输入行距
        (if (setq dis (distof disr))                       ;判断输入的是否距离
          (progn
            (initget 6)
            (setq disc (getdist "\n输入列间距: "))         ;输入列距
          )
          (progn                                           ;键盘输入格式不符返回
            (princ "\n需要正数值或两个二维角点。")
            (lc_dist)
          )
          )
          (progn                                             ;空输入返回
          (princ "\n需要正数值或两个二维角点。")
          (lc_dist)
          )
      )
    )
  )

标签:输入 距离