/// <summary>
 /// 构造函数
 /// </summary>
 /// <param name="_loction">位置</param>
 /// <param name="_shape">点的显示控件</param>
 /// <param name="_layerindex"></param>
 /// <param name="_offsetX"></param>
 /// <param name="_offsetY"></param>
 /// <param name="_label"></param>
 /// <param name="_labelOffsetX"></param>
 /// <param name="_labelOffsetY"></param>
 /// <param name="_needCloseButton"></param>
 /// <param name="_closeButtonWidth"></param>
 /// <param name="_closeButtonHeight"></param>
 /// <param name="_closebuttonOffsetX"></param>
 /// <param name="_closebuttonOffsetY"></param>
 public ParametersForDrawPoint(
     PointLatLng _loction,
     UIElement _shape,
     LayerIndex _layerindex,
     double _offsetX            = 0,
     double _offsetY            = 0,
     UIElement _label           = null,
     double _labelOffsetX       = 0,
     double _labelOffsetY       = 0,
     bool _needCloseButton      = true,
     double _closeButtonWidth   = 12,
     double _closeButtonHeight  = 12,
     double _closebuttonOffsetX = 9,
     double _closebuttonOffsetY = -17)
 {
     loction            = _loction;
     shape              = _shape;
     layerindex         = _layerindex;
     offsetX            = _offsetX;
     offsetY            = _offsetY;
     label              = _label;
     labelOffsetX       = _labelOffsetX;
     labelOffsetY       = _labelOffsetY;
     needCloseButton    = _needCloseButton;
     closeButtonWidth   = _closeButtonWidth;
     closeButtonHeight  = _closeButtonHeight;
     closebuttonOffsetX = _closebuttonOffsetX;
     closebuttonOffsetY = _closebuttonOffsetY;
 }
Пример #2
0
        public override int GetHashCode()
        {
            int hash = 103;

            unchecked
            {
                hash = hash + 29 * StateID.GetHashCode();
                hash = hash * 97 + LayerIndex.GetHashCode();
            }
            return(hash);
        }
        public override bool Equals(object obj)
        {
            if (!(obj is ToolpathPreviewVertex o))
            {
                return(false);
            }

            return
                (CustomColorData.Equals(o.CustomColorData) &&
                 Point.Equals(o.Point) &&
                 Color.Equals(o.Color) &&
                 FillType.Equals(o.FillType) &&
                 LayerIndex.Equals(o.LayerIndex) &&
                 Brightness.Equals(o.Brightness));
        }
