Ejemplo n.º 1
0
Archivo: P0202.cs Proyecto: slawer/sgt
        /// <summary>
        /// Загрузить параметр из Xml узла
        /// </summary>
        /// <param name="Node">Xml узел в котором сохранен параметр</param>
        public override void Load(XmlNode Node)
        {
            base.Load(Node);
            if (slim.TryEnterWriteLock(500))
            {
                try
                {
                    if (Node != null && Node.HasChildNodes)
                    {
                        if (Node.Name == RootName)
                        {
                            foreach (XmlNode Child in Node.ChildNodes)
                            {
                                switch (Child.Name)
                                {
                                case TModeProcessName:

                                    try
                                    {
                                        mode_proccess = (TModeProcess)Enum.Parse(typeof(TModeProcess), Child.InnerText);
                                    }
                                    catch { }
                                    break;

                                case WeightStatusName:

                                    try
                                    {
                                        weight_status = (WeightStatus)Enum.Parse(typeof(WeightStatus), Child.InnerText);
                                    }
                                    catch { }
                                    break;

                                case last_talblockName:

                                    try
                                    {
                                        last_talblock = float.Parse(Child.InnerText);
                                    }
                                    catch { }
                                    break;

                                default:
                                    break;
                                }
                            }
                        }
                    }
                }
                finally
                {
                    slim.ExitWriteLock();
                }
            }
        }
Ejemplo n.º 2
0
Archivo: P0202.cs Proyecto: slawer/sgt
        protected float last_talblock;          // начение тальблока в предыдущий цикл расчётов при состоянии процесса "над забоем"

        /// <summary>
        /// Инициализирует новый экземпляр класса
        /// </summary>
        /// <param name="p_identifier">Идентификатор параметра</param>
        public P0202(Guid p_identifier)
            : base(p_identifier, "P0202", "Длина инструмента")
        {
            simple = false;

            _value        = 0;
            last_talblock = 0;

            mode_proccess = TModeProcess.mpBase;
            weight_status = WeightStatus.wsClear;
        }
Ejemplo n.º 3
0
Archivo: P0202.cs Proyecto: slawer/sgt
        /// <summary>
        /// Инициализирует новый экземпляр класса
        /// </summary>
        /// <param name="p_identifier">Идентификатор параметра</param>
        public P0202(Guid p_identifier)
            : base(p_identifier, "P0202", "Длина инструмента")
        {
            simple = false;

            _value = 0;
            last_talblock = 0;

            mode_proccess = TModeProcess.mpBase;
            weight_status = WeightStatus.wsClear;
        }
Ejemplo n.º 4
0
Archivo: P0202.cs Proyecto: slawer/sgt
        // -------------- вспомогательные функции --------------

        /// <summary>
        /// Вычисляет текущее значение параметра Длина инструмента
        /// </summary>
        /// <param name="v1">Положение тальблока в текущий момент</param>
        /// <param name="клинья">Положение клиньев в текущий момент</param>
        /// <param name="вес_колонны">Вес на крюке в текущий момент</param>
        /// <param name="locking_weight_hook">Блокировочное значение веса на крюке.</param>
        /// <param name="r_weight">Метод расчета веса на крюке</param>
        /// <returns>Вычисленное значение параметра</returns>
        private float current_length_instrument(P0005 v1, P0012 v2, P0102 v3,
                                                float locking_weight_hook, TechnologicalRegimeWeightHook r_weight)
        {
            if (float.IsNaN(v1.Value))
            {
                return(_value);
            }
            else
            {
                switch (weight_status)
                {
                case WeightStatus.wsClear:

                    if (WeightHookForWeightOrWedges(v3, v2, locking_weight_hook, r_weight) == TProcResult.True)
                    {
                        _value = _value + v1.Value - last_talblock;

                        last_talblock = v1.Value;
                        weight_status = WeightStatus.wsWeight;
                    }
                    return(_value);

                case WeightStatus.wsWeight:

                    if (WeightHookForWeightOrWedges(v3, v2, locking_weight_hook, r_weight) == TProcResult.True)
                    {
                        last_talblock = v1.Value;
                    }
                    else
                    {
                        weight_status = WeightStatus.wsClear;
                    }

                    return(_value);

                case WeightStatus.Default:

                    weight_status = WeightStatus.wsClear;
                    break;

                default:
                    break;
                }

                return(_value);
            }
        }
