乐筑天下

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

[编程交流] 计算a的倾角

[复制链接]

10

主题

21

帖子

11

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 2022-7-5 19:55:59 | 显示全部楼层 |阅读模式
你好
我想知道:在前视图或任何其他视图中,是否有任何lisp可以计算三维多段线的倾角和长度?
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-5 20:09:29 | 显示全部楼层
你能解释一下倾角是多少吗?
回复

使用道具 举报

10

主题

21

帖子

11

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 2022-7-5 20:29:09 | 显示全部楼层
倾角给出了倾斜线或特征相对于水平面的最陡下降角,并由数字(0°-90°)给出,其中线倾斜的大致方向。
像这样的图片
 

                               
登录/注册后可看大图
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-5 20:42:53 | 显示全部楼层
那么为什么三维多段线。。。你不是在搜索直线倾角和长度吗?
回复

使用道具 举报

10

主题

21

帖子

11

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 2022-7-5 20:51:54 | 显示全部楼层
我只是写错了。这是“倾角给出了倾斜三维多段线的最陡下降角”。倾角是一个地质学术语,指现实生活中平面与直线的夹角或倾角。但是在AutoCad中,如果我没记错的话,我们称之为3dpoly。
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-5 21:03:19 | 显示全部楼层
好的,试一试:
 
  1. (defun c:DIP&Len ( / v^v unit mxv transptucs transptwcs ss pe pa ent p1 p2 l vd vx vy p1u p2u p1up p2up p1p p2p lp pl p ps ph dip )
  2. (vl-load-com)
  3. (defun v^v ( u v )
  4.    (mapcar '(lambda ( s1 s2 a b ) (+ ((eval s1) (* (nth a u) (nth b v))) ((eval s2) (* (nth a v) (nth b u))))) '(+ - +) '(- + -) '(1 0 0) '(2 2 1))
  5. )
  6. (defun unit ( v )
  7.    (mapcar '(lambda ( x ) (/ x (distance '(0.0 0.0 0.0) v))) v)
  8. )
  9. (defun mxv ( m v )
  10.    (mapcar '(lambda ( r ) (apply '+ (mapcar '* r v))) m)
  11. )
  12. (defun transptucs ( pt p1 p2 p3 / ux uy uz )
  13.    (setq uz (unit (v^v (mapcar '- p2 p1) (mapcar '- p3 p1))))
  14.    (setq ux (unit (mapcar '- p2 p1)))
  15.    (setq uy (unit (mapcar '- p3 p1)))
  16.    
  17.    (mxv (list ux uy uz) (mapcar '- pt p1))
  18. )
  19. (defun transptwcs ( pt pt1 pt2 pt3 / pt1n pt2n pt3n )
  20.    (setq pt1n (transptucs '(0.0 0.0 0.0) pt1 pt2 pt3))
  21.    (setq pt2n (transptucs '(1.0 0.0 0.0) pt1 pt2 pt3))
  22.    (setq pt3n (transptucs '(0.0 1.0 0.0) pt1 pt2 pt3))
  23.    (transptucs pt pt1n pt2n pt3n)
  24. )
  25. (prompt "\nPick Line entity or straight segment of polyline to calculate DIP (angle) to current view and Lenght of its projection & its real Length")
  26. (setq ss (ssget "_+.:E:S" '((0 . "LINE,*POLYLINE"))))
  27. (if (and ss (wcmatch (cdr (assoc 0 (entget (ssname ss 0)))) "*POLYLINE"))
  28.    (progn
  29.      (setq pe (vlax-curve-getclosestpointtoprojection (ssname ss 0) (cadr (cadddr (car (ssnamex ss)))) '(0.0 0.0 1.0)))
  30.      (setq pa (vlax-curve-getparamatpoint (ssname ss 0) pe))
  31.      (if (/= (vla-getbulge (vlax-ename->vla-object (ssname ss 0)) (float (fix pa))) 0.0)
  32.        (setq ss nil)
  33.      )
  34.    )
  35. )
  36. (while (not ss)
  37.    (prompt "\nMissed selection or picked arced segment... Please select again (LINE, POLYLINE) - only straight segment...")
  38.    (setq ss (ssget "_+.:E:S" '((0 . "LINE,*POLYLINE"))))
  39.    (if (and ss (wcmatch (cdr (assoc 0 (entget (ssname ss 0)))) "*POLYLINE"))
  40.      (progn
  41.        (setq pe (vlax-curve-getclosestpointtoprojection (ssname ss 0) (cadr (cadddr (car (ssnamex ss)))) '(0.0 0.0 1.0)))
  42.        (setq pa (vlax-curve-getparamatpoint (ssname ss 0) pe))
  43.        (if (/= (vla-getbulge (vlax-ename->vla-object (ssname ss 0)) (float (fix pa))) 0.0)
  44.          (setq ss nil)
  45.        )
  46.      )
  47.    )
  48. )
  49. (setq ent (ssname ss 0))
  50. (setq pe (vlax-curve-getclosestpointtoprojection ent (cadr (cadddr (car (ssnamex ss)))) '(0.0 0.0 1.0)))
  51. (setq pa (vlax-curve-getparamatpoint ent pe))
  52. (if (wcmatch (cdr (assoc 0 (entget ent))) "*POLYLINE")
  53.    (progn
  54.      (setq p1 (vlax-curve-getpointatparam ent (float (fix pa))))
  55.      (setq p2 (vlax-curve-getpointatparam ent (float (1+ (fix pa)))))
  56.    )
  57.    (progn
  58.      (setq p1 (vlax-curve-getstartpoint ent))
  59.      (setq p2 (vlax-curve-getendpoint ent))
  60.    )
  61. )
  62. (setq l (distance p1 p2))
  63. (setq vd (trans (getvar 'viewdir) 1 0 t))
  64. (if (not (equal (unit vd) '(0.0 0.0 1.0) 1e-6))
  65.    (progn
  66.      (setq vx (unit (v^v vd '(0.0 0.0 1.0))))
  67.      (setq vy (unit (v^v vd vx)))
  68.    )
  69.    (setq vx '(1.0 0.0 0.0) vy '(0.0 1.0 0.0))
  70. )
  71. (setq p1u (transptucs p1 '(0.0 0.0 0.0) vx vy))
  72. (setq p2u (transptucs p2 '(0.0 0.0 0.0) vx vy))
  73. (setq p1up (list (car p1u) (cadr p1u) 0.0))
  74. (setq p2up (list (car p2u) (cadr p2u) 0.0))
  75. (setq lp (distance p1up p2up))
  76. (setq p1p (transptwcs p1up '(0.0 0.0 0.0) vx vy))
  77. (setq p2p (transptwcs p2up '(0.0 0.0 0.0) vx vy))
  78. (setq p (inters p1 p2 p1p p2p nil))
  79. (if (and p (> (distance p p2) (distance p p1))) (setq ps p2p ph (distance p2 p2p)) (setq ps p1p ph (distance p1 p1p)))
  80. (if p
  81.    (progn
  82.      (setq pl (distance p ps))
  83.      (setq dip (cvunit (atan ph pl) "radian" "degree"))
  84.    )
  85.    (if (equal l lp 1e- (setq dip 0.0))
  86. )
  87. (prompt "\n.................................................")
  88. (prompt "\nReal length is : ") (princ (rtos l 2 15))
  89. (prompt "\nLength of projection is : ") (princ (rtos lp 2 15))
  90. (prompt "\nDIP (angle) in decimal degrees is : ") (princ (rtos dip 2 15))
  91. (princ)
  92. )
HTH,M.R。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-12 01:03 , Processed in 0.603941 second(s), 67 queries .

© 2020-2025 乐筑天下

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