Ejemplo n.º 1
0
        /// <summary>
        /// Метод выдавливания клавиш.
        /// </summary>
        /// <param name="part">Указатель на компонент.</param>
        /// <param name="entity">Указатель на эскиз.</param>
        private void KeyExtruse(ksPart part, ksEntity entity,
                                KeyboardParametersStorage data, bool isWhiteKey,
                                KeyLevel keyLevel = KeyLevel.Top)
        {
            var entityExtrusion = (ksEntity)part.NewEntity((short)Obj3dType.o3d_bossExtrusion);

            if (entityExtrusion != null)
            {
                var extrusionDefinition = (ksBossExtrusionDefinition)entityExtrusion.GetDefinition();
                if (extrusionDefinition != null)
                {
                    extrusionDefinition.directionType = (short)Direction_Type.dtNormal;
                    if (isWhiteKey)
                    {
                        entityExtrusion.name = "Выдавливание белых клавиш";
                        entityExtrusion.SetAdvancedColor(Color.FromArgb(254,
                                                                        254, 254).ToArgb(), .0, .0, .0, .0, 100, 100);

                        var keyLevelDictionary = new Dictionary <KeyLevel, double>()
                        {
                            { KeyLevel.Bottom, 1.5 },
                            { KeyLevel.Middle, data.KeyboardType == KeyboardType.Piano
                                                ? 2.0
                                                : 0.5 },
                            { KeyLevel.Top, 0.1 }
                        };
                        extrusionDefinition.SetSideParam(true,
                                                         (short)End_Type.etBlind,
                                                         keyLevelDictionary[keyLevel]);
                    }
                    else
                    {
                        entityExtrusion.name = "Выдавливание черных клавиш";
                        entityExtrusion.SetAdvancedColor(Color.FromArgb(20,
                                                                        20, 20).ToArgb(), .0, .0, .0, .0, 100, 100);
                        extrusionDefinition.SetSideParam(true,
                                                         (short)End_Type.etBlind, 3.4);
                    }
                    extrusionDefinition.SetThinParam(false, 0, 0, 0);
                    extrusionDefinition.SetSketch(entity);
                    entityExtrusion.Create();
                }
            }
        }
Ejemplo n.º 2
0
 void Awake()
 {
     gm        = GameManager.GetInstance();
     SceneName = SceneManager.GetActiveScene().name;
     level     = GetComponentInParent <KeyLevel> ();
 }
Ejemplo n.º 3
0
        /// <summary>
        /// Метод, рисующий эскиз клавиш.
        /// </summary>
        /// <param name="document3D">Указатель на активный документ КОМПАС-3D.</param>
        /// <param name="data">Указатель на данные.</param>
        /// <param name="currentKey">Текущая клавиша.</param>
        /// <param name="isWhiteKey">Принадлежность к белым клавишам.</param>
        /// <param name="keyboardHeight">Высота клавиатурной секции.</param>
        /// <param name="keyLevel">Уровень клавиши.</param>
        private void KeyPartBuild(ksDocument3D document3D,
                                  KeyboardParametersStorage data, KeyNote currentKey,
                                  bool isWhiteKey, double keyboardHeight,
                                  KeyLevel keyLevel = KeyLevel.Top)
        {
            // Установка фронтального отступа в зависимости от выбранного
            // уровня клавиш.
            //
            double marginTop;

            var keyMarginTopDictionary = new Dictionary <KeyLevel, double>()
            {
                { KeyLevel.Bottom, 3.6 },
                { KeyLevel.Middle, 0.6 },
                { KeyLevel.Top, 0.5 }
            };

            marginTop = keyMarginTopDictionary[keyLevel];

            // Сброс отступа.
            _marginLeft = -(data.BodyLength / 2) + (data.BoardLength / 2)
                          - _space;

            part = (ksPart)document3D.GetPart((short)Part_Type.pTop_Part);
            var entityOffsetPlane = (ksEntity)part.NewEntity((short)Obj3dType.o3d_planeOffset);
            var entitySketch      = (ksEntity)part.NewEntity((short)Obj3dType.o3d_sketch);

            if (entityOffsetPlane != null)
            {
                var offsetDef = (ksPlaneOffsetDefinition)entityOffsetPlane.GetDefinition();
                if (offsetDef != null)
                {
                    offsetDef.direction = true;
                    offsetDef.offset    = data.BodyHeight - keyboardHeight;

                    var basePlane = (ksEntity)part.GetDefaultEntity((short)Obj3dType.o3d_planeXOY);
                    basePlane.name = "Начальная плоскость";
                    offsetDef.SetPlane(basePlane);

                    entityOffsetPlane.name   = "Смещенная плоскость";
                    entityOffsetPlane.hidden = true;
                    entityOffsetPlane.Create();
                    var sketchDef = (ksSketchDefinition)entitySketch.GetDefinition();
                    if (sketchDef != null)
                    {
                        sketchDef.SetPlane(entityOffsetPlane);
                        entitySketch.Create();
                        var sketchEdit = (ksDocument2D)sketchDef.BeginEdit();

                        if (isWhiteKey)
                        {
                            entitySketch.name = "Белые клавиши";
                            for (int count = 0; count < data.WhiteKeyAmount;
                                 count++)
                            {
                                KeyLineDraw(sketchEdit, data, currentKey,
                                            count, marginTop).Build();
                                _marginLeft = _marginLeft - 2.2 - _space;

                                // Сброс последовательности клавиш.
                                //
                                if (currentKey == KeyNote.B)
                                {
                                    currentKey = KeyNote.C;
                                }
                                else
                                {
                                    currentKey++;
                                }
                            }
                        }
                        else
                        {
                            entitySketch.name = "Черные клавиши";
                            for (int count = 0; count < data.BlackKeyAmount;
                                 count++)
                            {
                                // Для ровного отображения черных клавиш
                                // относительно белых, необходимо задать
                                // отступ после каждой клавиши.
                                //
                                if (count == 0 && currentKey == KeyNote.Db)
                                {
                                    _marginLeft = _marginLeft - 2.2 - _space;
                                }
                                else if (currentKey == KeyNote.Db ||
                                         currentKey == KeyNote.Gb)
                                {
                                    _marginLeft = _marginLeft - (2.2
                                                                 + _space) * 2;
                                }
                                else
                                {
                                    _marginLeft = _marginLeft - 2.2
                                                  - _space;
                                }
                                KeyLineDraw(sketchEdit, currentKey).Build();

                                // Следующей после СИ-БЕМОЛЬ черной клавишей
                                // является РЕ-БЕМОЛЬ.
                                //
                                if (currentKey == KeyNote.Bb)
                                {
                                    currentKey = KeyNote.Db;
                                }
                                else
                                {
                                    currentKey++;
                                }
                            }
                        }
                        sketchDef.EndEdit();
                        if (isWhiteKey)
                        {
                            KeyExtruse(part, entitySketch, data,
                                       isWhiteKey, keyLevel);
                        }
                        else
                        {
                            KeyExtruse(part, entitySketch, data,
                                       isWhiteKey);
                            BlackKeyCutSketch(document3D, data);
                        }
                    }
                }
            }
        }
Ejemplo n.º 4
0
 void Start()
 {
     level = GetComponentInParent <KeyLevel> ();
 }