/// <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(); } } }
void Awake() { gm = GameManager.GetInstance(); SceneName = SceneManager.GetActiveScene().name; level = GetComponentInParent <KeyLevel> (); }
/// <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); } } } } }
void Start() { level = GetComponentInParent <KeyLevel> (); }