broncos15 发表于 2022-7-5 16:13:12

在S中查找局部凹陷

我试图编写一个例程,将绘制多段线到曲面中的所有局部凹陷。目前,我发现局部凹陷的方法是进行分水岭分析,更改曲面样式以将局部凹陷显示为节点,然后手动四处查看并验证局部凹陷是否正确。在非常大的场地(20多英亩)上,当你通过并检查每个地方时,确保你没有错过任何当地的洼地是很耗时的。
 
 
这就是为什么我希望有一个例程,可以让我在执行分水岭分析后选择曲面,并为每个局部凹陷节点绘制多段线。问题是我找不到这些信息存储在哪里。我已经转储了vla信息和dxf信息,但什么也找不到。有人有什么建议吗?

broncos15 发表于 2022-7-5 16:16:47

我找到了关于vb代码如何用于流域分析的信息,但我仍然不确定如何获得结果。https://knowledge.autodesk.com/support/autocad-civil-3d/learn-explore/caas/CloudHelp/cloudhelp/2017/ENU/Civil3D-DevGuide/files/GUID-CF359595-EF4A-4A74-A7DD-C86F8758DE3E-htm.html

ronjonp 发表于 2022-7-5 16:20:45

听起来是个有趣的问题。你能上传你的文件吗?(不过你得忍受我,我是个相当不懂C3D的人)

broncos15 发表于 2022-7-5 16:25:58

非常感谢您能看到这个!这只是一个很快的例子。
抑郁测试。图纸

ronjonp 发表于 2022-7-5 16:28:34

我明天早上去看看。

lrm 发表于 2022-7-5 16:30:35

好奇的是,你能在C3D曲面上使用曲面分析函数ANALYSISCURVATURE吗?

ronjonp 发表于 2022-7-5 16:34:57

 
不知道你想从示例图中完成什么,也许这会给你一个开始。它从拾取的点到所有排水位置(我假设是洼地?)
(defun c:sa (/ _getsurfaceanalysis a anlsys drains out p p2 wshed x)
;; https://www.theswamp.org/index.php?topic=50877.msg559985#msg559985
;; RJP modified for surface analysis 07.07.2017
(defun _getsurfaceanalysis (/ c3d civdb civdoc out)
   (if        (and (setq c3d (strcat "HKEY_LOCAL_MACHINE\\"
                     (if vlax-user-product-key
                       (vlax-user-product-key)
                       (vlax-product-key)
                     )
             )
   )
   (setq c3d (vl-registry-read c3d "Release"))
   (setq c3d (substr c3d 1 (vl-string-search "." c3d (+ (vl-string-search "." c3d) 1))))
   (setq c3d (vla-getinterfaceobject
               (vlax-get-acad-object)
               (strcat "AeccXUiLand.AeccApplication." c3d)
             )
   )
   (setq civdoc (vlax-get c3d 'activedocument))
   (setq civdb (vlax-get civdoc 'database))
)
   (vlax-for x (vlax-get civdb 'surfaces) (setq out (cons (vlax-get x 'surfaceanalysis) out)))
   )
   out
)
(if (and (setq a (_getsurfaceanalysis))
   (setq anlsys (mapcar '(lambda (x) (vlax-get x 'watershedanalysis)) a))
   (setq wshed (mapcar '(lambda (x) (vlax-get x 'watershedregions)) anlsys))
   (or (foreach        shed wshed
       (vlax-for shed2 shed
           (if (vlax-property-available-p shed2 'drains)
             (setq drains (cons (vlax-get shed2 'drains) drains))
           )
       )
       )
       drains
   )
   (foreach drain drains (vlax-for drain2 drain (setq out (cons drain2 out))))
   (setq p (getpoint "\nPick a point away from the surface: "))
   )
   (foreach x out
   (if (setq p2 (vlax-get x 'location))
(entmakex (list '(0 . "line") (cons 10 p) (cons 11 p2)))
   )
   )
)
(princ)
)

BIGAL 发表于 2022-7-5 16:35:42

很好的一个Ronjop一旦你知道你在数据库名称方面寻找什么,你可以通过链接获得很多信息。我将版本检查作为库defun,我在许多曲面例程中使用该检查。通过注册表获取信息是一个好主意。
 
对于任何使用其他方法查找版本号的人。
 

((vl-string-search "R20.0" vrsn)(setq appstr "10.4"));;2015
      ((vl-string-search "R20.1" vrsn)(setq appstr "10.5"));;2016   
      ((vl-string-search "R21.0" vrsn)(setq appstr "11.0"));;2017   
      ((vl-string-search "R22.0" vrsn)(setq appstr "12.0"));;2018

 
你可能对此感兴趣
Chtourstolbar。拉链

broncos15 发表于 2022-7-5 16:39:43

罗恩,非常感谢你的帮助!当我尝试运行该函数时,出现以下错误:ActiveX服务器返回错误:未知名称:“DRAINS”。我知道这意味着函数drains不存在,但是我应该用什么来替换它呢?

ronjonp 发表于 2022-7-5 16:44:05

错误可能在这一行:
(vlax-for shed2 shed (setq drains (cons (vlax-get shed2 'drains) drains)))
你必须解决这个问题,因为代码在我的电脑上运行,但我也使用C3D 2017。
页: [1] 2
查看完整版本: 在S中查找局部凹陷