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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Как определить самопересечение кривых ?

Как определить самопересечение кривых ?

Ответ
Поиск в этой теме
Непрочитано 22.09.2021, 11:13 #1
Как определить самопересечение кривых ?
kserg
 
Регистрация: 22.04.2004
Сообщений: 269

Интересуют только плоские 2D- 3D- полилинии и сплайны.
Неужели толко через попытку создать REGION / ОБЛАСТЬ ?
Просмотров: 1468
 
Непрочитано 22.09.2021, 11:26
#2
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787


Попробуй vla-intersectwith, оба параметра - указатель на одну и ту же кривую. Из результатов исключишь вершины - и посмотри, что получится.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 22.09.2021, 12:43
#3
kserg


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


(setq
bb (vlax-ename->vla-object (car (entsel)))
dd (vlax-safearray->list (vlax-variant-value (vla-intersectWith bb bb acExtendNone)))
)

123.dwg

на сплайне выдает ошибку
"; ошибка: ActiveX Server возвратил ошибку: Неверный индекс"
kserg вне форума  
 
Непрочитано 22.09.2021, 12:50
#4
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787


Значит нет самопересечений. Попробуй https://forum.dwg.ru/showthread.php?...EF%E8%F1%EE%EA
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 22.09.2021, 12:57
#5
kserg


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


Выходит, если нет ошибок - "Из результатов исключишь вершины - и посмотри, что получится."
Если есть, типа "; ошибка: ActiveX Server возвратил ошибку: Неверный индекс"), значит точно нет самопересечений ?
kserg вне форума  
 
Непрочитано 22.09.2021, 13:12
#6
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787


У меня самопересекающийся сплайн выдал:
Код:
[Выделить все]
 (setq a (vlax-ename->vla-object (Car(entsel))))
(CONV-VLA-TO-LIST (vla-IntersectWith a a acExtendNone)) ; '(5720.92 668.49 0.0)
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 22.09.2021, 13:58
#7
kserg


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


Самопересечение полилинии.dwg
В моем примере (123.dwg) самопересекающаяся - только 2D-полилиния....

Последний раз редактировалось kserg, 22.09.2021 в 14:03.
kserg вне форума  
 
Непрочитано 22.09.2021, 21:25
#8
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787


Тут лично я мимо. В задаче не пересечение, а частичное наложение сегментов. Совершенно другая задача.
Чисто теоретически решить можно: на основании вершин сегмента получить вектор, сравнить его с другими на коллинеарность, построить новые контуры... Но мозгов на эту математику у меня не хватает.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 23.09.2021, 05:27
#9
gumel


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


Цитата:
Сообщение от kserg Посмотреть сообщение
Вложение 240999
В моем примере (123.dwg) самопересекающаяся - только 2D-полилиния....
Конкретно в данном случае просто совпадают координаты некоторых вершин. Смотри узлы 11,12,41 и 42. То есть, часть "неправильных" полилиний можно вычислить когда в ней есть узлы с одинаковыми координатами. (только, скорее всего, надо сравнивать модуль разницы координат с очень маленькой величиной)
gumel вне форума  
 
Автор темы   Непрочитано 23.09.2021, 09:28
#10
kserg


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


На странице
https://www.cadtutor.net/forum/topic...egion-problem/
нашел интересные варианты, которые, думаю, могли бы хотя бы косвенно, отлавливать самопересекающиеся объекты.

Подскажите пожалуйста, возможно ли в код (в конце страницы), приведенный Lee Mac

Код:
[Выделить все]
 (defun c:reg ( / doc ent obj )
   (if (setq ent (car (entsel)))
       (progn
           (setq obj (vlax-ename->vla-object ent)
                 doc (vla-get-activedocument (vlax-get-acad-object))
           )
           (vlax-invoke
               (if (vlax-method-applicable-p doc 'objectidtoobject32)
                   (vla-objectidtoobject32 doc (vla-get-ownerid32 obj))
                   (vla-objectidtoobject   doc (vla-get-ownerid   obj))
               )
               'addregion (list obj)
           )
       )
   )
   (princ)
)
(vl-load-com)
что-либо добавить для отсеивания "нехороших" объектов, для которых метод "addregion" не сработает, и работа функции не прерывалась бы аварийно "; ошибка: AutoCAD.Application: Неверный ввод" ?

Спасибо (сам я с Activex - не очень....).

----- добавлено через ~5 ч. -----
Не очень хотелось командным способом решать проблему,
но применение конструкции, включающей (vl-cmdf "_.REGION" (car (entsel)) "")
на самопересекающихся объектах, позволяет продолжать работу (лиспа), а метод
"addregion" прерывает аварийно работу lisp-конструкции с выдачей
"; ошибка: AutoCAD.Application: Неверный ввод".

Значит (vl-cmdf "_.REGION" (car (entsel)) "")....

Последний раз редактировалось kserg, 23.09.2021 в 09:35.
kserg вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Как определить самопересечение кривых ?

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как определить скорость ветра по СП 20.13330? карлсонъетка Конструкции зданий и сооружений 67 12.02.2019 11:03
Civil 3D 2013-14. Неточное отображение экстремум вертикальных кривых на продольном профиле Ivo25 Вертикальные решения на базе AutoCAD 6 10.09.2013 14:15
помогите определить состояние здания по результатам обследования myp3uk Обследование зданий и сооружений 2 30.12.2012 01:44
Как определить соответствует ТУ требованиям нормативных документов Aragorn Прочее. Архитектура и строительство 1 09.06.2012 21:28