Тема: Проблема - Сравнение двух одинаковых координат возвращает FALSE

> bender
Вот, короче говоря, моя процедура. Так она работает, а вот если сравниватиь координаты не как строки а как я и говорил, то сравнение двух одинаковых координат даст False. Вот почему такое?

Function PointIsBelongToPolyline(ByRef Pnt As Variant, PLineObj As AcadObject, PLineIndex As Integer) As Boolean
'Проверяет является ли точка одной из вершин полилинии
'Возвращает TRUE, если является
    Dim Coords As Variant
    Dim upper As Integer, i As Integer
    Coords = PLineObj.Coordinates
    upper = (UBound(Coords) + 1) / 2
    For i = 0 To upper - 1
        If CStr(Pnt(0)) = CStr(Coords(i * 2)) And CStr(Pnt(1)) = CStr(Coords(i * 2 + 1)) Then
            PLineIndex = i
            PointIsBelongToPolyline = True
            Exit Function
        End If
    Next
    PointIsBelongToPolyline = False
End Function

Variant/Double я так понимаю. Переменные объявлены как Variant, в процессе выполнения через Pnt передаются координаты точки, как массив Double. Также и с Coords.

Re: Проблема - Сравнение двух одинаковых координат возвращает FALSE

через Pnt передаются координаты точки, как массив Double. Также и с Coords.

Ну все правильно. В процедуру передается массив Pnt типа Double (я так понимаю, что из двух элементов), а Coords это строго говоря не массив, это переменная типа Variant. И в каком виде там храняться данные (вернее какого типа) лично я не знаю. Поэтому для того, чтобы сравнивать элементы Pnt и Coords их нужно привести к одному типу. Кстати в данном случае корректнее преобразовывать не к тексту, а к числу (CDbl).
Кажется так.

Re: Проблема - Сравнение двух одинаковых координат возвращает FALSE

Хотя может быть я и не прав. У Coords тип данных 8197, т. е. массив типа Double (vbArray (8192) +  vbDouble (5)).
Подумаю на досуге.

Re: Проблема - Сравнение двух одинаковых координат возвращает FALSE

Я сохраняю координаты точки полилинии в Х-записи
В одной из процедур я сравниваю координаты прочитанные из Х-записи с координатами этой полилинии
во время отладкт в Окне "Watches" у меня показывает
выражение Pnt(0) = Coords(i * 2) возвращает False
выражение CStr(Pnt(0)) = CStr(Coords(i * 2)) возвращает True
у Pnt(0) тип Variant\Double
у Coords(i * 2) тип Variant\Double
В чем ошибка?

Re: Проблема - Сравнение двух одинаковых координат возвращает FALSE

Павел пишет:

у Pnt(0) тип Variant\Double
у Coords(i * 2) тип Variant\Double

Так все таки: Variant или Double? А "ошибка" возникает, скорее всего, из-за не соответствия типов. После приведения к одному типу "ошибка" исчезает.