| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > VBA Autocad метод IntersectWith проверка на пересечение.

VBA Autocad метод IntersectWith проверка на пересечение.

Ответ
Поиск в этой теме
Непрочитано 02.07.2020, 13:40 #1
VBA Autocad метод IntersectWith проверка на пересечение.
Mark_Shneider
 
Регистрация: 02.07.2020
Сообщений: 12

Добрый день. Хочу создать цилк для перебора прямых на наличие пересечений. При условии пересечения, прямые обрезаются. Проблема в том, что при отсутствии пересечения переменная принимает значение <No variables>, а при наличии принимает значения координат точки пересечения (XYZ, 3 значения Double). Не могу написать условие проверки заполненности массива. Пробовал создать условие с функциями IsMissing, isEmpty, TypeOf, TypeName. Не помогает.
Код:
[Выделить все]
        
For j = 0 To LastRow - 2
            intPoints1 = vect(I).IntersectWith(line(j), acExtendNone)
                If typeof intPoints1 is Double Then    'Здесь выдает ошибку проверки
                    vect(I).EndPoint = intPoints1
                    GoTo 3
                End If
Просмотров: 5547
 
Непрочитано 02.07.2020, 14:04
#2
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,587


Проверьте количество записей в массиве, прежде чем что то сравнивать...
Boxa вне форума  
 
Автор темы   Непрочитано 02.07.2020, 14:13
#3
Mark_Shneider


 
Регистрация: 02.07.2020
Сообщений: 12


Так когда доходит до этого метода, его содержание меняется с Empty на <No variables>

----- добавлено через 55 сек. -----
Цитата:
Сообщение от Boxa Посмотреть сообщение
Проверьте количество записей в массиве, прежде чем что то сравнивать...
Так когда доходит до этого метода, его содержание меняется с Empty на <No variables>
Mark_Shneider вне форума  
 
Непрочитано 02.07.2020, 14:28
#4
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,405
Отправить сообщение для Александр Ривилис с помощью Skype™


Цитата:
Сообщение от Mark_Shneider Посмотреть сообщение
Так когда доходит до этого метода, его содержание меняется с Empty на <No variables>

----- добавлено через 55 сек. -----


Так когда доходит до этого метода, его содержание меняется с Empty на <No variables>
Если что-то не получается - читаем документацию и смотрим примеры из неё: https://knowledge.autodesk.com/ru/se...0E687-htm.html
Александр Ривилис вне форума  
 
Непрочитано 02.07.2020, 14:34
#5
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,587


Пробовали код из справки?
Код:
[Выделить все]
    ' Find the intersection points between the line and the circle
    Dim intPoints As Variant
    intPoints = lineObj.IntersectWith(circleObj, acExtendNone)
    
    ' Print all the intersection points
    Dim I As Integer, j As Integer, k As Integer
    Dim str As String
    If VarType(intPoints) <> vbEmpty Then
        For I = LBound(intPoints) To UBound(intPoints)
            str = "Intersection Point[" & k & "] is: " & intPoints(j) & "," & intPoints(j + 1) & "," & intPoints(j + 2)
            MsgBox str, , "IntersectWith Example"
            str = ""
            I = I + 2
            j = j + 3
            k = k + 1
        Next
    End If

Последний раз редактировалось Boxa, 02.07.2020 в 14:36. Причина: В следующий раз буду обновлять страницу перед публикацией...
Boxa вне форума  
 
Автор темы   Непрочитано 02.07.2020, 14:44
#6
Mark_Shneider


 
Регистрация: 02.07.2020
Сообщений: 12


Цитата:
Сообщение от Boxa Посмотреть сообщение
Пробовали код из справки?
Код:
[Выделить все]
    ' Find the intersection points between the line and the circle
    Dim intPoints As Variant
    intPoints = lineObj.IntersectWith(circleObj, acExtendNone)
    
    ' Print all the intersection points
    Dim I As Integer, j As Integer, k As Integer
    Dim str As String
    If VarType(intPoints) <> vbEmpty Then
        For I = LBound(intPoints) To UBound(intPoints)
            str = "Intersection Point[" & k & "] is: " & intPoints(j) & "," & intPoints(j + 1) & "," & intPoints(j + 2)
            MsgBox str, , "IntersectWith Example"
            str = ""
            I = I + 2
            j = j + 3
            k = k + 1
        Next
    End If
Я на него и опирался. Он мне нормально находит точку пересечения. Я не могу создать условие проверки этого пересечения
Mark_Shneider вне форума  
 
