向三角网曲面添加点
如何将点对象(x y z)添加到vl-*曲面对象?以下是我已经尝试过的(未成功):
(vlax-invoke-method
(vlax-get (vlax-get exist_aecSurfItem 'inputs) 'pointfiles)
'add
;; What goes here... Safearray, variant, or something else?
)
有点像使用_aectreemgrent命令,而不使用地形模型浏览器。
我在apropos中找不到任何有用的东西(或者不知道要找什么!)。。。任何帮助都将不胜感激。 支持文件中有许多vba lisp等的代码示例,其中包括创建点并在其中生成曲面的示例,例如\ program files\autodesk\civil 3d 2011\sample。只是在2009年的版本中明确地看了一下,可能不再是2011年了。
打开aecc数据库很复杂。在某个时刻处理点和曲面。如果你找不到示例代码,请告诉我。 谢谢你的指点,比格尔。
我在这里找到了样本:
.\程序文件\\Sample\Civil 3D API\Vba\
我应该在我的作品中明确指出,我正在使用AutoCAD Civil 3D Land Desktop Companion 2009。我不确定是否可以从LDC访问C3D API。。?
基本上,我选择了一条多段线并提供了一个高程,使用该高程可以在现有地面表面上为漫滩计算创建一个平面三角网曲面。
(也许这对你有帮助?)以下是我访问surfaces集合的方式:
(vl-load-com)
;; Version test
(cond
((vl-string-search "R16.2" *vrsn*) (setq appstr "4")) ; 2006
((vl-string-search "R17.2" *vrsn*) (setq appstr "8")) ; 2009
(t (alert "This version of LDT not supported!")))
;; Set current surface
(prompt
"\n>>Select Existing Surface for Floodplain Calculations: ")
(dt_mnl)
(zz_sdsk '(dt_srfopen))
(c:LDD)
;; Main code
;|Thanks to Jeff Mishler,
http://forums.autodesk.com/t5/AutoCAD-Land-Desktop/Label-Surface-Spot-Elevation/m-p/2422911 |;
(if
(and (setq aeccApp
(vla-getInterfaceObject
*acadDoc*
(strcat "Aecc.Application." appstr)))
(setq aeccDoc (vla-get-activedocument aeccApp))
(setq aeccUtil (vlax-get aeccDoc "utility"))
(setq aeccProj (vlax-get aeccApp 'activeProject))
(setq aecSurfs (vlax-get aeccProj "Surfaces"))
(setq exist_aecSurfName (vlax-get aecSurfs "Currentsurface"))
(setq exist_aecSurfItem (vla-item aecSurfs exist_aecSurfName)))
;; ...Code
)
下面是我如何添加新(空)曲面的:
(setq new_aecSurfItem (vla-add aecSurfs "TEST"))
(vlax-put new_aecSurfItem "Currentsurface" "TEST")
(vla-put-description
new_aecSurfItem
"This is a Test, for My Floodplain Calculation Routine. ")
现在一次解决一个障碍。。。我需要将曲面点添加到新(空)曲面。
;; Missing code
注意-我仍在尝试确定是否最好通过边界框添加四个点(即,大于我的多段线),然后使用多段线的副本作为边界,*或者*如果我应该,则通过多段线的所有顶点,添加一个曲面点。
同样,将点实体添加到模型空间是简单的部分。。。我需要帮助确定如何最好地将这些点添加到曲面(以便我可以构建它)。
编辑:然后,使用此代码构建曲面(已成功测试):
(vlax-invoke-method new_aecSurfItem 'build)
... 稍后,我必须找出如何进行漫滩计算。我只是尝试“自动化”一个很长的过程,并且占用了大量的项目预算。由于VBA可以完成这些任务(VBA使用ActiveX COM API),我*希望*Visual LISP也能做到这一点。 我已在..中成功创建了点文件/Dtm/directory,它允许我构建曲面!(万岁!!!)
然而,我需要添加一个曲面边界,我缺少正确的语法或参数。这是我一直在尝试的方法(没有成功):
;; Add boundary to surface
(vlax-invoke-method
(vlax-get (vlax-get new_aecSurfItem 'inputs) 'boundaries)
'add
;| (vlax-safearray->list
(vlax-variant-value
(vla-get-coordinates
(vlax-ename->vla-object eName)))) |;
(vlax-ename->vla-object eName)
;;eName
"Boundary0"
"Outer"
"Yes"
)
这是我在当前配置中收到的错误消息:
lisp value has no coercion to VARIANT with this type:#<VLA-OBJECT
IAcadLWPolyline 224bcb04>
手动完成后(即,在地形模型浏览器中的“边界”节点上单击鼠标右键,选择“添加边界定义”),这是命令行的副本:
Command: _AECTREEMGREVENT
Select polyline for boundary:
Boundary name <Boundary0>:
Boundary type (Show/Hide/Outer) <Outer>:
Make breaklines along edges? (Yes/No) <Yes>:
Select polyline for boundary:
我错过了什么!? RK很友好地为我提供了解决方案(复制到这里):
谢谢,RK!
编辑:现在了解如何以编程方式处理漫滩计算! 我认为继续使用比较两个曲面作为卷答案比花大量时间编写卷例程更容易。
如果你想,如果你研究“土地测量”,你会发现计算地表体积的数学方法。 谢谢你的反馈,比格尔。我有点同意;我不是在试图重新发明轮子,而是尽可能地自动化一个“长”的生产过程。
我怀疑我目前是否会制作一个包罗万象的例程,但能够通过单击快速创建曲面非常有帮助。。。我有一个道路项目,有几十个水池来比较体积(即每个水池位于不同的漫滩高程),并为其制作展品。
至少,这项功能为我节省了数天的工作时间,如果不是更多的话,也可以轻松为初级技术人员节省一周的时间(万岁效率!)。 节省您查找下一个版本的时间
((vl字符串搜索“R17.2”vrsn)(setq appstr“6.0”);09
((vl字符串搜索“R18.0”vrsn)(setq appstr“7.0”);10
((vl字符串搜索“R18.1”vrsn)(setq appstr“8.0”);11
谢谢
输入无意义的文本,因此我可以发布回复。
犯错误
页:
[1]