[求助]有将若干直线段合并成二维多义线的方法吗?
绘制一图形,该图形形成是用若干直线段编程(VBA)连接而成,现在想将该图形做成一三维实体,首先要先形成一面域。问题是直线段数目太多,为能方便构建一面域,想将这些直线段形成一条二维多义线。请高手看看怎样编程? 生成面域 AddRegion 方法 所需要提供的参数是对象数组,这些对象数量没有限制,只要所提供的对象能够形成首尾封闭的图形就行,而且可以形成一个或多个封闭图形。而多少个封闭图形就可以生成多少个面域。所以不必去考虑线段的多少,也不必自己编程去形成封闭图形。
http://www.mjtd.com/object/acad2004/idh_addregion.htm
明总说得也是。。。。
明总有空的话帮我看看我自编的这个程序。这个程序是我自编的一部分,为使看的清楚,我删掉了许多部分,保留了关键的语句。这个程序是凸轮的自动化设计和模拟等。。。。我想将该凸轮图形形成三维实体,所以提出上面的问题,这个图形是由许多直线段连接而成,由userform1窗体的精度所决定(一周360度,若精度设为0.5度,则直线段有720段),本想变成一二维多义线,好方便做面域。经过明总指点,觉得也可以不做二维多义段。
问题是这图形绘制出来后在首尾点并没有自我封闭,明总帮我看看这程序里该怎么修改?
图如下:
程序:
那是因为你第一个循环没有画线,因为第一个循环还没有 firstpt0 的值。所以你必须把第一个点保存起来以做便与最后一个点形成一条直线。
明总能否明示一下程序代码该怎样修改?
本帖最后由 作者 于 2003-10-7 19:57:08 编辑谢谢
曲线最后一个点怎么去找呢?要想封闭最后一段线段,得要找到最后形成的那个点。
改一下,应该还是明总说得第一个该怎样找的问题?我不知怎么去保存第一点。 For u = 0 To 360 Step incrim
Call Module1.计算sdsdds
If k = -1 Then
ptt = ThisDrawing.Utility.PolarPoint(bp1, pi / 2 + beta0 + cetaC, rouC)
ElseIf k = 1 Then
ptt = ThisDrawing.Utility.PolarPoint(bp1, pi / 2 - beta0 - cetaC, rouC)
End If
If IsArray(firstpt0) Then
Set objline = ThisDrawing.ModelSpace.AddLine(pt0t, ptt) '实际轮廓线
objline.Color = acRed
Else
firstpt0 = pt0t
End If
pt0t = ptt
Next u
也就是在程序最后几句离该怎样保存第一点?然后在next u 后再加一直线段连接ptt与第一点。 将
firstpt0 = pt0t
改为
firstpt0 = ptt
在 Next u后加上:
If IsArray(firstpt0) Then
Set objline = ThisDrawing.ModelSpace.AddLine(firstpt0, pt0t) '实际轮廓线
objline.Color = acRed
End If
谢谢明总!!
其实按照你的程序,可以使用动态数组的方法保存顶点,然后通过添加二维多段线的方法来生成封闭边界。 另外,看了你的程序有点乱。其实编程可以自己写些自定义函数,通过函数来传递参数并返回值,这样的思路会清晰一点。
象你这样一直在使用Call来调用其它过程,而该过程计算些什么就很难看懂了。
页:
[1]
2