개정판 b35682c3
issue #0007 angle 문제 수정( Key event가 이상함)
Change-Id: I7af7ff329c12375823c4111233f091ad6a7dcdaa
KCOM.sln | ||
---|---|---|
43 | 43 |
테스트.txt = 테스트.txt |
44 | 44 |
EndProjectSection |
45 | 45 |
EndProject |
46 |
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MarkupTest", "MarkupTest\MarkupTest.csproj", "{9466FF0C-EBD2-4FEE-960C-6D5C87C6D60C}" |
|
47 |
EndProject |
|
46 | 48 |
Global |
47 | 49 |
GlobalSection(SolutionConfigurationPlatforms) = preSolution |
48 | 50 |
Debug|Any CPU = Debug|Any CPU |
... | ... | |
221 | 223 |
{9EFE95D6-9985-422A-A76F-285C8CF73617}.Release|x64.Build.0 = Release|Any CPU |
222 | 224 |
{9EFE95D6-9985-422A-A76F-285C8CF73617}.Release|x86.ActiveCfg = Release|Any CPU |
223 | 225 |
{9EFE95D6-9985-422A-A76F-285C8CF73617}.Release|x86.Build.0 = Release|Any CPU |
226 |
{9466FF0C-EBD2-4FEE-960C-6D5C87C6D60C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU |
|
227 |
{9466FF0C-EBD2-4FEE-960C-6D5C87C6D60C}.Debug|Any CPU.Build.0 = Debug|Any CPU |
|
228 |
{9466FF0C-EBD2-4FEE-960C-6D5C87C6D60C}.Debug|x64.ActiveCfg = Debug|Any CPU |
|
229 |
{9466FF0C-EBD2-4FEE-960C-6D5C87C6D60C}.Debug|x64.Build.0 = Debug|Any CPU |
|
230 |
{9466FF0C-EBD2-4FEE-960C-6D5C87C6D60C}.Debug|x86.ActiveCfg = Debug|Any CPU |
|
231 |
{9466FF0C-EBD2-4FEE-960C-6D5C87C6D60C}.Debug|x86.Build.0 = Debug|Any CPU |
|
232 |
{9466FF0C-EBD2-4FEE-960C-6D5C87C6D60C}.Release|Any CPU.ActiveCfg = Release|Any CPU |
|
233 |
{9466FF0C-EBD2-4FEE-960C-6D5C87C6D60C}.Release|Any CPU.Build.0 = Release|Any CPU |
|
234 |
{9466FF0C-EBD2-4FEE-960C-6D5C87C6D60C}.Release|x64.ActiveCfg = Release|Any CPU |
|
235 |
{9466FF0C-EBD2-4FEE-960C-6D5C87C6D60C}.Release|x64.Build.0 = Release|Any CPU |
|
236 |
{9466FF0C-EBD2-4FEE-960C-6D5C87C6D60C}.Release|x86.ActiveCfg = Release|Any CPU |
|
237 |
{9466FF0C-EBD2-4FEE-960C-6D5C87C6D60C}.Release|x86.Build.0 = Release|Any CPU |
|
224 | 238 |
EndGlobalSection |
225 | 239 |
GlobalSection(SolutionProperties) = preSolution |
226 | 240 |
HideSolutionNode = FALSE |
KCOM/Assets/RadGridViewStyleResourceDictionary.xaml | ||
---|---|---|
49 | 49 |
<SolidColorBrush x:Key="ItemInnerBorder_Selected" Color="#2181FF"/> |
50 | 50 |
<SolidColorBrush x:Key="ItemBackground_Selected" Color="Transparent"/> |
51 | 51 |
<SolidColorBrush x:Key="ItemOuterBorder_Invalid" Color="#FFCE7D7D"/> |
52 |
<SolidColorBrush x:Key="HorizontalGridLinesBrush" Color="#FFB0AFAF"/> |
|
52 | 53 |
<LinearGradientBrush x:Key="ItemInnerBorder_Invalid" EndPoint="0.5,1" StartPoint="0.5,0"> |
53 | 54 |
<GradientStop Color="#FFEBF4FD"/> |
54 | 55 |
<GradientStop Color="#FFDBEAFD" Offset="1"/> |
... | ... | |
262 | 263 |
<telerik:GridViewToggleButton x:Name="PART_HierarchyExpandButton" Grid.Column="2" IsHitTestVisible="{Binding IsExpandable, RelativeSource={RelativeSource TemplatedParent}}" IsTabStop="{TemplateBinding IsTabStop}" IsChecked="{Binding IsExpanded, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}" Opacity="{Binding IsExpandable, Converter={StaticResource BooleanToOpacityConverter}, RelativeSource={RelativeSource TemplatedParent}}" telerik:SelectiveScrollingGrid.SelectiveScrollingOrientation="Vertical" telerik:StyleManager.Theme="{StaticResource Theme}" Visibility="{Binding HasHierarchy, Converter={StaticResource BooleanToVisibilityConverter}, RelativeSource={RelativeSource TemplatedParent}}" Width="25"/> |
263 | 264 |
<Border Grid.Column="2" telerik:SelectiveScrollingGrid.SelectiveScrollingOrientation="Vertical" Visibility="{Binding HasHierarchy, Converter={StaticResource BooleanToVisibilityConverter}, RelativeSource={RelativeSource TemplatedParent}}"/> |
264 | 265 |
<telerik:DataCellsPresenter x:Name="PART_DataCellsPresenter" Grid.Column="3" telerik:StyleManager.Theme="{StaticResource Theme}"/> |
265 |
<Border x:Name="PART_RowBorder" BorderBrush="{StaticResource HorizontalGridLinesBrush}" BorderThickness="{Binding HorizontalGridLinesWidth, ConverterParameter=Bottom, Converter={StaticResource GridLineWidthToThicknessConverter}, RelativeSource={RelativeSource TemplatedParent}}" Grid.ColumnSpan="4" Grid.Column="1" HorizontalAlignment="{Binding RenderHorizontalAlignment, RelativeSource={RelativeSource TemplatedParent}}" MinWidth="{Binding RenderWidth, RelativeSource={RelativeSource TemplatedParent}}" Grid.RowSpan="4" telerik:SelectiveScrollingGrid.SelectiveScrollingOrientation="Vertical" VerticalAlignment="Bottom"/>
|
|
266 |
<Border x:Name="PART_RowBorder" BorderBrush="{DynamicResource HorizontalGridLinesBrush}" BorderThickness="{Binding HorizontalGridLinesWidth, ConverterParameter=Bottom, Converter={StaticResource GridLineWidthToThicknessConverter}, RelativeSource={RelativeSource TemplatedParent}}" Grid.ColumnSpan="4" Grid.Column="1" HorizontalAlignment="{Binding RenderHorizontalAlignment, RelativeSource={RelativeSource TemplatedParent}}" MinWidth="{Binding RenderWidth, RelativeSource={RelativeSource TemplatedParent}}" Grid.RowSpan="4" telerik:SelectiveScrollingGrid.SelectiveScrollingOrientation="Vertical" VerticalAlignment="Bottom"/>
|
|
266 | 267 |
<Border BorderBrush="{StaticResource ControlOuterBorder}" BorderThickness="0,1" Background="{StaticResource GridView_HierarchyBackground}" Grid.ColumnSpan="2" Grid.Column="2" HorizontalAlignment="{Binding RenderHorizontalAlignment, RelativeSource={RelativeSource TemplatedParent}}" MaxWidth="30000" Padding="6" Grid.Row="2" telerik:SelectiveScrollingGrid.SelectiveScrollingClip="True" Visibility="{Binding IsExpanded, Converter={StaticResource BooleanToVisibilityConverter}, RelativeSource={RelativeSource TemplatedParent}}"> |
267 | 268 |
<ContentPresenter x:Name="PART_HierarchyChildPresenter" telerik:SelectiveScrollingGrid.SelectiveScrollingClip="True"/> |
268 | 269 |
</Border> |
KCOM/Common/ViewerDataModel.cs | ||
---|---|---|
79 | 79 |
|
80 | 80 |
private double angle = 0; |
81 | 81 |
|
82 |
private double pageAngle = 0; |
|
83 |
|
|
82 | 84 |
private double angleOffsetX = 0; |
83 | 85 |
|
84 | 86 |
private double angleOffsetY = 0; |
... | ... | |
899 | 901 |
} |
900 | 902 |
} |
901 | 903 |
|
904 |
public double PageAngle |
|
905 |
{ |
|
906 |
get |
|
907 |
{ |
|
908 |
return pageAngle; |
|
909 |
} |
|
910 |
set |
|
911 |
{ |
|
912 |
pageAngle = value; |
|
913 |
OnPropertyChanged("PageAngle"); |
|
914 |
} |
|
915 |
} |
|
916 |
|
|
902 | 917 |
private bool _PageBalanceMode { get; set; } |
903 | 918 |
public bool PageBalanceMode |
904 | 919 |
{ |
KCOM/Controls/AdornerFinal.xaml | ||
---|---|---|
15 | 15 |
<Setter.Value> |
16 | 16 |
<ControlTemplate TargetType="Thumb"> |
17 | 17 |
<Grid > |
18 |
<Rectangle x:Name="RectThumb" Width="{TemplateBinding Width}" Height="{TemplateBinding Height}" Fill="#ffcfcfce" |
|
18 |
<Rectangle x:Name="RectThumb" Width="{TemplateBinding Width}" Height="{TemplateBinding Height}" Fill="#ffcfcfce"
|
|
19 | 19 |
Opacity="0.6" Stroke="#ff6a6b68" StrokeDashArray="2 2" MouseLeftButtonDown="RectThumb_MouseLeftButtonDown"> |
20 | 20 |
</Rectangle> |
21 | 21 |
<telerik:RadDropDownButton DropDownIndicatorVisibility="Collapsed" IsHitTestVisible="False" x:Name="Date_Drop" Opacity="0.01" |
... | ... | |
40 | 40 |
<Setter.Value> |
41 | 41 |
<ControlTemplate TargetType="Thumb"> |
42 | 42 |
<!--<TextBox Text="" x:Name="testText" Loaded="testText_Loaded" Width="{Binding Width, ElementName=Self}" Height="{Binding Height, ElementName=Self}"/>--> |
43 |
<Rectangle Fill="#ff8ef814" Width="{Binding Width, ElementName=Self}" Height="{Binding Height, ElementName=Self}"
|
|
43 |
<Rectangle x:Name="thumbRect" Fill="#ff8ef814" Width="{TemplateBinding Width}" Height="{TemplateBinding Height}"
|
|
44 | 44 |
Opacity="0.6" MouseLeftButtonDown="RectThumb_MouseLeftButtonDown"/> |
45 | 45 |
</ControlTemplate> |
46 | 46 |
</Setter.Value> |
... | ... | |
83 | 83 |
<Ellipse Stroke="#ff2e3436" StrokeThickness="2" MouseLeftButtonDown="ControlPointMouseLeftButtonDown" |
84 | 84 |
HorizontalAlignment="Center" Width="20" Height="20" Margin="0,0,0,0" Canvas.ZIndex="1"> |
85 | 85 |
<Ellipse.Fill> |
86 |
<SolidColorBrush Color="#fff814df" Opacity="{Binding Opacity}"/> |
|
86 |
<SolidColorBrush Color="#fff814df"/> |
|
87 |
<!--<SolidColorBrush Color="#fff814df" Opacity="{Binding Opacity, RelativeSource={RelativeSource TemplatedParent}}"/>--> |
|
87 | 88 |
</Ellipse.Fill> |
88 | 89 |
<i:Interaction.Behaviors> |
89 | 90 |
<behavior:ExpandingMouseOver ScaleFactor="2"/> |
KCOM/Controls/AdornerFinal.xaml.cs | ||
---|---|---|
303 | 303 |
{ |
304 | 304 |
if (AngleValue == 0) |
305 | 305 |
{ |
306 |
AngleValue = (item.DrawingData as TextControl).Angle; |
|
306 |
AngleValue = (item.DrawingData as TextControl).CommentAngle;
|
|
307 | 307 |
} |
308 | 308 |
double X = Canvas.GetLeft((item.DrawingData as TextControl)); |
309 | 309 |
double Y = Canvas.GetTop((item.DrawingData as TextControl)); |
... | ... | |
369 | 369 |
Group_ID = member.GroupID, |
370 | 370 |
}); |
371 | 371 |
(member as ArrowTextControl).Base_TextBox.IsHitTestVisible = false; |
372 |
AngleValue = (member as ArrowTextControl).Angle; |
|
372 |
AngleValue = (member as ArrowTextControl).CommentAngle;
|
|
373 | 373 |
Observable.FromEventPattern(((ArrowTextControl)member).Base_TextBox, "LostFocus").Subscribe(a => |
374 | 374 |
{ |
375 | 375 |
TextCompensation = false; |
... | ... | |
383 | 383 |
break; |
384 | 384 |
case "ImgControl": |
385 | 385 |
this.Members.Add(new AdornerMember { DrawingData = member, Drawingtype = member.ControlType, ThumbList = new List<MyThumb>(), Symbol_ID = member.SymbolID, Group_ID = member.GroupID }); |
386 |
AngleValue = (member as ImgControl).Angle; |
|
386 |
AngleValue = (member as ImgControl).CommentAngle;
|
|
387 | 387 |
break; |
388 | 388 |
case "DateControl": |
389 | 389 |
this.Members.Add(new AdornerMember { DrawingData = member, Drawingtype = member.ControlType, ThumbList = new List<MyThumb>(), Symbol_ID = member.SymbolID, Group_ID = member.GroupID }); |
390 |
AngleValue = (member as DateControl).Angle; |
|
390 |
AngleValue = (member as DateControl).CommentAngle;
|
|
391 | 391 |
break; |
392 | 392 |
case "SignControl": |
393 | 393 |
this.Members.Add(new AdornerMember { DrawingData = member, Drawingtype = member.ControlType, ThumbList = new List<MyThumb>(), Symbol_ID = member.SymbolID, Group_ID = member.GroupID }); |
394 |
AngleValue = (member as SignControl).Angle; |
|
394 |
AngleValue = (member as SignControl).CommentAngle;
|
|
395 | 395 |
break; |
396 | 396 |
case "SymControl": |
397 | 397 |
this.Members.Add(new AdornerMember { DrawingData = member, Drawingtype = member.ControlType, ThumbList = new List<MyThumb>(), Symbol_ID = member.SymbolID, Group_ID = member.GroupID }); |
398 |
AngleValue = (member as SymControl).Angle; |
|
398 |
AngleValue = (member as SymControl).CommentAngle;
|
|
399 | 399 |
break; |
400 | 400 |
case "SymControlN": |
401 | 401 |
this.Members.Add(new AdornerMember { DrawingData = member, Drawingtype = member.ControlType, ThumbList = new List<MyThumb>(), Symbol_ID = member.SymbolID, Group_ID = member.GroupID }); |
402 |
AngleValue = (member as SymControlN).Angle; |
|
402 |
AngleValue = (member as SymControlN).CommentAngle;
|
|
403 | 403 |
break; |
404 | 404 |
case "TextControl": |
405 | 405 |
this.Members.Add(new AdornerMember { DrawingData = member, Drawingtype = ControlType.TextControl, ThumbList = new List<MyThumb>(), Symbol_ID = member.SymbolID, Group_ID = member.GroupID }); |
... | ... | |
422 | 422 |
DragThumb.RenderTransformOrigin = new Point(0.0, 0.0); |
423 | 423 |
DragThumb.RenderTransform = new RotateTransform() |
424 | 424 |
{ |
425 |
Angle = (member as TextControl).Angle, |
|
425 |
Angle = (member as TextControl).CommentAngle,
|
|
426 | 426 |
//CenterX = middle.X, |
427 | 427 |
//CenterY = middle.Y, |
428 | 428 |
}; |
... | ... | |
430 | 430 |
AdornerBorder.RenderTransformOrigin = new Point(0.0, 0.0); |
431 | 431 |
AdornerBorder.RenderTransform = new RotateTransform() |
432 | 432 |
{ |
433 |
Angle = (member as TextControl).Angle, |
|
433 |
Angle = (member as TextControl).CommentAngle,
|
|
434 | 434 |
//CenterX = middle.X, |
435 | 435 |
//CenterY = middle.Y, |
436 | 436 |
}; |
... | ... | |
480 | 480 |
{ |
481 | 481 |
AdornerBorder.RenderTransformOrigin = new Point(0.5, 0.5); |
482 | 482 |
DragThumb.RenderTransformOrigin = new Point(0.5, 0.5); |
483 |
AdornerBorder.RenderTransform = new RotateTransform() { Angle = (member as IViewBox).Angle }; |
|
484 |
DragThumb.RenderTransform = new RotateTransform() { Angle = (member as IViewBox).Angle }; |
|
483 |
AdornerBorder.RenderTransform = new RotateTransform() { Angle = (member as IViewBox).CommentAngle };
|
|
484 |
DragThumb.RenderTransform = new RotateTransform() { Angle = (member as IViewBox).CommentAngle };
|
|
485 | 485 |
} |
486 | 486 |
|
487 | 487 |
public void SetAdornerMember(List<CommentUserInfo> members) |
... | ... | |
616 | 616 |
{ |
617 | 617 |
if (this.Members.First().DrawingData.GetType().Name == "TextControl") |
618 | 618 |
{ |
619 |
if ((this.Members.First().DrawingData as TextControl).Angle != 0) |
|
619 |
if ((this.Members.First().DrawingData as TextControl).CommentAngle != 0)
|
|
620 | 620 |
{ |
621 |
trRotate.Angle = (this.Members.First().DrawingData as TextControl).Angle; |
|
622 |
trRotateThumb.Angle = (this.Members.First().DrawingData as TextControl).Angle; |
|
621 |
trRotate.Angle = (this.Members.First().DrawingData as TextControl).CommentAngle;
|
|
622 |
trRotateThumb.Angle = (this.Members.First().DrawingData as TextControl).CommentAngle;
|
|
623 | 623 |
} |
624 | 624 |
else |
625 | 625 |
{ |
... | ... | |
635 | 635 |
{ |
636 | 636 |
double textControlWidth; |
637 | 637 |
double textControlHeight; |
638 |
|
|
638 | 639 |
if (((currentControl as TextControl).Base_TextBox.ActualWidth) == 0) |
639 | 640 |
{ |
640 | 641 |
textControlWidth = ((currentControl as TextControl).Base_TextBlock.ActualWidth); |
... | ... | |
650 | 651 |
{ |
651 | 652 |
minX = (currentControl as TextControl).EndPoint.X; |
652 | 653 |
} |
654 |
|
|
653 | 655 |
if ((currentControl as TextControl).EndPoint.Y < minY) |
654 | 656 |
{ |
655 | 657 |
minY = (currentControl as TextControl).EndPoint.Y; |
656 | 658 |
} |
659 |
|
|
657 | 660 |
if (textControlWidth + (currentControl as TextControl).EndPoint.X > maxX) |
658 | 661 |
{ |
659 | 662 |
maxX = textControlWidth + (currentControl as TextControl).EndPoint.X; |
660 | 663 |
} |
664 |
|
|
661 | 665 |
if (textControlHeight + (currentControl as TextControl).EndPoint.Y > maxY) |
662 | 666 |
{ |
663 | 667 |
maxY = textControlHeight + (currentControl as TextControl).EndPoint.Y; |
... | ... | |
829 | 833 |
var temp = (this.Members.First() as AdornerMember).DrawingData as ArrowTextControl; |
830 | 834 |
|
831 | 835 |
|
832 |
switch (Math.Abs(temp.Angle).ToString()) |
|
836 |
switch (Math.Abs(temp.CommentAngle).ToString())
|
|
833 | 837 |
{ |
834 | 838 |
case "90": |
835 | 839 |
{ |
... | ... | |
918 | 922 |
tm.Style = (Style)this.LayoutRoot.Resources["ThumbTextStyle"]; |
919 | 923 |
tm.Width = (member as ArrowTextControl).BoxWidth; |
920 | 924 |
tm.Height = (member as ArrowTextControl).BoxHeight; |
921 |
var angle = (member as ArrowTextControl).Angle; |
|
925 |
var angle = (member as ArrowTextControl).PageAngle;
|
|
922 | 926 |
if (Math.Abs(angle).ToString() == "90") |
923 | 927 |
{ |
924 | 928 |
tm.RenderTransformOrigin = new Point(0, 0); |
... | ... | |
934 | 938 |
tm.RenderTransformOrigin = new Point(0.5, 0.5); |
935 | 939 |
tm.RenderTransform = new RotateTransform() |
936 | 940 |
{ |
937 |
Angle = angle,
|
|
941 |
Angle = angle |
|
938 | 942 |
}; |
939 | 943 |
} |
940 | 944 |
} |
... | ... | |
1218 | 1222 |
switch (member.Drawingtype) |
1219 | 1223 |
{ |
1220 | 1224 |
case ControlType.TextControl: |
1221 |
(member.DrawingData as CommentUserInfo).Angle = AngleValue; |
|
1225 |
(member.DrawingData as CommentUserInfo).CommentAngle = AngleValue;
|
|
1222 | 1226 |
|
1223 | 1227 |
DragThumb.RenderTransformOrigin = new Point(0, 0); |
1224 | 1228 |
DragThumb.RenderTransform = new RotateTransform() |
1225 | 1229 |
{ |
1226 | 1230 |
|
1227 |
Angle = (member.DrawingData as CommentUserInfo).Angle |
|
1231 |
Angle = (member.DrawingData as CommentUserInfo).CommentAngle
|
|
1228 | 1232 |
}; |
1229 | 1233 |
|
1230 | 1234 |
AdornerBorder.RenderTransformOrigin = new Point(0, 0); |
1231 | 1235 |
AdornerBorder.RenderTransform = new RotateTransform() |
1232 | 1236 |
{ |
1233 |
Angle = (member.DrawingData as CommentUserInfo).Angle |
|
1237 |
Angle = (member.DrawingData as CommentUserInfo).CommentAngle
|
|
1234 | 1238 |
}; |
1235 | 1239 |
|
1236 | 1240 |
//(member.DrawingData as TextControl).Angle = AngleValue; |
... | ... | |
1256 | 1260 |
case ControlType.Sign: |
1257 | 1261 |
case ControlType.Symbol: |
1258 | 1262 |
case ControlType.Stamp: |
1259 |
(member.DrawingData as CommentUserInfo).Angle = AngleValue; |
|
1263 |
(member.DrawingData as CommentUserInfo).CommentAngle = AngleValue;
|
|
1260 | 1264 |
BorderUpdate(); |
1261 | 1265 |
break; |
1262 | 1266 |
case ControlType.PolygonCloud: |
... | ... | |
1264 | 1268 |
BorderUpdate(); |
1265 | 1269 |
break; |
1266 | 1270 |
case ControlType.Circle: |
1267 |
(member.DrawingData as CommentUserInfo).Angle = AngleValue; |
|
1271 |
(member.DrawingData as CommentUserInfo).CommentAngle = AngleValue;
|
|
1268 | 1272 |
((CircleControl)member.DrawingData).SetCenterXY(); |
1269 | 1273 |
BorderUpdate(); |
1270 | 1274 |
break; |
... | ... | |
1284 | 1288 |
/// get angle from text controls' angle if only text control exists - 2018.05.10 added by humkyung |
1285 | 1289 |
if ((1 == this.Members.Count) && (this.Members.First() as AdornerMember).DrawingData.GetType().Name == "TextControl") |
1286 | 1290 |
{ |
1287 |
this.AngleValue = ((this.Members.First() as AdornerMember).DrawingData as TextControl).Angle; |
|
1291 |
this.AngleValue = ((this.Members.First() as AdornerMember).DrawingData as TextControl).CommentAngle;
|
|
1288 | 1292 |
} |
1289 | 1293 |
/// up to here |
1290 | 1294 |
|
... | ... | |
1365 | 1369 |
Point middle = MathSet.getMiddlePoint(AllControl.StartPoint, endPointV); |
1366 | 1370 |
AllControl.Base_Grid.RenderTransform = new RotateTransform() |
1367 | 1371 |
{ |
1368 |
Angle = AllControl.Angle, |
|
1372 |
Angle = AllControl.CommentAngle,
|
|
1369 | 1373 |
CenterX = middle.X, |
1370 | 1374 |
CenterY = middle.Y, |
1371 | 1375 |
}; |
KCOM/Controls/Sample.xaml.cs | ||
---|---|---|
359 | 359 |
ViewerDataModel.Instance.ContentHeight = instanceMain.dzMainMenu.zoomAndPanCanvas.Height; |
360 | 360 |
ViewerDataModel.Instance.AngleOffsetX = instanceMain.dzMainMenu.translate.X; |
361 | 361 |
ViewerDataModel.Instance.AngleOffsetY = instanceMain.dzMainMenu.translate.Y; |
362 |
ViewerDataModel.Instance.Angle = instanceMain.dzMainMenu.rotate.Angle; |
|
362 |
ViewerDataModel.Instance.PageAngle = instanceMain.dzMainMenu.rotate.Angle;
|
|
363 | 363 |
|
364 | 364 |
instanceMain.dzMainMenu.pageNavigator._thumbnailItems.Where(info => info.PageNumber == instanceMain.dzMainMenu.pageNavigator.CurrentPage.PageNumber).ToList().ForEach(data => |
365 | 365 |
{ |
KCOM/Events/Event_KeyEvent.cs | ||
---|---|---|
25 | 25 |
|
26 | 26 |
public void KeyEventDownAction(object sender, KeyEventArgs e) |
27 | 27 |
{ |
28 |
if (e.IsRepeat) |
|
29 |
return; |
|
28 |
//if (e.IsRepeat) |
|
29 |
// return; |
|
30 |
|
|
30 | 31 |
switch (e.Key) |
31 | 32 |
{ |
32 | 33 |
//강인구 추가 |
... | ... | |
279 | 280 |
this.dzMainMenu.pageNavigator.GotoPage(Convert.ToInt32(Common.ViewerDataModel.Instance.SystemMain.dzMainMenu.pageNavigator.CurrentPage.PageNumber) + 1); |
280 | 281 |
break; |
281 | 282 |
} |
283 |
|
|
282 | 284 |
} |
283 | 285 |
|
284 | 286 |
/// <summary> |
KCOM/Events/Implementation/TopMenuEvent.cs | ||
---|---|---|
1586 | 1586 |
ViewerDataModel.Instance.ContentHeight = instanceMain.dzMainMenu.zoomAndPanCanvas.Height; |
1587 | 1587 |
ViewerDataModel.Instance.AngleOffsetX = instanceMain.dzMainMenu.translate.X; |
1588 | 1588 |
ViewerDataModel.Instance.AngleOffsetY = instanceMain.dzMainMenu.translate.Y; |
1589 |
ViewerDataModel.Instance.Angle = instanceMain.dzMainMenu.rotate.Angle; |
|
1589 |
ViewerDataModel.Instance.PageAngle = instanceMain.dzMainMenu.rotate.Angle;
|
|
1590 | 1590 |
//ViewerDataModel.Instance.Document_Info.Clear(); |
1591 | 1591 |
//ViewerDataModel.Instance.Document_Info.Where(i => i.PAGE_NUMBER == instanceMain.dzMainMenu.pageNavigator.CurrentPage.PageNumber).ToList().ForEach(value => |
1592 | 1592 |
//{ |
KCOM/Events/RedoCommand.cs | ||
---|---|---|
83 | 83 |
|
84 | 84 |
if ((item.Markup as IViewBox) != null) |
85 | 85 |
{ |
86 |
(item.Markup as IViewBox).Angle = item.Angle; |
|
86 |
(item.Markup as IViewBox).CommentAngle = item.Angle;
|
|
87 | 87 |
} |
88 | 88 |
if ((item.Markup as TextControl) != null) |
89 | 89 |
{ |
90 |
(item.Markup as TextControl).Angle = item.Angle; |
|
90 |
(item.Markup as TextControl).CommentAngle = item.Angle;
|
|
91 | 91 |
|
92 | 92 |
Canvas.SetLeft((item.Markup as TextControl), item.PointSet[0].X); |
93 | 93 |
Canvas.SetTop((item.Markup as TextControl), item.PointSet[0].Y); |
KCOM/Events/UndoCommand.cs | ||
---|---|---|
79 | 79 |
|
80 | 80 |
if (comment is ArrowTextControl) |
81 | 81 |
{ |
82 |
multi_Undo_Data.Angle = dAngle = (comment as ArrowTextControl).Angle; |
|
82 |
multi_Undo_Data.Angle = dAngle = (comment as ArrowTextControl).CommentAngle;
|
|
83 | 83 |
} |
84 | 84 |
else |
85 | 85 |
{ |
... | ... | |
144 | 144 |
|
145 | 145 |
if ((item.Markup as IViewBox) != null) |
146 | 146 |
{ |
147 |
(item.Markup as IViewBox).Angle = item.Angle; |
|
147 |
(item.Markup as IViewBox).CommentAngle = item.Angle;
|
|
148 | 148 |
} |
149 | 149 |
if ((item.Markup as TextControl) != null) |
150 | 150 |
{ |
151 |
(item.Markup as TextControl).Angle = item.Angle; |
|
151 |
(item.Markup as TextControl).CommentAngle = item.Angle;
|
|
152 | 152 |
Canvas.SetLeft((item.Markup as TextControl), item.PointSet[0].X); |
153 | 153 |
Canvas.SetTop((item.Markup as TextControl), item.PointSet[0].Y); |
154 | 154 |
} |
KCOM/MainWindow.xaml.cs | ||
---|---|---|
53 | 53 |
{ |
54 | 54 |
App.splashString(ISplashMessage.MAINWINDOW); |
55 | 55 |
this.Loaded += MainWindow_Loaded; |
56 |
this.KeyDown += new KeyEventHandler(KeyEventDownAction); |
|
56 |
|
|
57 |
this.AddHandler(Keyboard.KeyDownEvent, |
|
58 |
new KeyEventHandler((sender, e) =>KeyEventDownAction(sender, e)),true); |
|
59 |
|
|
60 |
//this.PreviewKeyDown += new KeyEventHandler(KeyEventDownAction); |
|
57 | 61 |
//this.SourceInitialized += new EventHandler(win_SourceInitialized); |
58 | 62 |
} |
59 | 63 |
|
KCOM/ViewModel/BiddersViewModel.cs | ||
---|---|---|
349 | 349 |
|
350 | 350 |
|
351 | 351 |
var center = new Vector(Common.ViewerDataModel.Instance.ImageViewWidth / 2, Common.ViewerDataModel.Instance.ImageViewHeight / 2); |
352 |
var matrix = MatrixHelper.Rotation(Common.ViewerDataModel.Instance.Angle, center); |
|
352 |
var matrix = MatrixHelper.Rotation(Common.ViewerDataModel.Instance.PageAngle, center);
|
|
353 | 353 |
rect.Transform(matrix); |
354 | 354 |
|
355 | 355 |
double scaleX = Common.ViewerDataModel.Instance.ImageViewWidth / rect.Width; |
... | ... | |
358 | 358 |
double positionX = 0; |
359 | 359 |
double positionY = 0; |
360 | 360 |
|
361 |
if (Common.ViewerDataModel.Instance.Angle == 90) |
|
361 |
if (Common.ViewerDataModel.Instance.PageAngle == 90)
|
|
362 | 362 |
{ |
363 | 363 |
positionX = Common.ViewerDataModel.Instance.ImageViewHeight - rect.X; |
364 | 364 |
positionY = Common.ViewerDataModel.Instance.ImageViewWidth - rect.Y; |
KCOM/ViewModel/RequirementViewModel.cs | ||
---|---|---|
355 | 355 |
|
356 | 356 |
|
357 | 357 |
var center = new Vector(Common.ViewerDataModel.Instance.ImageViewWidth / 2, Common.ViewerDataModel.Instance.ImageViewHeight / 2); |
358 |
var matrix = MatrixHelper.Rotation(Common.ViewerDataModel.Instance.Angle, center); |
|
358 |
var matrix = MatrixHelper.Rotation(Common.ViewerDataModel.Instance.PageAngle, center);
|
|
359 | 359 |
rect.Transform(matrix); |
360 | 360 |
|
361 | 361 |
double scaleX = Common.ViewerDataModel.Instance.ImageViewWidth / rect.Width; |
... | ... | |
364 | 364 |
double positionX = 0; |
365 | 365 |
double positionY = 0; |
366 | 366 |
|
367 |
if (Common.ViewerDataModel.Instance.Angle == 90) |
|
367 |
if (Common.ViewerDataModel.Instance.PageAngle == 90)
|
|
368 | 368 |
{ |
369 | 369 |
positionX = Common.ViewerDataModel.Instance.ImageViewHeight - rect.X; |
370 | 370 |
positionY = Common.ViewerDataModel.Instance.ImageViewWidth - rect.Y; |
KCOM/Views/MainMenu.xaml | ||
---|---|---|
172 | 172 |
</controls:ScaleDecodeImage>--> |
173 | 173 |
<Image Panel.ZIndex="0" x:Name="mainPanel" RenderOptions.BitmapScalingMode="HighQuality" |
174 | 174 |
RenderOptions.EdgeMode="Unspecified" RenderOptions.ClearTypeHint="Enabled" |
175 |
Source="{Binding ImageViewPath,Mode=TwoWay, Source={x:Static common:ViewerDataModel.Instance}}"
|
|
175 |
Source="{Binding ImageViewPath,Mode=OneWay, Source={x:Static common:ViewerDataModel.Instance}}"
|
|
176 | 176 |
Width="{Binding ImageViewWidth,Mode=TwoWay, Source={x:Static common:ViewerDataModel.Instance}}" |
177 | 177 |
Height="{Binding ImageViewHeight,Mode=TwoWay, Source={x:Static common:ViewerDataModel.Instance}}" |
178 | 178 |
> |
... | ... | |
286 | 286 |
Width="{Binding ImageViewWidth_C, Source={x:Static common:ViewerDataModel.Instance}}" |
287 | 287 |
Height="{Binding ImageViewHeight_C, Source={x:Static common:ViewerDataModel.Instance}}" > |
288 | 288 |
</Image> |
289 |
<Canvas x:Name="canvas_compareBorder" IsHitTestVisible="False" Width="{Binding ActualWidth, ElementName=zoomAndPanCanvas2}" Height="{Binding ActualHeight, ElementName=zoomAndPanCanvas2}" Panel.ZIndex="1">
|
|
289 |
<Canvas x:Name="canvas_compareBorder" IsHitTestVisible="False" Width="{Binding ActualWidth, ElementName=zoomAndPanCanvas2, Mode=OneWay}" Height="{Binding ActualHeight, ElementName=zoomAndPanCanvas2, Mode=OneWay}" Panel.ZIndex="1">
|
|
290 | 290 |
<!--<Canvas.RenderTransform> |
291 | 291 |
--> |
292 | 292 |
<!--<RotateTransform Angle="{Binding Angle, Source={x:Static common:ViewerDataModel.Instance}}"/>--> |
KCOM/Views/MainMenu.xaml.cs | ||
---|---|---|
1545 | 1545 |
#endregion |
1546 | 1546 |
if (ViewerDataModel.Instance.AngleVisibility == Visibility.Visible) |
1547 | 1547 |
{ |
1548 |
ViewerDataModel.Instance.Angle = currentControl.Angle; |
|
1548 |
ViewerDataModel.Instance.Angle = currentControl.CommentAngle;
|
|
1549 | 1549 |
} |
1550 | 1550 |
} |
1551 | 1551 |
} |
... | ... | |
2038 | 2038 |
ViewerDataModel.Instance.ContentHeight = zoomAndPanCanvas.Height; |
2039 | 2039 |
ViewerDataModel.Instance.AngleOffsetX = translate.X; |
2040 | 2040 |
ViewerDataModel.Instance.AngleOffsetY = translate.Y; |
2041 |
ViewerDataModel.Instance.Angle = rotate.Angle; |
|
2041 |
ViewerDataModel.Instance.PageAngle = rotate.Angle;
|
|
2042 | 2042 |
} |
2043 | 2043 |
|
2044 | 2044 |
private void syncPannelRotate(double angle) |
... | ... | |
3216 | 3216 |
ViewerDataModel.Instance.MarkupControls_USER.Add(currentControl); |
3217 | 3217 |
|
3218 | 3218 |
//20180903 LJY 회전된 방향으로 화면에 출력되지 않는 문제 수정 |
3219 |
(currentControl as ImgControl).Angle -= rotate.Angle; |
|
3219 |
(currentControl as ImgControl).CommentAngle -= rotate.Angle;
|
|
3220 | 3220 |
} |
3221 | 3221 |
} |
3222 | 3222 |
//} |
... | ... | |
3265 | 3265 |
ViewerDataModel.Instance.MarkupControls_USER.Add(currentControl); |
3266 | 3266 |
|
3267 | 3267 |
//20180903 LJY 회전된 방향으로 화면에 출력되지 않는 문제 수정 |
3268 |
(currentControl as DateControl).Angle -= rotate.Angle; |
|
3268 |
(currentControl as DateControl).CommentAngle -= rotate.Angle;
|
|
3269 | 3269 |
} |
3270 | 3270 |
//} |
3271 | 3271 |
} |
... | ... | |
3292 | 3292 |
currentControl.SetValue(TextControl.CanvasYProperty, canvasDrawingMouseDownPoint.Y); |
3293 | 3293 |
|
3294 | 3294 |
(currentControl as TextControl).ControlType_No = 0; |
3295 |
(currentControl as TextControl).Angle -= rotate.Angle; |
|
3295 |
(currentControl as TextControl).CommentAngle -= rotate.Angle;
|
|
3296 | 3296 |
(currentControl as TextControl).IsHighLight = ViewerDataModel.Instance.checkHighShape; |
3297 | 3297 |
(currentControl as TextControl).ApplyTemplate(); |
3298 | 3298 |
(currentControl as TextControl).Base_TextBox.Focus(); |
... | ... | |
3323 | 3323 |
currentControl.SetValue(TextControl.CanvasYProperty, canvasDrawingMouseDownPoint.Y); |
3324 | 3324 |
|
3325 | 3325 |
(currentControl as TextControl).ControlType_No = 1; |
3326 |
(currentControl as TextControl).Angle = Ang; |
|
3326 |
(currentControl as TextControl).CommentAngle = Ang;
|
|
3327 | 3327 |
(currentControl as TextControl).IsHighLight = ViewerDataModel.Instance.checkHighShape; |
3328 | 3328 |
(currentControl as TextControl).ApplyTemplate(); |
3329 | 3329 |
(currentControl as TextControl).Base_TextBox.Focus(); |
... | ... | |
3354 | 3354 |
currentControl.SetValue(TextControl.CanvasXProperty, canvasDrawingMouseDownPoint.X); |
3355 | 3355 |
currentControl.SetValue(TextControl.CanvasYProperty, canvasDrawingMouseDownPoint.Y); |
3356 | 3356 |
|
3357 |
(currentControl as TextControl).Angle = Ang; |
|
3357 |
(currentControl as TextControl).CommentAngle = Ang;
|
|
3358 | 3358 |
(currentControl as TextControl).ControlType_No = 2; |
3359 | 3359 |
(currentControl as TextControl).IsHighLight = ViewerDataModel.Instance.checkHighShape; |
3360 | 3360 |
(currentControl as TextControl).ApplyTemplate(); |
... | ... | |
3402 | 3402 |
(currentControl as ArrowTextControl).isHighLight = ViewerDataModel.Instance.checkHighShape; |
3403 | 3403 |
|
3404 | 3404 |
//20180903 LJY 회전된 방향으로 화면에 출력되지 않는 문제 수정 |
3405 |
(currentControl as ArrowTextControl).Angle -= rotate.Angle; |
|
3405 |
(currentControl as ArrowTextControl).CommentAngle -= rotate.Angle;
|
|
3406 | 3406 |
|
3407 | 3407 |
(currentControl as ArrowTextControl).ApplyTemplate(); |
3408 | 3408 |
(currentControl as ArrowTextControl).Base_TextBox.Focus(); |
... | ... | |
3455 | 3455 |
(currentControl as ArrowTextControl).isHighLight = ViewerDataModel.Instance.checkHighShape; |
3456 | 3456 |
|
3457 | 3457 |
//20180903 LJY 회전된 방향으로 화면에 출력되지 않는 문제 수정 |
3458 |
(currentControl as ArrowTextControl).Angle -= rotate.Angle; |
|
3458 |
(currentControl as ArrowTextControl).CommentAngle -= rotate.Angle;
|
|
3459 | 3459 |
|
3460 | 3460 |
(currentControl as ArrowTextControl).ApplyTemplate(); |
3461 | 3461 |
(currentControl as ArrowTextControl).Base_TextBox.Focus(); |
... | ... | |
3505 | 3505 |
(currentControl as ArrowTextControl).TextSize = ViewerDataModel.Instance.TextSize; |
3506 | 3506 |
(currentControl as ArrowTextControl).SetFontFamily(new FontFamily(this.ParentOfType<MainWindow>().dzTopMenu.comboFontFamily.Text)); |
3507 | 3507 |
//20180903 LJY 회전된 방향으로 화면에 출력되지 않는 문제 수정 |
3508 |
(currentControl as ArrowTextControl).Angle -= rotate.Angle; |
|
3508 |
(currentControl as ArrowTextControl).CommentAngle -= rotate.Angle;
|
|
3509 | 3509 |
(currentControl as ArrowTextControl).ApplyTemplate(); |
3510 | 3510 |
(currentControl as ArrowTextControl).Base_TextBox.Focus(); |
3511 | 3511 |
ViewerDataModel.Instance.AngleVisibility = Visibility.Visible; |
... | ... | |
3558 | 3558 |
(currentControl as ArrowTextControl).isHighLight = ViewerDataModel.Instance.checkHighShape; |
3559 | 3559 |
|
3560 | 3560 |
//20180903 LJY 회전된 방향으로 화면에 출력되지 않는 문제 수정 |
3561 |
(currentControl as ArrowTextControl).Angle -= rotate.Angle; |
|
3561 |
(currentControl as ArrowTextControl).CommentAngle -= rotate.Angle;
|
|
3562 | 3562 |
(currentControl as ArrowTextControl).ApplyTemplate(); |
3563 | 3563 |
(currentControl as ArrowTextControl).SetFontFamily(new FontFamily(this.ParentOfType<MainWindow>().dzTopMenu.comboFontFamily.Text)); |
3564 | 3564 |
(currentControl as ArrowTextControl).Base_TextBox.Focus(); |
... | ... | |
3610 | 3610 |
(currentControl as ArrowTextControl).isHighLight = ViewerDataModel.Instance.checkHighShape; |
3611 | 3611 |
(currentControl as ArrowTextControl).SetFontFamily(new FontFamily(this.ParentOfType<MainWindow>().dzTopMenu.comboFontFamily.Text)); |
3612 | 3612 |
//20180903 LJY 회전된 방향으로 화면에 출력되지 않는 문제 수정 |
3613 |
(currentControl as ArrowTextControl).Angle -= rotate.Angle; |
|
3613 |
(currentControl as ArrowTextControl).CommentAngle -= rotate.Angle;
|
|
3614 | 3614 |
|
3615 | 3615 |
(currentControl as ArrowTextControl).ApplyTemplate(); |
3616 | 3616 |
(currentControl as ArrowTextControl).Base_TextBox.Focus(); |
... | ... | |
3660 | 3660 |
(currentControl as ArrowTextControl).isHighLight = ViewerDataModel.Instance.checkHighShape; |
3661 | 3661 |
|
3662 | 3662 |
//20180903 LJY 회전된 방향으로 화면에 출력되지 않는 문제 수정 |
3663 |
(currentControl as ArrowTextControl).Angle -= rotate.Angle; |
|
3663 |
(currentControl as ArrowTextControl).CommentAngle -= rotate.Angle;
|
|
3664 | 3664 |
(currentControl as ArrowTextControl).SetFontFamily(new FontFamily(this.ParentOfType<MainWindow>().dzTopMenu.comboFontFamily.Text)); |
3665 | 3665 |
(currentControl as ArrowTextControl).ApplyTemplate(); |
3666 | 3666 |
(currentControl as ArrowTextControl).Base_TextBox.Focus(); |
... | ... | |
3727 | 3727 |
ViewerDataModel.Instance.MarkupControls_USER.Add(currentControl); |
3728 | 3728 |
|
3729 | 3729 |
//20180903 LJY 회전된 방향으로 화면에 출력되지 않는 문제 수정 |
3730 |
(currentControl as SignControl).Angle -= rotate.Angle; |
|
3730 |
(currentControl as SignControl).CommentAngle -= rotate.Angle;
|
|
3731 | 3731 |
} |
3732 | 3732 |
//} |
3733 | 3733 |
} |
... | ... | |
3811 | 3811 |
ViewerDataModel.Instance.MarkupControls_USER.Add(currentControl); |
3812 | 3812 |
|
3813 | 3813 |
//20180903 LJY 회전된 방향으로 화면에 출력되지 않는 문제 수정 |
3814 |
(currentControl as SymControl).Angle -= rotate.Angle; |
|
3814 |
(currentControl as SymControl).CommentAngle -= rotate.Angle;
|
|
3815 | 3815 |
} |
3816 | 3816 |
//} |
3817 | 3817 |
} |
... | ... | |
3852 | 3852 |
currentControl.CommentID = Commons.shortGuid(); |
3853 | 3853 |
ViewerDataModel.Instance.MarkupControls_USER.Add(currentControl); |
3854 | 3854 |
//20180903 LJY 회전된 방향으로 화면에 출력되지 않는 문제 수정 |
3855 |
(currentControl as SymControlN).Angle -= rotate.Angle; |
|
3855 |
(currentControl as SymControlN).CommentAngle -= rotate.Angle;
|
|
3856 | 3856 |
} |
3857 | 3857 |
//} |
3858 | 3858 |
} |
... | ... | |
3884 | 3884 |
} |
3885 | 3885 |
break; |
3886 | 3886 |
} |
3887 |
|
|
3888 |
if(currentControl != null) |
|
3889 |
{ |
|
3890 |
currentControl.PageAngle = pageNavigator.CurrentPage.Angle; |
|
3891 |
} |
|
3887 | 3892 |
} |
3888 | 3893 |
if (mouseHandlingMode != MouseHandlingMode.None && e.LeftButton == MouseButtonState.Pressed) |
3889 | 3894 |
{ |
... | ... | |
5296 | 5301 |
|
5297 | 5302 |
PolygonControl pc = new PolygonControl() |
5298 | 5303 |
{ |
5299 |
Angle = 0, |
|
5304 |
CommentAngle = 0,
|
|
5300 | 5305 |
PointSet = inkPointSet, |
5301 | 5306 |
ControlType = ControlType.Ink |
5302 | 5307 |
}; |
... | ... | |
5376 | 5381 |
|
5377 | 5382 |
private void UserControl_LayoutUpdated(object sender, EventArgs e) |
5378 | 5383 |
{ |
5379 |
System.Diagnostics.Debug.WriteLine("layupdated"); |
|
5380 | 5384 |
if (Common.ViewerDataModel.Instance.MarkupControls_USER?.Count() > 0) |
5381 | 5385 |
{ |
5382 | 5386 |
ViewerDataModel.Instance.OnLoadPage(); |
MarkupTest/App.xaml | ||
---|---|---|
1 |
<Application x:Class="MarkupTest.App" |
|
2 |
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" |
|
3 |
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" |
|
4 |
xmlns:local="clr-namespace:MarkupTest" |
|
5 |
StartupUri="MainWindow.xaml"> |
|
6 |
<Application.Resources> |
|
7 |
|
|
8 |
</Application.Resources> |
|
9 |
</Application> |
MarkupTest/App.xaml.cs | ||
---|---|---|
1 |
using System; |
|
2 |
using System.Collections.Generic; |
|
3 |
using System.Configuration; |
|
4 |
using System.Data; |
|
5 |
using System.Linq; |
|
6 |
using System.Threading.Tasks; |
|
7 |
using System.Windows; |
|
8 |
|
|
9 |
namespace MarkupTest |
|
10 |
{ |
|
11 |
/// <summary> |
|
12 |
/// App.xaml에 대한 상호 작용 논리 |
|
13 |
/// </summary> |
|
14 |
public partial class App : Application |
|
15 |
{ |
|
16 |
} |
|
17 |
} |
MarkupTest/MainWindow.xaml | ||
---|---|---|
1 |
<Window x:Class="MarkupTest.MainWindow" |
|
2 |
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" |
|
3 |
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" |
|
4 |
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" |
|
5 |
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" |
|
6 |
xmlns:local="clr-namespace:MarkupTest" |
|
7 |
mc:Ignorable="d" |
|
8 |
xmlns:Text="clr-namespace:MarkupToPDF.Controls.Text;assembly=MarkupToPDF" |
|
9 |
Title="MainWindow" Height="450" Width="800"> |
|
10 |
<Canvas> |
|
11 |
<Text:ArrowTextControl Width="213" Height="160" Canvas.Top="10"> |
|
12 |
<Text:ArrowTextControl.Style> |
|
13 |
<Style TargetType="{x:Type Text:ArrowTextControl}"> |
|
14 |
<Setter Property="Template"> |
|
15 |
<Setter.Value> |
|
16 |
<ControlTemplate TargetType="{x:Type Text:ArrowTextControl}"> |
|
17 |
<Canvas HorizontalAlignment="Stretch" VerticalAlignment="Stretch" > |
|
18 |
<Path x:Name="PART_ArrowPath" Canvas.ZIndex="0" |
|
19 |
Stroke="{TemplateBinding StrokeColor}" |
|
20 |
StrokeThickness="{TemplateBinding LineSize}" |
|
21 |
Data="{TemplateBinding PathData}" |
|
22 |
Fill="{TemplateBinding StrokeColor}"/> |
|
23 |
<Path x:Name="PART_ArrowSubPath" Canvas.ZIndex="2" |
|
24 |
Stroke="{TemplateBinding StrokeColor}" |
|
25 |
StrokeThickness="{TemplateBinding LineSize}" |
|
26 |
Fill="{TemplateBinding SubPathFill }" |
|
27 |
Data="{TemplateBinding SubPathData}" |
|
28 |
RenderTransformOrigin="0,0"/> |
|
29 |
<Path |
|
30 |
Stroke="Transparent" |
|
31 |
Fill="{TemplateBinding BackInnerColor }" Canvas.ZIndex="1" |
|
32 |
Data="m1.99999,-0.54687c0,0 3.10617,1.97499 21.28572,15.31915c30.03604,22.04707 66.51786,53.61702 101.10715,81.70213l21.28572,17.87234l5.32143,5.10638" |
|
33 |
RenderTransformOrigin="0,0"/> |
|
34 |
<TextBox x:Name="PART_ArrowTextBox" |
|
35 |
Margin="0.5" Canvas.ZIndex="4" |
|
36 |
Background="{TemplateBinding TextBoxBackground}" |
|
37 |
BorderThickness="{TemplateBinding BorderSize}" |
|
38 |
BorderBrush="{TemplateBinding StrokeColor}" |
|
39 |
FontSize="{TemplateBinding TextSize}" |
|
40 |
FontFamily="{TemplateBinding TextFamily}" |
|
41 |
FontStyle="{TemplateBinding TextStyle}" |
|
42 |
FontWeight="{TemplateBinding TextWeight}" |
|
43 |
TextDecorations="{TemplateBinding UnderLine}" |
|
44 |
AcceptsReturn="True" |
|
45 |
Foreground="{TemplateBinding StrokeColor}" |
|
46 |
HorizontalAlignment="Stretch" |
|
47 |
TextWrapping="Wrap" |
|
48 |
Text="test" Width="100" |
|
49 |
RenderTransformOrigin="0.5,0.5"> |
|
50 |
<TextBox.RenderTransform> |
|
51 |
<RotateTransform Angle="0" |
|
52 |
CenterX="{Binding CenterX, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}" |
|
53 |
CenterY="{Binding CenterY, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}"> |
|
54 |
</RotateTransform> |
|
55 |
<!--<RotateTransform Angle="{Binding PageAngle, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}" |
|
56 |
CenterX="{Binding CenterX, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}" |
|
57 |
CenterY="{Binding CenterY, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}"> |
|
58 |
</RotateTransform>--> |
|
59 |
</TextBox.RenderTransform> |
|
60 |
</TextBox> |
|
61 |
|
|
62 |
<Canvas Canvas.ZIndex="5"> |
|
63 |
|
|
64 |
<Border x:Name="Caret" |
|
65 |
Visibility="Collapsed" |
|
66 |
Canvas.Left="0" |
|
67 |
Canvas.Top="0" |
|
68 |
Width="3" |
|
69 |
Height="33" |
|
70 |
Background="Red" |
|
71 |
|
|
72 |
RenderTransformOrigin="0.5,0.5"> |
|
73 |
<Border.RenderTransform> |
|
74 |
<RotateTransform Angle="0" |
|
75 |
CenterX="{Binding CenterX, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}" |
|
76 |
CenterY="{Binding CenterY, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}"> |
|
77 |
</RotateTransform> |
|
78 |
<!--<RotateTransform Angle="{Binding CommentAngle, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}" |
|
79 |
CenterX="{Binding CenterX, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}" |
|
80 |
CenterY="{Binding CenterY, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}"> |
|
81 |
</RotateTransform>--> |
|
82 |
</Border.RenderTransform> |
|
83 |
<Border.Triggers> |
|
84 |
<EventTrigger RoutedEvent="Border.Loaded"> |
|
85 |
<BeginStoryboard> |
|
86 |
<Storyboard x:Name="CaretStoryBoard" |
|
87 |
RepeatBehavior="Forever"> |
|
88 |
<ColorAnimationUsingKeyFrames |
|
89 |
Storyboard.TargetProperty="Background.Color" |
|
90 |
Duration="0:0:0:1" |
|
91 |
FillBehavior="HoldEnd"> |
|
92 |
<ColorAnimationUsingKeyFrames.KeyFrames > |
|
93 |
<DiscreteColorKeyFrame KeyTime="0:0:0.750" Value="Transparent" /> |
|
94 |
<DiscreteColorKeyFrame KeyTime="0:0:0.000" Value="Black"/> |
|
95 |
</ColorAnimationUsingKeyFrames.KeyFrames> |
|
96 |
</ColorAnimationUsingKeyFrames> |
|
97 |
</Storyboard> |
|
98 |
</BeginStoryboard> |
|
99 |
</EventTrigger> |
|
100 |
</Border.Triggers> |
|
101 |
</Border> |
|
102 |
</Canvas> |
|
103 |
|
|
104 |
|
|
105 |
</Canvas> |
|
106 |
</ControlTemplate> |
|
107 |
</Setter.Value> |
|
108 |
</Setter> |
|
109 |
</Style> |
|
110 |
</Text:ArrowTextControl.Style> |
|
111 |
</Text:ArrowTextControl> |
|
112 |
</Canvas> |
|
113 |
</Window> |
MarkupTest/MainWindow.xaml.cs | ||
---|---|---|
1 |
using System; |
|
2 |
using System.Collections.Generic; |
|
3 |
using System.Linq; |
|
4 |
using System.Text; |
|
5 |
using System.Threading.Tasks; |
|
6 |
using System.Windows; |
|
7 |
using System.Windows.Controls; |
|
8 |
using System.Windows.Data; |
|
9 |
using System.Windows.Documents; |
|
10 |
using System.Windows.Input; |
|
11 |
using System.Windows.Media; |
|
12 |
using System.Windows.Media.Imaging; |
|
13 |
using System.Windows.Navigation; |
|
14 |
using System.Windows.Shapes; |
|
15 |
|
|
16 |
namespace MarkupTest |
|
17 |
{ |
|
18 |
/// <summary> |
|
19 |
/// MainWindow.xaml에 대한 상호 작용 논리 |
|
20 |
/// </summary> |
|
21 |
public partial class MainWindow : Window |
|
22 |
{ |
|
23 |
public MainWindow() |
|
24 |
{ |
|
25 |
InitializeComponent(); |
|
26 |
} |
|
27 |
} |
|
28 |
} |
MarkupTest/MarkupTest.csproj | ||
---|---|---|
1 |
<?xml version="1.0" encoding="utf-8"?> |
|
2 |
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> |
|
3 |
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" /> |
|
4 |
<PropertyGroup> |
|
5 |
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> |
|
6 |
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> |
|
7 |
<ProjectGuid>{9466FF0C-EBD2-4FEE-960C-6D5C87C6D60C}</ProjectGuid> |
|
8 |
<OutputType>WinExe</OutputType> |
|
9 |
<RootNamespace>MarkupTest</RootNamespace> |
|
10 |
<AssemblyName>MarkupTest</AssemblyName> |
|
11 |
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion> |
|
12 |
<FileAlignment>512</FileAlignment> |
|
13 |
<ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> |
|
14 |
<WarningLevel>4</WarningLevel> |
|
15 |
<Deterministic>true</Deterministic> |
|
16 |
<TargetFrameworkProfile /> |
|
17 |
</PropertyGroup> |
|
18 |
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> |
|
19 |
<PlatformTarget>AnyCPU</PlatformTarget> |
|
20 |
<DebugSymbols>true</DebugSymbols> |
|
21 |
<DebugType>full</DebugType> |
|
22 |
<Optimize>false</Optimize> |
|
23 |
<OutputPath>bin\Debug\</OutputPath> |
|
24 |
<DefineConstants>DEBUG;TRACE</DefineConstants> |
|
25 |
<ErrorReport>prompt</ErrorReport> |
|
26 |
<WarningLevel>4</WarningLevel> |
|
27 |
<Prefer32Bit>false</Prefer32Bit> |
|
28 |
</PropertyGroup> |
|
29 |
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> |
|
30 |
<PlatformTarget>AnyCPU</PlatformTarget> |
|
31 |
<DebugType>pdbonly</DebugType> |
|
32 |
<Optimize>true</Optimize> |
|
33 |
<OutputPath>bin\Release\</OutputPath> |
|
34 |
<DefineConstants>TRACE</DefineConstants> |
|
35 |
<ErrorReport>prompt</ErrorReport> |
|
36 |
<WarningLevel>4</WarningLevel> |
|
37 |
</PropertyGroup> |
|
38 |
<ItemGroup> |
|
39 |
<Reference Include="System" /> |
|
40 |
<Reference Include="System.Data" /> |
|
41 |
<Reference Include="System.Xml" /> |
|
42 |
<Reference Include="Microsoft.CSharp" /> |
|
43 |
<Reference Include="System.Core" /> |
|
44 |
<Reference Include="System.Xml.Linq" /> |
|
45 |
<Reference Include="System.Data.DataSetExtensions" /> |
|
46 |
<Reference Include="System.Net.Http" /> |
|
47 |
<Reference Include="System.Xaml"> |
|
48 |
<RequiredTargetFramework>4.0</RequiredTargetFramework> |
|
49 |
</Reference> |
|
50 |
<Reference Include="WindowsBase" /> |
|
51 |
<Reference Include="PresentationCore" /> |
|
52 |
<Reference Include="PresentationFramework" /> |
|
53 |
</ItemGroup> |
|
54 |
<ItemGroup> |
|
55 |
<ApplicationDefinition Include="App.xaml"> |
|
56 |
<Generator>MSBuild:Compile</Generator> |
|
57 |
<SubType>Designer</SubType> |
|
58 |
</ApplicationDefinition> |
|
59 |
<Page Include="MainWindow.xaml"> |
|
60 |
<Generator>MSBuild:Compile</Generator> |
|
61 |
<SubType>Designer</SubType> |
|
62 |
</Page> |
|
63 |
<Compile Include="App.xaml.cs"> |
|
64 |
<DependentUpon>App.xaml</DependentUpon> |
|
65 |
<SubType>Code</SubType> |
|
66 |
</Compile> |
|
67 |
<Compile Include="MainWindow.xaml.cs"> |
|
68 |
<DependentUpon>MainWindow.xaml</DependentUpon> |
|
69 |
<SubType>Code</SubType> |
|
70 |
</Compile> |
|
71 |
</ItemGroup> |
|
72 |
<ItemGroup> |
|
73 |
<Compile Include="Properties\AssemblyInfo.cs"> |
|
74 |
<SubType>Code</SubType> |
|
75 |
</Compile> |
|
76 |
<Compile Include="Properties\Resources.Designer.cs"> |
|
77 |
<AutoGen>True</AutoGen> |
|
78 |
<DesignTime>True</DesignTime> |
|
79 |
<DependentUpon>Resources.resx</DependentUpon> |
|
80 |
</Compile> |
|
81 |
<Compile Include="Properties\Settings.Designer.cs"> |
|
82 |
<AutoGen>True</AutoGen> |
|
83 |
<DependentUpon>Settings.settings</DependentUpon> |
|
84 |
<DesignTimeSharedInput>True</DesignTimeSharedInput> |
|
85 |
</Compile> |
|
86 |
<EmbeddedResource Include="Properties\Resources.resx"> |
|
87 |
<Generator>ResXFileCodeGenerator</Generator> |
|
88 |
<LastGenOutput>Resources.Designer.cs</LastGenOutput> |
|
89 |
</EmbeddedResource> |
|
90 |
<None Include="Properties\Settings.settings"> |
|
91 |
<Generator>SettingsSingleFileGenerator</Generator> |
|
92 |
<LastGenOutput>Settings.Designer.cs</LastGenOutput> |
|
93 |
</None> |
|
94 |
</ItemGroup> |
|
95 |
<ItemGroup> |
|
96 |
<None Include="App.config" /> |
|
97 |
</ItemGroup> |
|
98 |
<ItemGroup> |
|
99 |
<ProjectReference Include="..\MarkupToPDF\MarkupToPDF.csproj"> |
|
100 |
<Project>{a714bd67-8aac-4ed8-8ecf-7853c3549a68}</Project> |
|
101 |
<Name>MarkupToPDF</Name> |
|
102 |
</ProjectReference> |
|
103 |
</ItemGroup> |
|
104 |
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> |
|
105 |
</Project> |
MarkupTest/Properties/AssemblyInfo.cs | ||
---|---|---|
1 |
using System.Reflection; |
|
2 |
using System.Resources; |
|
3 |
using System.Runtime.CompilerServices; |
|
4 |
using System.Runtime.InteropServices; |
|
5 |
using System.Windows; |
|
6 |
|
|
7 |
// 어셈블리에 대한 일반 정보는 다음 특성 집합을 통해 |
|
8 |
// 제어됩니다. 어셈블리와 관련된 정보를 수정하려면 |
|
9 |
// 이러한 특성 값을 변경하세요. |
|
10 |
[assembly: AssemblyTitle("MarkupTest")] |
|
11 |
[assembly: AssemblyDescription("")] |
|
12 |
[assembly: AssemblyConfiguration("")] |
|
13 |
[assembly: AssemblyCompany("")] |
|
14 |
[assembly: AssemblyProduct("MarkupTest")] |
|
15 |
[assembly: AssemblyCopyright("Copyright © 2019")] |
|
16 |
[assembly: AssemblyTrademark("")] |
|
17 |
[assembly: AssemblyCulture("")] |
|
18 |
|
|
19 |
// ComVisible을 false로 설정하면 이 어셈블리의 형식이 COM 구성 요소에 |
|
20 |
// 표시되지 않습니다. COM에서 이 어셈블리의 형식에 액세스하려면 |
|
21 |
// 해당 형식에 대해 ComVisible 특성을 true로 설정하세요. |
|
22 |
[assembly: ComVisible(false)] |
|
23 |
|
|
24 |
//지역화 가능 응용 프로그램 빌드를 시작하려면 다음을 설정하세요. |
|
25 |
//.csproj 파일에서 <PropertyGroup> 내에 <UICulture>CultureYouAreCodingWith</UICulture>를 |
|
26 |
//설정하십시오. 예를 들어 소스 파일에서 영어(미국)를 |
|
27 |
//사용하는 경우 <UICulture>를 en-US로 설정합니다. 그런 다음 아래 |
|
28 |
//NeutralResourceLanguage 특성의 주석 처리를 제거합니다. 아래 줄의 "en-US"를 업데이트하여 |
|
29 |
//프로젝트 파일의 UICulture 설정과 일치시킵니다. |
|
30 |
|
|
31 |
//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)] |
|
32 |
|
|
33 |
|
|
34 |
[assembly: ThemeInfo( |
|
35 |
ResourceDictionaryLocation.None, //테마별 리소스 사전의 위치 |
|
36 |
//(페이지 또는 응용 프로그램 리소스 사진에 |
|
37 |
// 리소스가 없는 경우에 사용됨) |
|
38 |
ResourceDictionaryLocation.SourceAssembly //제네릭 리소스 사전의 위치 |
|
39 |
//(페이지 또는 응용 프로그램 리소스 사진에 |
|
40 |
// 리소스가 없는 경우에 사용됨) |
|
41 |
)] |
|
42 |
|
|
43 |
|
|
44 |
// 어셈블리의 버전 정보는 다음 네 가지 값으로 구성됩니다. |
|
45 |
// |
|
46 |
// 주 버전 |
|
47 |
// 부 버전 |
|
48 |
// 빌드 번호 |
|
49 |
// 수정 버전 |
|
50 |
// |
|
51 |
// 모든 값을 지정하거나 아래와 같이 '*'를 사용하여 빌드 번호 및 수정 번호가 자동으로 |
|
52 |
// 지정되도록 할 수 있습니다. |
|
53 |
// [assembly: AssemblyVersion("1.0.*")] |
|
54 |
[assembly: AssemblyVersion("1.0.0.0")] |
|
55 |
[assembly: AssemblyFileVersion("1.0.0.0")] |
MarkupTest/Properties/Resources.Designer.cs | ||
---|---|---|
1 |
//------------------------------------------------------------------------------ |
|
2 |
// <auto-generated> |
|
3 |
// 이 코드는 도구를 사용하여 생성되었습니다. |
|
4 |
// 런타임 버전:4.0.30319.42000 |
|
5 |
// |
|
6 |
// 파일 내용을 변경하면 잘못된 동작이 발생할 수 있으며, 코드를 다시 생성하면 |
|
7 |
// 이러한 변경 내용이 손실됩니다. |
|
8 |
// </auto-generated> |
|
9 |
//------------------------------------------------------------------------------ |
|
10 |
|
|
11 |
namespace MarkupTest.Properties { |
|
12 |
using System; |
|
13 |
|
|
14 |
|
|
15 |
/// <summary> |
|
16 |
/// 지역화된 문자열 등을 찾기 위한 강력한 형식의 리소스 클래스입니다. |
|
17 |
/// </summary> |
|
18 |
// 이 클래스는 ResGen 또는 Visual Studio와 같은 도구를 통해 StronglyTypedResourceBuilder |
|
19 |
// 클래스에서 자동으로 생성되었습니다. |
|
20 |
// 멤버를 추가하거나 제거하려면 .ResX 파일을 편집한 다음 /str 옵션을 사용하여 ResGen을 |
|
21 |
// 다시 실행하거나 VS 프로젝트를 다시 빌드하십시오. |
|
22 |
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")] |
|
23 |
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()] |
|
24 |
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] |
|
25 |
internal class Resources { |
|
26 |
|
|
27 |
private static global::System.Resources.ResourceManager resourceMan; |
|
28 |
|
|
29 |
private static global::System.Globalization.CultureInfo resourceCulture; |
|
30 |
|
|
31 |
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] |
|
32 |
internal Resources() { |
|
33 |
} |
|
34 |
|
|
35 |
/// <summary> |
|
36 |
/// 이 클래스에서 사용하는 캐시된 ResourceManager 인스턴스를 반환합니다. |
|
37 |
/// </summary> |
|
38 |
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] |
|
39 |
internal static global::System.Resources.ResourceManager ResourceManager { |
|
40 |
get { |
|
41 |
if (object.ReferenceEquals(resourceMan, null)) { |
|
42 |
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("MarkupTest.Properties.Resources", typeof(Resources).Assembly); |
|
43 |
resourceMan = temp; |
|
44 |
} |
|
45 |
return resourceMan; |
|
46 |
} |
|
47 |
} |
|
48 |
|
|
49 |
/// <summary> |
|
50 |
/// 이 강력한 형식의 리소스 클래스를 사용하여 모든 리소스 조회에 대해 현재 스레드의 CurrentUICulture 속성을 |
|
51 |
/// 재정의합니다. |
|
52 |
/// </summary> |
|
53 |
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] |
|
54 |
internal static global::System.Globalization.CultureInfo Culture { |
|
55 |
get { |
|
56 |
return resourceCulture; |
|
57 |
} |
|
58 |
set { |
|
59 |
resourceCulture = value; |
|
60 |
} |
|
61 |
} |
|
62 |
} |
|
63 |
} |
MarkupTest/Properties/Resources.resx | ||
---|---|---|
1 |
<?xml version="1.0" encoding="utf-8"?> |
|
2 |
<root> |
|
3 |
<!-- |
|
4 |
Microsoft ResX Schema |
|
5 |
|
|
6 |
Version 2.0 |
|
7 |
|
|
8 |
The primary goals of this format is to allow a simple XML format |
|
9 |
that is mostly human readable. The generation and parsing of the |
|
10 |
various data types are done through the TypeConverter classes |
|
11 |
associated with the data types. |
|
12 |
|
|
13 |
Example: |
|
14 |
|
|
15 |
... ado.net/XML headers & schema ... |
|
16 |
<resheader name="resmimetype">text/microsoft-resx</resheader> |
|
17 |
<resheader name="version">2.0</resheader> |
|
18 |
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> |
|
19 |
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> |
|
20 |
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> |
|
21 |
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> |
|
22 |
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> |
|
23 |
<value>[base64 mime encoded serialized .NET Framework object]</value> |
|
24 |
</data> |
|
25 |
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> |
|
26 |
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> |
|
27 |
<comment>This is a comment</comment> |
|
28 |
</data> |
|
29 |
|
|
30 |
There are any number of "resheader" rows that contain simple |
|
31 |
name/value pairs. |
|
32 |
|
|
33 |
Each data row contains a name, and value. The row also contains a |
|
34 |
type or mimetype. Type corresponds to a .NET class that support |
|
35 |
text/value conversion through the TypeConverter architecture. |
|
36 |
Classes that don't support this are serialized and stored with the |
|
37 |
mimetype set. |
|
38 |
|
|
39 |
The mimetype is used for serialized objects, and tells the |
|
40 |
ResXResourceReader how to depersist the object. This is currently not |
|
41 |
extensible. For a given mimetype the value must be set accordingly: |
|
42 |
|
|
43 |
Note - application/x-microsoft.net.object.binary.base64 is the format |
|
44 |
that the ResXResourceWriter will generate, however the reader can |
|
45 |
read any of the formats listed below. |
|
46 |
|
|
47 |
mimetype: application/x-microsoft.net.object.binary.base64 |
|
48 |
value : The object must be serialized with |
|
49 |
: System.Serialization.Formatters.Binary.BinaryFormatter |
|
50 |
: and then encoded with base64 encoding. |
|
51 |
|
|
52 |
mimetype: application/x-microsoft.net.object.soap.base64 |
|
53 |
value : The object must be serialized with |
|
54 |
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter |
|
55 |
: and then encoded with base64 encoding. |
|
56 |
|
|
57 |
mimetype: application/x-microsoft.net.object.bytearray.base64 |
|
58 |
value : The object must be serialized into a byte array |
|
59 |
: using a System.ComponentModel.TypeConverter |
|
60 |
: and then encoded with base64 encoding. |
|
61 |
--> |
|
62 |
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> |
|
63 |
<xsd:element name="root" msdata:IsDataSet="true"> |
|
64 |
<xsd:complexType> |
|
65 |
<xsd:choice maxOccurs="unbounded"> |
|
66 |
<xsd:element name="metadata"> |
|
67 |
<xsd:complexType> |
|
68 |
<xsd:sequence> |
|
69 |
<xsd:element name="value" type="xsd:string" minOccurs="0" /> |
|
70 |
</xsd:sequence> |
|
71 |
<xsd:attribute name="name" type="xsd:string" /> |
|
72 |
<xsd:attribute name="type" type="xsd:string" /> |
|
73 |
<xsd:attribute name="mimetype" type="xsd:string" /> |
|
74 |
</xsd:complexType> |
|
75 |
</xsd:element> |
|
76 |
<xsd:element name="assembly"> |
|
77 |
<xsd:complexType> |
|
78 |
<xsd:attribute name="alias" type="xsd:string" /> |
|
79 |
<xsd:attribute name="name" type="xsd:string" /> |
|
80 |
</xsd:complexType> |
|
81 |
</xsd:element> |
|
82 |
<xsd:element name="data"> |
|
83 |
<xsd:complexType> |
|
84 |
<xsd:sequence> |
|
85 |
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> |
|
86 |
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> |
|
87 |
</xsd:sequence> |
|
88 |
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" /> |
|
89 |
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> |
|
90 |
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> |
|
91 |
</xsd:complexType> |
|
92 |
</xsd:element> |
|
93 |
<xsd:element name="resheader"> |
|
94 |
<xsd:complexType> |
|
95 |
<xsd:sequence> |
|
96 |
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> |
|
97 |
</xsd:sequence> |
|
98 |
<xsd:attribute name="name" type="xsd:string" use="required" /> |
|
99 |
</xsd:complexType> |
|
100 |
</xsd:element> |
|
101 |
</xsd:choice> |
|
102 |
</xsd:complexType> |
|
103 |
</xsd:element> |
|
104 |
</xsd:schema> |
|
105 |
<resheader name="resmimetype"> |
|
106 |
<value>text/microsoft-resx</value> |
|
107 |
</resheader> |
|
108 |
<resheader name="version"> |
|
109 |
<value>2.0</value> |
|
110 |
</resheader> |
|
111 |
<resheader name="reader"> |
|
112 |
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> |
|
113 |
</resheader> |
|
114 |
<resheader name="writer"> |
|
115 |
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> |
|
116 |
</resheader> |
|
117 |
</root> |
MarkupTest/Properties/Settings.Designer.cs | ||
---|---|---|
1 |
//------------------------------------------------------------------------------ |
|
2 |
// <auto-generated> |
|
3 |
// 이 코드는 도구를 사용하여 생성되었습니다. |
|
4 |
// 런타임 버전:4.0.30319.42000 |
|
5 |
// |
|
6 |
// 파일 내용을 변경하면 잘못된 동작이 발생할 수 있으며, 코드를 다시 생성하면 |
|
7 |
// 이러한 변경 내용이 손실됩니다. |
|
8 |
// </auto-generated> |
|
9 |
//------------------------------------------------------------------------------ |
|
10 |
|
|
11 |
namespace MarkupTest.Properties { |
|
12 |
|
|
13 |
|
|
14 |
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] |
|
15 |
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.9.0.0")] |
|
16 |
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { |
|
17 |
|
|
18 |
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); |
|
19 |
|
|
20 |
public static Settings Default { |
|
21 |
get { |
|
22 |
return defaultInstance; |
|
23 |
} |
|
24 |
} |
|
25 |
} |
|
26 |
} |
MarkupTest/Properties/Settings.settings | ||
---|---|---|
1 |
<?xml version='1.0' encoding='utf-8'?> |
|
2 |
<SettingsFile xmlns="uri:settings" CurrentProfile="(Default)"> |
|
3 |
<Profiles> |
|
4 |
<Profile Name="(Default)" /> |
|
5 |
</Profiles> |
|
6 |
<Settings /> |
|
7 |
</SettingsFile> |
MarkupToPDF/Common/CommentUserInfo.cs | ||
---|---|---|
103 | 103 |
/// </summary> |
104 | 104 |
public virtual ControlType ControlType { get; set; } |
105 | 105 |
|
106 |
private double _CommentAngle; |
|
107 |
|
|
106 | 108 |
/// <summary> |
107 |
/// subclass has to override this property
|
|
109 |
/// 컨트롤의 ANGLE
|
|
108 | 110 |
/// </summary> |
109 |
public virtual double Angle { get; set; } |
|
111 |
public virtual double CommentAngle |
|
112 |
{ |
|
113 |
get { return _CommentAngle; } |
|
114 |
set { |
|
115 |
_CommentAngle = value; |
|
116 |
System.Diagnostics.Debug.WriteLine($"CommentInfo CommentAngle {value}"); |
|
117 |
} |
|
118 |
} |
|
119 |
|
|
120 |
private double _PageAngle; |
|
121 |
|
|
122 |
/// <summary> |
|
123 |
/// 실제 저장된 Page의 ANGLE |
|
124 |
/// DB에 저장됨 |
|
125 |
/// </summary> |
|
126 |
public virtual double PageAngle |
|
127 |
{ |
|
128 |
get { return _PageAngle; } |
|
129 |
set |
|
130 |
{ |
|
131 |
_PageAngle = value; |
|
132 |
System.Diagnostics.Debug.WriteLine($"CommentInfo PageAngle {value}"); |
|
133 |
} |
|
134 |
} |
|
135 |
|
|
136 |
private double _VisualPageAngle; |
|
137 |
|
|
138 |
/// <summary> |
|
139 |
/// Display되는 Page의 ANGLE |
|
140 |
/// PageAngle에서 변형됨 |
|
141 |
/// </summary> |
|
142 |
public virtual double VisualPageAngle |
|
143 |
{ |
|
144 |
get { return _VisualPageAngle; } |
|
145 |
set |
|
146 |
{ |
|
147 |
_VisualPageAngle = value; |
|
148 |
//System.Diagnostics.Debug.WriteLine($"CommentInfo VisualPageAngle {value}"); |
|
149 |
} |
|
150 |
} |
|
110 | 151 |
|
111 | 152 |
public virtual SolidColorBrush StrokeColor { get; set; } |
112 | 153 |
|
MarkupToPDF/Controls/Cad/ClipWhiteControlcs.cs | ||
---|---|---|
262 | 262 |
} |
263 | 263 |
} |
264 | 264 |
|
265 |
public double Angle |
|
265 |
public double CommentAngle
|
|
266 | 266 |
{ |
267 | 267 |
get { return (double)GetValue(AngleProperty); } |
268 | 268 |
set |
269 | 269 |
{ |
270 |
if (this.Angle != value) |
|
270 |
if (this.CommentAngle != value)
|
|
271 | 271 |
{ |
272 | 272 |
SetValue(AngleProperty, value); |
273 | 273 |
} |
... | ... | |
641 | 641 |
Paint = s.PaintState, |
642 | 642 |
StartPoint = s.StartPoint, |
643 | 643 |
EndPoint = s.EndPoint, |
644 |
Angle = s.Angle, |
|
644 |
CommentAngle = s.Angle,
|
|
645 | 645 |
StrokeColor = Brushes.White, |
646 | 646 |
DashSize = s.DashSize, |
647 | 647 |
Opacity = s.Opac, |
MarkupToPDF/Controls/Cad/CoordinateControl.cs | ||
---|---|---|
262 | 262 |
} |
263 | 263 |
} |
264 | 264 |
|
265 |
public double Angle |
|
265 |
public double CommentAngle
|
|
266 | 266 |
{ |
267 | 267 |
get { return (double)GetValue(AngleProperty); } |
268 | 268 |
set |
269 | 269 |
{ |
270 |
if (this.Angle != value) |
|
270 |
if (this.CommentAngle != value)
|
|
271 | 271 |
{ |
272 | 272 |
SetValue(AngleProperty, value); |
273 | 273 |
} |
... | ... | |
640 | 640 |
Paint = s.PaintState, |
641 | 641 |
StartPoint = s.StartPoint, |
642 | 642 |
EndPoint = s.EndPoint, |
643 |
Angle = s.Angle, |
|
643 |
CommentAngle = s.Angle,
|
|
644 | 644 |
StrokeColor = Brushes.Yellow, |
645 | 645 |
DashSize = s.DashSize, |
646 | 646 |
Opacity = s.Opac, |
MarkupToPDF/Controls/Cad/InsideWhiteControlcs.cs | ||
---|---|---|
262 | 262 |
} |
263 | 263 |
} |
264 | 264 |
|
265 |
public double Angle |
|
265 |
public double CommentAngle
|
|
266 | 266 |
{ |
267 | 267 |
get { return (double)GetValue(AngleProperty); } |
268 | 268 |
set |
269 | 269 |
{ |
270 |
if (this.Angle != value) |
|
270 |
if (this.CommentAngle != value)
|
|
271 | 271 |
{ |
272 | 272 |
SetValue(AngleProperty, value); |
273 | 273 |
} |
... | ... | |
641 | 641 |
Paint = s.PaintState, |
642 | 642 |
StartPoint = s.StartPoint, |
643 | 643 |
EndPoint = s.EndPoint, |
644 |
Angle = s.Angle, |
|
644 |
CommentAngle = s.Angle,
|
|
645 | 645 |
StrokeColor = Brushes.White, |
646 | 646 |
DashSize = s.DashSize, |
647 | 647 |
Opacity = s.Opac, |
MarkupToPDF/Controls/Cad/OverlapWhiteControl.cs | ||
---|---|---|
262 | 262 |
} |
263 | 263 |
} |
264 | 264 |
|
265 |
public double Angle |
|
265 |
public double CommentAngle
|
|
266 | 266 |
{ |
267 | 267 |
get { return (double)GetValue(AngleProperty); } |
268 | 268 |
set |
269 | 269 |
{ |
270 |
if (this.Angle != value) |
|
270 |
if (this.CommentAngle != value)
|
|
271 | 271 |
{ |
272 | 272 |
SetValue(AngleProperty, value); |
273 | 273 |
} |
... | ... | |
641 | 641 |
Paint = s.PaintState, |
642 | 642 |
StartPoint = s.StartPoint, |
643 | 643 |
EndPoint = s.EndPoint, |
644 |
Angle = s.Angle, |
|
644 |
CommentAngle = s.Angle,
|
|
645 | 645 |
StrokeColor = Brushes.White, |
646 | 646 |
DashSize = s.DashSize, |
647 | 647 |
Opacity = s.Opac, |
MarkupToPDF/Controls/Common/IMarkupCommonData.cs | ||
---|---|---|
38 | 38 |
|
39 | 39 |
public interface IShapeControl : IPath |
40 | 40 |
{ |
41 |
double Angle { get; set; } |
|
41 |
double CommentAngle { get; set; }
|
|
42 | 42 |
PaintSet Paint { get; set; } |
43 | 43 |
//강인구 추가 |
44 | 44 |
//DoubleCollection DashSize { get; set; } |
MarkupToPDF/Controls/Common/Interfaces.cs | ||
---|---|---|
36 | 36 |
|
37 | 37 |
public interface IViewBox : IPath |
38 | 38 |
{ |
39 |
double Angle { get; set; } |
|
39 |
double CommentAngle { get; set; }
|
|
40 | 40 |
} |
41 | 41 |
public interface ICircleControl : IShapeControl |
42 | 42 |
{ |
MarkupToPDF/Controls/Etc/DateControl.cs | ||
---|---|---|
189 | 189 |
} |
190 | 190 |
} |
191 | 191 |
|
192 |
public override double Angle |
|
192 |
public override double CommentAngle
|
|
193 | 193 |
{ |
194 | 194 |
get { return (double)GetValue(AngleProperty); } |
195 | 195 |
set |
196 | 196 |
{ |
197 |
if (this.Angle != value) |
내보내기 Unified diff