Пример #4
0
        public override int GetHashCode()
        {
            int hash = 1;

            if (LayerIndex != 0)
            {
                hash ^= LayerIndex.GetHashCode();
            }
            if (InstanceId != 0)
            {
                hash ^= InstanceId.GetHashCode();
            }
            if (PlayerX != 0)
            {
                hash ^= PlayerX.GetHashCode();
            }
            if (PlayerY != 0)
            {
                hash ^= PlayerY.GetHashCode();
            }
            return(hash);
        }
        /// <summary>
        /// Get the orignal internal and external F0s.
        /// </summary>
        /// <param name="intUtt">Internal utterance.</param>
        /// <param name="extUvSeg">External uvSeg.</param>
        /// <param name="layerIndex">Certain syllable/phone/state's position.</param>
        /// <param name="extNotNullF0">Out float[], External F0s.</param> 
        /// <param name="intNotNullF0Position">Not null F0s' phones' position.</param>
        public static void GetF0(SP.TtsUtterance intUtt, ScriptUvSeg extUvSeg, LayerIndex layerIndex, 
            out float[] extNotNullF0, out List<int> intNotNullF0Position)
        {
            intNotNullF0Position = new List<int>();
            if (extUvSeg.SegType == ScriptUvSegType.Voiced)
            {
                extNotNullF0 = new float[extUvSeg.F0Contour.Contour.Count];
                for (int i = 0; i < extUvSeg.F0Contour.Contour.Count; i++)
                {
                    extNotNullF0[i] = extUvSeg.F0Contour.Contour[i];
                }
            }
            else if (extUvSeg.SegType == ScriptUvSegType.Mixed)
            {
                List<float> extNotNullF0List = new List<float>();
                for (int i = 0; i < extUvSeg.F0Contour.Contour.Count; i++)
                {
                    if (extUvSeg.F0Contour.Contour[i] != 0)
                    {
                        extNotNullF0List.Add(extUvSeg.F0Contour.Contour[i]);
                    }
                }

                extNotNullF0 = new float[extNotNullF0List.Count];
                extNotNullF0List.CopyTo(extNotNullF0);
            }
            else
            {
                extNotNullF0 = null;
            }

            int interF0Index = 0;
            for (int i = 0; i < layerIndex.StartPhone; i++)
            {
                for (int j = 0; j < (int)intUtt.Acoustic.Durations.Column; j++)
                {
                    interF0Index += (int)intUtt.Acoustic.Durations[i][j];
                }
            }

            for (int i = layerIndex.StartPhone; i < layerIndex.EndPhone; i++)
            {
                for (int j = 0; j < (int)intUtt.Acoustic.Durations.Column; j++)
                {
                    for (int k = 0; k < intUtt.Acoustic.Durations[i][j]; k++)
                    {
                        if (intUtt.Acoustic.F0s[interF0Index][0] != 0)
                        {
                            intNotNullF0Position.Add(interF0Index);
                        }

                        interF0Index++;
                    }
                }
            }
        }
            /// <summary>
            /// Find the to be updated syllable/phone/state's position.
            /// </summary>
            /// <param name="stateIndex">State index.</param>
            /// <param name="phoneIndex">Phone index.</param>
            /// <param name="syllableIndex">Syllable index.</param>
            /// <param name="wordIndex">Word index.</param>
            /// <param name="totalPhoneIndex">Phone index array of sentence.</param>
            /// <returns>Certain syllable/phone/state's position.</returns>
            public LayerIndex FindLayerIndex(int stateIndex, int phoneIndex, int syllableIndex,
                int wordIndex, int[][,] totalPhoneIndex)
            {
                LayerIndex layerIndex = new LayerIndex();
                if (wordIndex >= 0)
                {
                    layerIndex.StartPhone =
                        totalPhoneIndex[wordIndex][totalPhoneIndex[wordIndex].GetLength(0) - 1, 1];
                }

                if (wordIndex < totalPhoneIndex.GetLength(0) - 1)
                {
                    layerIndex.EndPhone = totalPhoneIndex[wordIndex + 1][0, 0];
                }
                else
                {
                    layerIndex.EndPhone = layerIndex.StartPhone + 1;
                }

                layerIndex.State = stateIndex;
                if (layerIndex.StartPhone == layerIndex.EndPhone)
                {
                    layerIndex.State = NotUpdateState;
                }
                else if (stateIndex != NotUpdateState)
                {
                    layerIndex.EndPhone = layerIndex.StartPhone;
                }

                return layerIndex;
            }
            /// <summary>
            /// Find the to be updated syllable/phone/state's position.
            /// </summary>
            /// <param name="stateIndex">State index.</param>
            /// <param name="phoneIndex">Phone index.</param>
            /// <param name="syllableIndex">Syllable index.</param>
            /// <param name="wordIndex">Word index.</param>
            /// <param name="totalPhoneIndex">Phone index array of sentence.</param>
            /// <returns>Certain syllable/phone/state's position.</returns>
            public LayerIndex FindLayerIndex(int stateIndex, int phoneIndex, int syllableIndex,
                int wordIndex, int[][,] totalPhoneIndex)
            {
                LayerIndex layerIndex = new LayerIndex();
                layerIndex.StartPhone = totalPhoneIndex[wordIndex][syllableIndex, 0] + phoneIndex;
                layerIndex.EndPhone = layerIndex.StartPhone;
                layerIndex.State = stateIndex;

                return layerIndex;
            }
        /// <summary>
        /// Execute update duration.
        /// </summary>
        /// <param name="intUtt">Internal utterance.</param>
        /// <param name="extTotalDur">Given exteranl duration.</param>
        /// <param name="layerIndex">Certain syllable/phone/state's position.</param>
        /// <returns>True if success, false if not.</returns>
        private bool ExecuteUpdateDuration(SP.TtsUtterance intUtt, uint extTotalDur,
            LayerIndex layerIndex)
        {
            int phoneCount = layerIndex.EndPhone - layerIndex.StartPhone;
            uint[] intDur;
            if (phoneCount == 0)
            {
                intDur = new uint[1];
                intDur[0] = intUtt.Acoustic.Durations[layerIndex.StartPhone][layerIndex.State];
            }
            else
            {
                intDur = new uint[phoneCount * (int)intUtt.Acoustic.Durations.Column];
                int duraIndex = 0;

                for (int i = layerIndex.StartPhone; i < layerIndex.EndPhone; ++i)
                {
                    for (int j = 0; j < (int)intUtt.Acoustic.Durations.Column; ++j)
                    {
                        intDur[duraIndex] = intUtt.Acoustic.Durations[i][j];
                        duraIndex++;
                    }
                }
            }

            uint exceptionTimes;
            bool calcuSuccess = AcousticReplacement.MapDuration(extTotalDur, ref intDur, out exceptionTimes);
            if (!calcuSuccess)
            {
                return false;
            }

            if (phoneCount == 0)
            {
                intUtt.Acoustic.Durations[layerIndex.StartPhone][layerIndex.State] = intDur[0];
            }
            else
            {
                int duraIndex = 0;
                for (int i = layerIndex.StartPhone; i < layerIndex.EndPhone; ++i)
                {
                    for (int j = 0; j < (int)intUtt.Acoustic.Durations.Column; ++j)
                    {
                        intUtt.Acoustic.Durations[i][j] = intDur[duraIndex];
                        duraIndex++;
                    }
                }
            }

            return true;
        }
