cheatacad11 发表于 2022-7-5 19:49:21

计算并显示包含

大家好。我想要一个简单的LSP,我需要你的帮助。
下面是我的问题:
 
我想要一个LSP来帮助我计算的角度,捕捉一条st线的距离,同时输入两个端点的两个mpd水平。
 
例子:
1)它要求我选择一条线(长度为d)
2)它要求我输入更高的mpd(h1)
3)它要求我输入较低的mpd(h2)
4.)根据该公式(tan-1(h1-h2)/d)计算倾角
5.)它要求我定位计算的角度。
 
非常感谢:)

cheatacad11 发表于 2022-7-5 19:54:35

bump^请帮忙

ymg3 发表于 2022-7-5 20:03:29

什么是mpd??

eldon 发表于 2022-7-5 20:06:00

纯粹的猜测:-
 
在香港,mPD是一个测量术语,意思是“高于基准面米”,是指低于平均海平面1.230m的高度

ymg3 发表于 2022-7-5 20:09:54

首先谢谢!埃尔登
 
契塔卡德,
 
这种事肯定做过一千次了
你可以在这个论坛或其他论坛上找到它。
 
但这里有一些有用的功能:
 

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)
)

Lazer 发表于 2022-7-5 20:15:50

欢迎来到cheatacad11论坛,请不要用帮助开始一个帖子!而且不需要碰撞(这无助于其他人找到帖子的答案),也不需要碰撞帖子。我删除了帮助!从你的头衔。

Lee Mac 发表于 2022-7-5 20:20:09

 
只是为了好玩。。。
 
也许是编写“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)))
         )
       )
   )
)

ymg3 发表于 2022-7-5 20:25:23

李,
 
正如他们所说,“剥猫皮的方法很多”。
 
你的要简洁一点。
 
测量中很少使用两个前导零。
 
我还没有养成lambda的习惯,他们当然
都很有用。
 
ymg公司

eldon 发表于 2022-7-5 20:33:29

 
只有那些记得手动书写角度的人。始终输入前导零和尾随零,以完全填充DDD-MM-SS格式。

ymg3 发表于 2022-7-5 20:39:23

埃尔登,
 
我不知道,也许我老了。
 
但对我来说,0°04’23“比000°04’23”更易读
 
ymg公司
页: [1] 2
查看完整版本: 计算并显示包含