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

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

Алгоритм построения offset для многоугольников

Ответ
Поиск в этой теме
Непрочитано 14.03.2024, 23:40 #1
Алгоритм построения offset для многоугольников
Composter
 
Отопление и вентиляция
 
Москва
Регистрация: 31.10.2008
Сообщений: 445

Добрый день. Хочу сделать свой аналог offset для многоугольников. Но не могу понять алгоритм как это построить. Подскажите.
Есть координаты точек и центр многоугольника. Как понять куда откладывать ?
Вначале думал брать 1 сторону делать перпендикулярный вектор откладывать в 2 стороны от ребра и искать тот отрезок который ближе к центру, но на картинке красные ребра выбиваются из этой логики.
Может кто подскажет?

Миниатюры
Нажмите на изображение для увеличения
Название: pol.jpg
Просмотров: 64
Размер:	45.9 Кб
ID:	262143  

Просмотров: 2199
 
Непрочитано 15.03.2024, 06:12
#2
1958


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


Не мое. Дистанция положительная - офсет вовнутрь, отрицательнвя - наружу.
Код:
[Выделить все]
 (defun c:coff (/ myline dist offLine)
 (vl-load-com)
 (setq myline (vlax-ename->vla-object (car (entsel "\nSelect object to offset: "))))
 (setq dist (getdist "\nOffset Distance : "))
 (setq offLine (vla-Offset myline dist))
 (princ)
)
1958 вне форума  
 
Автор темы   Непрочитано 15.03.2024, 10:13
#3
Composter

Отопление и вентиляция
 
Регистрация: 31.10.2008
Москва
Сообщений: 445


Цитата:
Сообщение от 1958 Посмотреть сообщение
Не мое. Дистанция положительная - офсет вовнутрь, отрицательнвя - наружу.
не совсем понял дистанция от чего и до чего?

я пишу не для автокада, и не на лиспе, поэтому использование встроенного метода vla-Offset никак н объясняет алгоритма
Composter вне форума  
 
Непрочитано 15.03.2024, 10:34
#4
gumel


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


Цитата:
Сообщение от Composter Посмотреть сообщение
Есть координаты точек и центр многоугольника. Как понять куда откладывать ?
А куда надо то? Внутрь или наружу?

Вообще понятие "центр многоугольника" не участвует в команде offset
gumel вне форума  
 
Автор темы   Непрочитано 15.03.2024, 10:54
#5
Composter

Отопление и вентиляция
 
Регистрация: 31.10.2008
Москва
Сообщений: 445


Цитата:
Сообщение от gumel Посмотреть сообщение
А куда надо то? Внутрь или наружу?

Вообще понятие "центр многоугольника" не участвует в команде offset
надо внутрь. это я делаю для revit и на шарпе, поэтому и сказал что нужен сам алгоритм, у меня есть solid , я из него могу получить грань, пройтись по всем ребрам и получить координаты точек каждого ребра, ну центр этого солида я могу спроецировать на грань.
Composter вне форума  
 
Непрочитано 15.03.2024, 11:07
#6
aleshsha


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


Ну может быть как то так
Код:
[Выделить все]
PromptPointResult offsetResult = acad.GetInterface("Specify offset value", "Enter offset distance");

    if(offsetResult == PromptResult.Ok)
    {
        double offset = offsetResult as double?;

        // Применяем смещение
        newObj.TransformBy(Matrix3d.Displacement(0, 0, offset));

        acad.Database.Update(UpdateRecency.Full);
    }
aleshsha вне форума  
 
Непрочитано 15.03.2024, 18:33
#7
румата


 
Регистрация: 06.04.2015
Сообщений: 2,754


Цитата:
Сообщение от Composter Посмотреть сообщение
Добрый день. Хочу сделать свой аналог offset для многоугольников. Но не могу понять алгоритм как это построить. Подскажите.
Миниатюры
Нажмите на изображение для увеличения
Название: Снимок экрана 2024-03-15 183245.png
Просмотров: 154
Размер:	241.4 Кб
ID:	262156  
румата вне форума  
 
Непрочитано 15.03.2024, 19:24
#8
nickname2019


 
Регистрация: 18.11.2019
Сообщений: 1,716


Имхо, аналог автокадовского офсета можно полгода (если не полжизни) писать, так как задача гораздо сложнее, чем кажется. Особенно это касается офсета внутрь фигуры, когда часть сегментов может исчезать из-за недостатка места. А если контур состоит из дуг, эллипсов и сплайнов - тушите свет. Задачка со звездочкой. Подозреваю, что Autodesk ее до конца не решил.
nickname2019 вне форума  
 
Автор темы   Непрочитано 15.03.2024, 19:51
#9
Composter

Отопление и вентиляция
 
Регистрация: 31.10.2008
Москва
Сообщений: 445


ну самими алгоритмом вроде разобрался. тут получается просто если идти по точкам по часовой стрелке то чтобы делать копию отрезка во внутрь фигуры надо построить перпендикулярный вектор в сторону правой руки и отложить условно 200мм если наружу то в сторону левой руки.

осталось теперь понять как отсекать куски условно меньше 400 мм(200мм*2 ) толщиной. у меня только прямые, хоть это легче

Последний раз редактировалось Composter, 15.03.2024 в 20:22.
Composter вне форума  
 
Непрочитано 16.03.2024, 02:15
#10
Нубий-IV

Инженер-философ
 
Регистрация: 24.04.2019
Хабаровск
Сообщений: 2,082


Цитата:
Сообщение от Composter Посмотреть сообщение
тут получается просто
Не может быть. Как минимум, возможны, например, самопересечения, когда контур распадается на несколько. И слишком большой отступ, когда невозможно построить результат вообще. И сегменты нулевой длины бывают, по ошибке (хотя, возможно, в ревите такое не встретится). И сплайны, тогда и кривые, и точки пересечения вычислять немного сложнее будет. И допуски на плавающую точку надо аккуратно обрабатывать. Честный алгортим просто обязан быть очень длинным.

Тут проще поискать в книжках по машинной графике, или погуглить "offset polygon algorithm". На гитхабе, например, есть какие-то реализации. Вот первая попавшаяся: https://github.com/Stanko/offset-polygon - там в интерактивном демо видно, что самопересечения результата не отслеживаются, и легко получаются глюкавые ответы, но даже там уже полторы сотни строк есть.
Нубий-IV вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Алгоритм построения offset для многоугольников



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Какой язык перспективен для инженера-конструктора с условием The_Mercy_Seat Программирование 705 17.03.2021 14:19
Алгоритм построения стропильной системы в Revit 2016 Tyhig Revit 8 07.11.2017 15:30
Алгоритм построения картограммы земляных массс методом квадратов в civil 3D 2011 на основе dwg схемы hag1989 Вертикальные решения на базе AutoCAD 4 18.05.2011 04:20
Распишите алгоритм построения чертежа DEviLPr0 AutoCAD 6 03.10.2010 16:38
Задание расч.сх. многоэтажного здания в SCAD. Правильный алгоритм построения? kinohd SCAD 8 24.03.2009 23:10