Example #1
0
    /// <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);
    }
Example #2
0
    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);
    }
Example #3
0
	/// <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;
	}
Example #4
0
	/// <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;
	}