乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 49|回复: 12

[编程交流] 计算并显示包含

[复制链接]

1

主题

3

帖子

2

银币

初来乍到

Rank: 1

铜币
5
发表于 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.)它要求我定位计算的角度。
 
非常感谢:)
回复

使用道具 举报

1

主题

3

帖子

2

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 19:54:35 | 显示全部楼层
bump^请帮忙
回复

使用道具 举报

0

主题

301

帖子

301

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-5 20:03:29 | 显示全部楼层
什么是mpd??
回复

使用道具 举报

8

主题

1133

帖子

1164

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-5 20:06:00 | 显示全部楼层
纯粹的猜测:-
 
在香港,mPD是一个测量术语,意思是“高于基准面米”,是指低于平均海平面1.230m的高度
回复

使用道具 举报

0

主题

301

帖子

301

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-5 20:09:54 | 显示全部楼层
首先谢谢!埃尔登
 
契塔卡德,
 
这种事肯定做过一千次了
你可以在这个论坛或其他论坛上找到它。
 
但这里有一些有用的功能:
 
  1. defun c:test ()
  2.   (setq txh (getvar 'TEXTSIZE))
  3.   (setq p1 (getpoint p1 "\nPick Point: ")
  4. z1 (getreal "\Enter Elevation: ")
  5.   )
  6.   (while p1
  7.      (setq p2 (getpoint p1 "\nPick Next Point: ")
  8.            z2 (getreal "\Enter Elevation: ")
  9.            p1 (list (car p1) (cadr p1) z1)
  10.            p2 (list (car p2) (cadr p2) z2)
  11.            an (angle p1 p2)
  12.           mid (midpoint p1 p2)
  13.     ;; Remove following statement if lines are existing  ;
  14.            en (entmakex (list (cons 0 "LINE")
  15.                               (cons 10 p1)
  16.                        (cons 11 p2)
  17.                        '(210 0.0 0.0 1.0))
  18.        )
  19.       )                 
  20.       (vl-cmdf "_TEXT" "_J" "_BC" mid txth (rtd an) (angtodms an 0))
  21.       (setq p1 p2  z1 z2)
  22.   )
  23.   (princ)
  24. )
  25. ;; Radian to Decimal Degree                                                   ;
  26. (defun rtd (a) (* 180.0 (/ a pi)))  
  27. ;;                                                                            ;
  28. ;; midpoint                                                                   ;
  29. ;;                                                                            ;
  30. ;; Returns The Midpoint Between Point a and Point b                           ;
  31. ;;                                                                            ;
  32. (defun midpoint (a b)
  33.   (mapcar '(lambda (a b) (* (+ a b) 0.5)) a b)
  34. )
  35. ; angtodms       by ymg                                                       ;
  36. ; Given an angle in radian and number of decimal after the seconds            ;
  37. ; Returns a string formatted in Degree Minutes and Seconds,                   ;
  38. ; with proper symblol for degree and leading 0 on the minutes and seconds     ;
  39. ;           0°00'00.0"    271°05'06.3" etc.                                   ;
  40. (defun angtodms (a prec /)
  41.     (setq a (angtos a 1 (+ prec 4)))
  42.     (while (<  (vl-string-position (ascii "d") a) 3)          
  43.         (setq a (strcat " " a))
  44.     )
  45.     (if (< (vl-string-position (ascii "'") a) 6)
  46. (setq a (strcat (substr a 1 4) "0" (substr a 5)))
  47.     )
  48.     (if (< (vl-string-position (ascii """) a) (+ 9 (if (= 0 prec) 0 (1+ prec))))
  49. (setq a (strcat (substr a 1 7) "0" (substr a ))
  50.     )
  51.     (vl-string-subst  "°" "d" a)
  52. )
回复

使用道具 举报

1

主题

37

帖子

42

银币

初来乍到

Rank: 1

铜币
2
发表于 2022-7-5 20:15:50 | 显示全部楼层
欢迎来到cheatacad11论坛,请不要用帮助开始一个帖子!而且不需要碰撞(这无助于其他人找到帖子的答案),也不需要碰撞帖子。我删除了帮助!从你的头衔。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 20:20:09 | 显示全部楼层
 
只是为了好玩。。。
 
也许是编写“angtodms”函数的另一种方法:
  1. (defun ang->dms ( ang prc )
  2.    (   (lambda ( f / s p )
  3.            (setq s (angtos ang 1 (+ prc 4))
  4.                  p (vl-string-position 100 s)
  5.            )
  6.            (strcat (substr s 1 p) "°" (f (substr s (+ 2 p)) '(39 46)))
  7.        )
  8.        (lambda ( a b / p )
  9.            (cond
  10.                (   (null b) a)
  11.                (   (setq p (vl-string-position (car b) a))
  12.                    (strcat (substr (strcat "00" (substr a 1 (1+ p))) (1+ p)) (f (substr a (+ p 2)) (cdr b)))
  13.                )
  14.                (   (f a (cdr b)))
  15.            )
  16.        )
  17.    )
  18. )

如果度值的两个前导零是可接受的,则上述值可能会变为:
  1. (defun ang->dms ( ang prc )
  2.    (   (lambda ( f ) (vl-string-translate "d" "°" (f (angtos ang 1 (+ prc 4)) '(100 39 46))))
  3.        (lambda ( a b / p )
  4.            (cond
  5.                (   (null b) a)
  6.                (   (setq p (vl-string-position (car b) a))
  7.                    (strcat (substr (strcat "00" (substr a 1 (1+ p))) (1+ p)) (f (substr a (+ p 2)) (cdr b)))
  8.                )
  9.                (   (f a (cdr b)))
  10.            )
  11.        )
  12.    )
  13. )
回复

使用道具 举报

0

主题

301

帖子

301

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-5 20:25:23 | 显示全部楼层
李,
 
正如他们所说,“剥猫皮的方法很多”。
 
你的要简洁一点。
 
测量中很少使用两个前导零。
 
我还没有养成lambda的习惯,他们当然
都很有用。
 
ymg公司
回复

使用道具 举报

8

主题

1133

帖子

1164

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-5 20:33:29 | 显示全部楼层
 
只有那些记得手动书写角度的人。始终输入前导零和尾随零,以完全填充DDD-MM-SS格式。
回复

使用道具 举报

0

主题

301

帖子

301

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-5 20:39:23 | 显示全部楼层
埃尔登,
 
我不知道,也许我老了。
 
但对我来说,0°04’23“比000°04’23”更易读
 
ymg公司
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-8-18 20:38 , Processed in 3.623140 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表