broncos15 发表于 2022-7-5 18:14:36

计算最大z值

我有一个问题是关于我正在尝试制作的分析工具。在对具有墙的场地进行放坡时,查找墙的最大高度非常有用。目前,这是非常困难的,涉及制作个人资料和许多其他事情。墙由两条要素线(或三维多段线)相互偏移0.1’制成,因此它们始终垂直。我知道如何通过这样的代码计算垂直距离:
(setq P1 (getpoint "\nDistance From "))
   (setvar "OSMODE" 128)
   (setq DR (getdist P1 "\nPer to "))
   (setq DS (rtos DR 2 6))。我的问题是,如何扩展此代码,使其不只是做一个点,而是沿着要素线或三维多段线进行计算,以便计算墙的最大高程?我在想,我可以把它写下来,这样它就可以以较小的增量计算垂直z距离,然后打印出最大值,但我怎么能在不让用户选择点的情况下做到这一点呢?

broncos15 发表于 2022-7-5 18:21:07

我还应该提到,我已经研究了vlax curve getclosestpointto函数,但它似乎不起作用,因为它实际上没有找到垂直点,而只是找到最近的点。

David Bethel 发表于 2022-7-5 18:26:26

你能寄一个样品吗。三维多边形很容易处理,但它们确实不能垂直。它希望尝试偏移三维多边形-大卫

Lee Mac 发表于 2022-7-5 18:32:41

你能上传一张样图吗?

broncos15 发表于 2022-7-5 18:36:38

附件是一个具有2条要素线的超级简化示例。一个是墙的底部,一个是墙的顶部。墙的底部通常与墙的顶部偏移0.1’,以模拟垂直墙。我想通过从墙的底部高度减去墙的顶部高度来计算它的最大高度。这是一个超级简化的例子,但我在实际设计中,我有超过100英尺长的墙,有很多坡折,所以简化这个过程会让我的生活更容易。附件中有要素线,如果方便的话,我可以上传一个带有三维多段线的文件。
样品图纸

Lee Mac 发表于 2022-7-5 18:43:06

图形中的对象在Vanilla AutoCAD中显示为ACAD\u PROXY\u图元类型,因此很遗憾,我无法提供帮助,除非这些对象可以以某种方式转换为Vanilla对象类型。在这方面我没有建议,因为我没有垂直应用程序固有的对象的经验或知识。

David Bethel 发表于 2022-7-5 18:52:00

看起来像ACAD Civil 3D中的代理实体。对不起,我什么都不知道。3DPOLY是另一种动物-David

broncos15 发表于 2022-7-5 18:54:15

李和大卫,非常感谢你们看这个。我上传了同一张带有三维多段线的图纸,我认为这在普通AutoCAD中是可行的。如果你看不到,不用担心。
样品图纸

BIGAL 发表于 2022-7-5 18:58:51

我们有第三方附加组件的优势,对我们来说,显而易见的选择是绘制两个具有高度差的长截面,从而生成长截面图。您也可以在CIV3D中执行此操作

hanhphuc 发表于 2022-7-5 19:09:00

 
相关主题?
 
俯视图垂直但不是最近的



;point to line
(defun hp:ptol (p 2p 3d / ad d pp) ; hanhphuc - 29.10.2015
   (setq ad (mapcar '(lambda (f) (apply f (mapcar ''((x) (list (car x) (cadr x))) 2p)))
             '(angle distance)
             ) ;_ end of mapcar
d(vxv (mapcar '- p (car 2p)) (mapcar ''((f) (f (car ad))) (list cos sin)))
pp (polar (car 2p) (car ad) d)
) ;_ end of setq
   (if        (<= 0. d (cadr ad))
   (list (distance p pp)
    (list (car pp)
          (cadr pp)
          (if 3d
          (+ (* (/ (apply '- (mapcar 'last (reverse 2p))) (cadr ad)) d) (caddr (car 2p)))
          (caddr p)
          ) ;_ end of if
          ) ;_ end of list
    ) ;_ end of list
   ) ;_ end of if
   ) ;_ end of defun

;function call
;(hp:ptol pt lst 3d)
;pt= point
;lst= list of 2 end points
;example: (list p1 p2 )
;3d= t / nil

;Returns list
;( d ( x y z ))
;Where d=2d distance p to line from p1->p2
;(x y z) is coordinates apparently "perpendicular" from pt on line


;;;;example:
;;;(setq p1 (-131.868 17.4786 8.12106)
;;;      p2 (-142.847 5.87031 -2.51656)
;;;      p3 (-128.05 26.4743 2.99644)
;;;      ) ;_ end of setq

;(hp:ptol p1 (list p2 p3) t)
;return (2.14588 (-133.611 18.7304 0.9244))

;(hp:ptol p1 (list p2 p3) nil)
;returns (2.14588 (-133.611 18.7304 8.12106))


;; Vector Dot Product-Lee Mac
;; Args: u,v - vectors in R^n
(defun vxv ( u v )
   (apply '+ (mapcar '* u v))
)



使用函数迭代三维多段线点集,然后关联最小距离坐标,完成
页: [1] 2
查看完整版本: 计算最大z值