Последние сообщения

Последние сообщения

Страницы: [1] 2 3 ... 10
1
просто определить принадлежность точки полигону - это очень дорогая операция, а принадлежность BoundingBox - дешёвая
2
Из всего множества BoundingBox для всех полилиний ты должен найти подмножество, в которые входит точка. А после этого определить входит ли точка реально в контур, а не только в его BoundingBox. Всё!
3
Моя задача такая - быстро узнать входит ли любая точка из коллекции точек в контур любой полилинии из коллекции полилиний.

На стадии тестирования, когда точек мало и полилиний мало всё работает быстро с кодом с форума, называется вроде MakeCountur команда. Там или попала точка на контур или в контур или за контуром. Шикарно, но всё будет плохо, когда будет "реальный" рабочий файл.
Начал искать варианты: наткнулся Rtree и BoundingBox. И что получается Rtree прямоугольники, которые также могут быть не по границам полилинии, и BoundingBox также не по границам объекта.
Теперь получается надо сначала коллекцию Регионов создавать, а потом искать входит ли точка в эту коллекцию?
Наверное да.
4
В чём подвох.
Подвоха здесь никакого нет. В твоём случае задача совершенно другая. И вот когда ты сможешь сформулировать задачу - тогда станет понятно как её решать.
Пока же я догадываюсь (судя по картинке), что у тебя есть штриховка и тебе нужно определить попадает ли точка внутрь штриховки или нет. Такая задача решается другим способом. Нужно найти контур штриховки (если она без отверстий - внутренних контуров) и определить пересекает ли любой луч из точки контур штриховки или нет. Пересечений может быть несколько - если число пересечений нечетное, то точка внутри штриховки, если 0 или четное - вне штриховки. Это упрощенный вариант. Могут быть нюансы.
5
Кто ж знает. Иногда называют, что-то чем-то, а по факту это не соответствует определению.  Или соответствует, но не совсем. Поэтому я и предположил, что параллелепипед это просто контур, иначе не понятно. Я ищу находится ли точка в объекте, надо сравнивать с BoundingBox объекта. А получается зелёная точка попадает в BoundingBox, а в объекте она не находится.

В чём подвох.
6
Его параллелепипед будет фиолетовым или голубым?
А что у тебя фиолетовый и голубой - это параллелепипеды? BoundingBox - это прямоугольный параллелепипед, со сторонами параллельными осям координат: 
Прямоугольный параллелепипед — Википедия

В твоём случае:



7
Можно чисто геометрически: x1 <= X <= x2, y1 <= Y <= y2, z1 <= Z <= z2. Тут X, Y, Z - координаты проверяемой точки. x1, y1, z1 - минимальная точка BoundingBox. x2, y2, z2 - максимальная точка BoundingBox.


Хотел уточнить на картинке Красным например объект. Его параллелепипед будет фиолетовым или голубым? Или вообще другой конфигурации?
Если фиолетовым, то зелёная точка попадёт мимо объекта по условиям x1 <= X <= x2, y1 <= Y <= y2 ?

Или я не прав?



8
VBA / Re: Python & ActiveX/COM Autocad
« Последний ответ от Александр Ривилис 10-12-2017, 15:51:37 »
Небольшое уточнение:

    Autocad 2018 Eng - A или a не работают, нужно ввести al или all в любом регистре.
    Autocad 2018 Rus - соответственно не работает _A и _a, необходимы _al или _all в любом регистре, при этом кириллические в, все в любом регистре работают.
Мой промах. A, _A не срабатывают, так как воспринимаются как _ADD, а не как _ALL. В русской локализации же эквивалент _ALL - это Все, а эквивалент _ADD - Добавить, т.е. достаточно одной буквы для того, чтобы понять какая опция выбора введена.
9
VBA / Re: Python & ActiveX/COM Autocad
« Последний ответ от dlobyntsev 10-12-2017, 15:18:30 »
Вместо CTRL+A нужно жать _A и пробел/ввод (в английской версии можно просто A (латиница), а в русской В (кириллица)).
    Небольшое уточнение:
    • Autocad 2018 Eng - A или a не работают, нужно ввести al или all в любом регистре.
    • Autocad 2018 Rus - соответственно не работает _A и _a, необходимы _al или _all в любом регистре, при этом кириллические в, все в любом регистре работают.
10
AutoCAD .NET API / Re: PolyLine или Arc
« Последний ответ от Александр Пекшев aka Modis 10-12-2017, 11:30:21 »
1. Что будет в коде - решать вам)) Если вам нужна полилиния, то Arc не будет. Там другой механизм - создаете сегмент (точнее вершину) и задаете значение кривизны (bulge). Поищите по форуму - есть темы. А в разделе "статьи" даже есть статья от Дмитрия Загорулькина про Bulge. В любом случае - обсуждалось уже много раз
Длина сегментов высчитывается, на сколько мне известно, через апроксимированные прямые - т.е. кривые делятся на множество маленьких прямых и берется их сумма. Но тут могу ошибаться. Возможно считается и через уравнение длины дуги.
В автокаде в свойствах есть длина всей полилинии. Что просуммирует автокад из второго сегмента. Длину дуги или длину полилинии?
Что??? Уточните вопрос - ничего не понятно. Если это полилиния - то и длина полилинии
2. У полилинии есть направление. Вершины могут идти либо только от начала к концу, либо от конца к началу и никак иначе
3. Перенумеровывать вершины полилинии нельзя
Страницы: [1] 2 3 ... 10