/// <summary>Scales a size to fit inside the grid.</summary> /// <returns>The re-scaled vector.</returns> /// <param name="scl">The vector to scale.</param> /// <param name="ignoreAxis">The axes to ignore.</param> /// /// Scales a size to the nearest multiple of the grid’s spacing. The parameter *ignoreAxis* makes the function not touch the corresponding coordinate. public override Vector3 ScaleVector3(Vector3 scl, BoolVector3 ignoreAxis) { Vector3 relScale = scl.GFModulo3(spacing); Vector3 newScale = Vector3.zero; for (int i = 0; i <= 2; i++) { newScale[i] = scl[i]; if (relScale[i] >= 0.5f * spacing[i]) { newScale[i] = newScale[i] - relScale[i] + spacing[i]; } else { newScale[i] = newScale[i] - relScale[i]; //if we went too far default to the spacing if (newScale[i] < spacing[i]) { newScale[i] = spacing[i]; } } } for (int i = 0; i < 3; i++) { if (ignoreAxis[i]) { newScale[i] = scl[i]; } } return(newScale); }
public override Vector3 ScaleVector3(Vector3 scl, GFBoolVector3 lockAxis) { Vector3 spacing = new Vector3(); for (int i = 0; i < 2; i++) { spacing[idx[i]] = height; } spacing[idx[2]] = depth; Vector3 relScale = scl.GFModulo3(spacing); Vector3 newScale = new Vector3(); for (int i = 0; i <= 2; i++) { newScale[i] = scl[i]; if (relScale[i] >= 0.5f * spacing[i]) { // Debug.Log ("Grow by " + (spacing.x - relScale.x)); newScale[i] = newScale[i] - relScale[i] + spacing[i]; } else { // Debug.Log ("Shrink by " + relativeScale.x); newScale[i] = newScale[i] - relScale[i]; //if we went too far default to the spacing if (newScale[i] < spacing[i]) { newScale[i] = spacing[i]; } } } for (int i = 0; i < 3; i++) { if (lockAxis[i]) { newScale[i] = scl[i]; } } return(newScale); }
/// <summary>Scales a size vector to fit inside a grid.</summary> /// <returns>The re-scaled vector.</returns> /// <param name="scl">The vector to scale.</param> /// <param name="lockAxis">The axes to ignore.</param> /// /// This method takes in a vector representing a size and scales it to the nearest multiple of the grid’s radius and depth. /// The @c lockAxis parameter lets you ignore individual axes. public override Vector3 ScaleVector3(Vector3 scl, GFBoolVector3 lockAxis){ Vector3 spacing = new Vector3(); for(int i = 0; i < 2; i++){ spacing[idxS[i]] = height; } spacing[idxS[2]] = depth; Vector3 relScale = scl.GFModulo3(spacing); Vector3 newScale = new Vector3(); for (int i = 0; i <= 2; i++){ newScale[i] = scl[i]; if(relScale[i] >= 0.5f * spacing[i]){ // Debug.Log ("Grow by " + (spacing.x - relScale.x)); newScale[i] = newScale[i] - relScale[i] + spacing[i]; } else{ // Debug.Log ("Shrink by " + relativeScale.x); newScale[i] = newScale[i] - relScale[i]; //if we went too far default to the spacing if(newScale[i] < spacing[i]) newScale[i] = spacing[i]; } } for(int i = 0; i < 3; i++){ if(lockAxis[i]) newScale[i] = scl[i]; } return newScale; }
/// <summary>Scales a size to fit inside the grid.</summary> /// <returns>The re-scaled vector.</returns> /// <param name="scl">The vector to scale.</param> /// <param name="ignoreAxis">The axes to ignore.</param> /// /// Scales a size to the nearest multiple of the grid’s spacing. The parameter *ignoreAxis* makes the function not touch the corresponding coordinate. public override Vector3 ScaleVector3(Vector3 scl, GFBoolVector3 ignoreAxis) { Vector3 relScale = scl.GFModulo3(spacing); Vector3 newScale = Vector3.zero; for (int i = 0; i <= 2; i++) { newScale[i] = scl[i]; if (relScale[i] >= 0.5f * spacing[i]) { // Debug.Log ("Grow by " + (spacing.x - relScale.x)); newScale[i] = newScale[i] - relScale[i] + spacing[i]; } else { // Debug.Log ("Shrink by " + relativeScale.x); newScale[i] = newScale[i] - relScale[i]; //if we went too far default to the spacing if (newScale[i] < spacing[i]) { newScale[i] = spacing[i]; } } } for (int i = 0; i < 3; i++) { if (ignoreAxis[i]) { newScale[i] = scl[i]; } } return newScale; }