Giter Site home page Giter Site logo

boiler-s-graphics's Introduction

boiler's Graphics

Build Status GitHub GitHub release (latest by date) GitHub release (latest by date including pre-releases) Twitter

boiler's Graphics は生まれたてのベクターグラフィックスドローイングツールです。C# + Windows Presentation Foundation(WPF)で開発しています。単純な図形やビットマップを組み合わせて、あなたの望むがままのキャンバスを描くことができます。

DEMO

implemented_normal

Features

  • .NET 7
  • 64bitアプリケーション
  • 使い方の幅が広がるレイヤー機能
  • 描画を補助するポイントスナップ機能
  • 自由自在なブラシ/消しゴムツール

Requirement

boiler's Graphicsを動作させるには Windows 10.0.22000.0 以降の Windows OS が必要です。

How to install

How to use

How to use

Author

License

boiler's Graphics は MITライセンスで公開しています。

boiler-s-graphics's People

Contributors

dependabot[bot] avatar dhq-boiler avatar ghost1372 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

boiler-s-graphics's Issues

新機能ダイアログ

新機能ダイアログを実装する。
これはアプリアップデート後の初回の起動時に表示する。
ReleaseNote.mdの内容を表示する。
ボタンはOKボタンのみ。

直線&ベジエ曲線描画後操作で線が消える

直線とベジエ曲線で共通して発生するバグがあります。
例えば直線を描画した後、始点や終点の位置を操作すると、線の太さが0ptになります。
またベジエ曲線でも同様で始点や終点、制御点を操作すると、線の太さが0ptになります。

ログレベルを記録する

ログレベルはアプリのメニューから切り替えることができるが、アプリを終了するとログレベル情報が揮発してしまう。ログレベルを変更したらその値をデータベースに記録する。

Object reference not set to an instance of an object.

Surface Proのタッチディスプレイで操作していたところ、
直線ツールで描画しようとしたときに例外が発生した。

