Как реализовать сетку, похожую на то что в фотошопе

Что такое сетка вообще и как она работает? Это массив квадратов с координатами, при попадании в которые, объект притягивается к координатам?


Ответы (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; 

В результате, если курсором перетаскиваешь какую либо точку и она попадает в круг вокруг любой из точек пересечения сетки, она к ней "прилипает"

→ Ссылка