Как привязать элемент пути к ближайшему пути Нурбса на холсте WPF?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как привязать элемент пути к ближайшему пути Нурбса на холсте WPF?

Сообщение Anonymous »

Я работаю над приложением WPF, где мне нужно реализовать функциональность для перетаскивания элементов пути (например, Path ) на Canvas . После того, как элемент будет отброшен, он должен прийти к ближайшему пути Nurbs (или любые другие заранее определенные пути в системе). Тем не менее, я сталкиваюсь с проблемами с точным перехватом перетасного пути к ближайшему пути в коллекции. < /P>
Подробности задачи: < /h3>

[*] Я могу перетаскивать и отбросить элементы Path на Canvas .


Я хочу реализовать функциональность схватки, чтобы убедиться, что элемент перетаскиваемого пути «схватывает» к ближайшему предварительно нарисованному Nurbs Path или Path Когда он достаточно близко.

Логика схватки основана на пороге расстояния. Если перетащенный путь находится на определенном расстоянии от любого пути от списка путей, он должен прийти к нему. < /P>
< /li>
< /ul>
у меня есть следующий код: < /p>

Код: Выделить всё

private void Image_MouseMoveInCanvas(object sender, MouseEventArgs e)
{
if (isDragging && (_draggedElement != null) && (e.LeftButton == MouseButtonState.Pressed) && _well is not null)
{
Point  currentPosition = e.GetPosition(WellCanvas);
double offsetX         = currentPosition.X               - _dragStartPoint.X;
double offsetY         = currentPosition.Y               - _dragStartPoint.Y;
double newLeft         = Canvas.GetLeft(_draggedElement) + offsetX;
double newTop          = Canvas.GetTop(_draggedElement)  + offsetY;
Canvas.SetLeft(element: _draggedElement, length: newLeft);
Canvas.SetTop(element: _draggedElement, length: newTop);
_dragStartPoint = currentPosition;
if (_draggedElement is Path movingPath)
{
// Snapping to the closest NURBS path
SnapToClosestNURBSSpline(movingPath: movingPath, wellPaths: _well.GetAllPath(), threshold: 20);
}
}
}

private void SnapToClosestNURBSSpline(Path movingPath, List
 wellPaths, double threshold)
{
foreach (PathGeometry wellPath in wellPaths)
{
if (IsNearPath(movingPath: movingPath.Data, wellPath: wellPath, threshold: threshold))
{
// Snapping logic to match the position of the moving path to the closest well path
movingPath.Data = wellPath.Clone();
return;
}
}
}

private bool IsNearPath(Geometry movingPath, Geometry wellPath, double threshold)
{
// Using bounds to compare proximity (this might be an issue for complex NURBS paths)
Rect movingBounds = movingPath.Bounds;
Rect wellBounds   = wellPath.Bounds;

return (Math.Abs(movingBounds.Left - wellBounds.Left) 

  Код предназначен для того, чтобы защелкнуть перетаченный путь < /code> element на ближайший в коллекции WellPaths 
, когда они находятся в пределах определенного порога расстояния. Метод не вносит правильный перетаканный элемент до ближайшего пути. < /p>
< /li>
< /ul>
Мой вопрос: < /h3>
Как лучше всего сравнить пути NURBS в этом контексте и выполнить щелчок? Путь должен двигаться, и когда он становится достаточно близко к любому пути в списке (Nurbs или иным образом), он должен прийти к этому пути и соответственно выровнять себя. < /li>
< /ul>
Любые предложения или рекомендации о том, как улучшить логику схватки, будут высоко оценены! Я использую границы путей для сравнения близости, но я подозреваю, что этот подход может работать неправильно для путей Nurbs, поскольку они могут быть более сложными, чем простой путь объекты.
br /> < /li>
Я также пробовал клонировать данные пути и настройка, но щелчок, похоже, не происходит, как ожидалось. < /p>
< /li>
< /ul>

Подробнее здесь: https://stackoverflow.com/questions/794 ... wpf-canvas
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как привязать элемент пути к ближайшему пути Нурбса на холсте WPF?
    Anonymous » » в форуме C#
    0 Ответы
    25 Просмотры
    Последнее сообщение Anonymous
  • MySQL Заказ результатов по ближайшему номеру до заданного номера
    Anonymous » » в форуме Php
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Flutter Googlemap перейти к ближайшему желаемому месту
    Anonymous » » в форуме Android
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • MySQL заказ по ближайшему матчу от частичных матчей
    Anonymous » » в форуме Php
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • WPF - Как привязать элемент списка внутри DataTemplate
    Anonymous » » в форуме C#
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»