System.NullReferenceException: Object reference not set to an instance of an object.
at boilersGraphics.Adorners.StraightLineAdorner.OnMouseUp(MouseButtonEventArgs e) in D:\a\1\s\boilersGraphics\Adorners\StraightLineAdorner.cs:line 84
at System.Windows.UIElement.OnMouseUpThunk(Object sender, MouseButtonEventArgs e)
at System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler(Delegate genericHandler, Object genericTarget)
at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
at System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)
at System.Windows.UIElement.RaiseTrustedEvent(RoutedEventArgs args)
at System.Windows.Input.InputManager.ProcessStagingArea()
at System.Windows.Input.StylusWisp.WispLogic.PromoteMainToMouse(StagingAreaInputItem stagingItem)
at System.Windows.Input.StylusWisp.WispLogic.PromoteMainUpToTouch(WispStylusDevice stylusDevice, StagingAreaInputItem stagingItem)
at System.Windows.Input.StylusWisp.WispLogic.PromoteMainToTouch(ProcessInputEventArgs e, StylusEventArgs stylusEventArgs)
at System.Windows.Input.StylusWisp.WispLogic.PostProcessInput(Object sender, ProcessInputEventArgs e)
at System.Windows.Input.InputManager.RaiseProcessInputEventHandlers(Tuple`2 postProcessInput, ProcessInputEventArgs processInputEventArgs)
at System.Windows.Input.InputManager.ProcessStagingArea()
at System.Windows.Input.StylusWisp.WispLogic.InputManagerProcessInput(Object oInput)
at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)

スナップポイントの追加実装

図形を描画する時に以下のスナップポイントがないと不便。

  • 円の中心点
  • 四角形の中心点
  • 画像の中心点
  • 多角形の中心点

画像ツール使用・保存後ファイルを再度開けない

画像ツールは画像ファイルをxmlファイルに埋め込んでいるわけではないので、
画像を描画してxmlファイルを保存した後、再度同じxmlファイルを開くと、画像ファイルが存在しない場合正しく表示されなくなる。
画像ツールを使う時に画像ファイルをxmlファイルに埋め込む必要がある。
予め、設定ダイアログで「画像ツールを使う時は画像ファイルを埋め込む」オプションにより設定しておく等することで、この問題を回避することができるだろう。

ログレベルを変更したはずなのに前のログレベルでログが記録される

アプリケーションログを以下に抜粋する。ログレベルをDEBUGからINFOに変えたはずなのにDEBUGでログが記録されてしまう。

2021-12-15 13:46:50.3922|INFO|boilersGraphics.ViewModels.MainWindowViewModel|ログレベルが変更されました。変更後:Info
2021-12-15 13:46:50.3922|DEBUG|Homura.ORM.Dao`1|UPDATE Statistics_1 SET NumberOfBoots = @val_0, UptimeTicks = @val_1, NumberOfTimesTheFileWasOpenedBySpecifyingIt = @val_2, NumberOfTimesTheAutoSaveFileIsSpecifiedAndOpened = @val_3, NumberOfClicksWithThePointerTool = @val_4, CumulativeTotalOfItemsSelectedWithTheLassoTool = @val_5, NumberOfDrawsOfTheStraightLineTool = @val_6, NumberOfDrawsOfTheRectangleTool = @val_7, NumberOfDrawsOfTheEllipseTool = @val_8, NumberOfDrawsOfTheImageFileTool = @val_9, NumberOfDrawsOfTheLetterTool = @val_10, NumberOfDrawsOfTheVerticalLetterTool = @val_11, NumberOfDrawsOfPolygonTool = @val_12, NumberOfDrawsOfBezierCurveTool = @val_13, NumberOfSnapPointToolInstallations = @val_14, BrushToolDrawCount = @val_15, NumberOfTimesTheEraserToolHasBeenUsed = @val_16, NumberOfTimesSaved = @val_17, NumberOfTimesYouHaveNamedAndSaved = @val_18, NumberOfExports = @val_19, NumberOfJpegExports = @val_20, NumberOfPngExports = @val_21, NumberOfGifExports = @val_22, NumberOfBmpExports = @val_23, NumberOfTiffExports = @val_24, NumberOfWmpExports = @val_25, NumberOfTimesGrouped = @val_26, NumberOfUngrouped = @val_27, NumberOfMovesToTheFrontend = @val_28, NumberOfMovesToTheFront = @val_29, NumberOfMovesToTheBack = @val_30, NumberOfMovesToTheBackend = @val_31, NumberOfTopAlignment = @val_32, NumberOfTimesTheTopAndBottomAreCentered = @val_33, NumberOfBottomAlignment = @val_34, NumberOfLeftAlignment = @val_35, NumberOfTimesLeftAndRightCentered = @val_36, NumberOfRightAlignment = @val_37, NumberOfTimesAlignedLeftAndRight = @val_38, NumberOfTimesAlignedUpAndDown = @val_39, NumberOfTimesToMatchTheWidth = @val_40, NumberOfTimesToMatchTheHeight = @val_41, NumberOfUnions = @val_42, NumberOfIntersects = @val_43, NumberOfXors = @val_44, NumberOfExcludes = @val_45, NumberOfCuts = @val_46, NumberOfCopies = @val_47, NumberOfPasted = @val_48, NumberOfUndos = @val_49, NumberOfRedoes = @val_50, NumberOfTimesAutomaticallySaved = @val_51, NumberOfNewlyCreatedLayers = @val_52, NumberOfDeletedLayers = @val_53, NumberOfTimesTheItemWasDrawn = @val_54, NumberOfTimesTheItemWasDeleted = @val_55, NumberOfLogLevelChanges = @val_56, NumberOfTimesTheVersionInformationDialogWasDisplayed = @val_57, NumberOfTimesTheApplicationLogWasDisplayed = @val_58, NumberOfTimesSliceToolHasBeenUsed = @val_59 WHERE ID = @val_60 [@val_0=135@val_1=64710517907@val_2=41@val_3=0@val_4=0@val_5=0@val_6=1@val_7=6@val_8=1@val_9=1@val_10=0@val_11=0@val_12=0@val_13=0@val_14=0@val_15=0@val_16=0@val_17=0@val_18=0@val_19=20@val_20=20@val_21=0@val_22=0@val_23=0@val_24=0@val_25=0@val_26=0@val_27=0@val_28=0@val_29=0@val_30=0@val_31=0@val_32=0@val_33=0@val_34=0@val_35=0@val_36=0@val_37=0@val_38=0@val_39=0@val_40=0@val_41=0@val_42=0@val_43=0@val_44=0@val_45=0@val_46=0@val_47=0@val_48=0@val_49=0@val_50=0@val_51=163@val_52=0@val_53=0@val_54=14@val_55=0@val_56=144@val_57=4@val_58=20@val_59=24@val_60=00000000-0000-0000-0000-000000000000]
2021-12-15 13:46:53.4239|DEBUG|boilersGraphics.ViewModels.DiagramViewModel|SelectedItems updated
2021-12-15 13:46:53.4278|DEBUG|boilersGraphics.ViewModels.DiagramViewModel|SelectedItems updated
2021-12-15 13:46:53.4278|INFO|boilersGraphics.ViewModels.DiagramViewModel|Add item <NRectangleViewModel>{IsSelected=True,Top=163,Left=533,ZIndex=1,EnableForSelection=True,Width=257,Height=214,IsVisible=True,IsHitTestVisible=False,MouseDoubleClickCommand=Reactive.Bindings.ReactiveCommand,SupportsPropertyDialog=True,MinWidth=0,MinHeight=0,ShowConnectors=False,Right=790,Bottom=377,CenterX=661.5,CenterY=270,CenterPoint={Point:661.5,270},TransformNortification=boilersGraphics.Helpers.TransformNotification,SnapObjs=System.Collections.Generic.List`1[System.IDisposable],SelectedItems=boilersGraphics.ViewModels.SelectableDesignerItemViewModelBase[],Owner=boilersGraphics.ViewModels.DiagramViewModel,SelectItemCommand=Prism.Commands.DelegateCommand`1[System.Object],Id=0,SelectedOrder=1,Matrix=Identity,RotationAngle=0,EdgeColor=#FF000000,EdgeThickness=1,PathGeometry=M533,163L790,163 790,377 533,377z,RotatePathGeometry=null,EnablePathGeometryUpdate=True,CanDrag=True,FillColor=#FFFFFFFF,Name=,ID=62e5d03c-2368-4e58-8ffa-8e88b020169f,ParentID=00000000-0000-0000-0000-000000000000,GroupDisposable=}
2021-12-15 13:46:53.4278|DEBUG|Homura.ORM.Dao`1|UPDATE Statistics_1 SET NumberOfBoots = @val_0, UptimeTicks = @val_1, NumberOfTimesTheFileWasOpenedBySpecifyingIt = @val_2, NumberOfTimesTheAutoSaveFileIsSpecifiedAndOpened = @val_3, NumberOfClicksWithThePointerTool = @val_4, CumulativeTotalOfItemsSelectedWithTheLassoTool = @val_5, NumberOfDrawsOfTheStraightLineTool = @val_6, NumberOfDrawsOfTheRectangleTool = @val_7, NumberOfDrawsOfTheEllipseTool = @val_8, NumberOfDrawsOfTheImageFileTool = @val_9, NumberOfDrawsOfTheLetterTool = @val_10, NumberOfDrawsOfTheVerticalLetterTool = @val_11, NumberOfDrawsOfPolygonTool = @val_12, NumberOfDrawsOfBezierCurveTool = @val_13, NumberOfSnapPointToolInstallations = @val_14, BrushToolDrawCount = @val_15, NumberOfTimesTheEraserToolHasBeenUsed = @val_16, NumberOfTimesSaved = @val_17, NumberOfTimesYouHaveNamedAndSaved = @val_18, NumberOfExports = @val_19, NumberOfJpegExports = @val_20, NumberOfPngExports = @val_21, NumberOfGifExports = @val_22, NumberOfBmpExports = @val_23, NumberOfTiffExports = @val_24, NumberOfWmpExports = @val_25, NumberOfTimesGrouped = @val_26, NumberOfUngrouped = @val_27, NumberOfMovesToTheFrontend = @val_28, NumberOfMovesToTheFront = @val_29, NumberOfMovesToTheBack = @val_30, NumberOfMovesToTheBackend = @val_31, NumberOfTopAlignment = @val_32, NumberOfTimesTheTopAndBottomAreCentered = @val_33, NumberOfBottomAlignment = @val_34, NumberOfLeftAlignment = @val_35, NumberOfTimesLeftAndRightCentered = @val_36, NumberOfRightAlignment = @val_37, NumberOfTimesAlignedLeftAndRight = @val_38, NumberOfTimesAlignedUpAndDown = @val_39, NumberOfTimesToMatchTheWidth = @val_40, NumberOfTimesToMatchTheHeight = @val_41, NumberOfUnions = @val_42, NumberOfIntersects = @val_43, NumberOfXors = @val_44, NumberOfExcludes = @val_45, NumberOfCuts = @val_46, NumberOfCopies = @val_47, NumberOfPasted = @val_48, NumberOfUndos = @val_49, NumberOfRedoes = @val_50, NumberOfTimesAutomaticallySaved = @val_51, NumberOfNewlyCreatedLayers = @val_52, NumberOfDeletedLayers = @val_53, NumberOfTimesTheItemWasDrawn = @val_54, NumberOfTimesTheItemWasDeleted = @val_55, NumberOfLogLevelChanges = @val_56, NumberOfTimesTheVersionInformationDialogWasDisplayed = @val_57, NumberOfTimesTheApplicationLogWasDisplayed = @val_58, NumberOfTimesSliceToolHasBeenUsed = @val_59 WHERE ID = @val_60 [@val_0=135@val_1=64750404231@val_2=41@val_3=0@val_4=0@val_5=0@val_6=1@val_7=6@val_8=1@val_9=1@val_10=0@val_11=0@val_12=0@val_13=0@val_14=0@val_15=0@val_16=0@val_17=0@val_18=0@val_19=20@val_20=20@val_21=0@val_22=0@val_23=0@val_24=0@val_25=0@val_26=0@val_27=0@val_28=0@val_29=0@val_30=0@val_31=0@val_32=0@val_33=0@val_34=0@val_35=0@val_36=0@val_37=0@val_38=0@val_39=0@val_40=0@val_41=0@val_42=0@val_43=0@val_44=0@val_45=0@val_46=0@val_47=0@val_48=0@val_49=0@val_50=0@val_51=163@val_52=0@val_53=0@val_54=15@val_55=0@val_56=144@val_57=4@val_58=20@val_59=24@val_60=00000000-0000-0000-0000-000000000000]
2021-12-15 13:46:53.4468|DEBUG|boilersGraphics.Helpers.SnapAction|_SnapTargetDataContext == null
2021-12-15 13:46:53.4468|DEBUG|Homura.ORM.Dao`1|UPDATE Statistics_1 SET NumberOfBoots = @val_0, UptimeTicks = @val_1, NumberOfTimesTheFileWasOpenedBySpecifyingIt = @val_2, NumberOfTimesTheAutoSaveFileIsSpecifiedAndOpened = @val_3, NumberOfClicksWithThePointerTool = @val_4, CumulativeTotalOfItemsSelectedWithTheLassoTool = @val_5, NumberOfDrawsOfTheStraightLineTool = @val_6, NumberOfDrawsOfTheRectangleTool = @val_7, NumberOfDrawsOfTheEllipseTool = @val_8, NumberOfDrawsOfTheImageFileTool = @val_9, NumberOfDrawsOfTheLetterTool = @val_10, NumberOfDrawsOfTheVerticalLetterTool = @val_11, NumberOfDrawsOfPolygonTool = @val_12, NumberOfDrawsOfBezierCurveTool = @val_13, NumberOfSnapPointToolInstallations = @val_14, BrushToolDrawCount = @val_15, NumberOfTimesTheEraserToolHasBeenUsed = @val_16, NumberOfTimesSaved = @val_17, NumberOfTimesYouHaveNamedAndSaved = @val_18, NumberOfExports = @val_19, NumberOfJpegExports = @val_20, NumberOfPngExports = @val_21, NumberOfGifExports = @val_22, NumberOfBmpExports = @val_23, NumberOfTiffExports = @val_24, NumberOfWmpExports = @val_25, NumberOfTimesGrouped = @val_26, NumberOfUngrouped = @val_27, NumberOfMovesToTheFrontend = @val_28, NumberOfMovesToTheFront = @val_29, NumberOfMovesToTheBack = @val_30, NumberOfMovesToTheBackend = @val_31, NumberOfTopAlignment = @val_32, NumberOfTimesTheTopAndBottomAreCentered = @val_33, NumberOfBottomAlignment = @val_34, NumberOfLeftAlignment = @val_35, NumberOfTimesLeftAndRightCentered = @val_36, NumberOfRightAlignment = @val_37, NumberOfTimesAlignedLeftAndRight = @val_38, NumberOfTimesAlignedUpAndDown = @val_39, NumberOfTimesToMatchTheWidth = @val_40, NumberOfTimesToMatchTheHeight = @val_41, NumberOfUnions = @val_42, NumberOfIntersects = @val_43, NumberOfXors = @val_44, NumberOfExcludes = @val_45, NumberOfCuts = @val_46, NumberOfCopies = @val_47, NumberOfPasted = @val_48, NumberOfUndos = @val_49, NumberOfRedoes = @val_50, NumberOfTimesAutomaticallySaved = @val_51, NumberOfNewlyCreatedLayers = @val_52, NumberOfDeletedLayers = @val_53, NumberOfTimesTheItemWasDrawn = @val_54, NumberOfTimesTheItemWasDeleted = @val_55, NumberOfLogLevelChanges = @val_56, NumberOfTimesTheVersionInformationDialogWasDisplayed = @val_57, NumberOfTimesTheApplicationLogWasDisplayed = @val_58, NumberOfTimesSliceToolHasBeenUsed = @val_59 WHERE ID = @val_60 [@val_0=135@val_1=64750404231@val_2=41@val_3=0@val_4=0@val_5=0@val_6=1@val_7=7@val_8=1@val_9=1@val_10=0@val_11=0@val_12=0@val_13=0@val_14=0@val_15=0@val_16=0@val_17=0@val_18=0@val_19=20@val_20=20@val_21=0@val_22=0@val_23=0@val_24=0@val_25=0@val_26=0@val_27=0@val_28=0@val_29=0@val_30=0@val_31=0@val_32=0@val_33=0@val_34=0@val_35=0@val_36=0@val_37=0@val_38=0@val_39=0@val_40=0@val_41=0@val_42=0@val_43=0@val_44=0@val_45=0@val_46=0@val_47=0@val_48=0@val_49=0@val_50=0@val_51=163@val_52=0@val_53=0@val_54=15@val_55=0@val_56=144@val_57=4@val_58=20@val_59=24@val_60=00000000-0000-0000-0000-000000000000]
2021-12-15 13:46:54.4278|DEBUG|Homura.ORM.Dao`1|UPDATE Statistics_1 SET NumberOfBoots = @val_0, UptimeTicks = @val_1, NumberOfTimesTheFileWasOpenedBySpecifyingIt = @val_2, NumberOfTimesTheAutoSaveFileIsSpecifiedAndOpened = @val_3, NumberOfClicksWithThePointerTool = @val_4, CumulativeTotalOfItemsSelectedWithTheLassoTool = @val_5, NumberOfDrawsOfTheStraightLineTool = @val_6, NumberOfDrawsOfTheRectangleTool = @val_7, NumberOfDrawsOfTheEllipseTool = @val_8, NumberOfDrawsOfTheImageFileTool = @val_9, NumberOfDrawsOfTheLetterTool = @val_10, NumberOfDrawsOfTheVerticalLetterTool = @val_11, NumberOfDrawsOfPolygonTool = @val_12, NumberOfDrawsOfBezierCurveTool = @val_13, NumberOfSnapPointToolInstallations = @val_14, BrushToolDrawCount = @val_15, NumberOfTimesTheEraserToolHasBeenUsed = @val_16, NumberOfTimesSaved = @val_17, NumberOfTimesYouHaveNamedAndSaved = @val_18, NumberOfExports = @val_19, NumberOfJpegExports = @val_20, NumberOfPngExports = @val_21, NumberOfGifExports = @val_22, NumberOfBmpExports = @val_23, NumberOfTiffExports = @val_24, NumberOfWmpExports = @val_25, NumberOfTimesGrouped = @val_26, NumberOfUngrouped = @val_27, NumberOfMovesToTheFrontend = @val_28, NumberOfMovesToTheFront = @val_29, NumberOfMovesToTheBack = @val_30, NumberOfMovesToTheBackend = @val_31, NumberOfTopAlignment = @val_32, NumberOfTimesTheTopAndBottomAreCentered = @val_33, NumberOfBottomAlignment = @val_34, NumberOfLeftAlignment = @val_35, NumberOfTimesLeftAndRightCentered = @val_36, NumberOfRightAlignment = @val_37, NumberOfTimesAlignedLeftAndRight = @val_38, NumberOfTimesAlignedUpAndDown = @val_39, NumberOfTimesToMatchTheWidth = @val_40, NumberOfTimesToMatchTheHeight = @val_41, NumberOfUnions = @val_42, NumberOfIntersects = @val_43, NumberOfXors = @val_44, NumberOfExcludes = @val_45, NumberOfCuts = @val_46, NumberOfCopies = @val_47, NumberOfPasted = @val_48, NumberOfUndos = @val_49, NumberOfRedoes = @val_50, NumberOfTimesAutomaticallySaved = @val_51, NumberOfNewlyCreatedLayers = @val_52, NumberOfDeletedLayers = @val_53, NumberOfTimesTheItemWasDrawn = @val_54, NumberOfTimesTheItemWasDeleted = @val_55, NumberOfLogLevelChanges = @val_56, NumberOfTimesTheVersionInformationDialogWasDisplayed = @val_57, NumberOfTimesTheApplicationLogWasDisplayed = @val_58, NumberOfTimesSliceToolHasBeenUsed = @val_59 WHERE ID = @val_60 [@val_0=135@val_1=64760430063@val_2=41@val_3=0@val_4=0@val_5=0@val_6=1@val_7=7@val_8=1@val_9=1@val_10=0@val_11=0@val_12=0@val_13=0@val_14=0@val_15=0@val_16=0@val_17=0@val_18=0@val_19=20@val_20=20@val_21=0@val_22=0@val_23=0@val_24=0@val_25=0@val_26=0@val_27=0@val_28=0@val_29=0@val_30=0@val_31=0@val_32=0@val_33=0@val_34=0@val_35=0@val_36=0@val_37=0@val_38=0@val_39=0@val_40=0@val_41=0@val_42=0@val_43=0@val_44=0@val_45=0@val_46=0@val_47=0@val_48=0@val_49=0@val_50=0@val_51=163@val_52=0@val_53=0@val_54=15@val_55=0@val_56=144@val_57=4@val_58=20@val_59=24@val_60=00000000-0000-0000-0000-000000000000]
2021-12-15 13:46:57.4221|DEBUG|Homura.ORM.Dao`1|UPDATE Statistics_1 SET NumberOfBoots = @val_0, UptimeTicks = @val_1, NumberOfTimesTheFileWasOpenedBySpecifyingIt = @val_2, NumberOfTimesTheAutoSaveFileIsSpecifiedAndOpened = @val_3, NumberOfClicksWithThePointerTool = @val_4, CumulativeTotalOfItemsSelectedWithTheLassoTool = @val_5, NumberOfDrawsOfTheStraightLineTool = @val_6, NumberOfDrawsOfTheRectangleTool = @val_7, NumberOfDrawsOfTheEllipseTool = @val_8, NumberOfDrawsOfTheImageFileTool = @val_9, NumberOfDrawsOfTheLetterTool = @val_10, NumberOfDrawsOfTheVerticalLetterTool = @val_11, NumberOfDrawsOfPolygonTool = @val_12, NumberOfDrawsOfBezierCurveTool = @val_13, NumberOfSnapPointToolInstallations = @val_14, BrushToolDrawCount = @val_15, NumberOfTimesTheEraserToolHasBeenUsed = @val_16, NumberOfTimesSaved = @val_17, NumberOfTimesYouHaveNamedAndSaved = @val_18, NumberOfExports = @val_19, NumberOfJpegExports = @val_20, NumberOfPngExports = @val_21, NumberOfGifExports = @val_22, NumberOfBmpExports = @val_23, NumberOfTiffExports = @val_24, NumberOfWmpExports = @val_25, NumberOfTimesGrouped = @val_26, NumberOfUngrouped = @val_27, NumberOfMovesToTheFrontend = @val_28, NumberOfMovesToTheFront = @val_29, NumberOfMovesToTheBack = @val_30, NumberOfMovesToTheBackend = @val_31, NumberOfTopAlignment = @val_32, NumberOfTimesTheTopAndBottomAreCentered = @val_33, NumberOfBottomAlignment = @val_34, NumberOfLeftAlignment = @val_35, NumberOfTimesLeftAndRightCentered = @val_36, NumberOfRightAlignment = @val_37, NumberOfTimesAlignedLeftAndRight = @val_38, NumberOfTimesAlignedUpAndDown = @val_39, NumberOfTimesToMatchTheWidth = @val_40, NumberOfTimesToMatchTheHeight = @val_41, NumberOfUnions = @val_42, NumberOfIntersects = @val_43, NumberOfXors = @val_44, NumberOfExcludes = @val_45, NumberOfCuts = @val_46, NumberOfCopies = @val_47, NumberOfPasted = @val_48, NumberOfUndos = @val_49, NumberOfRedoes = @val_50, NumberOfTimesAutomaticallySaved = @val_51, NumberOfNewlyCreatedLayers = @val_52, NumberOfDeletedLayers = @val_53, NumberOfTimesTheItemWasDrawn = @val_54, NumberOfTimesTheItemWasDeleted = @val_55, NumberOfLogLevelChanges = @val_56, NumberOfTimesTheVersionInformationDialogWasDisplayed = @val_57, NumberOfTimesTheApplicationLogWasDisplayed = @val_58, NumberOfTimesSliceToolHasBeenUsed = @val_59 WHERE ID = @val_60 [@val_0=135@val_1=64790365957@val_2=41@val_3=0@val_4=0@val_5=0@val_6=1@val_7=7@val_8=1@val_9=1@val_10=0@val_11=0@val_12=0@val_13=0@val_14=0@val_15=0@val_16=0@val_17=0@val_18=0@val_19=20@val_20=20@val_21=0@val_22=0@val_23=0@val_24=0@val_25=0@val_26=0@val_27=0@val_28=0@val_29=0@val_30=0@val_31=0@val_32=0@val_33=0@val_34=0@val_35=0@val_36=0@val_37=0@val_38=0@val_39=0@val_40=0@val_41=0@val_42=0@val_43=0@val_44=0@val_45=0@val_46=0@val_47=0@val_48=0@val_49=0@val_50=0@val_51=163@val_52=0@val_53=0@val_54=15@val_55=0@val_56=144@val_57=4@val_58=21@val_59=24@val_60=00000000-0000-0000-0000-000000000000]

プライバシーポリシーの同意取得

プライバシーポリシーの同意取得をアプリ上で行う。

  • アプリ初回起動時にプライバシーポリシーの同意取得を行う。
  • プライバシーポリシー改定後にアプリ起動時にプライバシーポリシーの同意取得を行う。

プライバシーポリシーに同意しなかった場合は、アプリを終了する。

アプリケーションが起動しません

事象

exeを実行してもアプリが起動しません。

動作環境

Windows 10 21H1 64bit

下記2バージョンで確認

ver zip
v4.8.3 boilersGraphics_180.zip
unstable-20211107.2 boilersGraphics_183.zip

Windowsログ

アプリケーション:boilersGraphics.exe
フレームワークのバージョン:v4.0.30319
説明: ハンドルされない例外のため、プロセスが中止されました。
例外情報:System.Data.SQLite.SQLiteException
   場所 System.Data.SQLite.SQLite3.Open(System.String, System.String, System.Data.SQLite.SQLiteConnectionFlags, System.Data.SQLite.SQLiteOpenFlagsEnum, Int32, Boolean)
   場所 System.Data.SQLite.SQLiteConnection.Open()
   場所 Homura.ORM.Connection.OpenConnection()
   場所 Homura.ORM.Setup.DbInfoRetriever.GetTableNames(Homura.ORM.IConnection)
   場所 Homura.ORM.Setup.VersioningStrategyByTick.UpgradeToTargetVersion(Homura.ORM.IConnection)
   場所 Homura.ORM.Setup.DataVersionManager.UpgradeToTargetVersion()
   場所 boilersGraphics.ViewModels.MainWindowViewModel..ctor(Prism.Services.Dialogs.IDialogService)

例外情報:System.Reflection.TargetInvocationException
   場所 System.RuntimeMethodHandle.InvokeMethod(System.Object, System.Object[], System.Signature, Boolean)
   場所 System.Reflection.RuntimeConstructorInfo.Invoke(System.Reflection.BindingFlags, System.Reflection.Binder, System.Object[], System.Globalization.CultureInfo)
   場所 Unity.Processors.ConstructorProcessor+<>c__DisplayClass16_0.<GetResolverDelegate>b__0(Unity.Builder.BuilderContext ByRef)
   場所 Unity.Processors.MemberProcessor`2+<>c__DisplayClass8_0[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]].<GetResolver>b__0(Unity.Builder.BuilderContext ByRef)
   場所 Unity.Processors.MemberProcessor`2+<>c__DisplayClass8_0[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]].<GetResolver>b__0(Unity.Builder.BuilderContext ByRef)
   場所 Unity.Processors.MemberProcessor`2+<>c__DisplayClass8_0[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]].<GetResolver>b__0(Unity.Builder.BuilderContext ByRef)
   場所 Unity.Strategies.BuildPlanStrategy.PreBuildUp(Unity.Builder.BuilderContext ByRef)
   場所 Unity.UnityContainer+<>c.<.ctor>b__73_1(Unity.Builder.BuilderContext ByRef)

例外情報:Unity.ResolutionFailedException
   場所 Unity.UnityContainer+<>c.<.ctor>b__73_1(Unity.Builder.BuilderContext ByRef)
   場所 Unity.UnityContainer.Unity.IUnityContainer.Resolve(System.Type, System.String, Unity.Resolution.ResolverOverride[])
   場所 Prism.Unity.UnityContainerExtension.Resolve(System.Type, System.ValueTuple`2<System.Type,System.Object>[])

