void Clone2D(axisToUse axis1, axisToUse axis2)
    {
        Vector3 translationToUse1 = new Vector3(0,0,0);
        Vector3 rotationToUse1 = new Vector3(0,0,0);
        Vector3 scaleToUse1 = new Vector3(1,1,1);
        
        Vector3 translationToUse2 = new Vector3(0,0,0);
        Vector3 rotationToUse2 = new Vector3(0,0,0);
        Vector3 scaleToUse2 = new Vector3(1,1,1);
        
        int numCopies1 = 0;
        int numCopies2 = 0;
        
        bool newParent = false;
        
        GameObject parentObject = GameObject.Find(parentName);
        
        if(!parentObject)
        {
            parentObject = new GameObject(parentName);
            newParent = true;
        }
        
        if(addOriginalToParent)
        {
            Selection.activeGameObject.transform.parent = parentObject.transform;
        }


        GameObject currentSelection = Selection.activeGameObject;
        
        switch(axis1)
        {
            case axisToUse.USEX:
                translationToUse1 = cloneTranslationX;
                rotationToUse1 = cloneRotationX;
                scaleToUse1 = cloneScaleX;
                numCopies1 = numberOfCopiesX;
            break;
                
            case axisToUse.USEY:
                translationToUse1 = cloneTranslationY;
                rotationToUse1 = cloneRotationY;
                scaleToUse1 = cloneScaleY;
                numCopies1 = numberOfCopiesY;
            break;
                
            case axisToUse.USEZ:
                translationToUse1 = cloneTranslationZ;
                rotationToUse1 = cloneRotationZ;
                scaleToUse1 = cloneScaleZ;
                numCopies1 = numberOfCopiesZ;
            break;
        }
        
        switch(axis2)
        {
            case axisToUse.USEX:
                translationToUse2 = cloneTranslationX;
                rotationToUse2 = cloneRotationX;
                scaleToUse2 = cloneScaleX;
                numCopies2 = numberOfCopiesX;
            break;
                
            case axisToUse.USEY:
                translationToUse2 = cloneTranslationY;
                rotationToUse2 = cloneRotationY;
                scaleToUse2 = cloneScaleY;
                numCopies2 = numberOfCopiesY;
            break;
                
            case axisToUse.USEZ:
                translationToUse2 = cloneTranslationZ;
                rotationToUse2 = cloneRotationZ;
                scaleToUse2 = cloneScaleZ;
                numCopies2 = numberOfCopiesZ;
            break;
        }

        Vector3 selectionScale = currentSelection.transform.localScale;
                
        for(int i = 0; i < numCopies1; i++)
        {
            for(int j = 0; j < numCopies2; j++)
            {
                GameObject clone = Instantiate(currentSelection) as GameObject;
            
                if(uniqueCloneNames)
                    clone.name = currentSelection.name + "_" + i + "_" + j;
                else
                    clone.name = currentSelection.name;
                
                if(newParent && !addOriginalToParent)
                {
                    clone.transform.Translate( (translationToUse1 * i) + (translationToUse2 * j) );
                        
                    if(incrementalRotation)
                        clone.transform.Rotate( (rotationToUse1 * i) + (rotationToUse2 * j) );
                    else
                        clone.transform.Rotate( rotationToUse1 + rotationToUse2 );
                        
                    if(scaleToUse1 != Vector3.one && scaleToUse1 != Vector3.zero)
                    {
                        if(incrementalScale)
                            clone.transform.localScale += ( ( new Vector3(selectionScale.x * scaleToUse1.x, selectionScale.y * scaleToUse1.y, selectionScale.z * scaleToUse1.z) ) * i);
                        else
                            clone.transform.localScale += ( ( new Vector3(selectionScale.x * cloneScaleX.x, selectionScale.y * cloneScaleX.y, selectionScale.z * cloneScaleX.z) ) );
                    }
                                                
                    if(scaleToUse2 != Vector3.one && scaleToUse2 != Vector3.zero)
                    {
                        if(incrementalScale)
                            clone.transform.localScale += ( ( new Vector3(selectionScale.x * scaleToUse2.x, selectionScale.y * scaleToUse2.y, selectionScale.z * scaleToUse2.z) ) * j);
                        else
                             clone.transform.localScale += ( ( new Vector3(selectionScale.x * scaleToUse2.x, selectionScale.y * scaleToUse2.y, selectionScale.z * scaleToUse2.z) ) );
                    }


                }
                else
                {
                    clone.transform.Translate( (translationToUse1 * (i + 1)) + (translationToUse2 * (j + 1)) );
                        
                        if(incrementalRotation)
                            clone.transform.Rotate( (rotationToUse1 * (i + 1)) + (rotationToUse2 * (j + 1)) );
                        else
                            clone.transform.Rotate( rotationToUse1 + rotationToUse2 );
                        
                        if(scaleToUse1 != Vector3.one && scaleToUse1 != Vector3.zero)
                        {
                            if(incrementalScale)
                                clone.transform.localScale += ( ( new Vector3(selectionScale.x * scaleToUse1.x, selectionScale.y * scaleToUse1.y, selectionScale.z * scaleToUse1.z) ) * (i + 1) );
                            else
                                clone.transform.localScale += ( ( new Vector3(selectionScale.x * scaleToUse1.x, selectionScale.y * scaleToUse1.y, selectionScale.z * scaleToUse1.z) ) );
                        } 
                                            
                        
                        if(scaleToUse2 != Vector3.one && scaleToUse2 != Vector3.zero)
                        {
                            if(incrementalScale)                            
                                clone.transform.localScale += ( ( new Vector3(selectionScale.x * scaleToUse2.x, selectionScale.y * scaleToUse2.y, selectionScale.z * scaleToUse2.z) ) * (j + 1) );
                            else
                                clone.transform.localScale += ( ( new Vector3(selectionScale.x * scaleToUse2.x, selectionScale.y * scaleToUse2.y, selectionScale.z * scaleToUse2.z) ) );
                        }
        
                }
                
                if(AddToParent)
                        clone.transform.parent = parentObject.transform;
                
            }//j for
            
        }//i for

        
    }
    void Clone1D(axisToUse axis)
    {
        
        Vector3 translationToUse = new Vector3(0,0,0);
        Vector3 rotationToUse = new Vector3(0,0,0);
        Vector3 scaleToUse = new Vector3(1,1,1);
        int numCopies = 0;
        
        bool newParent = false;
        
        GameObject parentObject = GameObject.Find(parentName);
        
        if(!parentObject)
        {
            parentObject = new GameObject(parentName);
            newParent = true;
        }
        
        if(addOriginalToParent)
        {
            Selection.activeGameObject.transform.parent = parentObject.transform;
        }


        GameObject currentSelection = Selection.activeGameObject;
        
        switch(axis)
        {
            case axisToUse.USEX:
                translationToUse = cloneTranslationX;
                rotationToUse = cloneRotationX;
                scaleToUse = cloneScaleX;
                numCopies = numberOfCopiesX;
            break;
                
            case axisToUse.USEY:
                translationToUse = cloneTranslationY;
                rotationToUse = cloneRotationY;
                scaleToUse = cloneScaleY;
                numCopies = numberOfCopiesY;
            break;
                
            case axisToUse.USEZ:
                translationToUse = cloneTranslationZ;
                rotationToUse = cloneRotationZ;
                scaleToUse = cloneScaleZ;
                numCopies = numberOfCopiesZ;
            break;
        }
     
        Vector3 selectionScale = currentSelection.transform.localScale;
                
        for(int i = 0; i < numCopies; i++)
        {
            GameObject clone = Instantiate(currentSelection) as GameObject;
            
            if(uniqueCloneNames)
                clone.name = currentSelection.name + i;
            else
                clone.name = currentSelection.name;
                
            
            if(newParent && !addOriginalToParent)
            {
                clone.transform.Translate( translationToUse  * i);
                        
                if(incrementalRotation)
                    clone.transform.Rotate( rotationToUse * i );
                else
                    clone.transform.Rotate( rotationToUse );
                        
                        
                if(scaleToUse != Vector3.one && scaleToUse != Vector3.zero)
                {
                    if(incrementalScale)
                        clone.transform.localScale = ( scaleToUse * i);
                    else
                        clone.transform.localScale = ( scaleToUse );
                }
                                                    
            }
            else
            {
                clone.transform.Translate( translationToUse * (i + 1) );
                        
                if(incrementalRotation)
                    clone.transform.Rotate( rotationToUse * (i + 1) );
                else
                    clone.transform.Rotate( rotationToUse );
                        
                if(scaleToUse != Vector3.one && scaleToUse != Vector3.zero)
                {
                    if(incrementalScale)
                        clone.transform.localScale += ( scaleToUse * (i + 1) );
                    else
                        clone.transform.localScale += ( scaleToUse );
                } 
                                            
                        
            }
            
                        
            if(AddToParent)
                clone.transform.parent = parentObject.transform;
        }
        
       
    }