Как я могу проверить, находится ли линия или точка внутри или снаружи области
В ModelSpace у меня есть область, ограниченная некоторыми кривыми (соединила их, чтобы иметь AcDbRegion).
Я также нарисовал AcDbLine.
Что мне нужно, это разделить линию, чтобы получить линии только внутри области.
Я знаю, как получить точки пересечения, но как я могу найти, если линия, соединяющая две точки пересечения, находится внутри? или за пределами области?
3 ответа
Если вы хотите сделать это вручную (с помощью алгоритма, который будет работать с любыми API), я бы предложил вам использовать "алгоритм числа обмоток" для расчета точки в многоугольнике. Он не учитывает выпуклости в многоугольнике, но очень быстро реализован правильно, что позволяет мне превзойти API AutoCAD в 2 раза.
Другая возможность - нарисовать временную линию от точки, которую вы тестируете, до бесконечности и проверить, сколько пересечений у нее есть с вашей полилинией. Если количество пересечений нечетное, то вы находитесь внутри ломаной линии; если оно четное, то вы находитесь за пределами полилинии. Если тестирование пересечений выполняется с помощью API приложения, оно должно принимать во внимание вхождение в вершины полилинии.
Вы пробовали BREP API? Попробуйте что-нибудь в строке этого:
Autodesk.AutoCAD.BoundaryRepresentation.Brep brepEnt = new Brep(myRegion);
PointContainment pointCont;
brepEnt.GetPointContainment(thePoint, out pointCont);
if (pointCont == PointContainment.Inside)
{
}
Получить ломаную линию, которая определяет за пределами вашего региона.
Выберите по многоугольнику, используя полилинии региона. Или выберите, пересекая многоугольник, используя вершины полилинии, если вы хотите, чтобы все было внутри или пересекая область.