例外情報:Prism.Ioc.ContainerResolutionException
   場所 Prism.Unity.UnityContainerExtension.Resolve(System.Type, System.ValueTuple`2<System.Type,System.Object>[])
   場所 Prism.Mvvm.ViewModelLocationProvider.AutoWireViewModelChanged(System.Object, System.Action`2<System.Object,System.Object>)
   場所 Prism.Mvvm.ViewModelLocator.AutoWireViewModelChanged(System.Windows.DependencyObject, System.Windows.DependencyPropertyChangedEventArgs)
   場所 System.Windows.DependencyObject.OnPropertyChanged(System.Windows.DependencyPropertyChangedEventArgs)
   場所 System.Windows.FrameworkElement.OnPropertyChanged(System.Windows.DependencyPropertyChangedEventArgs)
   場所 System.Windows.DependencyObject.NotifyPropertyChange(System.Windows.DependencyPropertyChangedEventArgs)
   場所 System.Windows.DependencyObject.UpdateEffectiveValue(System.Windows.EntryIndex, System.Windows.DependencyProperty, System.Windows.PropertyMetadata, System.Windows.EffectiveValueEntry, System.Windows.EffectiveValueEntry ByRef, Boolean, Boolean, System.Windows.OperationType)
   場所 System.Windows.DependencyObject.SetValueCommon(System.Windows.DependencyProperty, System.Object, System.Windows.PropertyMetadata, Boolean, Boolean, System.Windows.OperationType, Boolean)
   場所 System.Windows.Baml2006.WpfMemberInvoker.SetValue(System.Object, System.Object)
   場所 MS.Internal.Xaml.Runtime.ClrObjectRuntime.SetValue(System.Object, System.Xaml.XamlMember, System.Object)

