matrix 发表于 2006-4-4 11:39:00

求助坝体稳定性分析

<P>各位高手好,我是一个刚学VBA的菜鸟,现在老师让我做坝体的稳定性分析,是在坝体上任选一点,然后在等高线上每隔一定角度值批量画垂直线,然后比较每条线的长度,求出最短的那条,然后在autocad上面标注长度,并显示该直线,我做的VBA界面如下,请哪位高手给指点一下代码如何编写,</P>

雪山飞狐_lzh 发表于 2006-4-4 17:16:00

<STRONG>坝体的图样提供一张吧,把过程说清楚一点</STRONG>

matrix 发表于 2006-4-5 08:03:00

<P>谢谢啊,高手就是很负责任的,感激中,坝体图像如下</P>
<P class=MsoBodyTextIndent style="MARGIN: 0cm 0cm 0pt; LAYOUT-GRID-MODE: char; LINE-HEIGHT: 125%; mso-layout-grid-align: none"><FONT size=3>《浆砌石拱坝设计规范》规定,拱座的抗滑稳定安全系数的计算公式采用下式:</FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; LAYOUT-GRID-MODE: char; TEXT-INDENT: 173.5pt; LINE-HEIGHT: 125%; mso-layout-grid-align: none; mso-char-indent-count: 14.46; mso-char-indent-size: 11.95pt"><FONT face="Times New Roman">K=(Nּf+Cּl)/Q<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; LAYOUT-GRID-MODE: char; TEXT-INDENT: 173.5pt; LINE-HEIGHT: 125%; mso-layout-grid-align: none; mso-char-indent-count: 14.46; mso-char-indent-size: 11.95pt"><FONT face="Times New Roman">N=H<SUB>A</SUB>cosθ</FONT>-<FONT face="Times New Roman">V<SUB>A</SUB>sinθ<o:p></o:p></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; LAYOUT-GRID-MODE: char; TEXT-INDENT: 173.5pt; LINE-HEIGHT: 125%; mso-layout-grid-align: none; mso-char-indent-count: 14.46; mso-char-indent-size: 11.95pt"><FONT face="Times New Roman">Q= H<SUB>A</SUB>sinθ+V<SUB>A</SUB>cosθ<o:p></o:p></FONT></P>
<P>式中:K为抗滑稳定安全系数;采用安全系数的控制指标为基本荷载组合 <SPAN lang=EN-US>K≥3.0</SPAN>;N为垂直于滑动方向的法向力;Q为沿滑动方向的滑动力;l为滑裂面的抗剪长度;f为抗剪断摩擦系数;C为抗剪断凝聚力;H<SUB>A</SUB>为拱座处轴力;V<SUB>A</SUB>为拱座处剪力;θ为滑裂面与拱座径向面的夹角。取单位拱高对不同高程的两岸拱端分别假定不同的θ角进行坝肩稳定计算</P>
<P>我做的东西就是每隔不同的夹角θ从坝体某一点向等高线引垂直线,即抗剪长度,批量画线,然后比较长度,得出最小长度,并标注,然后在CAD中显示最优直线,其他直线擦除,<SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman'; mso-bidi-font-size: 11.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"><EM></EM></SPAN></P>

matrix 发表于 2006-4-5 08:06:00

<P>主要的研究内容是:对于坝址区地质情况复杂,地形条件苛刻,特别是两岸坝肩岩体存在断层、裂隙、节理、软弱夹层,当坝肩承受拱座传来的推力后,两岸坝肩具有抗滑稳定问题。取单位拱高对不同高程的两岸拱端分别假定不同的滑裂面与拱座径向面的夹角,然后通过CAD系统自动在地形图上量得滑裂面的抗剪长度自动进行坝肩稳定计算</P>
<P>研究与设计方法是:</P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 15.05pt; LAYOUT-GRID-MODE: char; LINE-HEIGHT: 150%"><SPAN lang=EN-US style="FONT-SIZE: 12pt"><FONT face="Times New Roman">1. </FONT>利用<FONT face="Times New Roman">VBA</FONT>计算机语言设计界面;<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 15.05pt; LAYOUT-GRID-MODE: char; LINE-HEIGHT: 150%"><FONT face="Times New Roman">2. </FONT>通过<FONT face="Times New Roman">CAD</FONT>系统自动在地形图上量得滑裂面的抗剪长度进行<o:p></o:p></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 15.05pt; LINE-HEIGHT: 150%"><FONT face="Times New Roman">3. </FONT>利用拱座的抗滑稳定安全系数的计算公式计算抗滑稳定安全系数<o:p></o:p></P>
<P>4. 编程计算找出不同的滑裂面与拱座径向面的夹角对应的最小抗滑稳定安全系数,即为抗滑稳定安全系数。</SPAN></P>

