yeqb4749659 发表于 2008-7-6 22:21:00

[求助]我写了一段程序,需要高手修改!

<p>Sub q()<br/>'排除同名选择集<br/>Dim ii As Single<br/>ii = ThisDrawing.SelectionSets.Count<br/>While (ii &gt; 0)<br/>Set sset = ThisDrawing.SelectionSets.Item(ii - 1)<br/>If sset.Name = "newset" Then<br/>sset.Delete<br/>End If<br/>ii = ii - 1<br/>Wend<br/>'建立新选择集<br/>ThisDrawing.Utility.Prompt ("请选择区域")<br/>&nbsp;Set tempset = ThisDrawing.SelectionSets.Add("newset")<br/>&nbsp; '用户在屏幕上选择<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tempset.SelectOnScreen<br/>&nbsp;Dim point1 As Variant<br/>&nbsp;&nbsp;&nbsp; Dim point2 As Variant<br/>&nbsp;&nbsp;&nbsp; ' 获取用户输入的点<br/>&nbsp;&nbsp;&nbsp; ThisDrawing.Utility.Prompt ("请绘制剖切线")<br/>&nbsp;&nbsp;&nbsp; point1 = ThisDrawing.Utility.GetPoint(, vbCrLf &amp; "First point: ")<br/>&nbsp;&nbsp;&nbsp; point2 = ThisDrawing.Utility.GetPoint _<br/>&nbsp;&nbsp;&nbsp; (point1, vbCrLf &amp; "Second point: ")<br/>&nbsp;&nbsp;&nbsp;&nbsp; Set Line = ThisDrawing.ModelSpace.AddLine(point1, point2)<br/>&nbsp;&nbsp; '打开记事本<br/>Open "C:\Documents and Settings\Administrator\桌面\科技立项\123.txt" For Append As #1<br/>'求直线与选择集的交点<br/>Dim point11(0 To 2) As Double<br/>Dim point22(0 To 2) As Double</p><p>point11(0) = point1(0)<br/>point11(1) = point1(1)<br/>point22(0) = point2(0)<br/>point22(1) = point2(1)<br/>For n = 50 To 91<br/>top:</p><p>If n &gt;= 91 Then<br/>MsgBox ("采点结束")<br/>End</p><p>End If<br/>point11(2) = n<br/>point22(2) = n</p><p>Dim linex As Object<br/>Set linex = ThisDrawing.ModelSpace.AddLine(point11, point22)<br/>Dim intPoints As Variant<br/>Dim m As Integer<br/>Dim ent As Object<br/>Dim kk As String</p><p>For Each ent In tempset<br/>&nbsp;&nbsp; intPoints = linex.IntersectWith(ent, acExtendNone)<br/>&nbsp;&nbsp;&nbsp; For m = 0 To UBound(intPoints)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; kk = kk &amp; " " &amp; Round(intPoints(m), 3)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '确定坐标的精确度<br/>&nbsp;&nbsp;&nbsp; Next m<br/>&nbsp;&nbsp;&nbsp; <br/>Next ent</p><p>kk = Trim(kk)<br/>'打印出所有交点<br/>Dim a() As String</p><p>t = UBound(Split(kk))<br/>If t = -1 Then<br/>kk = ""<br/>n = n + 1<br/>GoTo top<br/>End If<br/>ReDim a(0 To t)<br/>a = Split(kk)<br/>Dim I As Integer, j As Integer, k As Integer</p><p>&nbsp;&nbsp;&nbsp; If VarType(Split(kk)) &lt;&gt; vbEmpty Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; For I = LBound(Split(kk)) To UBound(Split(kk))&nbsp; 'split函数是将字符串按分隔符或空格分成字符数组<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Print #1, k &amp; " " &amp; a(j) &amp; " " &amp; a(j + 1) &amp; " " &amp; a(j + 2)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; I = I + 2<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; j = j + 3<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; k = k + 1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Next I<br/>&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;<br/>&nbsp;&nbsp;&nbsp; kk = ""<br/>&nbsp;&nbsp;&nbsp;&nbsp; I = 0<br/>&nbsp;&nbsp;&nbsp; j = 0<br/>&nbsp;&nbsp;&nbsp; k = 0<br/>&nbsp;&nbsp; For I = 0 To t<br/>&nbsp;&nbsp; a(I) = ""<br/>&nbsp;&nbsp; Next I<br/>&nbsp;&nbsp;&nbsp; Next n<br/>&nbsp; tempset.Delete<br/>&nbsp;&nbsp;&nbsp; Close #1<br/>End Sub</p><p>此程序用于求出剖切线与等高线的交点,并将交点的坐标输出。</p><p>可当选择集的元素太多时,程序就不能运行。cad就未响应。</p><p>敬请高手帮忙1</p>

yeqb4749659 发表于 2008-7-7 14:56:00

<p>没有人反应,郁闷ing……</p>

ljq 发表于 2008-7-8 00:53:00

<p>不要进行字符串操作,直接进行文件操作.大致如下:</p><p>For Each ent In tempset<br/>&nbsp;&nbsp; intPoints = linex.IntersectWith(ent, acExtendNone)<br/>&nbsp;&nbsp;&nbsp; For m =&nbsp;1 To (UBound(intPoints)+1)/3<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xx =&nbsp; Round(intPoints(3*m-3), 3)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '确定坐标的精确度</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;yy =&nbsp; Round(intPoints(3*m-3), 3)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '确定坐标的精确度</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;zz =&nbsp; Round(intPoints(3*m-3), 3)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '确定坐标的精确度</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Print #1, k &amp; " " &amp;&nbsp;xx &amp; " " &amp;&nbsp;yy &amp; " " &amp; zz</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; k=k+1<br/>&nbsp;&nbsp;&nbsp; Next m<br/>&nbsp;&nbsp;&nbsp; <br/>Next ent</p><p>&nbsp; Close #1<br/></p><p>你还没有考虑点在线上的位置,还不能画真正剖线.</p>

yeqb4749659 发表于 2008-7-8 07:59:00

<p>ljq :</p><p>谢谢你的回复!但我怎么考虑点在不在线上呢???真正的画出剖切线的思路是怎样??期待你的赐教!<br/></p>

ljq 发表于 2008-7-20 12:01:00

<p>你得到的点已经在剖线上了,只是还不能画出剖面线,对点进行排序就可以了.</p>
页: [1]
查看完整版本: [求助]我写了一段程序,需要高手修改!