例外情報:System.Windows.Markup.XamlParseException
   場所 System.Windows.Markup.XamlReader.RewrapException(System.Exception, System.Xaml.IXamlLineInfo, System.Uri)
   場所 System.Windows.Markup.WpfXamlLoader.Load(System.Xaml.XamlReader, System.Xaml.IXamlObjectWriterFactory, Boolean, System.Object, System.Xaml.XamlObjectWriterSettings, System.Uri)
   場所 System.Windows.Markup.WpfXamlLoader.LoadBaml(System.Xaml.XamlReader, Boolean, System.Object, System.Xaml.Permissions.XamlAccessLevel, System.Uri)
   場所 System.Windows.Markup.XamlReader.LoadBaml(System.IO.Stream, System.Windows.Markup.ParserContext, System.Object, Boolean)

例外情報:System.Reflection.TargetInvocationException
   場所 System.RuntimeMethodHandle.InvokeMethod(System.Object, System.Object[], System.Signature, Boolean)
   場所 System.Reflection.RuntimeConstructorInfo.Invoke(System.Reflection.BindingFlags, System.Reflection.Binder, System.Object[], System.Globalization.CultureInfo)
   場所 Unity.Processors.ConstructorProcessor+<>c__DisplayClass16_0.<GetResolverDelegate>b__0(Unity.Builder.BuilderContext ByRef)
   場所 Unity.Processors.MemberProcessor`2+<>c__DisplayClass8_0[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]].<GetResolver>b__0(Unity.Builder.BuilderContext ByRef)
   場所 Unity.Processors.MemberProcessor`2+<>c__DisplayClass8_0[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]].<GetResolver>b__0(Unity.Builder.BuilderContext ByRef)
   場所 Unity.Processors.MemberProcessor`2+<>c__DisplayClass8_0[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]].<GetResolver>b__0(Unity.Builder.BuilderContext ByRef)
   場所 Unity.Strategies.BuildPlanStrategy.PreBuildUp(Unity.Builder.BuilderContext ByRef)
   場所 Unity.UnityContainer+<>c.<.ctor>b__73_1(Unity.Builder.BuilderContext ByRef)

例外情報:Unity.ResolutionFailedException
   場所 Unity.UnityContainer+<>c.<.ctor>b__73_1(Unity.Builder.BuilderContext ByRef)
   場所 Unity.UnityContainer.Unity.IUnityContainer.Resolve(System.Type, System.String, Unity.Resolution.ResolverOverride[])
   場所 Prism.Unity.UnityContainerExtension.Resolve(System.Type, System.ValueTuple`2<System.Type,System.Object>[])

