你的多边形是用什么来做的,shape控件,如果是的话,你可以把点的坐标和你多边形的坐标判断,不就结了吗?
    也听听其他人的高见!

解决方案 »

  1.   

    用api :
    创建多边形区域,再用ptInRegion判断,very easy!
      

  2.   

    用vb对autocad进行二次开发
    判断图形是否存在槽或者悬臂的vb算法与源程序
    我的想法是--将顶点信息存于数组(已完成),然后对取图形中的点来判断点与多边形的关系,然后通过点在多边形里还是外来判断是槽还是悬臂。
    可否各位能讲讲具体的算法和源程序
      

  3.   

    根据所有点的坐标利用API函数CreatePolygonRgn建立一个区域,然后用tj_aj(程序人生) 讲的方法判断点是否在这个Region里面
      

  4.   

    谢谢TechnoFantasy(www.applevb.com),我vb初学,但我对api不是很懂,
    各位能否具体讲一下编程。这样可能我更容易理解。谢谢啦
      

  5.   

    Private Type POINTAPI
            X As Long
            Y As Long
    End Type
    Private Type RECT
            Left As Long
            Top As Long
            Right As Long
            Bottom As Long
    End TypePrivate Declare Function CreatePolygonRgn Lib "gdi32" (lpPoint As POINTAPI, _
            ByVal nCount As Long, ByVal nPolyFillMode As Long) As Long
    Private Declare Function FillRgn Lib "gdi32" (ByVal hdc As Long, _
            ByVal hRgn As Long, ByVal hBrush As Long) As Long
    Private Declare Function PtInRegion Lib "gdi32" (ByVal hRgn As Long, _
            ByVal X As Long, ByVal Y As Long) As Long
    Private Declare Function CreateSolidBrush Lib "gdi32" (ByVal crColor As Long) _
            As Long
    Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal _
            hObject As Long) As Long
    Private Declare Function GetLastError Lib "kernel32" () As LongConst ALTERNATE = 1
    Const WINDING = 2Dim hRgn As LongPrivate Sub Command1_Click()
        Dim xx(4) As POINTAPI
        Dim lB As Long
        Dim lOld As Long
        
        xx(0).X = 0: xx(0).Y = 0
        xx(1).X = 50: xx(1).Y = 0
        xx(2).X = 50: xx(2).Y = 50
        xx(3).X = 0: xx(3).Y = 50
        xx(4).X = 5: xx(4).Y = 25
        
        '建立不规则区域
        hRgn = CreatePolygonRgn(xx(0), 5, ALTERNATE)
    End Sub上面的代码建立了一个rgn句柄,然后你就可以通过ptInRegion来判断了。
      

  6.   

    Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
        Dim ap As POINTAPI
        
        ap.X = X / 15: ap.Y = X / 15
        '判断光标是否在区域内
        If PtInRegion(hRgn, X / 15, Y / 15) Then
            Picture1.MousePointer = 2
        Else
            Picture1.MousePointer = 0
        End If
    End Sub上面的代码在光标移动时判断光标是否在区域中
      

  7.   

    帮助真大,有几个地方请教一下
    1。ap。x=x、15是什么意思阿
    2。winding=2和Dim lB As Long
        Dim lOld As Long什么意思呢
    3。Picture1.MousePointer = 2
       Picture1.MousePointer = 0两个数字的意义是?
    为什么执行起来好像没什么作用?要把前面的declare做成模块吗?
      

  8.   

    因为VB中默认的控件的Scale是Twips,在一般情况下,15个Twips是一个像素,所以要除以15
    设定MousePoint的目的是为了光标移动到区域内可以变成十字形。
      

  9.   

    technofantasy(www.applevb.com):
    如何将无序的多边形顶点集合,排序成逆时针或者顺时针排序???
    用什么具体的算法呢?
    是否转化为二维数组的排列?具体怎么做呢?谢谢了。
      

  10.   

    我在看其他问题时看到您有一段dxf的显示程序,它这里为什么可以在picturebox上显示点为负的图象?