Пример #9
0
            internal static TriggerCallbackController CreateBox(Vector3 center, Vector3 size, Quaternion rotation, Boolean continuous, LayerIndex layer, Boolean debugVisible = false)
            {
                var obj = new GameObject("BoxCallback");

                obj.transform.position = center;
                obj.transform.rotation = rotation;
                var box = obj.AddComponent <BoxCollider>();

                box.size      = size;
                box.isTrigger = true;
                return(Create(obj, box, continuous, layer, debugVisible));
            }
Пример #10
0
            internal static TriggerCallbackController CreateSphere(Single radius, Vector3 position, Boolean continuous, LayerIndex layer, Boolean debugVisible = false)
            {
                var obj = new GameObject("SphereCallback");

                if (debugVisible)
                {
                    var deb = GameObject.CreatePrimitive(PrimitiveType.Sphere);
                    deb.transform.parent        = obj.transform;
                    deb.transform.localPosition = Vector3.zero;
                    deb.transform.localRotation = Quaternion.identity;
                    deb.transform.localScale    = new Vector3(radius, radius, radius) * 2f;
                    var rb = deb.GetComponent <Rigidbody>();
                    if (rb)
                    {
                        UnityEngine.Object.Destroy(rb);
                    }
                    var col = deb.GetComponent <SphereCollider>();
                    if (col)
                    {
                        UnityEngine.Object.Destroy(col);
                    }
                }


                obj.transform.position = position;
                var sphere = obj.AddComponent <SphereCollider>();

                sphere.radius    = radius;
                sphere.isTrigger = true;
                return(Create(obj, sphere, continuous, layer, debugVisible));
            }
Пример #11
0
            private static TriggerCallbackController Create(GameObject obj, Collider collider, Boolean continuous, LayerIndex layer, Boolean debugVisible)
            {
                obj.layer = layer.intVal;
                var call = obj.AddComponent <TriggerCallbackController>();

                if (continuous)
                {
                    var rb = obj.AddComponent <Rigidbody>();
                    rb.isKinematic            = true;
                    rb.collisionDetectionMode = CollisionDetectionMode.ContinuousSpeculative;
                    call.rb = rb;
                }
                if (debugVisible)
                {
                    call.line = obj.AddComponent <LineRenderer>();
                    var bounds = collider.bounds;
                    call.line.positionCount = 8;
                    var extX    = bounds.extents.x;
                    var extY    = bounds.extents.y;
                    var extZ    = bounds.extents.z;
                    var corners = new[]
                    {
                        bounds.center + new Vector3(-extX, extY, -extZ),
                        bounds.center + new Vector3(-extX, extY, extZ),
                        bounds.center + new Vector3(-extX, -extY, extZ),
                        bounds.center + new Vector3(-extX, -extY, -extZ),
                        bounds.center + new Vector3(extX, -extY, -extZ),
                        bounds.center + new Vector3(extX, -extY, extZ),
                        bounds.center + new Vector3(extX, extY, extZ),
                        bounds.center + new Vector3(extX, extY, -extZ),
                    };

                    call.corners = corners;
                    call.line.SetPositions(corners);
                    call.line.loop       = true;
                    call.line.startWidth = 0.1f;
                    call.line.endWidth   = 0.1f;
                    call.line.startColor = Color.white;
                    call.line.endColor   = Color.white;
                }

                call.col = collider;
                return(call);
            }
Пример #12
0
            internal static TriggerCallbackController CreateCapsule(Vector3 center, CapsuleDirection direction, Single radius, Single height, Quaternion rotation, Boolean continuous, LayerIndex layer, Boolean debugVisible = false)
            {
                var obj = new GameObject("CapsuleCallback");

                obj.transform.position = center;
                obj.transform.rotation = rotation;
                var cap = obj.AddComponent <CapsuleCollider>();

                cap.direction = (Int32)direction;
                cap.radius    = radius;
                cap.height    = height;
                cap.isTrigger = true;
                return(Create(obj, cap, continuous, layer, debugVisible));
            }