private bool CoefficientSetScalePartsMain(int idParts, Library_SpriteStudio6.Control.Animation.Parts.BufferParameterSprite.FlagBitStatus flags, bool flagInvolveChild)
    {
        bool flagSettable = false;

        switch (DataAnimation.TableParts[idParts].Feature)
        {
        case Library_SpriteStudio6.Data.Parts.Animation.KindFeature.ROOT:
        case Library_SpriteStudio6.Data.Parts.Animation.KindFeature.NULL:
//				flagSettable = false;
            break;

        case Library_SpriteStudio6.Data.Parts.Animation.KindFeature.NORMAL:
            flagSettable = true;
            break;

        case Library_SpriteStudio6.Data.Parts.Animation.KindFeature.INSTANCE:
        case Library_SpriteStudio6.Data.Parts.Animation.KindFeature.EFFECT:
//				flagSettable = false;
            break;

        case Library_SpriteStudio6.Data.Parts.Animation.KindFeature.MASK:
            flagSettable = true;
            break;

        case Library_SpriteStudio6.Data.Parts.Animation.KindFeature.JOINT:
        case Library_SpriteStudio6.Data.Parts.Animation.KindFeature.BONE:
        case Library_SpriteStudio6.Data.Parts.Animation.KindFeature.MOVENODE:
        case Library_SpriteStudio6.Data.Parts.Animation.KindFeature.CONSTRAINT:
        case Library_SpriteStudio6.Data.Parts.Animation.KindFeature.BONEPOINT:
        case Library_SpriteStudio6.Data.Parts.Animation.KindFeature.MESH:
        default:
//				flagSettable = false;
            break;
        }

        if (true == flagSettable)
        {
            TableControlParts[idParts].ParameterSprite.Status &= ~(Library_SpriteStudio6.Control.Animation.Parts.BufferParameterSprite.FlagBitStatus.FLIP_COEFFICIENT_X
                                                                   | Library_SpriteStudio6.Control.Animation.Parts.BufferParameterSprite.FlagBitStatus.FLIP_COEFFICIENT_Y
                                                                   | Library_SpriteStudio6.Control.Animation.Parts.BufferParameterSprite.FlagBitStatus.FLIP_COEFFICIENT_TEXTURE_X
                                                                   | Library_SpriteStudio6.Control.Animation.Parts.BufferParameterSprite.FlagBitStatus.FLIP_COEFFICIENT_TEXTURE_Y
                                                                   );
//			TableControlParts[idParts].ParameterSprite.Status |= flags | Library_SpriteStudio6.Control.Animation.Parts.BufferParameterSprite.FlagBitStatus.UPDATE_FLIP_COEFFICIENT;
            TableControlParts[idParts].ParameterSprite.Status |= flags;
        }

        if (true == flagInvolveChild)
        {
            int[] tableIDChild = DataAnimation.TableParts[idParts].TableIDChild;
            int   countChild   = tableIDChild.Length;
            for (int i = 0; i < countChild; i++)
            {
                /* MEMO: Ignore errors. Because child-parts are not always settable. */
                CoefficientSetScalePartsMain(tableIDChild[i], flags, true);
            }
            return(true);               /* Always true */
        }

        return(flagSettable);
    }
    /* ******************************************************** */
    //! Get coefficient for parts' flipping.<br>

    /*!
     * @param	flagFlipX
     *      (Output) Coefficient to attribute "Holizontal Flip"
     * @param	flagFlipY
     *      (Output) Coefficient to attribute "Vertical Flip"
     * @param	flagFlipImageX
     *      (Output) Coefficient to attribute "Image H Flip"
     * @param	flagFlipImageY
     *      (Output) Coefficient to attribute "Image V Flip"
     * @param	idParts
     *      Parts-ID
     * @retval	Return-Value
     *      true == Success<br>
     *      false == Failure (Error)
     *
     * Get coefficient for parts' flipping.<br>
     */
    public bool FlipGetParts(out bool flagFlipX, out bool flagFlipY, out bool flagFlipImageX, out bool flagFlipImageY, int idParts)
    {
        int countParts = CountGetParts();

        if (0 >= countParts)
        {               /* Has no parts */
            goto CoefficientGetScaleParts_ErrorEnd;
        }
        if ((0 > idParts) || (countParts <= idParts))
        {               /* Invalid ID */
            goto CoefficientGetScaleParts_ErrorEnd;
        }

        switch (DataAnimation.TableParts[idParts].Feature)
        {
        case Library_SpriteStudio6.Data.Parts.Animation.KindFeature.ROOT:
        case Library_SpriteStudio6.Data.Parts.Animation.KindFeature.NULL:
            goto CoefficientGetScaleParts_ErrorEnd;

        case Library_SpriteStudio6.Data.Parts.Animation.KindFeature.NORMAL:
            break;

        case Library_SpriteStudio6.Data.Parts.Animation.KindFeature.INSTANCE:
        case Library_SpriteStudio6.Data.Parts.Animation.KindFeature.EFFECT:
            goto CoefficientGetScaleParts_ErrorEnd;

        case Library_SpriteStudio6.Data.Parts.Animation.KindFeature.MASK:
            break;

        case Library_SpriteStudio6.Data.Parts.Animation.KindFeature.JOINT:
        case Library_SpriteStudio6.Data.Parts.Animation.KindFeature.BONE:
        case Library_SpriteStudio6.Data.Parts.Animation.KindFeature.MOVENODE:
        case Library_SpriteStudio6.Data.Parts.Animation.KindFeature.CONSTRAINT:
        case Library_SpriteStudio6.Data.Parts.Animation.KindFeature.BONEPOINT:
        case Library_SpriteStudio6.Data.Parts.Animation.KindFeature.MESH:
        default:
            goto CoefficientGetScaleParts_ErrorEnd;
        }

        Library_SpriteStudio6.Control.Animation.Parts.BufferParameterSprite.FlagBitStatus flags = TableControlParts[idParts].ParameterSprite.Status;
        flagFlipX      = (0 != (flags & Library_SpriteStudio6.Control.Animation.Parts.BufferParameterSprite.FlagBitStatus.FLIP_COEFFICIENT_X));         /* ? true : false */
        flagFlipY      = (0 != (flags & Library_SpriteStudio6.Control.Animation.Parts.BufferParameterSprite.FlagBitStatus.FLIP_COEFFICIENT_Y));         /* ? true : false */
        flagFlipImageX = (0 != (flags & Library_SpriteStudio6.Control.Animation.Parts.BufferParameterSprite.FlagBitStatus.FLIP_COEFFICIENT_TEXTURE_X)); /* ? true : false */
        flagFlipImageY = (0 != (flags & Library_SpriteStudio6.Control.Animation.Parts.BufferParameterSprite.FlagBitStatus.FLIP_COEFFICIENT_TEXTURE_Y)); /* ? true : false */

        return(true);

        CoefficientGetScaleParts_ErrorEnd :;
        flagFlipX      = false;
        flagFlipY      = false;
        flagFlipImageX = false;
        flagFlipImageY = false;

        return(false);
    }
    /* ******************************************************** */
    //! Set coefficient for parts' flipping

    /*!
     * @param	idParts
     *      Parts-ID
     * @param	scaleLocalX
     *      Coefficient to attribute "Holizontal Flip"<br>
     *      true == Flip<br>
     *      false == Not Flip
     * @param	scaleLocalY
     *      Coefficient to attribute "Vertical Flip"<br>
     *      true == Flip<br>
     *      false == Not Flip
     * @param	flagFlipImageX
     *      Coefficient to attribute "Image H Flip"<br>
     *      true == Flip<br>
     *      false == Not Flip
     * @param	flagFlipImageY
     *      Coefficient to attribute "Image V Flip"<br>
     *      true == Flip<br>
     *      false == Not Flip
     * @param	flagInvolveChild
     *      true == Also set to child-parts<br>
     *      false == Set to Only specified part
     * @retval	Return-Value
     *      true == Success<br>
     *      false == Failure (Error)
     *
     * Set coefficient for parts' flipping.<br>
     * Values affects additional to animation data. (not "Overwriting")<br>
     * Each corresponds to the following SpriteStudio6's attribute.<br>
     * - flagFlipX : Holizontal Flip (Same as "Local Scale X *= -1.0f")<br>
     * - flagFlipY : Vertical Flip (Same as "Local Scale Y *= -1.0f")<br>
     * - flagFlipImageX : Image H Flip<br>
     * - flagFlipImageY : Image V Flip<br>
     * <br>
     * This function can use to parts type "Normal" or "Mask".<br>
     * Otherwise error(false) is returned.<br>
     * When "flagInvolveChild" is true, same values are set to settable parts in all child-parts.<br>
     * And always return success(true).<br>
     */
    public bool FlipSetParts(int idParts, bool flagFlipX, bool flagFlipY, bool flagFlipImageX, bool flagFlipImageY, bool flagInvolveChild = false)
    {
        int countParts = CountGetParts();

        if (0 >= countParts)
        {               /* Has no parts */
            return(false);
        }
        if ((0 > idParts) || (countParts <= idParts))
        {               /* Invalid ID */
            return(false);
        }

        Library_SpriteStudio6.Control.Animation.Parts.BufferParameterSprite.FlagBitStatus flags = Library_SpriteStudio6.Control.Animation.Parts.BufferParameterSprite.FlagBitStatus.CLEAR;
        if (true == flagFlipX)
        {
            flags |= Library_SpriteStudio6.Control.Animation.Parts.BufferParameterSprite.FlagBitStatus.FLIP_COEFFICIENT_X;
        }
        if (true == flagFlipY)
        {
            flags |= Library_SpriteStudio6.Control.Animation.Parts.BufferParameterSprite.FlagBitStatus.FLIP_COEFFICIENT_Y;
        }
        if (true == flagFlipImageX)
        {
            flags |= Library_SpriteStudio6.Control.Animation.Parts.BufferParameterSprite.FlagBitStatus.FLIP_COEFFICIENT_TEXTURE_X;
        }
        if (true == flagFlipImageY)
        {
            flags |= Library_SpriteStudio6.Control.Animation.Parts.BufferParameterSprite.FlagBitStatus.FLIP_COEFFICIENT_TEXTURE_Y;
        }

        return(CoefficientSetScalePartsMain(idParts, flags, flagInvolveChild));
    }