例外情報:Prism.Ioc.ContainerResolutionException
   場所 Prism.Unity.UnityContainerExtension.Resolve(System.Type, System.ValueTuple`2<System.Type,System.Object>[])
   場所 Prism.Ioc.IContainerProviderExtensions.Resolve[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]](Prism.Ioc.IContainerProvider)
   場所 Prism.PrismApplicationBase.Initialize()
   場所 Prism.PrismApplicationBase.InitializeInternal()
   場所 boilersGraphics.App.OnStartup(System.Windows.StartupEventArgs)
   場所 System.Windows.Application.<.ctor>b__1_0(System.Object)
   場所 System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate, System.Object, Int32)
   場所 System.Windows.Threading.ExceptionWrapper.TryCatchWhen(System.Object, System.Delegate, System.Object, Int32, System.Delegate)
   場所 System.Windows.Threading.DispatcherOperation.InvokeImpl()
   場所 MS.Internal.CulturePreservingExecutionContext.CallbackWrapper(System.Object)
   場所 System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
   場所 System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
   場所 System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)
   場所 MS.Internal.CulturePreservingExecutionContext.Run(MS.Internal.CulturePreservingExecutionContext, System.Threading.ContextCallback, System.Object)
   場所 System.Windows.Threading.DispatcherOperation.Invoke()
   場所 System.Windows.Threading.Dispatcher.ProcessQueue()
   場所 System.Windows.Threading.Dispatcher.WndProcHook(IntPtr, Int32, IntPtr, IntPtr, Boolean ByRef)
   場所 MS.Win32.HwndWrapper.WndProc(IntPtr, Int32, IntPtr, IntPtr, Boolean ByRef)
   場所 MS.Win32.HwndSubclass.DispatcherCallbackOperation(System.Object)
   場所 System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate, System.Object, Int32)
   場所 System.Windows.Threading.ExceptionWrapper.TryCatchWhen(System.Object, System.Delegate, System.Object, Int32, System.Delegate)
   場所 System.Windows.Threading.Dispatcher.LegacyInvokeImpl(System.Windows.Threading.DispatcherPriority, System.TimeSpan, System.Delegate, System.Object, Int32)
   場所 MS.Win32.HwndSubclass.SubclassWndProc(IntPtr, Int32, IntPtr, IntPtr)
   場所 MS.Win32.UnsafeNativeMethods.DispatchMessage(System.Windows.Interop.MSG ByRef)
   場所 System.Windows.Threading.Dispatcher.PushFrameImpl(System.Windows.Threading.DispatcherFrame)
   場所 System.Windows.Application.RunDispatcher(System.Object)
   場所 System.Windows.Application.RunInternal(System.Windows.Window)
   場所 boilersGraphics.App.Main()

私見

MainWindowViewModel(49)にて、%Appdata%\dhq_boiler\boilersGraphicsフォルダをdbファイルの置き場所としていますが、新規実行の環境では、該当のフォルダが存在しないためファイル作成に失敗しているように見えます。

フォルダを作成するとアプリケーションは起動します。よって、フォルダ作成処理の追加を提案します。

// using System.IO;

var dbDirectory = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), @"dhq_boiler\boilersGraphics");
var dbFilePath = Path.Combine(dbDirectory, "bg.db");

Directory.CreateDirectory(dbDirectory);
ConnectionManager.SetDefaultConnection($"DataSource={dbFilePath}", typeof(SQLiteConnection));

自動保存機能の実装

作業中にアプリが落ちる時がたまにある。そんなときに限って作業内容を保存していない時がよくあるので、自動保存機能を実装してほしい。

バージョンダイアログが開かない

バージョンダイアログを開こうとした時に例外が発生した。

Prism.Ioc.ContainerResolutionException: An unexpected error occurred while resolving 'System.Object', with the service name 'Version'
---> Unity.ResolutionFailedException: Exception has been thrown by the target of an invocation.


Exception occurred while:
on constructor: Version()
(System.Object, boilersGraphics.Views.Version, Version)

---> System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation.
---> System.Windows.Markup.XamlParseException: プロパティ 'Prism.Mvvm.ViewModelLocator.AutoWireViewModel' の Set で例外がスローされました。
---> Prism.Ioc.ContainerResolutionException: An unexpected error occurred while resolving 'boilersGraphics.ViewModels.VersionViewModel'
---> Unity.ResolutionFailedException: Exception has been thrown by the target of an invocation.


Exception occurred while:
on constructor: VersionViewModel()

• while resolving: VersionViewModel

---> System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation.
---> System.Net.WebException: An exception occurred during a WebClient request.
---> System.UnauthorizedAccessException: Access to the path 'C:\WINDOWS\system32\LICENSE' is denied.
at Microsoft.Win32.SafeHandles.SafeFileHandle.CreateFile(String fullPath, FileMode mode, FileAccess access, FileShare share, FileOptions options)
at Microsoft.Win32.SafeHandles.SafeFileHandle.Open(String fullPath, FileMode mode, FileAccess access, FileShare share, FileOptions options, Int64 preallocationSize)
at System.IO.Strategies.OSFileStreamStrategy..ctor(String path, FileMode mode, FileAccess access, FileShare share, FileOptions options, Int64 preallocationSize)
at System.IO.Strategies.FileStreamHelpers.ChooseStrategyCore(String path, FileMode mode, FileAccess access, FileShare share, FileOptions options, Int64 preallocationSize)
at System.IO.Strategies.FileStreamHelpers.ChooseStrategy(FileStream fileStream, String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, Int64 preallocationSize)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access)
at System.Net.WebClient.DownloadFile(Uri address, String fileName)
--- End of inner exception stack trace ---
at System.Net.WebClient.DownloadFile(Uri address, String fileName)
at System.Net.WebClient.DownloadFile(String address, String fileName)
at boilersGraphics.ViewModels.VersionViewModel.DownloadFile(WebClient client, String url, String file)
at boilersGraphics.ViewModels.VersionViewModel.LicenseReadToEnd()
at boilersGraphics.ViewModels.VersionViewModel..ctor()
--- End of inner exception stack trace ---
at System.RuntimeMethodHandle.InvokeMethod(Object target, Span1& arguments, Signature sig, Boolean constructor, Boolean wrapExceptions) at System.Reflection.RuntimeConstructorInfo.Invoke(BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) at Unity.Processors.ConstructorDiagnostic.<>c__DisplayClass14_0.<GetResolverDelegate>b__0(BuilderContext& c) at Unity.Processors.MemberProcessor2.<>c__DisplayClass8_0.b__0(BuilderContext& c)
at Unity.Processors.MemberProcessor2.<>c__DisplayClass8_0.<GetResolver>b__0(BuilderContext& c) at Unity.Processors.MemberProcessor2.<>c__DisplayClass8_0.b__0(BuilderContext& c)
at Unity.UnityContainer.<>c__DisplayClass113_0.b__0(BuilderContext& c)
at Unity.Strategies.BuildPlanStrategy.PreBuildUp(BuilderContext& context)
at Unity.UnityContainer.ExecuteValidatingPlan(BuilderContext& context)
--- End of inner exception stack trace ---
at Unity.UnityContainer.ExecuteValidatingPlan(BuilderContext& context)
at Unity.UnityContainer.Unity.IUnityContainer.Resolve(Type type, String name, Resolv
Exception details truncated at 4000 chars.

Object reference not set to an instance of an object.

レイヤーウィンドウでスナップポイントをDeleteキーで削除しようとしたときに
例外が発生した。

System.NullReferenceException: Object reference not set to an instance of an object.
at boilersGraphics.ViewModels.DiagramViewModel.Remove(SelectableDesignerItemViewModelBase item) in D:\a\1\s\boilersGraphics\ViewModels\DiagramViewModel.cs:line 1374
at boilersGraphics.ViewModels.DiagramViewModel.ExecuteRemoveItemCommand(Object parameter) in D:\a\1\s\boilersGraphics\ViewModels\DiagramViewModel.cs:line 1284
at boilersGraphics.ViewModels.DiagramViewModel.<.ctor>b__313_1(Object p) in D:\a\1\s\boilersGraphics\ViewModels\DiagramViewModel.cs:line 230
at boilersGraphics.ViewModels.MainWindowViewModel.ExecuteDeleteSelectedItemsCommand(Object parameter) in D:\a\1\s\boilersGraphics\ViewModels\MainWindowViewModel.cs:line 419
at boilersGraphics.ViewModels.MainWindowViewModel.<.ctor>b__10_0(Object p) in D:\a\1\s\boilersGraphics\ViewModels\MainWindowViewModel.cs:line 98
at System.Windows.Input.CommandManager.TranslateInput(IInputElement targetElement, InputEventArgs inputEventArgs)
at System.Windows.UIElement.OnKeyDownThunk(Object sender, KeyEventArgs e)
at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
at System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)
at System.Windows.UIElement.RaiseTrustedEvent(RoutedEventArgs args)
at System.Windows.Input.InputManager.ProcessStagingArea()
at System.Windows.Input.InputProviderSite.ReportInput(InputReport inputReport)
at System.Windows.Interop.HwndKeyboardInputProvider.ProcessKeyAction(MSG& msg, Boolean& handled)
at System.Windows.Interop.HwndSource.CriticalTranslateAccelerator(MSG& msg, ModifierKeys modifiers)
at System.Windows.Interop.HwndSource.OnPreprocessMessage(Object param)
at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)

ツールのアイコンの背景を透明にする

文字ツールと縦書きツールのアイコンの背景がWhiteになっている。
これを透明(Transparent)に変更する。
アイコンの画像のフォーマットはpngにする。

ミラーツール

ミラーツールを実装する。点対称モードと線対称モードを実装する。

スライスツール

任意の領域を選択してその抽出された領域のみに対してエクスポートする機能があると便利。

Object reference not set to an instance of an object.

Surface Proのタッチディスプレイで操作していたところ、
四角形ツールで描画しようとしたときに例外が発生した。

System.NullReferenceException: Object reference not set to an instance of an object.
at boilersGraphics.Adorners.RectangleAdorner.OnMouseUp(MouseButtonEventArgs e) in D:\a\1\s\boilersGraphics\Adorners\RectangleAdorner.cs:line 74
at System.Windows.UIElement.OnMouseUpThunk(Object sender, MouseButtonEventArgs e)
at System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler(Delegate genericHandler, Object genericTarget)
at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
at System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)
at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
at System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)
at System.Windows.UIElement.RaiseTrustedEvent(RoutedEventArgs args)
at System.Windows.Input.InputManager.ProcessStagingArea()
at System.Windows.Input.InputManager.ProcessInput(InputEventArgs input)
at System.Windows.Input.StylusWisp.WispLogic.PromoteMainToMouse(StagingAreaInputItem stagingItem)
at System.Windows.Input.StylusWisp.WispLogic.PromoteMainUpToTouch(WispStylusDevice stylusDevice, StagingAreaInputItem stagingItem)
at System.Windows.Input.StylusWisp.WispLogic.PromoteMainToTouch(ProcessInputEventArgs e, StylusEventArgs stylusEventArgs)
at System.Windows.Input.StylusWisp.WispLogic.PromoteMainToOther(ProcessInputEventArgs e)
at System.Windows.Input.StylusWisp.WispLogic.PostProcessInput(Object sender, ProcessInputEventArgs e)
at System.Windows.Input.InputManager.RaiseProcessInputEventHandlers(Tuple`2 postProcessInput, ProcessInputEventArgs processInputEventArgs)
at System.Windows.Input.InputManager.ProcessStagingArea()
at System.Windows.Input.InputManager.ProcessInput(InputEventArgs input)
at System.Windows.Input.StylusWisp.WispLogic.InputManagerProcessInput(Object oInput)
at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)

