明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1004|回复: 4

[讨论] 取方位时,如何实现360°自动变0°

[复制链接]
发表于 2013-11-10 20:57:22 | 显示全部楼层 |阅读模式
程序如下,作用是自动标出点的方位,方位大概和手表的顺时针差不多。用了cond后,一般没啥问题,但有几次遇到360°无法变0°的情况,是数字换算的误差吗?我现在是用359°的极近值来代替,有什么更好的方法吗?
  1. (defun C:FangWei(/ cir pt0 pt p jd ptx)
  2.   (setq cir (entget (car (entsel "\n选择圆: "))))
  3.   (WYB-entlay "3" 1 "center2");红色
  4.   (setq pt0 (cdr (assoc 10 cir)))
  5.   (setq pt (list (car pt0) (cadr pt0)))
  6.   (while
  7.     (setq p (getpoint "\n选择方位点: "))
  8.     (setq jd (angle p pt))
  9.     (setq ptx (polar p jd -4.5))
  10.     (cond
  11.       ((<= jd (* pi 1.5)) (setq jd (- 270 (WYB-rtod jd))))
  12.       ((> jd (* pi 1.5)) (setq jd (- 630 (WYB-rtod jd))))
  13.     )
  14.     (if (> jd 359.99999999) (setq jd 0))
  15.     (WYB-enttext-all "3" ptx (strcat (rtos jd) "%%d") 3.5 0 "M")
  16.   )
  17.   (princ)
  18. )

  19. (defun WYB-rtod(r);弧度换成角度
  20.     (/ (* r 180) pi)
  21. )


  22. (defun WYB-enttext-all(tc pt ss hh rr dz / dz1 dz2)
  23.     (cond
  24.         ((= dz "L") (setq dz1 0 dz2 0))
  25.         ((= dz "C") (setq dz1 1 dz2 0))
  26.         ((= dz "R") (setq dz1 2 dz2 0))
  27.         ((= dz "A") (setq dz1 3 dz2 0))
  28.         ((= dz "M") (setq dz1 4 dz2 0))
  29.         ((= dz "F") (setq dz1 5 dz2 0))
  30.         ((= dz "BL") (setq dz1 0 dz2 1))
  31.         ((= dz "BC") (setq dz1 1 dz2 1))
  32.         ((= dz "BR") (setq dz1 2 dz2 1))
  33.         ((= dz "ML") (setq dz1 0 dz2 2))
  34.         ((= dz "MC") (setq dz1 1 dz2 2))
  35.         ((= dz "MR") (setq dz1 2 dz2 2))
  36.         ((= dz "TL") (setq dz1 0 dz2 3))
  37.         ((= dz "TC") (setq dz1 1 dz2 3))
  38.         ((= dz "TR") (setq dz1 2 dz2 3))
  39.     )
  40.     (entmake
  41.         (list
  42.             '(0 . "TEXT")
  43.             (cons 8 tc);图层
  44.             (cons 10 pt);插入点,必须先预设该值,否则无法运行
  45.             (cons 1 ss);内容
  46.             (cons 40 hh);字高
  47.             (cons 50 rr)
  48.             (cons 41 0.7);字宽
  49.             (cons 72 dz1)
  50.             (cons 73 dz2)
  51.             (cons 11 pt);对齐点
  52.         )
  53.     )
  54. )
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2013-11-10 21:12:51 | 显示全部楼层
(rem  jd 360)
 楼主| 发表于 2013-11-10 22:15:04 | 显示全部楼层
llsheng_73 发表于 2013-11-10 21:12
(rem  jd 360)

感谢回答。
不过刚才用这个代码跑了下,也有问题。后来终于发现是0°线各种处理后不直造成的。。。
发表于 2024-9-17 14:44:43 | 显示全部楼层

感谢大佬的回复,为我现在遇到的问题提供了解决的思路~
发表于 2024-9-17 18:58:50 | 显示全部楼层
(rem (- 450 ang) 360);ang为正东为0度逆时针方向的角度,转换成以正北方向为起点顺方向的角度.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 07:25 , Processed in 0.169930 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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