Я пытаюсь выбрать (щелчком мыши) несколько точек на трехмерной треугольной поверхностной сетке с помощью Matlab и сохранить их координаты в матрице.
Это оказалось гораздо более печально известным, чем я ожидал.
Похоже, что обратные вызовы - это то, что здесь нужно. Немного поэкспериментировав, я получил:
global allPoints;
allPoints = [];
patch('Faces',T,'Vertices',V,'FaceColor','white','ButtonDownFcn',@lineCallback)
axis equal;
allPoints
function lineCallback(src,eventData)
global allPoints;
p = eventData.IntersectionPoint;
allPoints = [allPoints;p];
end
Попытка 1:
Вышеупомянутое, хотя и не изящно, позволяет пользователям нажимать на кролика и получать очки. Проблема возникает, когда я хочу выбрать невидимую точку. В таком случае фигура почему-то не позволяет мне повернуть кролика. (Полагаю, потому что для этого я уже щелкаю кнопкой мыши).
Попытка 2:
Когда я пытался заменить ButtonDownFcn на CreateFnc, я получаю сообщение об ошибке:
Not enough input arguments.
Error in tzs>lineCallback (line 14)
p = eventData.IntersectionPoint;
что совершенно логично, поскольку я не определил ни данные события, ни объект. Однако я не могу найти серьезных примеров, которые помогли бы в этом направлении. Кто-нибудь может помочь?
Это не помогает приблизиться к решению, извините
По-видимому, вам удалось «выбрать точки с помощью мыши» ... ваша проблема в первой попытке заключается в том, что вы не можете одновременно вращать фигуру. Это связано с тем, что каждая из функций масштабирования / панорамирования / поворота / данных / кисти фигуры заменяет / изменяет различные keypressfcn\buttondownfcn\etc... для фигуры. Они случайно не сосуществуют с пользовательскими обратными вызовами, пытающимися использовать те же самые события.
Прочтите: Включение обратных вызовов пользователей во время масштабирования / панорамирования. Это немного технически и недокументировано, но вам нужно понимать, что происходит за кулисами, если вы хотите реализовать свой собственный обратный вызов, сосуществующий с одним из этих рисунков mode (Rotate 3D в вашем случае ...)
Это выше моего понимания. Я нашел другой способ
Отлично, если вы нашли способ обойтись. Не стесняйтесь размещать это здесь в качестве ответа, если это сработает.





narginможет помочь вам удалить ошибку при второй попытке ... но я не вижу никакой пользы в размещении обратного вызова с событиемCreateFcn...