matrix 发表于 2006-4-5 08:07:00

<P>&nbsp;</P>再次感激版主的不辞劳苦啊,为人民服务!

雪山飞狐_lzh 发表于 2006-4-5 19:20:00

<P>专业术语太多了......</P>
<P>贴图说明一下</P>
<P>另外,看看置顶的Vlax类</P>

matrix 发表于 2006-4-6 10:24:00

<P>哦,谢谢回复啊,</P>
<P>VLAX 类不是很懂,</P>
<P>其实专业术语我也不是很懂,这是我老师布置给我的毕业论文,我现在选点已经做完了,就是想问一下从VBA里面如何使用命令装载一个DWG图片到CAD界面里,再者就是在CAD社区里找到了从一点到任一曲线的最小距离,不知道怎么调用,还有就是想用VBA命令选择对象--一个等高线,即曲线,然后求点到曲线的最小距离,并画出这条直线,</P>
<P>唉,刚学CAD的VBA,不是很懂,新学的,至于我做的那个界面,就不看了,我又做了一个新的,简单的,楼主看一下,谢谢啊,</P>&nbsp;&nbsp; 按照上面的做一下就行了,应该是很简单的,但是我编程不好,头一次接触这个东西,感到很郁闷,谢谢版主了,

matrix 发表于 2006-4-6 10:29:00

<P>[语法]<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GetCurvePointAtDist(curve, dist)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [说明]<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 返回曲线上距曲线起点的指定距离的点<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [函数内容]<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Public Function GetCurvePointAtDist(curve As AcadEntity, dist <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; As Double) As Variant</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim objVLAX As VLAX, retval(2) As Double<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim tmp, i As Integer<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set objVLAX = New VLAX<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objVLAX.EvalLispExpression "(setq curve <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (vlax-ename-&gt;vla-object (handent " &amp; Chr(34) &amp; _<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; curve.Handle &amp; Chr(34) &amp; ")))"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objVLAX.SetLispSymbol "dist", dist<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tmp = objVLAX.EvalLispExpression("(null (setq pt <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (vlax-curve-getPointAtDist curve dist)))")<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If IsEmpty(tmp) Then<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tmp = objVLAX.GetLispList("pt")<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; For i = 0 To 2<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; retval(i) = tmp(i)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Next<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objVLAX.NullifySymbol "curve", "dist", "pt"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GetCurvePointAtDist = retval</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End Function<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [参数]<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 一个曲线图元和一个代表测量距离的双精度数。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [注意]<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果未找到点,则返回的值为空(Empty)。</P>
<P>&nbsp;</P>
<P>这是我在网上找到的一个程序,把曲线起点改成任意一点应该可以了吧,版主帮忙看一下,谢谢</P>

matrix 发表于 2006-4-6 10:34:00

<P></P>
<P>上图中的DWG图中两边的曲线代表等高线,中间扇形的东西就是坝体了,选坝体上一点然后到曲线的距离最短的直线求出来,</P>
<P>唉,就是不会做,辛苦版主了,</P>

雪山飞狐_lzh 发表于 2006-4-6 20:02:00

<P>Vlax类里有一个曲线类</P>
<P>调用该类的<FONT face="Courier New">GetClosestPointTo方法可以获取点到曲线的最短距离</FONT></P>
页: [1] 2
查看完整版本: 求助坝体稳定性分析