提供的DWG看起来像是来自CIV3D或类似产品,因此获得一个TIN也会让生活变得更轻松。除非转换为三角网,否则仅使用等高线并不是一个好主意,尽管不如原始三角网好
这是CIV3D帮助中的一个页面https://knowledge.autodesk.com/support/civil-3d/learn-explore/caas/CloudHelp/cloudhelp/2016/ENU/Civil3D-UserGuide/files/GUID-FDBDB4BD-86C1-4A01-9EC3-FEAEF7DF0A97-htm.html
好的,(命令“cal”和“ilp(p1,p2,p3,p4,p5)”将返回3dface,p3,p3,p5与线p1,p2相交的点XYZ,p1将表示z=0,p2 z=10000。
因此我将取一个点,使用一个范围在其周围进行ssget 3Dfaces,dwg可能有10000个三角形,因此可能仅获得20个3DFacess,并在没有代码的情况下进行ilp。如果不查看所有的3dfaces,速度会非常快。
一些测试代码,但在我继续之前需要您的dwg和3DFacess。
- (defun c:test ( )
- (while (setq p1 (getpoint "\npick point"))
- (setq p2 (mapcar '+ p1 (list 0.0 0.0 10000.0)))
- (setq 3d (entget (car (entsel "\npick 3dface"))))
- (setq p3 (cdr (assoc 10 3d)))
- (setq p4 (cdr (assoc 11 3d)))
- (setq p5 (cdr (assoc 12 3d)))
- (setq zpt (cal "ilp(p1,p2,p3,p4,p5)"))
- (if (= zpt nil)
- (princ "\nPoint not on 3dface")
- (alert (strcat "\nPoint is X= " (rtos (car zpt) 2 3) " Y= " (rtos (cadr zpt) 2 3) " Z= " (rtos (caddr zpt) 2 3)))
- )
- (setq zpt nil)
- )
- (princ)
- )
- (c:test)
|