internal static async Task Render(CompositionEngine compositionEngine, SharpDX.Direct2D1.RenderTarget renderTarget, FrameworkElement rootElement, Line line) { var rect = line.GetBoundingRect(rootElement).ToSharpDX(); var stroke = await line.Stroke.ToSharpDX(renderTarget, rect); if (stroke == null || line.StrokeThickness <= 0) { return; } var layer = line.CreateAndPushLayerIfNecessary(renderTarget, rootElement); renderTarget.DrawLine( new Vector2( rect.Left + (float)line.X1, rect.Top + (float)line.Y1), new Vector2( rect.Left + (float)line.X2, rect.Top + (float)line.Y2), stroke, (float)line.StrokeThickness, line.GetStrokeStyle(compositionEngine.D2DFactory)); if (layer != null) { renderTarget.PopLayer(); layer.Dispose(); } }
internal static async Task Render(CompositionEngine compositionEngine, SharpDX.Direct2D1.RenderTarget renderTarget, FrameworkElement rootElement, Line line) { var rect = line.GetBoundingRect(rootElement).ToSharpDX(); //var fill = line.Fill.ToSharpDX(renderTarget, rect); var stroke = await line.Stroke.ToSharpDX(renderTarget, rect); if (stroke == null || line.StrokeThickness <= 0) { return; } //var layer = new Layer(renderTarget); //var layerParameters = new LayerParameters(); //layerParameters.ContentBounds = rect; //renderTarget.PushLayer(ref layerParameters, layer); renderTarget.DrawLine( new DrawingPointF( rect.Left + (float)line.X1, rect.Top + (float)line.Y1), new DrawingPointF( rect.Left + (float)line.X2, rect.Top + (float)line.Y2), stroke, (float)line.StrokeThickness, line.GetStrokeStyle(compositionEngine.D2DFactory)); //renderTarget.PopLayer(); }
public ComplementCreationCommand(CompositionEngine TargetEngine, SimplePresentationElement ComplementKind) : base("Create Complement '" + ComplementKind.Name + "'.") { this.ContextEngine = TargetEngine; this.ComplementKind = ComplementKind; this.Initialize(); }
public ShortcutCreationCommand(CompositionEngine TargetEngine, Idea TargetIdea) : base("Create Shortcut.") { this.ContextEngine = TargetEngine; this.TargetIdea = TargetIdea; this.Initialize(); }
public MarkerAssignmentCommand(CompositionEngine TargetEngine, MarkerDefinition MarkerDef) : base("Assign Marker: " + MarkerDef.Name) { this.ContextEngine = TargetEngine; this.MarkerDef = MarkerDef; this.Initialize(); }
internal static async Task Render(CompositionEngine compositionEngine, SharpDX.Direct2D1.RenderTarget renderTarget, FrameworkElement rootElement, Jupiter.Shapes.Path path) { var rect = path.GetBoundingRect(rootElement).ToSharpDX(); var fill = await path.Fill.ToSharpDX(renderTarget, rect); var stroke = await path.Stroke.ToSharpDX(renderTarget, rect); //var layer = new D2D.Layer(renderTarget); //var layerParameters = new D2D.LayerParameters(); //layerParameters.ContentBounds = rect; var oldTransform = renderTarget.Transform; renderTarget.Transform = new Matrix3x2( 1, 0, 0, 1, rect.Left, rect.Top); //renderTarget.PushLayer(ref layerParameters, layer); var d2dGeometry = path.Data.ToSharpDX(compositionEngine.D2DFactory, rect); if (fill != null) { renderTarget.FillGeometry(d2dGeometry, fill, null); } if (stroke != null && path.StrokeThickness > 0) { renderTarget.DrawGeometry( d2dGeometry, stroke, (float)path.StrokeThickness, path.GetStrokeStyle(compositionEngine.D2DFactory)); } //if (path.StrokeThickness > 0 && // stroke != null) //{ // var halfThickness = (float)(path.StrokeThickness * 0.5); // roundedRect.Rect = rect.Eroded(halfThickness); // if (fill != null) // { // renderTarget.FillRoundedRectangle(roundedRect, fill); // } // renderTarget.DrawRoundedRectangle( // roundedRect, // stroke, // (float)path.StrokeThickness, // path.GetStrokeStyle(compositionEngine.D2DFactory)); //} //else //{ // renderTarget.FillRoundedRectangle(roundedRect, fill); //} //renderTarget.PopLayer(); renderTarget.Transform = oldTransform; }
internal static async Task Render(CompositionEngine compositionEngine, SharpDX.Direct2D1.RenderTarget renderTarget, FrameworkElement rootElement, Jupiter.Shapes.Path path) { var rect = path.GetBoundingRect(rootElement).ToSharpDX(); var fill = await path.Fill.ToSharpDX(renderTarget, rect); var stroke = await path.Stroke.ToSharpDX(renderTarget, rect); var layer = path.CreateAndPushLayerIfNecessary(renderTarget, rootElement); var oldTransform = renderTarget.Transform; renderTarget.Transform = new Matrix3x2( 1, 0, 0, 1, rect.Left, rect.Top); //renderTarget.PushLayer(ref layerParameters, layer); var d2dGeometry = path.Data.ToSharpDX(compositionEngine.D2DFactory, rect); if (fill != null) { renderTarget.FillGeometry(d2dGeometry, fill, null); } if (stroke != null && path.StrokeThickness > 0) { renderTarget.DrawGeometry( d2dGeometry, stroke, (float)path.StrokeThickness, path.GetStrokeStyle(compositionEngine.D2DFactory));} //if (path.StrokeThickness > 0 && // stroke != null) //{ // var halfThickness = (float)(path.StrokeThickness * 0.5); // roundedRect.Rect = rect.Eroded(halfThickness); // if (fill != null) // { // renderTarget.FillRoundedRectangle(roundedRect, fill); // } // renderTarget.DrawRoundedRectangle( // roundedRect, // stroke, // (float)path.StrokeThickness, // path.GetStrokeStyle(compositionEngine.D2DFactory)); //} //else //{ // renderTarget.FillRoundedRectangle(roundedRect, fill); //} if (layer != null) { renderTarget.PopLayer(); layer.Dispose(); } renderTarget.Transform = oldTransform; }
public RelationshipCreationCommand(CompositionEngine TargetEngine, RelationshipDefinition RelationshipDef) : base("Create Relationship '" + RelationshipDef.Name + "'.") { this.ContextEngine = TargetEngine; this.RelationshipDef = RelationshipDef; this.PointingConnectorFormat = RelationshipDef.DefaultConnectorsFormat; this.Initialize(); this.Assistance = "Press [Left-ALT] to link the pointed Idea as origin."; }
public static ExternalAnomaly TryLoadPendingAttachmentsFor(CompositionEngine Engine) { foreach (var RegAttachment in ExposedAttachmentFiles) { try { LoadAttachmentFile(RegAttachment.Value.Source); } catch (Exception Failure) { return(new ExternalAnomaly("Cannot load Attachment edited by an external application.", Failure)); } } return(null); }
public static void StopWatchingAttachmentsFor(CompositionEngine Engine) { var FilesToUnwatch = new List <string>(); foreach (var RegAttachment in ExposedAttachmentFiles) { if (RegAttachment.Value.OwnerIdea != null && RegAttachment.Value.OwnerIdea.EditEngine == Engine) { FilesToUnwatch.Add(RegAttachment.Key); } } foreach (var RegFile in FilesToUnwatch) { ExposedAttachmentFiles.Remove(RegFile); } }
internal static async Task Render(CompositionEngine compositionEngine, SharpDX.Direct2D1.RenderTarget renderTarget, FrameworkElement rootElement, Ellipse ellipse) { var rect = ellipse.GetBoundingRect(rootElement).ToSharpDX(); var d2dEllipse = new D2D.Ellipse( new Vector2( (float)((rect.Left + rect.Right) * 0.5), (float)((rect.Top + rect.Bottom) * 0.5)), (float)(0.5 * rect.Width), (float)(0.5 * rect.Height)); var fill = await ellipse.Fill.ToSharpDX(renderTarget, rect); var layer = ellipse.CreateAndPushLayerIfNecessary(renderTarget, rootElement); var stroke = await ellipse.Stroke.ToSharpDX(renderTarget, rect); if (ellipse.StrokeThickness > 0 && stroke != null) { var halfStrokeThickness = (float)(ellipse.StrokeThickness * 0.5); d2dEllipse.RadiusX -= halfStrokeThickness; d2dEllipse.RadiusY -= halfStrokeThickness; if (fill != null) { renderTarget.FillEllipse(d2dEllipse, fill); } renderTarget.DrawEllipse( d2dEllipse, stroke, (float)ellipse.StrokeThickness, ellipse.GetStrokeStyle(compositionEngine.D2DFactory)); } else if (fill != null) { renderTarget.FillEllipse(d2dEllipse, fill); } if (layer != null) { renderTarget.PopLayer(); layer.Dispose(); } }
internal static async Task Render(CompositionEngine compositionEngine, RenderTarget renderTarget, FrameworkElement rootElement, TextBlock textBlock) { using (var textFormat = new TextFormat( compositionEngine.DWriteFactory, textBlock.FontFamily.Source, (float)textBlock.FontSize) { TextAlignment = textBlock.TextAlignment.ToSharpDX(), ParagraphAlignment = ParagraphAlignment.Near }) { var rect = textBlock.GetBoundingRect(rootElement).ToSharpDX(); // For some reason we need a bigger rect for the TextBlock rendering to fit in the same boundaries rect.Right++; rect.Bottom++; using ( var textBrush = await textBlock.Foreground.ToSharpDX(renderTarget, rect)) { if (textBrush == null) { return; } var layer = textBlock.CreateAndPushLayerIfNecessary(renderTarget, rootElement); // You can render the bounding rectangle to debug composition //renderTarget.DrawRectangle( // rect, // textBrush); renderTarget.DrawText( textBlock.Text, textFormat, rect, textBrush); if (layer != null) { renderTarget.PopLayer(); layer.Dispose(); } //} } } }
internal static void Render(CompositionEngine compositionEngine, SharpDX.Direct2D1.RenderTarget renderTarget, FrameworkElement rootElement, Border border) { var rect = border.GetBoundingRect(rootElement).ToSharpDX(); var brush = border.Background.ToSharpDX(renderTarget, rect); var geometry = GetBorderFillGeometry(compositionEngine, border, rect); //var layer = new Layer(renderTarget); //var layerParameters = new LayerParameters(); //layerParameters.ContentBounds = rect; //renderTarget.PushLayer(ref layerParameters, layer); renderTarget.FillGeometry(geometry, brush); //renderTarget.PopLayer(); compositionEngine.RenderChildren(renderTarget, rootElement, border); }
internal static async Task Render(CompositionEngine compositionEngine, SharpDX.Direct2D1.RenderTarget renderTarget, FrameworkElement rootElement, Ellipse ellipse) { var rect = ellipse.GetBoundingRect(rootElement).ToSharpDX(); var d2dEllipse = new D2D.Ellipse( new DrawingPointF( (float)((rect.Left + rect.Right) * 0.5), (float)((rect.Top + rect.Bottom) * 0.5)), (float)(0.5 * rect.Width), (float)(0.5 * rect.Height)); var fill = await ellipse.Fill.ToSharpDX(renderTarget, rect); //var layer = new Layer(renderTarget); //var layerParameters = new LayerParameters(); //layerParameters.ContentBounds = rect; //renderTarget.PushLayer(ref layerParameters, layer); var stroke = await ellipse.Stroke.ToSharpDX(renderTarget, rect); if (ellipse.StrokeThickness > 0 && stroke != null) { var halfStrokeThickness = (float)(ellipse.StrokeThickness * 0.5); d2dEllipse.RadiusX -= halfStrokeThickness; d2dEllipse.RadiusY -= halfStrokeThickness; if (fill != null) { renderTarget.FillEllipse(d2dEllipse, fill); } renderTarget.DrawEllipse( d2dEllipse, stroke, (float)ellipse.StrokeThickness, ellipse.GetStrokeStyle(compositionEngine.D2DFactory)); } else if (fill != null) { renderTarget.FillEllipse(d2dEllipse, fill); } //renderTarget.PopLayer(); }
internal static void Render(CompositionEngine compositionEngine, SharpDX.Direct2D1.RenderTarget renderTarget, FrameworkElement rootElement, Ellipse ellipse) { var rect = ellipse.GetBoundingRect(rootElement).ToSharpDX(); var d2dEllipse = new D2D.Ellipse( new DrawingPointF( (float)((rect.Left + rect.Right) * 0.5), (float)((rect.Top + rect.Bottom) * 0.5)), (float)(0.5 * rect.Width), (float)(0.5 * rect.Height)); var fill = ellipse.Fill.ToSharpDX(renderTarget, rect); //var layer = new Layer(renderTarget); //var layerParameters = new LayerParameters(); //layerParameters.ContentBounds = rect; //renderTarget.PushLayer(ref layerParameters, layer); var stroke = ellipse.Stroke.ToSharpDX(renderTarget, rect); if (ellipse.StrokeThickness > 0 && stroke != null) { var halfStrokeThickness = (float)(ellipse.StrokeThickness * 0.5); d2dEllipse.RadiusX -= halfStrokeThickness; d2dEllipse.RadiusY -= halfStrokeThickness; if (fill != null) { renderTarget.FillEllipse(d2dEllipse, fill); } renderTarget.DrawEllipse( d2dEllipse, stroke, (float)ellipse.StrokeThickness, ellipse.GetStrokeStyle(compositionEngine.D2DFactory)); } else if (fill != null) { renderTarget.FillEllipse(d2dEllipse, fill); } //renderTarget.PopLayer(); }
internal static async Task Render(CompositionEngine compositionEngine, RenderTarget renderTarget, FrameworkElement rootElement, TextBlock textBlock) { using (var textFormat = new TextFormat( compositionEngine.DWriteFactory, textBlock.FontFamily.Source, (float)textBlock.FontSize) { TextAlignment = textBlock.TextAlignment.ToSharpDX(), ParagraphAlignment = ParagraphAlignment.Near }) { var rect = textBlock.GetBoundingRect(rootElement).ToSharpDX(); // For some reason we need a bigger rect for the TextBlock rendering to fit in the same boundaries rect.Right++; rect.Bottom++; using ( var textBrush = await textBlock.Foreground.ToSharpDX(renderTarget, rect)) { //using(var layer = new Layer(renderTarget)) //{ //var layerParameters = new LayerParameters(); //layerParameters.ContentBounds = rect; //renderTarget.PushLayer(ref layerParameters, layer); // You can render the bounding rectangle to debug composition //renderTarget.DrawRectangle( // rect, // textBrush); renderTarget.DrawText( textBlock.Text, textFormat, rect, textBrush); //renderTarget.PopLayer(); //} } } }
internal static async Task Render(CompositionEngine compositionEngine, SharpDX.Direct2D1.RenderTarget renderTarget, FrameworkElement rootElement, Border border) { var rect = border.GetBoundingRect(rootElement).ToSharpDX(); var brush = await border.Background.ToSharpDX(renderTarget, rect); if (brush != null) { var geometry = GetBorderFillGeometry(compositionEngine, border, rect); var layer = border.CreateAndPushLayerIfNecessary(renderTarget, rootElement); renderTarget.FillGeometry(geometry, brush); if (layer != null) { renderTarget.PopLayer(); layer.Dispose(); } } await compositionEngine.RenderChildren(renderTarget, rootElement, border); }
internal static async Task Render(CompositionEngine compositionEngine, SharpDX.Direct2D1.RenderTarget renderTarget, Jupiter.FrameworkElement rootElement, Jupiter.Controls.Image image) { var rect = image.GetBoundingRect(rootElement).ToSharpDX(); if (rect.Width == 0 || rect.Height == 0) { return; } var bitmap = await image.Source.ToSharpDX(renderTarget); if (bitmap == null) { return; } try { var layer = image.CreateAndPushLayerIfNecessary(renderTarget, rootElement); renderTarget.DrawBitmap( bitmap, rect, (float)image.Opacity, D2D.BitmapInterpolationMode.Linear); if (layer != null) { renderTarget.PopLayer(); layer.Dispose(); } } finally { bitmap.Dispose(); } }
void Target_MouseDoubleClick(object sender, MouseButtonEventArgs e) { var Target = sender as TabItem; if (Target == null || Target.Tag == null || !(Target.Tag is Guid)) { return; } var Position = e.GetPosition(Target); if (Position.Y > TABITEM_HEADER_HEIGHT) // If double-clicking beyond the header... exit { return; } var ViewId = (Guid)Target.Tag; var TargetView = this.RegisteredViews.FirstOrDefault(doc => doc.GlobalId == ViewId); if (TargetView == null) { return; } var Context = TargetView.EditEngine; var EditingView = (View)TargetView; // IMPORTANT: This avoid crashes by a double-click over the close button [X] of the tab header. if (EditingView.IsClosing) { return; } CompositionEngine.EditViewProperties(EditingView); }
internal static async Task Render(CompositionEngine compositionEngine, SharpDX.Direct2D1.RenderTarget renderTarget, Jupiter.FrameworkElement rootElement, Jupiter.Controls.Image image) { var rect = image.GetBoundingRect(rootElement).ToSharpDX(); if (rect.Width == 0 || rect.Height == 0) { return; } var bitmap = await image.Source.ToSharpDX(renderTarget); if (bitmap == null) { return; } try { //var layer = new Layer(renderTarget); //var layerParameters = new LayerParameters(); //layerParameters.ContentBounds = rect; //renderTarget.PushLayer(ref layerParameters, layer); renderTarget.DrawBitmap( bitmap, rect, (float)image.Opacity, D2D.BitmapInterpolationMode.Linear); //renderTarget.PopLayer(); } finally { bitmap.Dispose(); } }
internal static async Task Render(CompositionEngine compositionEngine, SharpDX.Direct2D1.RenderTarget renderTarget, FrameworkElement rootElement, Rectangle rectangle) { var rect = rectangle.GetBoundingRect(rootElement).ToSharpDX(); var fill = await rectangle.Fill.ToSharpDX(renderTarget, rect); var stroke = await rectangle.Stroke.ToSharpDX(renderTarget, rect); try { var layer = rectangle.CreateAndPushLayerIfNecessary(renderTarget, rootElement); if (rectangle.RadiusX > 0 && rectangle.RadiusY > 0) { var roundedRect = new SharpDX.Direct2D1.RoundedRectangle(); roundedRect.Rect = rect; roundedRect.RadiusX = (float)rectangle.RadiusX; roundedRect.RadiusY = (float)rectangle.RadiusY; if (rectangle.StrokeThickness > 0 && stroke != null) { var halfThickness = (float)(rectangle.StrokeThickness * 0.5); roundedRect.Rect = rect.Eroded(halfThickness); if (fill != null) { renderTarget.FillRoundedRectangle(roundedRect, fill); } renderTarget.DrawRoundedRectangle( roundedRect, stroke, (float)rectangle.StrokeThickness, rectangle.GetStrokeStyle(compositionEngine.D2DFactory)); } else { renderTarget.FillRoundedRectangle(roundedRect, fill); } } else { if (rectangle.StrokeThickness > 0 && stroke != null) { var halfThickness = (float)(rectangle.StrokeThickness * 0.5); if (fill != null) { renderTarget.FillRectangle(rect.Eroded(halfThickness), fill); } var strokeRect = rect.Eroded(halfThickness); renderTarget.DrawRectangle( strokeRect, stroke, (float)rectangle.StrokeThickness, rectangle.GetStrokeStyle(compositionEngine.D2DFactory)); } else { renderTarget.FillRectangle(rect, fill); } } if (layer != null) { renderTarget.PopLayer(); layer.Dispose(); } } finally { if (fill != null) { fill.Dispose(); } if (stroke != null) { stroke.Dispose(); } } }
private void NavTree_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) { this.PreviousPointingPosition = default(Point); Idea PointedIdea = null; if (e.OriginalSource is FrameworkElement) { var SourceItem = Display.GetNearestVisualDominantOfType <TreeViewItem>(e.OriginalSource as FrameworkElement); if (SourceItem != null) { var PointedView = SourceItem.Header as View; if (PointedView == null) { PointedIdea = SourceItem.Header as Idea; } else if (PointedView == this.CurrentView) { CompositionEngine.EditViewProperties(PointedView); return; } } } if (PointedIdea != null && PointedIdea == this.TargetIdea) { // Is clicking for jump... this.IsNavigating = true; var PointingShortcut = (this.CurrentView.Manipulator.CurrentTargetedObject is VisualElement && ((VisualElement)this.CurrentView.Manipulator.CurrentTargetedObject).OwnerRepresentation.IsShortcut && ((VisualElement)this.CurrentView.Manipulator.CurrentTargetedObject).OwnerRepresentation.RepresentedIdea == TargetIdea); if (PointingShortcut) { ApplicationProduct.ProductDirector.EditorInterrelationsControl.SetTarget(TargetIdea); // Do not "jump", it could interfere with resizing/moving of shortcut symbols } else if (TargetIdea.OwnerContainer != null) { if (TargetIdea.OwnerContainer.CompositeActiveView == this.CurrentView && this.WorkspaceDirector.ActiveDocument.ActiveDocumentView == this.CurrentView) { var SelectableSymbols = this.CurrentView.ViewChildren .Where(child => child.Key is VisualSymbol && ((VisualSymbol)child.Key).OwnerRepresentation .RepresentedIdea == TargetIdea) .Select(child => (VisualSymbol)child.Key); if (SelectableSymbols.Any() && !SelectableSymbols.Any(symb => symb.OwnerRepresentation.RepresentedIdea.IsSelected)) { this.CurrentView.Manipulator.ApplySelection(SelectableSymbols.First(), false, (Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl))); } ApplicationProduct.ProductDirector.EditorInterrelationsControl.SetTarget(TargetIdea); this.CurrentView.Presenter.BringIntoView( TargetIdea.VisualRepresentators.First(vrep => vrep.DisplayingView == this.CurrentView).MainSymbol.BaseArea); } else { var Representator = TargetIdea.MainRepresentator; if (Representator != null && !CompositionEngine.IsSelectingByRectangle /*- && this.IsMouseOver && Mouse.LeftButton == MouseButtonState.Pressed*/) { Representator.DisplayingView.Engine.ShowView(Representator.DisplayingView); Representator.DisplayingView.Presenter.PostCall( vpres => { vpres.OwnerView.Manipulator.ApplySelection(Representator.MainSymbol); vpres.OwnerView.Presenter.BringIntoView(Representator.MainSymbol.BaseArea); }); } } } this.TargetIdea = null; this.IsNavigating = false; } }
public static void GeneratePdfXpsReport(CompositionEngine Engine) { if (Engine == null) { return; } if (!ProductDirector.ValidateEditionPermission(AppExec.LIC_EDITION_STANDARD, "Generate PDF/XPS Report")) { return; } if (Engine.TargetComposition.CompositeContentDomain.ReportingConfiguration == null) { Engine.TargetComposition.CompositeContentDomain.ReportingConfiguration = new ReportConfiguration(); } if (!ReportingManager.EditReportConfiguration("PDF/XPS", Engine.TargetComposition.CompositeContentDomain.ReportingConfiguration)) { return; } var Generator = new ReportStandardGenerator(Engine.TargetComposition, Engine.TargetComposition.CompositeContentDomain.ReportingConfiguration); var Title = "Report of " + Engine.TargetComposition.Name; ProgressiveThreadedExecutor <int> .Execute("Generating " + Title, Generator.Generate, (opresult) => { if (opresult.WasSuccessful && !File.Exists(Generator.GeneratedDocumentTempFilePath)) { opresult = OperationResult.Failure <int>("Cannot write temporal report file at: " + Generator.GeneratedDocumentTempFilePath); } if (!opresult.WasSuccessful) { Display.DialogMessage("Report not completed!", opresult.Message, EMessageType.Warning); return; } try { var GeneratedDocument = Display.LoadDocumentFromXPS(Generator.GeneratedDocumentTempFilePath); var Location = new Uri(Generator.GeneratedDocumentTempFilePath, UriKind.Absolute); var Package = System.IO.Packaging.PackageStore.GetPackage(Location); DocViewerControl = new PrintPreviewer(GeneratedDocument, Generator.GeneratedDocumentTempFilePath, Engine.TargetComposition.Name); Display.OpenContentDialogWindow(ref WinFlowDocViewer, Title, DocViewerControl); Package.Close(); // Package remains open, so must closed! //if you don't remove the package from the PackageStore, you won't be able to //re-open the same file again later (due to System.IO.Packaging's Package store/caching //rather than because of any file locks) System.IO.Packaging.PackageStore.RemovePackage(Location); if (File.Exists(Generator.GeneratedDocumentTempFilePath)) { File.Delete(Generator.GeneratedDocumentTempFilePath); } } catch (Exception Problem) { Display.DialogMessage("Attention!", "Cannot show generated Report.\n" + (!Generator.GeneratedDocumentTempFilePath.IsAbsent() && File.Exists(Generator.GeneratedDocumentTempFilePath) ? "It can still be found at: " + Generator.GeneratedDocumentTempFilePath : "") + "\nProblem: " + Problem.Message); } }); }
public static void GenerateHtmlReport(CompositionEngine Engine) { if (Engine == null) { return; } if (!ProductDirector.ValidateEditionPermission(AppExec.LIC_EDITION_STANDARD, "Generate HTML Report", false, new DateTime(2013, 1, 1))) { return; } if (Engine.TargetComposition.CompositeContentDomain.ReportingConfiguration == null) { Engine.TargetComposition.CompositeContentDomain.ReportingConfiguration = new ReportConfiguration(); } if (!ReportingManager.EditReportConfiguration("HTML", Engine.TargetComposition.CompositeContentDomain.ReportingConfiguration)) { return; } var FilePath = Path.Combine(AppExec.UserDataDirectory, (Engine.TargetComposition.TechName + ".html").TextToUrlIdentifier()); var DialogResponse = Display.DialogGetSaveFile("Select HTML file to create", ".html", "HTML document (*.html)|*.html", FilePath); if (DialogResponse == null) { return; } // Enforce url-identifier to avoid file-names with space in between. var Location = Path.Combine(Path.GetDirectoryName(DialogResponse.LocalPath), Path.GetFileName(DialogResponse.LocalPath).TextToUrlIdentifier()); var WarnResponse = Display.DialogPersistableMultiOption("Note", "Your HTML Document is generated along with a '" + ReportHtmlGenerator.CONTENT_FOLDER_SUFFIX + "' directory.\n" + "Please don't forget to manage (copy/move/erase) them together to keep consistency." + (Location == DialogResponse.LocalPath ? "" : "\n\nThe file will be saved as '" + Path.GetFileName(Location) + "'."), null, "Reporting", "InformHTMLContentDir", null, new SimplePresentationElement("OK", "Ok", "", Display.GetAppImage("accept.png"))); if (WarnResponse == null) { return; } var Title = "HTML Report of " + Engine.TargetComposition.Name; var Generator = new ReportHtmlGenerator(Engine.TargetComposition, Location, Engine.TargetComposition.CompositeContentDomain.ReportingConfiguration); ProgressiveThreadedExecutor <int> .Execute("Generating " + Title, Generator.Generate, (opresult) => { if (opresult.WasSuccessful && !File.Exists(Generator.GeneratedTempWorkingDocumentFile)) { opresult = OperationResult.Failure <int>("Cannot write temporal report file at: " + Generator.GeneratedTempWorkingDocumentFile); } if (!opresult.WasSuccessful) { Display.DialogMessage("Report not completed!", opresult.Message, EMessageType.Warning); return; } try { var TargetFolder = Path.GetDirectoryName(Location); General.CopyDirectory(Generator.GeneratedTempWorkingDocumentDir, TargetFolder); AppExec.CallExternalProcess(Location); if (File.Exists(Generator.GeneratedTempWorkingDocumentFile)) { File.Delete(Generator.GeneratedTempWorkingDocumentFile); } if (Directory.Exists(Generator.GeneratedTempWorkingDocumentDir)) { Directory.Delete(Generator.GeneratedTempWorkingDocumentDir, true); } } catch (Exception Problem) { Display.DialogMessage("Attention!", "Cannot show generated Report.\n" + (!Generator.GeneratedTempWorkingDocumentFile.IsAbsent() && File.Exists(Generator.GeneratedTempWorkingDocumentFile) ? "It can be still found at: " + Generator.GeneratedTempWorkingDocumentFile : "") + "\nProblem: " + Problem.Message); } }); }
internal static async Task Render(CompositionEngine compositionEngine, RenderTarget renderTarget, FrameworkElement rootElement, FrameworkElement fe) { await compositionEngine.RenderChildren(renderTarget, rootElement, fe); }
internal static void Render(CompositionEngine compositionEngine, SharpDX.Direct2D1.RenderTarget renderTarget, FrameworkElement rootElement, Rectangle rectangle) { var rect = rectangle.GetBoundingRect(rootElement).ToSharpDX(); var fill = rectangle.Fill.ToSharpDX(renderTarget, rect); var stroke = rectangle.Stroke.ToSharpDX(renderTarget, rect); //var layer = new Layer(renderTarget); //var layerParameters = new LayerParameters(); //layerParameters.ContentBounds = rect; //renderTarget.PushLayer(ref layerParameters, layer); if (rectangle.RadiusX > 0 && rectangle.RadiusY > 0) { var roundedRect = new SharpDX.Direct2D1.RoundedRect(); roundedRect.Rect = rect; roundedRect.RadiusX = (float)rectangle.RadiusX; roundedRect.RadiusY = (float)rectangle.RadiusY; if (rectangle.StrokeThickness > 0 && stroke != null) { var halfThickness = (float)(rectangle.StrokeThickness * 0.5); roundedRect.Rect = rect.Eroded(halfThickness); if (fill != null) { renderTarget.FillRoundedRectangle(roundedRect, fill); } renderTarget.DrawRoundedRectangle( roundedRect, stroke, (float)rectangle.StrokeThickness, rectangle.GetStrokeStyle(compositionEngine.D2DFactory)); } else { renderTarget.FillRoundedRectangle(roundedRect, fill); } } else { if (rectangle.StrokeThickness > 0 && stroke != null) { var halfThickness = (float)(rectangle.StrokeThickness * 0.5); if (fill != null) { renderTarget.FillRectangle(rect.Eroded(halfThickness), fill); } var strokeRect = rect.Eroded(halfThickness); renderTarget.DrawRectangle( strokeRect, stroke, (float)rectangle.StrokeThickness, rectangle.GetStrokeStyle(compositionEngine.D2DFactory)); } else { renderTarget.FillRectangle(rect, fill); } } //renderTarget.PopLayer(); }
internal static async Task Render(CompositionEngine compositionEngine, SharpDX.Direct2D1.RenderTarget renderTarget, FrameworkElement rootElement, Rectangle rectangle) { var rect = rectangle.GetBoundingRect(rootElement).ToSharpDX(); var fill = await rectangle.Fill.ToSharpDX(renderTarget, rect); var stroke = await rectangle.Stroke.ToSharpDX(renderTarget, rect); try { var layer = rectangle.CreateAndPushLayerIfNecessary(renderTarget, rootElement); if (rectangle.RadiusX > 0 && rectangle.RadiusY > 0) { var roundedRect = new SharpDX.Direct2D1.RoundedRectangle(); roundedRect.Rect = rect; roundedRect.RadiusX = (float)rectangle.RadiusX; roundedRect.RadiusY = (float)rectangle.RadiusY; if (rectangle.StrokeThickness > 0 && stroke != null) { var halfThickness = (float)(rectangle.StrokeThickness * 0.5); roundedRect.Rect = rect.Eroded(halfThickness); if (fill != null) { renderTarget.FillRoundedRectangle(roundedRect, fill); } renderTarget.DrawRoundedRectangle( roundedRect, stroke, (float)rectangle.StrokeThickness, rectangle.GetStrokeStyle(compositionEngine.D2DFactory)); } else { renderTarget.FillRoundedRectangle(roundedRect, fill); } } else { if (rectangle.StrokeThickness > 0 && stroke != null) { var halfThickness = (float)(rectangle.StrokeThickness * 0.5); if (fill != null) { renderTarget.FillRectangle(rect.Eroded(halfThickness), fill); } var strokeRect = rect.Eroded(halfThickness); renderTarget.DrawRectangle( strokeRect, stroke, (float)rectangle.StrokeThickness, rectangle.GetStrokeStyle(compositionEngine.D2DFactory)); } else { renderTarget.FillRectangle(rect, fill); } } if (layer != null) { renderTarget.PopLayer(); layer.Dispose(); } } finally { if (fill != null) fill.Dispose(); if (stroke != null) stroke.Dispose(); } }
internal static void Render(CompositionEngine compositionEngine, RenderTarget renderTarget, FrameworkElement rootElement, FrameworkElement fe) { compositionEngine.RenderChildren(renderTarget, rootElement, fe); }
private static D2D.PathGeometry GetBorderFillGeometry( CompositionEngine compositionEngine, Border border, RectangleF rect) { var topLeftCornerSize = new DrawingSizeF( (float)border.CornerRadius.TopLeft, (float)border.CornerRadius.TopLeft); var topRightCornerSize = new DrawingSizeF( (float)border.CornerRadius.TopRight, (float)border.CornerRadius.TopRight); var bottomLeftCornerSize = new DrawingSizeF( (float)border.CornerRadius.BottomLeft, (float)border.CornerRadius.BottomLeft); var bottomRightCornerSize = new DrawingSizeF( (float)border.CornerRadius.BottomRight, (float)border.CornerRadius.BottomRight); var topCornersWidth = topLeftCornerSize.Width + topRightCornerSize.Width; if (topCornersWidth > rect.Width) { var scale = rect.Width / topCornersWidth; topLeftCornerSize.Width *= scale; topRightCornerSize.Width *= scale; } var bottomCornersWidth = bottomLeftCornerSize.Width + bottomRightCornerSize.Width; if (bottomCornersWidth > rect.Width) { var scale = rect.Width / bottomCornersWidth; bottomLeftCornerSize.Width *= scale; bottomRightCornerSize.Width *= scale; } var leftCornersHeight = topLeftCornerSize.Height + bottomLeftCornerSize.Height; if (leftCornersHeight > rect.Height) { var scale = rect.Height / leftCornersHeight; topLeftCornerSize.Height *= scale; bottomLeftCornerSize.Height *= scale; } var rightCornersHeight = topRightCornerSize.Height + bottomRightCornerSize.Height; if (rightCornersHeight > rect.Height) { var scale = rect.Height / rightCornersHeight; topRightCornerSize.Height *= scale; bottomRightCornerSize.Height *= scale; } var geometry = new D2D.PathGeometry(compositionEngine.D2DFactory); // Create the geometry of the irregular rounded rectangle. var geometrySink = geometry.Open(); // Start to the right of the topleft corner. geometrySink.BeginFigure( new DrawingPointF( rect.Left + topLeftCornerSize.Width, rect.Top + 0), D2D.FigureBegin.Filled); //if (topCornersWidth < rect.Width) { // Top edge geometrySink.AddLine( new DrawingPointF( rect.Left + rect.Width - topRightCornerSize.Width, rect.Top + 0)); } //if (topRightCornerSize.Width > 0) // Top-right corner geometrySink.AddArc( new D2D.ArcSegment { Point = new DrawingPointF( rect.Left + rect.Width, rect.Top + topRightCornerSize.Height), Size = topRightCornerSize, RotationAngle = 0, SweepDirection = D2D.SweepDirection.Clockwise, ArcSize = D2D.ArcSize.Small }); // Right edge geometrySink.AddLine( new DrawingPointF( rect.Left + rect.Width, rect.Top + rect.Height - bottomRightCornerSize.Height)); // Bottom-right corner geometrySink.AddArc( new D2D.ArcSegment { Point = new DrawingPointF( rect.Left + rect.Width - bottomRightCornerSize.Width, rect.Top + rect.Height), Size = bottomRightCornerSize, RotationAngle = 0, SweepDirection = D2D.SweepDirection.Clockwise, ArcSize = D2D.ArcSize.Small }); // Bottom edge geometrySink.AddLine( new DrawingPointF( rect.Left + bottomLeftCornerSize.Width, rect.Top + rect.Height)); // Bottom-left corner geometrySink.AddArc( new D2D.ArcSegment { Point = new DrawingPointF( rect.Left + 0, rect.Top + rect.Height - bottomLeftCornerSize.Height), Size = bottomLeftCornerSize, RotationAngle = 0, SweepDirection = D2D.SweepDirection.Clockwise, ArcSize = D2D.ArcSize.Small }); // Left edge geometrySink.AddLine( new DrawingPointF( rect.Left + 0, rect.Top + topLeftCornerSize.Height)); // Top-left corner geometrySink.AddArc( new D2D.ArcSegment { Point = new DrawingPointF( rect.Left + topLeftCornerSize.Width, rect.Top + 0), Size = topLeftCornerSize, RotationAngle = 0, SweepDirection = D2D.SweepDirection.Clockwise, ArcSize = D2D.ArcSize.Small }); geometrySink.EndFigure(D2D.FigureEnd.Closed); geometrySink.Close(); return(geometry); }
private static D2D.PathGeometry GetBorderFillGeometry( CompositionEngine compositionEngine, Border border, RectangleF rect) { var topLeftCornerSize = new Size2F( (float)border.CornerRadius.TopLeft, (float)border.CornerRadius.TopLeft); var topRightCornerSize = new Size2F( (float)border.CornerRadius.TopRight, (float)border.CornerRadius.TopRight); var bottomLeftCornerSize = new Size2F( (float)border.CornerRadius.BottomLeft, (float)border.CornerRadius.BottomLeft); var bottomRightCornerSize = new Size2F( (float)border.CornerRadius.BottomRight, (float)border.CornerRadius.BottomRight); var topCornersWidth = topLeftCornerSize.Width + topRightCornerSize.Width; if (topCornersWidth > rect.Width) { var scale = rect.Width / topCornersWidth; topLeftCornerSize.Width *= scale; topRightCornerSize.Width *= scale; } var bottomCornersWidth = bottomLeftCornerSize.Width + bottomRightCornerSize.Width; if (bottomCornersWidth > rect.Width) { var scale = rect.Width / bottomCornersWidth; bottomLeftCornerSize.Width *= scale; bottomRightCornerSize.Width *= scale; } var leftCornersHeight = topLeftCornerSize.Height + bottomLeftCornerSize.Height; if (leftCornersHeight > rect.Height) { var scale = rect.Height / leftCornersHeight; topLeftCornerSize.Height *= scale; bottomLeftCornerSize.Height *= scale; } var rightCornersHeight = topRightCornerSize.Height + bottomRightCornerSize.Height; if (rightCornersHeight > rect.Height) { var scale = rect.Height / rightCornersHeight; topRightCornerSize.Height *= scale; bottomRightCornerSize.Height *= scale; } var geometry = new D2D.PathGeometry(compositionEngine.D2DFactory); // Create the geometry of the irregular rounded rectangle. var geometrySink = geometry.Open(); // Start to the right of the topleft corner. geometrySink.BeginFigure( new Vector2( rect.Left + topLeftCornerSize.Width, rect.Top + 0), D2D.FigureBegin.Filled); //if (topCornersWidth < rect.Width) { // Top edge geometrySink.AddLine( new Vector2( rect.Left + rect.Width - topRightCornerSize.Width, rect.Top + 0)); } //if (topRightCornerSize.Width > 0) // Top-right corner geometrySink.AddArc( new D2D.ArcSegment { Point = new Vector2( rect.Left + rect.Width, rect.Top + topRightCornerSize.Height), Size = topRightCornerSize, RotationAngle = 0, SweepDirection = D2D.SweepDirection.Clockwise, ArcSize = D2D.ArcSize.Small }); // Right edge geometrySink.AddLine( new Vector2( rect.Left + rect.Width, rect.Top + rect.Height - bottomRightCornerSize.Height)); // Bottom-right corner geometrySink.AddArc( new D2D.ArcSegment { Point = new Vector2( rect.Left + rect.Width - bottomRightCornerSize.Width, rect.Top + rect.Height), Size = bottomRightCornerSize, RotationAngle = 0, SweepDirection = D2D.SweepDirection.Clockwise, ArcSize = D2D.ArcSize.Small }); // Bottom edge geometrySink.AddLine( new Vector2( rect.Left + bottomLeftCornerSize.Width, rect.Top + rect.Height)); // Bottom-left corner geometrySink.AddArc( new D2D.ArcSegment { Point = new Vector2( rect.Left + 0, rect.Top + rect.Height - bottomLeftCornerSize.Height), Size = bottomLeftCornerSize, RotationAngle = 0, SweepDirection = D2D.SweepDirection.Clockwise, ArcSize = D2D.ArcSize.Small }); // Left edge geometrySink.AddLine( new Vector2( rect.Left + 0, rect.Top + topLeftCornerSize.Height)); // Top-left corner geometrySink.AddArc( new D2D.ArcSegment { Point = new Vector2( rect.Left + topLeftCornerSize.Width, rect.Top + 0), Size = topLeftCornerSize, RotationAngle = 0, SweepDirection = D2D.SweepDirection.Clockwise, ArcSize = D2D.ArcSize.Small }); geometrySink.EndFigure(D2D.FigureEnd.Closed); geometrySink.Close(); return geometry; }