|  |  | @@ -226,6 +226,7 @@ public: | 
		
	
		
			
			|  |  |  | result.addChild(pt_tree, -1, nullptr); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | result.setProperty("wrapxtransform", m_transform_wrap_x, nullptr); | 
		
	
		
			
			|  |  |  | result.setProperty("yrandlerp", m_transform_y_random_linear_interpolation, nullptr); | 
		
	
		
			
			|  |  |  | return result; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | void restoreState(ValueTree state) | 
		
	
	
		
			
				|  |  | @@ -233,6 +234,7 @@ public: | 
		
	
		
			
			|  |  |  | if (state.isValid()==false) | 
		
	
		
			
			|  |  |  | return; | 
		
	
		
			
			|  |  |  | m_transform_wrap_x = state.getProperty("wrapxtransform", false); | 
		
	
		
			
			|  |  |  | m_transform_y_random_linear_interpolation = state.getProperty("yrandlerp", false); | 
		
	
		
			
			|  |  |  | int numnodes = state.getNumChildren(); | 
		
	
		
			
			|  |  |  | if (numnodes > 0) | 
		
	
		
			
			|  |  |  | { | 
		
	
	
		
			
				|  |  | @@ -574,6 +576,7 @@ public: | 
		
	
		
			
			|  |  |  | double m_transform_y_tilt = 0.0; | 
		
	
		
			
			|  |  |  | double m_transform_y_random_amount = 0.2; | 
		
	
		
			
			|  |  |  | double m_transform_y_random_rate = 2.0; | 
		
	
		
			
			|  |  |  | bool m_transform_y_random_linear_interpolation = false; | 
		
	
		
			
			|  |  |  | int m_transform_y_random_bands = 32; | 
		
	
		
			
			|  |  |  | bool m_transform_wrap_x = false; | 
		
	
		
			
			|  |  |  | double m_min_pt_value = 0.0; | 
		
	
	
		
			
				|  |  | @@ -599,17 +602,31 @@ public: | 
		
	
		
			
			|  |  |  | double tilted = shifted+tiltline; | 
		
	
		
			
			|  |  |  | if (m_transform_y_random_amount > 0.0) | 
		
	
		
			
			|  |  |  | { | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | int tableindex = jlimit<int>(0,m_randbuf.size()-1, floor(x * (m_transform_y_random_bands))); | 
		
	
		
			
			|  |  |  | double randamt = jmap(m_randbuf[tableindex], 0.0, 1.0, -m_transform_y_random_amount, m_transform_y_random_amount); | 
		
	
		
			
			|  |  |  | tilted += randamt; | 
		
	
		
			
			|  |  |  | if (m_transform_y_random_linear_interpolation == false) | 
		
	
		
			
			|  |  |  | { | 
		
	
		
			
			|  |  |  | int tableindex = jlimit<int>(0, m_randbuf.size() - 1, floor(x * (m_transform_y_random_bands))); | 
		
	
		
			
			|  |  |  | double randamt = jmap(m_randbuf[tableindex], 0.0, 1.0, -m_transform_y_random_amount, m_transform_y_random_amount); | 
		
	
		
			
			|  |  |  | tilted += randamt; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | else | 
		
	
		
			
			|  |  |  | { | 
		
	
		
			
			|  |  |  | double fracindex = x * m_transform_y_random_bands; | 
		
	
		
			
			|  |  |  | int tableindex0 = jlimit<int>(0, m_randbuf.size() - 1, floor(fracindex)); | 
		
	
		
			
			|  |  |  | int tableindex1 = tableindex0 + 1; | 
		
	
		
			
			|  |  |  | double y0 = m_randbuf[tableindex0]; | 
		
	
		
			
			|  |  |  | double y1 = m_randbuf[tableindex1]; | 
		
	
		
			
			|  |  |  | double interpolated = y0 + (y1 - y0)*fractpart(fracindex); | 
		
	
		
			
			|  |  |  | double randamt = jmap(interpolated, 0.0, 1.0, -m_transform_y_random_amount, m_transform_y_random_amount); | 
		
	
		
			
			|  |  |  | tilted += randamt; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | return jlimit(0.0,1.0,tilted); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | bool isTransformed() const | 
		
	
		
			
			|  |  |  | { | 
		
	
		
			
			|  |  |  | return m_transform_x_shift != 0.0 || m_transform_y_shift != 0.0 | 
		
	
		
			
			|  |  |  | || m_transform_y_scale!=1.0 || m_transform_y_sinus!=0.0 || m_transform_y_tilt!=0.0 || m_transform_y_random_amount!=0.0; | 
		
	
		
			
			|  |  |  | || m_transform_y_scale!=1.0 || m_transform_y_sinus!=0.0 || m_transform_y_tilt!=0.0 | 
		
	
		
			
			|  |  |  | || m_transform_y_random_amount>0.0; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | void updateMinMaxValues() | 
		
	
		
			
			|  |  |  | { | 
		
	
	
		
			
				|  |  | 
 |