}
}
-class ControlPointTransform
-{
-const Matrix4& m_matrix;
-public:
-ControlPointTransform( const Matrix4& matrix ) : m_matrix( matrix ){
-}
-void operator()( Vector3& point ) const {
- matrix4_transform_point( m_matrix, point );
-}
-};
-
-class ControlPointSnap
-{
-float m_snap;
-public:
-ControlPointSnap( float snap ) : m_snap( snap ){
-}
-void operator()( Vector3& point ) const {
- vector3_snap( point, m_snap );
-}
-};
-
-class ControlPointAdd
-{
-RenderablePointVector& m_points;
-public:
-ControlPointAdd( RenderablePointVector& points ) : m_points( points ){
-}
-void operator()( const Vector3& point ) const {
- m_points.push_back( PointVertex( vertex3f_for_vector3( point ), colour_vertex ) );
-}
-};
-
-class ControlPointAddSelected
-{
-RenderablePointVector& m_points;
-public:
-ControlPointAddSelected( RenderablePointVector& points ) : m_points( points ){
-}
-void operator()( const Vector3& point ) const {
- m_points.push_back( PointVertex( vertex3f_for_vector3( point ), colour_selected ) );
-}
-};
-
class CurveEditType
{
public:
}
void transform( const Matrix4& matrix ){
- forEachSelected( ControlPointTransform( matrix ) );
+ forEachSelected([&](Vector3 &point) {
+ matrix4_transform_point(matrix, point);
+ });
}
void snapto( float snap ){
- forEachSelected( ControlPointSnap( snap ) );
+ forEachSelected([&](Vector3 &point) {
+ vector3_snap(point, snap);
+ });
}
void updateSelected() const {
m_selectedRender.clear();
- forEachSelected( ControlPointAddSelected( m_selectedRender ) );
+ forEachSelected([&](const Vector3 &point) {
+ m_selectedRender.push_back(PointVertex(vertex3f_for_vector3(point), colour_selected));
+ });
}
void renderComponents( Renderer& renderer, const VolumeTest& volume, const Matrix4& localToWorld ) const {
m_controlsRender.clear();
m_controlsRender.reserve( m_controlPoints.size() );
- forEach( ControlPointAdd( m_controlsRender ) );
+ forEach([&](const Vector3 &point) {
+ m_controlsRender.push_back(PointVertex(vertex3f_for_vector3(point), colour_vertex));
+ });
m_selectedRender.reserve( m_controlPoints.size() );
}
-typedef MemberCaller<CurveEdit, &CurveEdit::curveChanged> CurveChangedCaller;
+typedef MemberCaller<CurveEdit, void(), &CurveEdit::curveChanged> CurveChangedCaller;
};
class NURBSCurve
{
Signal0 m_curveChanged;
-Callback m_boundsChanged;
+Callback<void()> m_boundsChanged;
public:
ControlPoints m_controlPoints;
ControlPoints m_controlPointsTransformed;
RenderableCurve m_renderCurve;
AABB m_bounds;
-NURBSCurve( const Callback& boundsChanged ) : m_boundsChanged( boundsChanged ){
+NURBSCurve( const Callback<void()>& boundsChanged ) : m_boundsChanged( boundsChanged ){
}
SignalHandlerId connect( const SignalHandler& curveChanged ){
m_controlPointsTransformed = m_controlPoints;
curveChanged();
}
-typedef MemberCaller1<NURBSCurve, const char*, &NURBSCurve::curveChanged> CurveChangedCaller;
+typedef MemberCaller<NURBSCurve, void(const char*), &NURBSCurve::curveChanged> CurveChangedCaller;
};
class CatmullRomSpline
{
Signal0 m_curveChanged;
-Callback m_boundsChanged;
+Callback<void()> m_boundsChanged;
public:
ControlPoints m_controlPoints;
ControlPoints m_controlPointsTransformed;
RenderableCurve m_renderCurve;
AABB m_bounds;
-CatmullRomSpline( const Callback& boundsChanged ) : m_boundsChanged( boundsChanged ){
+CatmullRomSpline( const Callback<void()>& boundsChanged ) : m_boundsChanged( boundsChanged ){
}
SignalHandlerId connect( const SignalHandler& curveChanged ){
m_controlPointsTransformed = m_controlPoints;
curveChanged();
}
-typedef MemberCaller1<CatmullRomSpline, const char*, &CatmullRomSpline::curveChanged> CurveChangedCaller;
+typedef MemberCaller<CatmullRomSpline, void(const char*), &CatmullRomSpline::curveChanged> CurveChangedCaller;
};
const char* const curve_Nurbs = "curve_Nurbs";