如何判断,多线段的顺逆时针之分?
如何判断,多线段的顺逆时针之分?我的问题参看:
<a href="http://bbs.mjtd.com/forum.php?mod=viewthread&tid=12800">http://bbs.mjtd.com/forum.php?mod=viewthread&tid=12800</a> 非常好,有用 Sub rv()
Dim pnt As Variant
Dim ent As AcadEntity
ThisDrawing.Utility.GetEntity ent, pnt, "请选择多段线:"
Dim rev As Boolean
rev = IsClockWise(ent)
If rev Then
Debug.Print "顺时针"
Else
Debug.Print "逆时针"
End If
End Sub
Function IsClockWise(objEntity As AcadEntity) As Boolean
On Error Resume Next
Dim NewObj As Variant
NewObj = objEntity.Offset(-0.01)
Dim Area1 As Double
Dim Area2 As Double
Area1 = objEntity.Area
Area2 = NewObj(0).Area
Dim i As Integer
For i = 0 To UBound(NewObj)
NewObj(i).Delete
Next
If Area1 < Area2 Then IsClockWise = True
End Function
站长的方法很有意思!
如果单纯根据坐标数据判断曲线的方向,在晓东CAD有过讨论,我也提供了一种方法。详见:
http://www.xdcad.net/forum/showthread.php?s=&threadid=34540&perpage=15&display=&pagenumber=1 贴子看过了,方法不错,但在VBA中要达到你所说的目的,方法:
1.使用VLAX操作曲线的方法,先找到最西边的点,然后按一个小距离取前一点和后一点进行判断。
2.找最西边的点的方法:先使用GetBoundingBox方法取外框,找到外框四个点中西边的两个点画一直线,该直线与曲线的相交点就是最西边的点了
使用面积法应该说是最简单的方法,而对于自相交的曲线,确实没有方向可说,要判断是否自相关,在相得NewObj = objEntity.Offset(-0.01)中的面积小于原面积后,还需要再求NewObj = objEntity.Offset(0.01)中的面积是否小于原面积,如果两个偏移方法的面积均小于原面积,则可以判断曲线为自相关。 多谢! 又是你,哈哈,你问的问题我猜到了,因为我也遇到了,而我解决的办法不是去判断顺时针,逆时针,而是两个偏移都生成,然后判断一下两条多段线的长短,长的在外,短的在内,做出取舍就行了~~~~~~~~~~~ 今晚打老虎发表于2003-11-20 10:58:00static/image/common/back.gif又是你,哈哈,你问的问题我猜到了,因为我也遇到了,而我解决的办法不是去判断顺时针,逆时针,而是两个偏移都生成,然后判断一下两条多段线的长短,长的在外,...
你这个方法可行 与面积判断法的同理 <P>mccad朋友的这个方法我有些不懂,能不能解释一下里面的细节,主要是Offset这个方法是设置偏移量的,但是这个怎么又和面积Area关系上了,一头雾水~~</P>
<P>我也遇到了这个问题,非常希望和感谢有人能帮帮我啊~~</P> haitu发表于2006-1-13 13:13:00static/image/common/back.gif
mccad朋友的这个方法我有些不懂,能不能解释一下里面的细节,主要是Offset这个方法是设置偏移量的,但是这个怎么又和面积Area关系上了,一头雾水~~...
<P><BR>用左手或者右手比划一下就知道了啊</P>
<P>四指的方向是线的走向 大拇指的方向表示将偏移的方向 </P>
<P>那顺时针走 则新生成的线围出来的面积要大或小些</P>
<P>反之..~-_-b.</P>
页:
[1]
2