Пример #1
0
    // ===================================================================================================
    // Tools
    // ===================================================================================================

    public void RecenterBonePivot(NPVoxBoneModel model)
    {
        NPVoxBone[] bones = NPVoxBone.GetRootBones(ref model.AllBones, NPVoxBone.GetBonesInMask(ref model.AllBones, boneMask));
        if (bones.Length == 1)
        {
            Vector3 pivotOrigin        = GetAffectedBox().SaveCenter;
            Vector3 pivotForSingleBone = model.GetAffectedArea(1u << (bones[0].ID - 1)).SaveCenter;
            PivotOffset = pivotForSingleBone - pivotOrigin;
        }
    }
    public System.Func <NPVoxISceneEditable, bool> DrawSceneTool(NPVoxToUnity npVoxToUnity, UnityEngine.Transform transform, int tool)
    {
        // offset

        if (CurrentEditedBone == null)
        {
            return(null);
        }

        NPVoxBoneModel boneModel = GetProduct() as NPVoxBoneModel;

        if (boneModel == null)
        {
            return(null);
        }

        if (lastMask != 1u << (CurrentEditedBone.ID - 1))
        {
            lastMask     = 1u << (CurrentEditedBone.ID - 1);
            currentPivot = npVoxToUnity.ToUnityPosition(boneModel.GetAffectedArea(lastMask).SaveCenter);
        }

        Vector3 offset = npVoxToUnity.ToUnityDirection(CurrentEditedBone.Anchor);

        if (tool == 0)
        {
            offset = npVoxToUnity.ToSaveVoxDirection(Handles.PositionHandle(currentPivot + offset, Quaternion.identity) - currentPivot);
            if (offset != CurrentEditedBone.Anchor)
            {
                return((NPVoxISceneEditable t) =>
                {
                    NPVoxBone.GetBoneByID(ref ((NPVoxSkeletonBuilder)t).AllBones, CurrentEditedBone.ID).Anchor = offset;
                    return true;
                });
            }
        }

        return(null);
    }
Пример #3
0
    public NPVoxBox GetAffectedBox()
    {
        if (Input == null)
        {
            Debug.Log("Input was NULL");
            return(NPVoxBox.INVALID);
        }

        NPVoxBoneModel affectedAreaSourceModel = (Input as NPVoxIModelFactory).GetProduct() as NPVoxBoneModel;

        if (affectedAreaSourceModel == null)
        {
            Debug.Log("Input did not procue a bone model");
            return(NPVoxBox.INVALID);
        }

        if (affectedAreaSourceModel == this.lastAffectedAreaSourceModel && this.lastAffectedAreaSourceModelVersion == affectedAreaSourceModel.GetVersion() && lastAffectedAreaBoneMask == this.boneMask)
        {
            return(lastAffectedArea);
        }

        NPVoxBox affectedArea = affectedAreaSourceModel.GetAffectedArea(boneMask);

        this.lastAffectedArea = affectedArea;
        this.lastAffectedAreaSourceModelVersion = affectedAreaSourceModel.GetVersion();
        this.lastAffectedAreaSourceModel        = affectedAreaSourceModel;
        this.lastAffectedAreaBoneMask           = this.boneMask;

        if (lastAffectedArea == null)
        {
            lastAffectedArea = NPVoxBox.INVALID;
        }

//        Debug.Log("Recalculate Affected Area");

        return(lastAffectedArea);
    }