明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2329|回复: 5

[资源] 方位角并写入程序

[复制链接]
发表于 2010-5-19 08:31 | 显示全部楼层 |阅读模式

;;--------------------------------------------
;;计算两点间的方位角程序并插入cad 命令fwj
;;输出方位角fwj距离s
;;--------------------------------------------
(defun C:fwj()
(graphscr)
(setq oce (getvar "cmdecho"))
(setvar "cmdecho" 0)       ;关闭命令回显
(setq len 0)

(setq A (getpoint " \n确定图上的第一点A: "))    ;取得第1点坐标
(setq B (getpoint " \n确定图上的第二点B: "))    ;取得第2点坐标

(setq DX (- (nth 1 B) (nth 1 A)) DY (- (nth 0 B) (nth 0 A)));取得AB的yx坐标差值
(setq Delt_Y (abs DY) Delt_X (abs DX))           ;取得xy坐标差值绝对值
(setq s (sqrt (+ (expt Delt_X 2) (expt Delt_Y 2)))) ;取得两点间距离
(setq θ (atan Delt_Y Delt_X))                   ;求夹角以弧度为单位

    (if (>= DY len)                              ;判断在哪个象限
        (cond
           ((> DX len) (setq α θ)              ;在1象限
             (setq α (angtos α 1 4))           ;将α变成角度以下同
             (setq fwj (strcat "NE" α))         ;前加NE
     )
           (t          (setq α (- pi θ))       ;在2象限
             (setq α (angtos α 1 4))
             (setq fwj (strcat "SE" α))          ;前加SE
     )
          
        )):end if
    (if (< DY len)
        (cond
           ((> DX len) (setq α (- (* pi 2) θ)) ;在4象限
             (setq α (angtos α 1 4))
             (setq fwj (strcat "NW" α))         ;前加NW
     )
           (t          (setq α (+ pi θ))       ;在3象限
             (setq α (angtos α 1 4))
             (setq fwj (strcat "SW" α))          ;前加SW
     )
          
        )):end if

;以下为转换度数的算法
    (setq mn (strlen fwj))
    (setq node 1)
    (setq zdfwj fwj)
    (repeat mn
      (if (= (substr fwj node 1) "d")
   (progn
       (if (= (substr fwj (- node 1)) "%")
    (progn
      (setq zdfwj fwj)
    )
       )
       (if (/= (substr fwj (- node 1)) "%")
    (progn
      (setq zdfwj (strcat (substr fwj 1 (- node 1)) "%%d"
          (substr fwj (+ node 1) (- mn node))))
    )
       )
     )
 )
        (setq node (+ node 1))
      )
    (setq fwj zdfwj)
;转换结束
(prompt "\n请选标注文字的位置")
(setq bz_point (getpoint))                  ;获取插入点
(command "text" bz_point 3.0 0  fwj "")     ;写在屏幕上方位角

(princ "\n")(princ "A=>B的坐标方位角α=")(princ fwj)
(princ "\n")(princ "A=>B的距离S=")(princ S)
(setvar "cmdecho" oce)
(princ)
)
;endfwj

发表于 2012-3-14 19:00 | 显示全部楼层
命令: fwj
确定图上的第一点A:
确定图上的第二点B:
请选标注文字的位置未知命令“FWJ”。按 F1 查看帮助。
A=>B的坐标方位角α=NE0%%d0'0"
A=>B的距离S=26619.9

方向角显示不出来。。。缺少批量提量
发表于 2012-3-14 21:32 | 显示全部楼层
本帖最后由 yshf 于 2012-3-14 21:35 编辑

;(command "text" bz_point 3.0 0  fwj "") 应改为(command "text" bz_point 3.0 0  fwj )
;请试用以下程序 yshf
(defun c:fwjj()
    (setq cm (getvar "cmdecho")
          os (getvar "osmode")
    )
    (setvar "cmdecho" 0)
    (command "_undo" "be")

    (while (progn
              (setvar "osmode" 33)
              (setq p1 (getpoint "\n起点A<回车退出>:"))
           )
        (if (setq p2 (getpoint p1 "\n止点B:"))
            (progn
                (setq wzjd (angtos (angle p1 p2) 1 4)
                      ang (angle (list (cadr p1) (car p1))
                                 (list (cadr p2) (car p2))
                          )
                      zfc (angtos ang 1 4)
                      dis (distance p1 p2)
                      prz "NE"
                )
                (cond ((<= (* pi 0.5) ang pi) (setq prz "SE"))
                      ((<= pi ang (* pi 1.5)) (setq prz "SW"))
                      ((<= (* pi 1.5) ang (* pi 2.0)) (setq prz "NW"))
                )
                (setq prz (strcat prz (vl-string-subst "%%d" "d" zfc)))
                (setvar "osmode" 0)
                (command "_text" "j" "mc" (getpoint "\n请选取标注点:") 3.0 wzjd prz)
                (princ (strcat "\nA=>B的坐标方位角α=" prz))
                (princ (strcat "\nA=>B的距离S=" (rtos dis 2 6)))         
            )
        )
    )
  
    (command "_undo" "e") (setvar "osmode" os)
    (setvar "cmdecho" cm)
    (princ)
)
发表于 2012-3-15 20:03 | 显示全部楼层
yshf 发表于 2012-3-14 21:32
;(command "text" bz_point 3.0 0  fwj "") 应改为(command "text" bz_point 3.0 0  fwj )
;请试用以下程 ...

谢谢大师。。提取A~B点只能有一次。。您这个要每次哦。。还有。。批量是说一次提取所标注坐标的方向角哦。。不过很谢谢哈哈
发表于 2012-3-15 20:14 | 显示全部楼层
"一次提取所标注坐标的"图元是直线,还是多段线...... ?
发表于 2012-3-16 09:20 | 显示全部楼层
zdqwy19 测量专家编程大师坐标方位角大作出品。。绝对精品
http://bbs.mjtd.com/thread-91618-1-1.html

也很感谢yshf大师谢谢。。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-6-14 07:27 , Processed in 0.149723 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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