Ejemplo n.º 5
0
        private static void BuildWeightedVertexChunk(List <VertexChunk> vertexList, List <Vertex> vertices, Dictionary <Vertex, int> weightedVertexIdLookup,
                                                     ref int nextWeightedVertexId, int targetNodeIndex, ref Matrix4x4 targetNodeInvWorldTransform, WeightStatus weightStatus)
        {
            Debug.Assert(!sDisableWeights);

            var nnfVertices = new VertexNNF[vertices.Count];

            for (int i = 0; i < vertices.Count; i++)
            {
                var vertex = vertices[i];
                if (!vertex.Weights.Any(x => x.NodeIndex == targetNodeIndex))
                {
                    // TODO: this vertex was part of the same triangle another weighted vertex was in
                    // to make this work properly I have to know the id of this vertex beforehand
                    //nnfVertices[i].Position = Vector3.Transform( vertex.Position, targetNodeInvWorldTransform );
                    //nnfVertices[i].Normal   = Vector3.TransformNormal( vertex.Normal, targetNodeInvWorldTransform );
                    //var weightByte = 255;
                    //nnfVertices[i].NinjaFlags = ( uint )( weightByte << 16 | nextWeightedVertexId++ & 0xFFFF );
                    //Console.WriteLine( $"{nextWeightedVertexId}" );

                    //if ( !weightedVertexIdLookup.TryGetValue( vertex, out var vertexId ) )
                    //{
                    //    weightedVertexIdLookup[vertex] = nextWeightedVertexId--;
                    //    vertexId = nextWeightedVertexId--;
                    //}

                    if (!weightedVertexIdLookup.TryGetValue(vertex, out var vertexId))
                    {
                        vertexId = nextWeightedVertexId--;
                        weightedVertexIdLookup[vertex] = vertexId;
                    }


                    nnfVertices[i].Position = Vector3.Transform(vertex.Position, targetNodeInvWorldTransform);
                    nnfVertices[i].Normal   = Vector3.TransformNormal(vertex.Normal, targetNodeInvWorldTransform);

                    // Pack 'er up
                    nnfVertices[i].NinjaFlags = ( uint )(0 << 16 | vertexId & 0xFFFF);
                }
                else
                {
                    if (!weightedVertexIdLookup.TryGetValue(vertex, out var vertexId))
                    {
                        vertexId = nextWeightedVertexId--;
                        weightedVertexIdLookup[vertex] = vertexId;
                    }

                    nnfVertices[i].Position = Vector3.Transform(vertex.Position, targetNodeInvWorldTransform);
                    nnfVertices[i].Normal   = Vector3.TransformNormal(vertex.Normal, targetNodeInvWorldTransform);

                    // Pack 'er up
                    var targetNodeWeight = vertex.Weights.First(x => x.NodeIndex == targetNodeIndex);
                    var weightByte       = ( byte )(targetNodeWeight.Weight * 255f);
                    nnfVertices[i].NinjaFlags = ( uint )(weightByte << 16 | vertexId & 0xFFFF);
                }
            }

            vertexList.Add(new VertexNNFChunk(nnfVertices)
            {
                WeightStatus = weightStatus
            });
        }