Непрочитано 02.07.2020, 15:07
#7
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,587


В примере:
If VarType(intPoints) <> vbEmpty Then

У Вас:
If typeof intPoints1 is Double Then

Не смущает?
Boxa вне форума  
 
Автор темы   Непрочитано 02.07.2020, 15:13
#8
Mark_Shneider


 
Регистрация: 02.07.2020
Сообщений: 12


Цитата:
Сообщение от Boxa Посмотреть сообщение
В примере:
If VarType(intPoints) <> vbEmpty Then
Пробовал, он не пустой, а <No variables>.


Цитата:
If typeof intPoints1 is Double Then
Это я уже от балды и безысходности написал
Mark_Shneider вне форума  
 
Непрочитано 02.07.2020, 15:23
#9
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,587


If intPoints Is Nothing Then ?

If Not IsNull(intPoints1) Then ?

If CStr(intPoints1) = "0" Then ?


Я не могу смоделировать Вашу ситуацию, потому гадаю...
Boxa вне форума  
 
Непрочитано 02.07.2020, 15:35
#10
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,405
Отправить сообщение для Александр Ривилис с помощью Skype™


Цитата:
Сообщение от Mark_Shneider Посмотреть сообщение
Я на него и опирался. Он мне нормально находит точку пересечения. Я не могу создать условие проверки этого пересечения
Этот код в вашем случае работает правильно?
Александр Ривилис вне форума  
 
Автор темы   Непрочитано 14.08.2020, 13:28
#11
Mark_Shneider


 
Регистрация: 02.07.2020
Сообщений: 12


Цитата:
Сообщение от Boxa Посмотреть сообщение
If intPoints Is Nothing Then ?

If Not IsNull(intPoints1) Then ?

If CStr(intPoints1) = "0" Then ?


Я не могу смоделировать Вашу ситуацию, потому гадаю...
Перепробовал варианты, ничего не срабатывает, выдает ту же ошибку.

----- добавлено через 21 сек. -----
Цитата:
Сообщение от Александр Ривилис Посмотреть сообщение
Этот код в вашем случае работает правильно?
Нет, не работает.
Mark_Shneider вне форума  
 
Непрочитано 14.08.2020, 14:00
#12
avatarez


 
Регистрация: 08.08.2019
Сообщений: 20


IsArray(intPoints1) пробовали?
avatarez вне форума  
 
Автор темы   Непрочитано 14.08.2020, 14:46
#13
Mark_Shneider


 
Регистрация: 02.07.2020
Сообщений: 12


Цитата:
Сообщение от avatarez Посмотреть сообщение
IsArray(intPoints1) пробовали?
Что-то я поторопился. Не работает.

Последний раз редактировалось Mark_Shneider, 18.08.2020 в 07:05.
Mark_Shneider вне форума  
 
Автор темы   Непрочитано 18.08.2020, 07:36
#14
Mark_Shneider


 
Регистрация: 02.07.2020
Сообщений: 12


Пробовал также
Код:
[Выделить все]
If Not VarType(intPoints2) <> vbEmpty Then
Не срабатывает
Mark_Shneider вне форума  
 
Непрочитано 18.08.2020, 07:53
#15
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,587


Выложите код и двг файл с которым работаете, гадать далее не имеет смысла.
Boxa вне форума  
 
Непрочитано 18.08.2020, 08:43
#16
avatarez


 
Регистрация: 08.08.2019
Сообщений: 20


Потестил код из справки. При отсутствии пересечений intPoints принимает значение массива (0, -1)
Таким образом проверка будет такая

Код:
[Выделить все]
intPoints1 = vect(I).IntersectWith(line(j), acExtendNone)
If UBound(intPoints1) > 0 Then

Последний раз редактировалось avatarez, 19.08.2020 в 09:09.
avatarez вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > VBA Autocad метод IntersectWith проверка на пересечение.

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Пересечение стен и колонн в Autocad Architecture dickens Вертикальные решения на базе AutoCAD 4 20.05.2015 19:21
AutoCAD MEP и производительность ПК при больших объёмах модели. fugi1824 Вертикальные решения на базе AutoCAD 43 27.03.2015 20:29
Стандарт использования AutoCAD в приборостроении (советы и обсуждение) Immortal_6666 AutoCAD 9 06.06.2012 10:11
Какой AutoCAD использовать ? denes AutoCAD 55 12.09.2011 14:29
Проверка орфографии в AutoCAD TROX AutoCAD 5 11.10.2006 12:50