図形ダブルクリックで描画プロパティを表示

図形をダブルクリックすることでダイアログが表示されるようにする。
その中では図形の左、上、右、下、中心の点の座標がテキストボックスで変更できるようになっていて、それを変更すると図形の形状が変更される。

アプリケーションログの実装

boiler's Graphicsにはまだアプリケーションログが実装されていない。バグの追跡をするために必要なので実装したい。
アプリケーションログはメインメニューのヘルプあたりから開けるようにしておきたい。
ヘルプ→アプリケーションログを開く

多角形ツールで回転させたい

多角形ツールを使う時、図形を回転させたい時がある。
でも現行だと、いちいち入力したものを一つ一つ修正しなければならないので、
スライダーで角度を0°≦θ≦360°で指定できるようにしてほしい。

統計の実装

様々なアクティビティ(アプリ起動回数、ツールの使用回数など)を記録して、メインメニューのヘルプ→統計から閲覧することができるとよい。
統計情報はSQLiteのデータベースに保存するようにする。(任意のタイミングで削除できる)
ORMライブラリはHomuraを使用する。
https://www.nuget.org/packages/Homura

扇形ツール

扇形を描画するツールを新たに実装したい。

パラメーター

  • 半径
  • 開始角度
  • 終了角度

このツールでは連続3クリックで扇形を描画する。

  1. 中心点の決定
  2. 半径と開始角度の決定
  3. 終了角度の決定