Ejemplo n.º 6
0
Archivo: P0202.cs Proyecto: slawer/sgt
        /// <summary>
        /// Вычисляет текущее значение параметра Длина инструмента
        /// </summary>
        /// <param name="v1">Положение тальблока в текущий момент</param>
        /// <param name="v2">Вес на крюке в текущий момент</param>
        /// <param name="v3">Положение клиньев в текущий момент</param>
        /// <param name="v4">Положение инструмента (долота) в текущий момент</param>
        /// <param name="v5">Глубина забоя в текущий момент</param>
        /// <param name="v6">Количество опущенных свеч</param>
        /// <param name="currentTime">Текущее технологическое время</param>
        /// <param name="locking_weight_hook">Блокировочное значение веса на крюке</param>
        /// <param name="size_layout_bottom_column">Размер компоновки низа колонны</param>
        /// <param name="r_weight">Метод расчета веса на крюке</param>
        public void Calculate(P0005 v1, P0102 v2, P0012 v3, P0204 v4, P0205 v5, P0203 v6,
                              DateTime currentTime, float locking_weight_hook, float size_layout_bottom_column,
                              float size_layout_top_column, TechnologicalRegimeWeightHook r_weight)
        {
            if (slim.TryEnterWriteLock(300))
            {
                try
                {
                    switch (mode_proccess)
                    {
                    case TModeProcess.mpBase:

                        _value = current_length_instrument(v1, v3, v2, locking_weight_hook, r_weight);
                        break;

                    case TModeProcess.mpSetUser:

                        mode_proccess = TModeProcess.mpBase;
                        if (WeightHookForWeightOrWedges(v2, v3, locking_weight_hook, r_weight)
                            != TProcResult.True || float.IsNaN(v1.Value))
                        {
                            v4.Calculate(_value);
                        }

                        if (_value <= (size_layout_bottom_column + size_layout_top_column))
                        {
                            v6.CorrectLenghtInstrument(0.0f);
                            v6.Calculate(0.0f);
                        }
                        else
                        {
                            float _tmp = _value - (size_layout_bottom_column + size_layout_top_column);
                            v6.CorrectLenghtInstrument(_tmp);
                        }
                        break;

                    case TModeProcess.mpCMDzaboi:

                        mode_proccess = TModeProcess.mpBase;

                        if (WeightHookForWeightOrWedges(v2, v3, locking_weight_hook, r_weight)
                            != TProcResult.True || float.IsNaN(v1.Value))
                        {
                            _value = current_length_instrument(v1, v3, v2, locking_weight_hook, r_weight);
                        }
                        else
                        {
                            last_talblock = v1.Value;
                            weight_status = WeightStatus.wsWeight;

                            _value = v5.Value + v1.Value;

                            if (_value <= (size_layout_bottom_column + size_layout_top_column))
                            {
                                v6.CorrectLenghtInstrument(0.0f);
                                v6.Calculate(0.0f);
                            }
                            else
                            {
                                float _tmp = _value - (size_layout_bottom_column + size_layout_top_column);
                                v6.CorrectLenghtInstrument(_tmp);
                            }
                        }
                        break;

                    case TModeProcess.mpCMDmodifyDepth:

                        if (WeightHookForWeightOrWedges(v2, v3, locking_weight_hook, r_weight)
                            != TProcResult.True || float.IsNaN(v1.Value))
                        {
                            weight_status = WeightStatus.wsClear;
                            if (v5.Value < _value)
                            {
                                _value = v5.Value;
                                if (_value <= (size_layout_bottom_column + size_layout_top_column))
                                {
                                    v6.CorrectLenghtInstrument(0.0f);
                                    v6.Calculate(0.0f);
                                }
                                else
                                {
                                    float _tmp = _value - (size_layout_bottom_column + size_layout_top_column);
                                    v6.CorrectLenghtInstrument(_tmp);
                                }
                            }

                            v4.Calculate(_value);
                        }
                        else
                        {
                            last_talblock = v1.Value;
                            weight_status = WeightStatus.wsWeight;

                            if (v5.Value < (_value - v1.Value))
                            {
                                _value = v5.Value + v1.Value;
                                if (_value <= (size_layout_bottom_column + size_layout_top_column))
                                {
                                    v6.CorrectLenghtInstrument(0.0f);
                                    v6.Calculate(0.0f);
                                }
                                else
                                {
                                    float _tmp = _value - (size_layout_bottom_column + size_layout_top_column);
                                    v6.CorrectLenghtInstrument(_tmp);
                                }
                            }
                        }

                        mode_proccess = TModeProcess.mpBase;
                        break;

                    default:
                        break;
                    }
                }
                finally
                {
                    slim.ExitWriteLock();
                }
            }
        }
