public override void Apply(Staff staff, PrintSuggestion newElement) { if (!newElement.IsSystemBreak) { return; } var lastMeasure = staff.Measures.LastOrDefault(); if (lastMeasure == null) { return; } var system = GetSystem(staff); if (system != staff.Score.Systems.LastOrDefault()) { return; } system = new StaffSystem(staff.Score); staff.Score.Pages.Last().Systems.Add(system); lastMeasure.System = system; }
public void MoveLayout(StaffSystem system, Point delta) { foreach (var staffFragment in system.Staves) { var systemElements = OwnershipDictionary.Where(d => d.Value == staffFragment).Select(d => d.Key).ToList(); foreach (var frameworkElement in systemElements) { Move(frameworkElement, delta); } } var alreadyMovedElements = new List <FrameworkElement>(); foreach (var element in system.Score.Staves.SelectMany(s => s.Elements).Where(e => e.Measure != null && e.Measure.System == system).Distinct()) { var frameworkElements = OwnershipDictionary.Where(d => d.Value == element).Select(d => d.Key).ToList(); foreach (var frameworkElement in frameworkElements) { if (alreadyMovedElements.Contains(frameworkElement)) { continue; } Move(frameworkElement, delta); alreadyMovedElements.Add(frameworkElement); } } }
public void MoveLayout(StaffSystem system, Point delta) { if (Renderer == null) { return; } Renderer.MoveLayout(system, delta); }
private static StaffSystem NewSystem(MusicXmlParserState state, Staff staff) { if (staff == staff.Score.Staves.First()) { var system = new StaffSystem(staff.Score); staff.Score.Pages.Last().Systems.Add(system); return(system); } return(staff.Score.Systems[state.CurrentSystemNo - 1]); }
private void DrawBracket(StaffSystem system, Part part, ScoreRendererBase renderer) { if (system.LinePositions == null) { return; } var location = new Point(-30, system.LinePositions[1][0]); var size = new Size(25, system.LinePositions[part.Staves.Count][4] - system.LinePositions[1][0]); renderer.DrawStringInBounds(renderer.Settings.CurrentFont.LeftBracket, Model.Fonts.MusicFontStyles.MusicFont, location, size, renderer.Settings.DefaultColor, part.Staves.First()); }
public ActionResult NewPlanApproveStep() { string strErrText; //读取计划审批步骤数据 FlowSystem flow = new FlowSystem(); List <ApproveFlowStep> listStep = flow.LoadApproveFlowStepsByFlowType(InnoSoft.LS.Resources.Options.PlanApproveFlow, LoginAccountId, LoginStaffName, out strErrText); if (listStep == null) { throw new Exception(strErrText); } //生成新步骤序号 int nStepNum = 1; if (listStep.Count > 0) { nStepNum = listStep[listStep.Count - 1].StepNum + 1; } //创建空的Model ApproveFlowStepViewModel model = new ApproveFlowStepViewModel(); model.StepNum = nStepNum; model.Conditions = new List <ApproveFlowStepConditionViewModel>(); model.Conditions.Add(new ApproveFlowStepConditionViewModel()); //生成处理人下拉列表项 StaffSystem staff = new StaffSystem(); List <Staff> listStaff = staff.LoadStaffs(LoginAccountId, LoginStaffName, out strErrText); if (listStaff == null) { throw new Exception(strErrText); } List <SelectListItem> selectListStaff = new List <SelectListItem>(); selectListStaff.Add(new SelectListItem { Text = string.Empty, Value = string.Empty }); selectListStaff.AddRange(from s in listStaff select new SelectListItem { Text = s.FullName, Value = s.Id.ToString() }); ViewData["Disposers"] = new SelectList(selectListStaff, "Value", "Text"); return(View(model)); }
/// <summary> /// Begins a new system. /// </summary> public void BeginNewSystem() { var currentSystemIndex = Systems.ToList().IndexOf(CurrentSystem); if (currentSystemIndex == Systems.Count - 1) { var newSystem = new StaffSystem(CurrentScore); CurrentScore.Pages.Last().Systems.Add(newSystem); CurrentSystem = newSystem; return; } CurrentSystem = Systems[currentSystemIndex + 1]; }
// Temporary hack -- enforces four measures to a line // Not implemented for multiple staves internal void breakStaffIfNeeded() { var systems = new LinkedList <StaffSystem>(); for (int i = 0; i < data.FirstStaff.Measures.Count / 4 + 1; i++) { StaffSystem sys = new StaffSystem(data); for (int j = 0; j < 4; j++) { //sys. } } }
private void DrawBracket(StaffSystem system, Part part, ScoreRendererBase renderer) { if (system.LinePositions == null) { return; } var locationXAndWidth = GetBraceLocationXAndWidth(renderer); var location = new Point(locationXAndWidth.Item1, system.LinePositions[1][0]); var size = new Size(locationXAndWidth.Item2, system.LinePositions[part.Staves.Count][4] - system.LinePositions[1][0]); renderer.DrawCharacterInBounds(renderer.Settings.MusicFontProfile.MusicFont.BraceLeft, Model.Fonts.MusicFontStyles.MusicFont, location, size, renderer.Settings.DefaultColor, part.Staves.First()); }
protected static StaffSystem GetSystem(Staff staff) { StaffSystem system = null; if (staff.Score != null) { system = staff.Score.Systems.LastOrDefault(); if (system == null) { system = new StaffSystem(staff.Score); staff.Score.Pages.Last().Systems.Add(system); } } return(system); }
public ActionResult ModifyPriceApproveStep(string id) { string strErrText; //读取价格审批步骤数据 FlowSystem flow = new FlowSystem(); ApproveFlowStep data = flow.LoadApproveFlowStep(long.Parse(id), LoginAccountId, LoginStaffName, out strErrText); if (data == null) { throw new Exception(strErrText); } //创建Model PriceApproveFlowStepViewModel model = new PriceApproveFlowStepViewModel(); model.StepNum = data.StepNum; model.StepName = data.StepName; model.DisposerId = data.DisposerId; model.ConditionExpression = data.ConditionExpression; model.Conditions = new List <PriceApproveFlowStepConditionViewModel>(); model.Conditions.Add(new PriceApproveFlowStepConditionViewModel()); //生成处理人下拉列表项 StaffSystem staff = new StaffSystem(); List <Staff> listStaff = staff.LoadStaffs(LoginAccountId, LoginStaffName, out strErrText); if (listStaff == null) { throw new Exception(strErrText); } List <SelectListItem> selectListStaff = new List <SelectListItem>(); selectListStaff.Add(new SelectListItem { Text = string.Empty, Value = string.Empty }); selectListStaff.AddRange(from s in listStaff select new SelectListItem { Text = s.FullName, Value = s.Id.ToString() }); ViewData["Disposers"] = new SelectList(selectListStaff, "Value", "Text", model.DisposerId); return(View(model)); }
private double CalculateStaffLineWidth(Staff staff, StaffSystem system, ScoreRendererSettings settings) { var lastMeasureInSystem = staff.Measures.LastOrDefault(m => m.System == system); var endPositionX = lastMeasureInSystem?.BarlineLocationX ?? system.Width; if (endPositionX == 0) { endPositionX = system.Width; } if (settings.RenderingMode != ScoreRenderingModes.Panorama) { endPositionX = ExtendXPositionForMemoElements(endPositionX, lastMeasureInSystem, staff, system); } return(endPositionX); }
private void SetElementPositions(Score score) { foreach (var staff in score.Staves) { StaffSystem lastSystem = null; foreach (var measure in staff.Measures) { var marginLeft = lastSystem == null || score.Systems.ToList().IndexOf(measure.System) != score.Systems.ToList().IndexOf(lastSystem) ? 85 : 14; //First symbol in system should have bigger margin foreach (var group in measure.Elements.GroupBy(e => e is NoteOrRest ? ((NoteOrRest)e).Voice : 1)) { double x = marginLeft; foreach (var element in group) { if (!measure.Width.HasValue) { throw new Exception("Measure does not have width. Run SetMeasureWidths first."); } var durationElement = element as IHasDuration; if (durationElement == null) { continue; } var defaultXElement = element as IHasCustomXPosition; if (defaultXElement == null) { continue; } defaultXElement.DefaultXPosition = x; var chordElement = element as ICanBeUpperMemberOfChord; if (chordElement != null && chordElement.IsUpperMemberOfChord) { continue; } var time = staff.Peek <TimeSignature>(element, Model.PeekStrategies.PeekType.PreviousElement); var duration = durationElement.BaseDuration.AddDots(durationElement.NumberOfDots).ToDouble() * time.WholeNoteCapacity; //TODO: Dots! x += (measure.Width.Value - marginLeft) * duration; } } lastSystem = measure.System; } } }
public JsonResult LoadOrganizationAllStaffs(long nOrganId) { string strErrText; StaffSystem staff = new StaffSystem(); List <Staff> listStaff = staff.LoadAllStaffsByOrganId(nOrganId, LoginAccountId, LoginStaffName, out strErrText); if (listStaff == null) { throw new Exception(strErrText); } var ret = from s in listStaff select new { s.Id, s.FullName }; return(Json(ret, JsonRequestBehavior.AllowGet)); }
private void Draw(Staff staff, ScoreRendererBase renderer, StaffFragment staffFragment, StaffSystem system) { renderer.DrawLine(0, staffFragment.LinePositions[0], 0, staffFragment.LinePositions[4], staffFragment); foreach (double position in staffFragment.LinePositions) { Point startPoint = new Point(0, position); Point endPoint = new Point(system.Width, position); renderer.DrawLine(startPoint, endPoint, new Pen(renderer.Settings.DefaultColor, 1, -1), staffFragment); } }
/// <summary> /// Extends lines for clefs, keys and time signatures at the end of the system (which are actually members of the next measure) /// </summary> /// <param name="endPositionX"></param> /// <param name="lastMeasureInSystem"></param> /// <param name="staff"></param> /// <param name="system"></param> /// <returns></returns> private double ExtendXPositionForMemoElements(double endPositionX, Measure lastMeasureInSystem, Staff staff, StaffSystem system) { var nextMeasure = lastMeasureInSystem == null ? null : staff.Measures.ElementAtOrDefault(staff.Measures.IndexOf(lastMeasureInSystem) + 1); if (nextMeasure != null) //Wydłuż linie, jeśli są na końcu taktu nowe znaki przykluczowe lub nowe metrum { var elementsWithPosition = nextMeasure.Elements.OfType <IRenderedAsTextBlock>().Where(e => e is Clef || e is TimeSignature || e is Key); var memoElement = elementsWithPosition.OrderBy(e => e.TextBlockLocation.X).LastOrDefault(); if (memoElement == null) { return(endPositionX); } if (endPositionX < memoElement.TextBlockLocation.X + memoElement.RenderedWidth) { endPositionX = memoElement.TextBlockLocation.X + memoElement.RenderedWidth; } } return(endPositionX); }
private void Draw(Staff staff, ScoreRendererBase renderer, StaffFragment staffFragment, StaffSystem system, Pen staffLinePen, double?staffLineWidth) { renderer.DrawLine(0, staffFragment.LinePositions[0], 0, staffFragment.LinePositions[4], staffLinePen, staffFragment); var endPositionX = staffLineWidth ?? CalculateStaffLineWidth(staff, system, renderer.Settings); foreach (double linePositionY in staffFragment.LinePositions) { Point startPoint = new Point(0, linePositionY); Point endPoint = new Point(endPositionX, linePositionY); renderer.DrawLine(startPoint, endPoint, staffLinePen, staffFragment); } }
public override Score Parse(XDocument xmlDocument) //TODO: Exception handling! { Score score = new Score(); var firstSystem = new StaffSystem(score); score.Pages.Last().Systems.Add(firstSystem); MusicXmlParserState state = new MusicXmlParserState(); foreach (XElement defaultSettingsNode in xmlDocument.Descendants().Where(d => d.Name == "defaults" || d.Name == "identification")) { foreach (XElement settingNode in defaultSettingsNode.Elements()) { var dummyStaff = new Staff { Score = score }; //Nasty workaround MusicXmlParsingStrategy parsingStrategy = MusicXmlParsingStrategy.GetProperStrategy(settingNode); if (parsingStrategy != null) { parsingStrategy.ParseElement(state, dummyStaff, settingNode); } } } foreach (XElement partNode in xmlDocument.Descendants(XName.Get("part"))) { state.CurrentSystemNo = 1; var partId = partNode.ParseAttribute("id"); state.FirstLoop = true; Staff staff = new Staff() { MeasureAddingRule = Staff.MeasureAddingRuleEnum.AddMeasuresManually }; score.Staves.Add(staff); var part = score.Parts.FirstOrDefault(p => p.PartId == partId) ?? new Part(staff) { PartId = partId }; staff.Part = part; score.Parts.Add(part); foreach (XElement node in partNode.Elements()) { MusicXmlParsingStrategy parsingStrategy = MusicXmlParsingStrategy.GetProperStrategy(node); if (parsingStrategy != null) { parsingStrategy.ParseElement(state, staff, node); } } } var partListNode = xmlDocument.Descendants(XName.Get("part-list")); PartGroup currentPartGroup = null; foreach (var partListElementNode in partListNode.Elements()) { if (partListElementNode.Name == "part-group") { partListElementNode.IfAttribute("type").HasValue("start").Then(() => { currentPartGroup = new PartGroup() { Number = score.PartGroups.Count + 1 }; score.PartGroups.Add(currentPartGroup); }); partListElementNode.IfAttribute("type").HasValue("stop").Then(() => currentPartGroup = null); if (currentPartGroup != null) { partListElementNode.IfElement("group-barline").HasValue <GroupBarlineType>(d => { d.Add("Yes", GroupBarlineType.Enabled); d.Add("No", GroupBarlineType.Disabled); d.Add("Mensurstrich", GroupBarlineType.Mensurstrich); return(d); }).Then(r => currentPartGroup.GroupBarline = r); } } if (partListElementNode.Name == "score-part" && currentPartGroup != null) { var scorePartId = partListElementNode.IfAttribute("id").HasAnyValue().ThenReturnResult(); var matchingScorePart = score.Parts.FirstOrDefault(p => p.PartId == scorePartId); if (matchingScorePart != null) { matchingScorePart.Group = currentPartGroup; } } } //Sibelius hack: if (score.Encoding?.Software?.Any(s => s.Contains("Sibelius")) ?? false) { new DefaultScoreFormatter().Format(score); } foreach (var staff in score.Staves) { staff.MeasureAddingRule = Staff.MeasureAddingRuleEnum.AddMeasureOnInsertingBarline; } return(score); }