计算并显示包含
大家好。我想要一个简单的LSP,我需要你的帮助。下面是我的问题:
我想要一个LSP来帮助我计算的角度,捕捉一条st线的距离,同时输入两个端点的两个mpd水平。
例子:
1)它要求我选择一条线(长度为d)
2)它要求我输入更高的mpd(h1)
3)它要求我输入较低的mpd(h2)
4.)根据该公式(tan-1(h1-h2)/d)计算倾角
5.)它要求我定位计算的角度。
非常感谢:) bump^请帮忙 什么是mpd?? 纯粹的猜测:-
在香港,mPD是一个测量术语,意思是“高于基准面米”,是指低于平均海平面1.230m的高度 首先谢谢!埃尔登
契塔卡德,
这种事肯定做过一千次了
你可以在这个论坛或其他论坛上找到它。
但这里有一些有用的功能:
defun c:test ()
(setq txh (getvar 'TEXTSIZE))
(setq p1 (getpoint p1 "\nPick Point: ")
z1 (getreal "\Enter Elevation: ")
)
(while p1
(setq p2 (getpoint p1 "\nPick Next Point: ")
z2 (getreal "\Enter Elevation: ")
p1 (list (car p1) (cadr p1) z1)
p2 (list (car p2) (cadr p2) z2)
an (angle p1 p2)
mid (midpoint p1 p2)
;; Remove following statement if lines are existing;
en (entmakex (list (cons 0 "LINE")
(cons 10 p1)
(cons 11 p2)
'(210 0.0 0.0 1.0))
)
)
(vl-cmdf "_TEXT" "_J" "_BC" mid txth (rtd an) (angtodms an 0))
(setq p1 p2z1 z2)
)
(princ)
)
;; Radian to Decimal Degree ;
(defun rtd (a) (* 180.0 (/ a pi)))
;; ;
;; midpoint ;
;; ;
;; Returns The Midpoint Between Point a and Point b ;
;; ;
(defun midpoint (a b)
(mapcar '(lambda (a b) (* (+ a b) 0.5)) a b)
)
; angtodms by ymg ;
; Given an angle in radian and number of decimal after the seconds ;
; Returns a string formatted in Degree Minutes and Seconds, ;
; with proper symblol for degree and leading 0 on the minutes and seconds ;
; 0°00'00.0" 271°05'06.3" etc. ;
(defun angtodms (a prec /)
(setq a (angtos a 1 (+ prec 4)))
(while (<(vl-string-position (ascii "d") a) 3)
(setq a (strcat " " a))
)
(if (< (vl-string-position (ascii "'") a) 6)
(setq a (strcat (substr a 1 4) "0" (substr a 5)))
)
(if (< (vl-string-position (ascii "\"") a) (+ 9 (if (= 0 prec) 0 (1+ prec))))
(setq a (strcat (substr a 1 7) "0" (substr a ))
)
(vl-string-subst"°" "d" a)
)
欢迎来到cheatacad11论坛,请不要用帮助开始一个帖子!而且不需要碰撞(这无助于其他人找到帖子的答案),也不需要碰撞帖子。我删除了帮助!从你的头衔。
只是为了好玩。。。
也许是编写“angtodms”函数的另一种方法:
(defun ang->dms ( ang prc )
( (lambda ( f / s p )
(setq s (angtos ang 1 (+ prc 4))
p (vl-string-position 100 s)
)
(strcat (substr s 1 p) "°" (f (substr s (+ 2 p)) '(39 46)))
)
(lambda ( a b / p )
(cond
( (null b) a)
( (setq p (vl-string-position (car b) a))
(strcat (substr (strcat "00" (substr a 1 (1+ p))) (1+ p)) (f (substr a (+ p 2)) (cdr b)))
)
( (f a (cdr b)))
)
)
)
)
如果度值的两个前导零是可接受的,则上述值可能会变为:
(defun ang->dms ( ang prc )
( (lambda ( f ) (vl-string-translate "d" "°" (f (angtos ang 1 (+ prc 4)) '(100 39 46))))
(lambda ( a b / p )
(cond
( (null b) a)
( (setq p (vl-string-position (car b) a))
(strcat (substr (strcat "00" (substr a 1 (1+ p))) (1+ p)) (f (substr a (+ p 2)) (cdr b)))
)
( (f a (cdr b)))
)
)
)
) 李,
正如他们所说,“剥猫皮的方法很多”。
你的要简洁一点。
测量中很少使用两个前导零。
我还没有养成lambda的习惯,他们当然
都很有用。
ymg公司
只有那些记得手动书写角度的人。始终输入前导零和尾随零,以完全填充DDD-MM-SS格式。 埃尔登,
我不知道,也许我老了。
但对我来说,0°04’23“比000°04’23”更易读
ymg公司
页:
[1]
2