The issue was that where_on_path uses a resampled curve to get the data from the curve. This leads to disconnects between the curve the user sees and the evaluated location data. To fix this we simply use the actual curve data the user can see. The older code needed a cleanup either way as there were hacks in other parts of the code trying to work around some brokenness. This is now fixed and we no longer need to clamp the evaluation range to 0-1 or make helper functions to make it do what we actually want. Reviewed By: Campbell, Sybren Differential Revision: http://developer.blender.org/D10898
55 lines
1.8 KiB
C++
55 lines
1.8 KiB
C++
/*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License
|
|
* as published by the Free Software Foundation; either version 2
|
|
* of the License, or (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software Foundation,
|
|
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
*
|
|
* The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
|
|
* All rights reserved.
|
|
*/
|
|
#pragma once
|
|
|
|
/** \file
|
|
* \ingroup bke
|
|
*/
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
struct CurveCache;
|
|
struct Object;
|
|
|
|
/* ---------------------------------------------------- */
|
|
/* Curve Paths */
|
|
|
|
int BKE_anim_path_get_array_size(const struct CurveCache *curve_cache);
|
|
float BKE_anim_path_get_length(const struct CurveCache *curve_cache);
|
|
|
|
/* This function populates the 'ob->runtime.curve_cache->anim_path_accum_length' data.
|
|
* You should never have to call this manually as it should already have been called by
|
|
* 'BKE_displist_make_curveTypes'. Do not call this manually unless you know what you are doing.
|
|
*/
|
|
void BKE_anim_path_calc_data(struct Object *ob);
|
|
|
|
bool BKE_where_on_path(const struct Object *ob,
|
|
float ctime,
|
|
float r_vec[4],
|
|
float r_dir[3],
|
|
float r_quat[4],
|
|
float *r_radius,
|
|
float *r_weight);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|