Как реализовать сетку, похожую на то что в фотошопе
Что такое сетка вообще и как она работает? Это массив квадратов с координатами, при попадании в которые, объект притягивается к координатам?
Ответы (1 шт):
Автор решения: Isaev
→ Ссылка
При движении курсора вычисляем расстояние между точкой пересечения линий сетки Ps и координатой курсора Pc. Ks - шаг сетки, Sens - диаметр "чувствительности" сетки
Ps.x := Round(Pc.x / Ks) * Ks;
Ps.y := Round(Pc.y / Ks) * Ks;
я делал функцию
class function TMPunkt.Nearby(punktA, punktB: TPoint; sensitivity: Integer): Boolean;
begin
Result := Sqrt(Sqr(punktA.x - punktB.x) + Sqr(punktA.y - punktB.y)) < sensitivity div 2;
end;
вызываешь её с данными параметрами
if TMPunkt.Nearby(Pс, Ps, Sens) then begin
//приравниваем координаты перетаскиваемой точки к сетке
Pc = Ps;
//и перерисовываем
end;
В результате, если курсором перетаскиваешь какую либо точку и она попадает в круг вокруг любой из точек пересечения сетки, она к ней "прилипает"