Ejemplo n.º 7
0
 public ExerciseParams(MuscleT1 m1, WeightStatus w)
 {
     WeightStat    = w;
     PrimaryMuscle = m1;
 }
Ejemplo n.º 8
0
Archivo: P0202.cs Proyecto: slawer/sgt
        // -------------- вспомогательные функции --------------
        /// <summary>
        /// Вычисляет текущее значение параметра Длина инструмента
        /// </summary>
        /// <param name="v1">Положение тальблока в текущий момент</param>
        /// <param name="клинья">Положение клиньев в текущий момент</param>
        /// <param name="вес_колонны">Вес на крюке в текущий момент</param>
        /// <param name="locking_weight_hook">Блокировочное значение веса на крюке.</param>
        /// <param name="r_weight">Метод расчета веса на крюке</param>
        /// <returns>Вычисленное значение параметра</returns>
        private float current_length_instrument(P0005 v1, P0012 v2, P0102 v3,
            float locking_weight_hook, TechnologicalRegimeWeightHook r_weight)
        {
            if (float.IsNaN(v1.Value))
            {
                return _value;
            }
            else
            {
                switch (weight_status)
                {
                    case WeightStatus.wsClear:

                        if (WeightHookForWeightOrWedges(v3, v2, locking_weight_hook, r_weight) == TProcResult.True)
                        {
                            _value = _value + v1.Value - last_talblock;

                            last_talblock = v1.Value;
                            weight_status = WeightStatus.wsWeight;
                        }
                        return _value;

                    case WeightStatus.wsWeight:

                        if (WeightHookForWeightOrWedges(v3, v2, locking_weight_hook, r_weight) == TProcResult.True)
                        {
                            last_talblock = v1.Value;
                        }
                        else
                        {
                            weight_status = WeightStatus.wsClear;
                        }

                        return _value;

                    case WeightStatus.Default:

                        weight_status = WeightStatus.wsClear;
                        break;

                    default:
                        break;
                }

                return _value;
            }
        }
Ejemplo n.º 9
0
Archivo: P0202.cs Proyecto: slawer/sgt
        /// <summary>
        /// Загрузить параметр из Xml узла
        /// </summary>
        /// <param name="Node">Xml узел в котором сохранен параметр</param>        
        public override void Load(XmlNode Node)
        {
            base.Load(Node);
            if (slim.TryEnterWriteLock(500))
            {
                try
                {
                    if (Node != null && Node.HasChildNodes)
                    {
                        if (Node.Name == RootName)
                        {
                            foreach (XmlNode Child in Node.ChildNodes)
                            {
                                switch (Child.Name)
                                {
                                    case TModeProcessName:

                                        try
                                        {
                                            mode_proccess = (TModeProcess)Enum.Parse(typeof(TModeProcess), Child.InnerText);
                                        }
                                        catch { }
                                        break;

                                    case WeightStatusName:

                                        try
                                        {
                                            weight_status = (WeightStatus)Enum.Parse(typeof(WeightStatus), Child.InnerText);
                                        }
                                        catch { }
                                        break;

                                    case last_talblockName:

                                        try
                                        {
                                            last_talblock = float.Parse(Child.InnerText);
                                        }
                                        catch { }
                                        break;

                                    default:
                                        break;
                                }
                            }
                        }
                    }
                }
                finally
                {
                    slim.ExitWriteLock();
                }
            }
        }
