BudPerry 发表于 2022-7-6 07:45:50

获取两点之间的角度

在四处搜索后,我终于找到了以下代码来查找两点之间的角度:
 

(setq p1 (getpoint "\nSelect First Point: "))
(setq p2 (getpoint "\nSelect Second Point: "))
(setq ang1 (angle p1 p2))

 
然而,当我通过priting ang1或为文本添加以下代码行来测试这一点时,

(command "_text" "_J" "_tc" "_non" p1 6.0 ang1 "testing angle")

 
角度似乎只有从。5到2.0左右,并且永远不会与p1和p2角度(可能48或89度)的预期相匹配。
它抓取的角度是不是以其他形式,我需要转换它?

MSasu 发表于 2022-7-6 08:02:46

请注意,角度函数以弧度为单位返回角度,而该命令以度为单位。

BudPerry 发表于 2022-7-6 08:03:50

就这样,谢谢!!!

MSasu 发表于 2022-7-6 08:18:49

很高兴听到你的问题解决了。
由于从现在起您将多次遇到这种情况,我强烈建议您定义一对用于弧度到度的专用函数,分别用于度到弧度的转换。

BIGAL 发表于 2022-7-6 08:22:53

这是您想要的两个rtd dtr,您还需要记住,虽然答案始终是弧度,但它也忽略了单位方向设置,因此0始终是水平向右的,因此有时需要额外考虑0处的北brg。
 
;The dtr function converts degrees to radians
;The rtd function converts radians to degrees
(defun dtr (a)
(* pi (/ a 180.0))
)
;
(defun rtd (a)
(/ (* a 180.0) pi)
)

Tharwat 发表于 2022-7-6 08:31:17

基于Mircea和Bigal的建议和答案。
 

(command "_.text" "_J" "_tc" "_non" p1 6.0 (/ (* ang1 180.0) pi) "testing angle")

pBe 发表于 2022-7-6 08:41:25

使用命令方法时需要考虑的因素
当前UCS
(setq p1 (getpoint "\nSelect First Point: "))
(setq p2 (getpoint p1 "\nSelect Second Point: "))
(setq ang1 (angle (trans p1 1 0)
               (trans p2 1 0)))

 
当前文本
如果在当前TEXTSYLE上定义了Textstyle高度,则将获得字符串的角度值,而不是“测试角度”,并将6.0作为角度
 
HTH公司

MSasu 发表于 2022-7-6 08:47:23

这是一个很好的观点,pBe;可能的解决方法:
(command "_TEXT" textPoint)
(if (= (cdr (assoc 40 (entget (tblobjname "STYLE" (getvar "TEXTSTYLE"))))) 0.0)
(command textHeight)
)
(command textAngle textLabel)
页: [1]
查看完整版本: 获取两点之间的角度