描画プロパティ画面で短径、長径の指定ができたら面白いかもしれない。

An unexpected error occurred while resolving 'System.Object', with the service name 'Export'

Surface Proでテストしていた時に例外が発生した。
いくつかのスナップポイントを設置した後、スライスツールを使用した時に例外が発生した。

Prism.Ioc.ContainerResolutionException: An unexpected error occurred while resolving 'System.Object', with the service name 'Export'
---> Unity.ResolutionFailedException: Exception has been thrown by the target of an invocation.


Exception occurred while:
on constructor: Export()
(System.Object, boilersGraphics.Views.Export, Export)

---> System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation.
---> System.Windows.Markup.XamlParseException: プロパティ 'Prism.Mvvm.ViewModelLocator.AutoWireViewModel' の Set で例外がスローされました。
---> Prism.Ioc.ContainerResolutionException: An unexpected error occurred while resolving 'boilersGraphics.ViewModels.ExportViewModel'
---> Unity.ResolutionFailedException: Exception has been thrown by the target of an invocation.


Exception occurred while:
on constructor: ExportViewModel()

• while resolving: ExportViewModel

---> System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation.
---> System.InvalidOperationException: Sequence contains no matching element
at System.Linq.ThrowHelper.ThrowNoMatchException()
at boilersGraphics.ViewModels.ExportViewModel.RenderForeground(DiagramViewModel diagramViewModel, DesignerCanvas designerCanvas, DrawingContext context, BackgroundViewModel background) in D:\a\1\s\boilersGraphics\ViewModels\ExportViewModel.cs:line 188
at boilersGraphics.ViewModels.ExportViewModel.Render(DesignerCanvas designerCanvas, DiagramViewModel diagramViewModel, BackgroundViewModel backgroundItem) in D:\a\1\s\boilersGraphics\ViewModels\ExportViewModel.cs:line 158
at boilersGraphics.ViewModels.ExportViewModel.<>c__DisplayClass33_0.<.ctor>b__5(Nullable1 x) in D:\a\1\s\boilersGraphics\ViewModels\ExportViewModel.cs:line 74 at System.Reactive.AnonymousObserver1.OnNextCore(T value) in /_/Rx.NET/Source/src/System.Reactive/AnonymousObserver.cs:line 67
at System.Reactive.ObserverBase1.OnNext(T value) in /_/Rx.NET/Source/src/System.Reactive/ObserverBase.cs:line 34 at Reactive.Bindings.ReactivePropertySlim1.Subscribe(IObserver1 observer) at System.ObservableExtensions.Subscribe[T](IObservable1 source, Action1 onNext) in /_/Rx.NET/Source/src/System.Reactive/Observable.Extensions.cs:line 63 at boilersGraphics.ViewModels.ExportViewModel..ctor() in D:\a\1\s\boilersGraphics\ViewModels\ExportViewModel.cs:line 68 --- End of inner exception stack trace --- at System.RuntimeMethodHandle.InvokeMethod(Object target, Span1& arguments, Signature sig, Boolean constructor, Boolean wrapExceptions)
at System.Reflection.RuntimeConstructorInfo.Invoke(BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at Unity.Processors.ConstructorDiagnostic.<>c__DisplayClass14_0.b__0(BuilderContext& c)
at Unity.Processors.MemberProcessor2.<>c__DisplayClass8_0.<GetResolver>b__0(BuilderContext& c) at Unity.Processors.MemberProcessor2.<>c__DisplayClass8_0.b__0(BuilderContext& c)
at Unity.Processors.MemberProcessor2.<>c__DisplayClass8_0.<GetResolver>b__0(BuilderContext& c) at Unity.UnityContainer.<>c__DisplayClass113_0.<OptimizingFactory>b__0(BuilderContext& c) at Unity.Strategies.BuildPlanStrategy.PreBuildUp(BuilderContext& context) at Unity.UnityContainer.ExecuteValidatingPlan(BuilderContext& context) --- End of inner exception stack trace --- at Unity.UnityContainer.ExecuteValidatingPlan(BuilderContext& context) at Unity.UnityContainer.Unity.IUnityContainer.Resolve(Type type, String name, ResolverOverride[] overrides) at Prism.Unity.UnityContainerExtension.Resolve(Type type, ValueTuple2[] parameters)
--- End of inner exception stack trace ---
at Prism.Unity.UnityContainerExtension.Resolve(Type type, ValueTuple`2[] parameters)

Exception details truncated at 4000 chars.

TEST

  • left_bottom
    left_bottom_remake

  • right_bottom
    right_bottom_remake

  • right_top
    right_top_remake

自動保存ファイル名の右にファイルサイズを添える

ファイル→開く→自動保存したファイルを指定→(自動保存ファイルのリスト)というように表示されるが、このリストのMenuItemのヘッダーに自動保存ファイル名が指定されている。これを「自動保存ファイル名 + ファイルサイズ」のようにファイルサイズを追加したい。

自動保存したデータを源に遡る

自動保存したデータは一時領域に積んでいくことになる。これを遡って必要なデータのみを保存できるようにするには自動保存したデータ群一つ一つを閲覧できるようにしユーザが目視で確認したデータを保存できるようにする。一時領域に積まれたデータ群はいつ消すべきかは議論が分かれるところだと思う。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.