Ejemplo n.º 10
0
Archivo: P0202.cs Proyecto: slawer/sgt
        /// <summary>
        /// Вычисляет текущее значение параметра Длина инструмента
        /// </summary>
        /// <param name="v1">Положение тальблока в текущий момент</param>
        /// <param name="v2">Вес на крюке в текущий момент</param>
        /// <param name="v3">Положение клиньев в текущий момент</param>
        /// <param name="v4">Положение инструмента (долота) в текущий момент</param>
        /// <param name="v5">Глубина забоя в текущий момент</param>
        /// <param name="v6">Количество опущенных свеч</param>
        /// <param name="currentTime">Текущее технологическое время</param>
        /// <param name="locking_weight_hook">Блокировочное значение веса на крюке</param>
        /// <param name="size_layout_bottom_column">Размер компоновки низа колонны</param>
        /// <param name="r_weight">Метод расчета веса на крюке</param>
        public void Calculate(P0005 v1, P0102 v2, P0012 v3, P0204 v4, P0205 v5, P0203 v6,
            DateTime currentTime, float locking_weight_hook, float size_layout_bottom_column, 
            float size_layout_top_column, TechnologicalRegimeWeightHook r_weight)
        {
            if (slim.TryEnterWriteLock(300))
            {
                try
                {
                    switch (mode_proccess)
                    {
                        case TModeProcess.mpBase:

                            _value = current_length_instrument(v1, v3, v2, locking_weight_hook, r_weight);
                            break;

                        case TModeProcess.mpSetUser:

                            mode_proccess = TModeProcess.mpBase;
                            if (WeightHookForWeightOrWedges(v2, v3, locking_weight_hook, r_weight)
                                != TProcResult.True || float.IsNaN(v1.Value))
                            {
                                v4.Calculate(_value);
                            }

                            if (_value <= (size_layout_bottom_column + size_layout_top_column))
                            {
                                v6.CorrectLenghtInstrument(0.0f);
                                v6.Calculate(0.0f);
                            }
                            else
                            {
                                float _tmp = _value - (size_layout_bottom_column + size_layout_top_column);
                                v6.CorrectLenghtInstrument(_tmp);
                            }
                            break;

                        case TModeProcess.mpCMDzaboi:

                            mode_proccess = TModeProcess.mpBase;

                            if (WeightHookForWeightOrWedges(v2, v3, locking_weight_hook, r_weight)
                                != TProcResult.True || float.IsNaN(v1.Value))
                            {
                                _value = current_length_instrument(v1, v3, v2, locking_weight_hook, r_weight);
                            }
                            else
                            {
                                last_talblock = v1.Value;
                                weight_status = WeightStatus.wsWeight;

                                _value = v5.Value + v1.Value;

                                if (_value <= (size_layout_bottom_column + size_layout_top_column))
                                {
                                    v6.CorrectLenghtInstrument(0.0f);
                                    v6.Calculate(0.0f);
                                }
                                else
                                {
                                    float _tmp = _value - (size_layout_bottom_column + size_layout_top_column);
                                    v6.CorrectLenghtInstrument(_tmp);
                                }
                            }
                            break;

                        case TModeProcess.mpCMDmodifyDepth:

                            if (WeightHookForWeightOrWedges(v2, v3, locking_weight_hook, r_weight)
                                != TProcResult.True || float.IsNaN(v1.Value))
                            {
                                weight_status = WeightStatus.wsClear;
                                if (v5.Value < _value)
                                {
                                    _value = v5.Value;
                                    if (_value <= (size_layout_bottom_column + size_layout_top_column))
                                    {
                                        v6.CorrectLenghtInstrument(0.0f);
                                        v6.Calculate(0.0f);
                                    }
                                    else
                                    {
                                        float _tmp = _value - (size_layout_bottom_column + size_layout_top_column);
                                        v6.CorrectLenghtInstrument(_tmp);
                                    }
                                }

                                v4.Calculate(_value);
                            }
                            else
                            {
                                last_talblock = v1.Value;
                                weight_status = WeightStatus.wsWeight;

                                if (v5.Value < (_value - v1.Value))
                                {
                                    _value = v5.Value + v1.Value;
                                    if (_value <= (size_layout_bottom_column + size_layout_top_column))
                                    {
                                        v6.CorrectLenghtInstrument(0.0f);
                                        v6.Calculate(0.0f);
                                    }
                                    else
                                    {
                                        float _tmp = _value - (size_layout_bottom_column + size_layout_top_column);
                                        v6.CorrectLenghtInstrument(_tmp);
                                    }
                                }
                            }

                            mode_proccess = TModeProcess.mpBase;
                            break;

                        default:
                            break;
                    }
                }
                finally
                {
                    slim.ExitWriteLock();
                }
            }
        }