Draw graphics and set symbol

This commit is contained in:
PeterZhong 2024-12-02 11:52:00 +08:00
parent 510274879b
commit f7125ef57d
3 changed files with 312 additions and 26 deletions

View File

@ -57,6 +57,7 @@ namespace GisDevelop_Exp
private SimpleMarkerSymbol pointSymbol;
private SimpleLineSymbol lineSymbol;
private SimpleFillSymbol fillSymbol;
private SimpleLineSymbol outlineSymbol;
private readonly Dictionary<string, Basemap> _basemapOptions = new Dictionary<string, Basemap>()
{
@ -82,6 +83,7 @@ namespace GisDevelop_Exp
pointSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbolStyle.Circle, System.Drawing.Color.Blue, 3);
lineSymbol = new SimpleLineSymbol(SimpleLineSymbolStyle.Solid, System.Drawing.Color.Blue, 1);
fillSymbol = new SimpleFillSymbol(SimpleFillSymbolStyle.Solid, System.Drawing.Color.Blue,new SimpleLineSymbol(SimpleLineSymbolStyle.Solid,System.Drawing.Color.Pink,1));
outlineSymbol = new SimpleLineSymbol(SimpleLineSymbolStyle.Solid, System.Drawing.Color.Blue, 1);
linePoints = new List<MapPoint>();
linesList = new List<Graphic>();
@ -330,6 +332,9 @@ namespace GisDevelop_Exp
}
private void MainMapView_OnGeoViewTapped(object? sender, GeoViewInputEventArgs e)
{
MainMapView.DismissCallout();
if (m_CurOper == CURRENTOPERATION.NullOpe)
{
MapPoint mapLocation = e.Location;
Geometry myGeometry = mapLocation.Project(SpatialReferences.Wgs84);
@ -338,7 +343,8 @@ namespace GisDevelop_Exp
string.Format("纬度: {0:F3} 经度:{1:F3}", projectedLocation.Y, projectedLocation.X);
CalloutDefinition myCalloutDefinition = new CalloutDefinition("当前位置:", mapLocationDescription);
MainMapView.ShowCalloutAt(mapLocation, myCalloutDefinition);
if (m_CurOper == CURRENTOPERATION.SelectQuery)
}
else if (m_CurOper == CURRENTOPERATION.SelectQuery)
{
if (MainMapView.Map.OperationalLayers.Count > 0)
{
@ -564,6 +570,7 @@ namespace GisDevelop_Exp
LayerListBox.AllowDrop = true;
LayerCollection pLayers = MainMapView.Map.OperationalLayers;
if (pLayers.Count <= 0) return;
List<CheckBox> checkBoxes = new List<CheckBox>();
for (int i = pLayers.Count - 1; i >= 0; i--)
{
CheckBox cb = new CheckBox()
@ -584,6 +591,7 @@ namespace GisDevelop_Exp
cb.Focusable = false;
cb.Checked += new RoutedEventHandler(Checked_Layers_CheckBox);
cb.Unchecked += new RoutedEventHandler(UnChecked_Layers_CheckBox);
ListBoxItem listBoxItem = new ListBoxItem();
LayerListBox.Items.Add(cb);
}
}
@ -656,6 +664,7 @@ namespace GisDevelop_Exp
private void Menu_Point_Symbol_Click(object sender, RoutedEventArgs e)
{
MainMapView.GraphicsOverlays[0].Graphics.Clear();
m_CurOper = CURRENTOPERATION.DrawPoint;
}
@ -686,6 +695,26 @@ namespace GisDevelop_Exp
linesList.Add(lineGraphic);
}
}
else if (m_CurOper == CURRENTOPERATION.DrawPolygon)
{
linePoints.Add(location);
if (linePoints.Count > 1)
{
if (linesList.Count > 0)
{
Graphic curGraphic = linesList[linesList.Count - 1];
MainMapView.GraphicsOverlays[0].Graphics.Remove(curGraphic);
linesList.Remove(curGraphic);
}
Polygon polygon = new Polygon(linePoints);
Graphic polygonGraphic = new Graphic(polygon, fillSymbol);
MainMapView.GraphicsOverlays[0].Graphics.Add(polygonGraphic);
Polyline line = new Polyline(linePoints);
Graphic lineGraphic = new Graphic(line, lineSymbol);
// MainMapView.GraphicsOverlays[0].Graphics.Add(lineGraphic);
linesList.Add(lineGraphic);
}
}
}
private void Menu_Layers_Options_OnClick(object sender, RoutedEventArgs e)
@ -694,18 +723,22 @@ namespace GisDevelop_Exp
op.PointSymbol = pointSymbol;
op.LineSymbol = lineSymbol;
op.FillSymbol = fillSymbol;
op.GeometryType = MainMapView.GraphicsOverlays[0].Graphics[0].Geometry.GeometryType;
op.ShowDialog();
}
private void Menu_Point_Draw_Line_OnClick(object sender, RoutedEventArgs e)
{
MainMapView.GraphicsOverlays[0].Graphics.Clear();
m_CurOper = CURRENTOPERATION.DrawLine;
linePoints.Clear();
}
private void Menu_Point_Draw_Polygon_OnClick(object sender, RoutedEventArgs e)
{
MainMapView.GraphicsOverlays[0].Graphics.Clear();
m_CurOper = CURRENTOPERATION.DrawPolygon;
linePoints.Clear();
}
private void MainMapView_OnMouseRightButtonDown(object sender, MouseButtonEventArgs e)

View File

@ -6,7 +6,8 @@
xmlns:local="clr-namespace:GisDevelop_Exp"
mc:Ignorable="d"
Title="符号系统" Height="453" Width="399"
Loaded="Window_Loaded">
Loaded="Window_Loaded"
x:Name="Options_Window">
<Grid Margin="0,0,30,70">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="726*"/>
@ -14,7 +15,7 @@
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TabControl Grid.ColumnSpan="3" HorizontalAlignment="Left" Width="398" Margin="0,0,0,-70">
<TabItem Header="点符号" Loaded="Point_Tab_OnLoaded">
<TabItem x:Name="Point_Tab" Header="点符号" Loaded="Point_Tab_OnLoaded">
<Grid Background="#FFE5E5E5" Margin="0,0,0,0" RenderTransformOrigin="0.384,0.599">
<Canvas Margin="0,0,0,0">
<Label Content="样式:" Canvas.Left="25" Canvas.Top="22"/>
@ -34,7 +35,7 @@
</Canvas>
</Grid>
</TabItem>
<TabItem Header="线符号" Loaded="FrameworkElement_OnLoaded">
<TabItem x:Name="Line_Tab" Header="线符号" Loaded="FrameworkElement_OnLoaded">
<Grid Background="#FFE5E5E5">
<Label Content="线型:" HorizontalAlignment="Left" Margin="24,25,0,0" VerticalAlignment="Top"></Label>
<ComboBox x:Name="ComboBox_Line_Style" HorizontalAlignment="Left" Margin="24,49,0,0" VerticalAlignment="Top" Width="305" SelectionChanged="ComboBox_Line_Style_OnSelected">
@ -54,12 +55,12 @@
<Button x:Name="Btn_Line_Cancel" Content="取消" HorizontalAlignment="Left" Margin="236,285,0,0" VerticalAlignment="Top" Height="20" Width="75" Click="Btn_Line_Cancel_OnClick"/>
</Grid>
</TabItem>
<TabItem Header="面符号">
<TabItem x:Name="Polygon_Tab" Header="面符号" Loaded="FrameworkElementPolygon_OnLoaded">
<Grid Background="#FFE5E5E5">
<Canvas>
<Label Content="样式:" Canvas.Left="28" Canvas.Top="22"/>
</Canvas>
<ListBox Width="100" Margin="30,53,262,204">
<ListBox x:Name="ListBox_Polygln_Fill" Width="100" Margin="30,53,262,204" SelectionChanged="ListBox_Polygln_Fill_OnSelectionChanged">
<ListBoxItem x:Name="ListBoxItem_Polygon_Solid"><Image Source="D:\01_Development\10_Visual_Studio_Project\GisDevelop\GisDevelop_Exp\GisDevelop_Exp\image\FSolid.png" Width="32" Height="32"></Image></ListBoxItem>
<ListBoxItem x:Name="ListBoxItem_Polygon_Horizontal"><Image Source="D:\01_Development\10_Visual_Studio_Project\GisDevelop\GisDevelop_Exp\GisDevelop_Exp\image\FHori.png" Width="32" Height="32"></Image></ListBoxItem>
<ListBoxItem x:Name="ListBoxItem_Polygon_Vertical"><Image Source="D:\01_Development\10_Visual_Studio_Project\GisDevelop\GisDevelop_Exp\GisDevelop_Exp\image\FVer.png" Width="32" Height="32"></Image></ListBoxItem>
@ -69,11 +70,11 @@
<ListBoxItem x:Name="ListBoxItem_Polygon_DiagonalCross"><Image Source="D:\01_Development\10_Visual_Studio_Project\GisDevelop\GisDevelop_Exp\GisDevelop_Exp\image\FDialog2.png" Width="32" Height="32"></Image></ListBoxItem>
<ListBoxItem x:Name="ListBoxItem_Polygon_Null"><Image Source="D:\01_Development\10_Visual_Studio_Project\GisDevelop\GisDevelop_Exp\GisDevelop_Exp\image\FNo.png" Width="32" Height="32"></Image></ListBoxItem>
</ListBox>
<CheckBox x:Name="Checkbox_Border" Content="边界线" HorizontalAlignment="Left" Margin="184,28,0,0" VerticalAlignment="Top"/>
<CheckBox x:Name="Checkbox_Border" Content="边界线" HorizontalAlignment="Left" Margin="184,28,0,0" VerticalAlignment="Top" Checked="Checkbox_Border_OnChecked" Unchecked="Checkbox_Border_OnUnchecked"/>
<Border BorderBrush="Black" BorderThickness="1" Margin="162,53,49,180">
<Canvas>
<Label Content="边界线样式" Canvas.Left="10" Canvas.Top="10"/>
<ComboBox Canvas.Left="10" Canvas.Top="36" HorizontalAlignment="Center" VerticalAlignment="Top" Width="159">
<ComboBox x:Name="ComboBox_Border_Style" Canvas.Left="10" Canvas.Top="36" HorizontalAlignment="Center" VerticalAlignment="Top" Width="159" SelectionChanged="ComboBox_Border_Style_OnSelected">
<ComboBoxItem x:Name="ComboBoxItem_Border_Solid" Content="实线"/>
<ComboBoxItem x:Name="ComboBoxItem_Border_Dash" Content="虚线"/>
<ComboBoxItem x:Name="ComboBoxItem_Border_Dot" Content="点线"/>
@ -82,19 +83,18 @@
<ComboBoxItem x:Name="ComboBoxItem_Border_Null" Content="空"/>
</ComboBox>
<Label Content="宽度" Canvas.Left="18" Canvas.Top="75"/>
<TextBox x:Name="TextBox_Border_Width" HorizontalAlignment="Left" VerticalAlignment="Top" Width="109" Canvas.Left="52" Canvas.Top="79" />
<Label Content="颜色" Canvas.Left="18" Canvas.Top="114" HorizontalAlignment="Center" VerticalAlignment="Center"/>
<Label x:Name="Label_Border_Color" Content="" Canvas.Left="57" Canvas.Top="114" HorizontalAlignment="Left" VerticalAlignment="Center" Width="104" Background="White"/>
<TextBox x:Name="TextBox_Border_Width" HorizontalAlignment="Left" VerticalAlignment="Top" Width="109" Canvas.Left="52" Canvas.Top="79" TextChanged="TextBox_Border_Width_OnTextChanged"/>
<Label Content="颜色" Canvas.Left="18" Canvas.Top="114" HorizontalAlignment="Center" VerticalAlignment="Center" MouseLeftButtonUp="ChooseOutlineColor"/>
<Label x:Name="Label_Border_Color" Content="" Canvas.Left="57" Canvas.Top="114" HorizontalAlignment="Left" VerticalAlignment="Center" Width="104" Background="White" MouseLeftButtonUp="ChooseOutlineColor"/>
</Canvas>
</Border>
<Label Content="填充颜色" HorizontalAlignment="Left" Margin="42,229,0,0" VerticalAlignment="Top"/>
<Label x:Name="Label_Polygon_Color" Content="" HorizontalAlignment="Left" Margin="151,229,0,0" VerticalAlignment="Top" Background="White" Width="182"/>
<Button x:Name="Btn_Polygon_Confirm" Content="确定" HorizontalAlignment="Left" Margin="30,294,0,0" VerticalAlignment="Top" Width="70"/>
<Button x:Name="Btn_Polygon_Apply" Content="应用" HorizontalAlignment="Left" Margin="151,294,0,0" VerticalAlignment="Top" Width="70"/>
<Button x:Name="Btn_Polygon_Cancel" Content="取消" HorizontalAlignment="Left" Margin="273,294,0,0" VerticalAlignment="Top" Width="70"/>
<Label Content="填充颜色" HorizontalAlignment="Left" Margin="42,229,0,0" VerticalAlignment="Top" MouseLeftButtonUp="ChooseFillColor"/>
<Label x:Name="Label_Polygon_Color" Content="" HorizontalAlignment="Left" Margin="151,229,0,0" VerticalAlignment="Top" Background="White" Width="182" MouseLeftButtonUp="ChooseFillColor"/>
<Button x:Name="Btn_Polygon_Confirm" Content="确定" HorizontalAlignment="Left" Margin="30,294,0,0" VerticalAlignment="Top" Width="70" Click="Btn_Polygon_Confirm_OnClick"/>
<Button x:Name="Btn_Polygon_Apply" Content="应用" HorizontalAlignment="Left" Margin="151,294,0,0" VerticalAlignment="Top" Width="70" Click="Btn_Polygon_Apply_OnClick"/>
<Button x:Name="Btn_Polygon_Cancel" Content="取消" HorizontalAlignment="Left" Margin="273,294,0,0" VerticalAlignment="Top" Width="70" Click="Btn_Polygon_Cancel_OnClick"/>
</Grid>
</TabItem>
</TabControl>
</Grid>
</Window>

View File

@ -11,7 +11,9 @@ using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using Esri.ArcGISRuntime.Geometry;
using Esri.ArcGISRuntime.Symbology;
using WinRT;
namespace GisDevelop_Exp
{
@ -40,11 +42,19 @@ namespace GisDevelop_Exp
private SimpleLineSymbolStyle outlineStyle;
private double outlineSize;
private GeometryType geometryType;
public OptionsWindow()
{
InitializeComponent();
}
public GeometryType GeometryType
{
get { return geometryType; }
set { geometryType = value; }
}
public SimpleMarkerSymbol PointSymbol
{
get { return pointSymbol; }
@ -87,7 +97,17 @@ namespace GisDevelop_Exp
if (fillSymbol.Outline != null)
{
outlineSymbol=(SimpleLineSymbol)fillSymbol.Outline;
outlineSize=outlineSymbol.Width;
outlineColor=outlineSymbol.Color;
outlineStyle=outlineSymbol.Style;
if (outlineSymbol.Style == SimpleLineSymbolStyle.Null)
{
Checkbox_Border.IsChecked = false;
}
else
{
Checkbox_Border.IsChecked = true;
}
Checkbox_Border.Visibility = Visibility.Visible;
}
else
@ -97,6 +117,26 @@ namespace GisDevelop_Exp
Checkbox_Border.Visibility = Visibility.Collapsed;
}
}
if (geometryType == GeometryType.Point)
{
Point_Tab.IsSelected = true;
Point_Tab.Visibility = Visibility.Visible;
Line_Tab.Visibility = Visibility.Collapsed;
Polygon_Tab.Visibility = Visibility.Collapsed;
}else if (geometryType == GeometryType.Polyline)
{
Line_Tab.IsSelected = true;
Point_Tab.Visibility = Visibility.Collapsed;
Line_Tab.Visibility = Visibility.Visible;
Polygon_Tab.Visibility = Visibility.Collapsed;
}else if (geometryType == GeometryType.Polygon)
{
Polygon_Tab.IsSelected = true;
Point_Tab.Visibility = Visibility.Collapsed;
Line_Tab.Visibility = Visibility.Collapsed;
Polygon_Tab.Visibility = Visibility.Visible;
}
}
private void Point_Tab_OnLoaded(object sender, RoutedEventArgs e)
@ -299,5 +339,218 @@ namespace GisDevelop_Exp
break;
}
}
private void FrameworkElementPolygon_OnLoaded(object sender, RoutedEventArgs e)
{
switch (fillStyle)
{
case SimpleFillSymbolStyle.Solid:
ListBoxItem_Polygon_Solid.IsSelected = true;
break;
case SimpleFillSymbolStyle.Cross:
ListBoxItem_Polygon_Cross.IsSelected = true;
break;
case SimpleFillSymbolStyle.Horizontal:
ListBoxItem_Polygon_Horizontal.IsSelected = true;
break;
case SimpleFillSymbolStyle.Vertical:
ListBoxItem_Polygon_Vertical.IsSelected = true;
break;
case SimpleFillSymbolStyle.ForwardDiagonal:
ListBoxItem_Polygon_ForwardDiagonal.IsSelected = true;
break;
case SimpleFillSymbolStyle.BackwardDiagonal:
ListBoxItem_Polygon_BackwardDiagonal.IsSelected = true;
break;
case SimpleFillSymbolStyle.DiagonalCross:
ListBoxItem_Polygon_DiagonalCross.IsSelected = true;
break;
case SimpleFillSymbolStyle.Null:
ListBoxItem_Polygon_Null.IsSelected = true;
break;
}
switch (outlineStyle)
{
case SimpleLineSymbolStyle.Solid:
ComboBox_Border_Style.SelectedIndex = 0;
break;
case SimpleLineSymbolStyle.Dash:
ComboBox_Border_Style.SelectedIndex = 1;
break;
case SimpleLineSymbolStyle.Dot:
ComboBox_Border_Style.SelectedIndex = 2;
break;
case SimpleLineSymbolStyle.DashDot:
ComboBox_Border_Style.SelectedIndex = 3;
break;
case SimpleLineSymbolStyle.DashDotDot:
ComboBox_Border_Style.SelectedIndex = 4;
break;
case SimpleLineSymbolStyle.Null:
ComboBox_Border_Style.SelectedIndex = 5;
Checkbox_Border.IsChecked = false;
break;
}
TextBox_Border_Width.Text = outlineSize.ToString();
System.Windows.Media.Color borderColor = System.Windows.Media.Color.FromArgb(outlineColor.A, outlineColor.R, outlineColor.G, outlineColor.B);
Label_Border_Color.Background = new SolidColorBrush(borderColor);
System.Windows.Media.Color fillColor = System.Windows.Media.Color.FromArgb(this.fillColor.A, this.fillColor.R, this.fillColor.G, this.fillColor.B);
Label_Polygon_Color.Background = new SolidColorBrush(fillColor);
}
private void ChooseFillColor(object sender, MouseButtonEventArgs e)
{
System.Windows.Forms.ColorDialog colorDialog = new System.Windows.Forms.ColorDialog();
SolidColorBrush colorBrush = (SolidColorBrush)Label_Polygon_Color.Background;
colorDialog.Color = System.Drawing.Color.FromArgb(colorBrush.Color.A, colorBrush.Color.R, colorBrush.Color.G, colorBrush.Color.B);
if (colorDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
fillColor = colorDialog.Color;
System.Windows.Media.Color fillColorV = System.Windows.Media.Color.FromArgb(fillColor.A, fillColor.R, fillColor.G, fillColor.B);
Label_Polygon_Color.Background = new SolidColorBrush(fillColorV);
}
}
private void ChooseOutlineColor(object sender, MouseButtonEventArgs e)
{
System.Windows.Forms.ColorDialog colorDialog = new System.Windows.Forms.ColorDialog();
SolidColorBrush colorBrush = (SolidColorBrush)Label_Border_Color.Background;
colorDialog.Color = System.Drawing.Color.FromArgb(colorBrush.Color.A, colorBrush.Color.R, colorBrush.Color.G, colorBrush.Color.B);
if (colorDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
outlineColor = colorDialog.Color;
System.Windows.Media.Color outlineColorV = System.Windows.Media.Color.FromArgb(outlineColor.A, outlineColor.R, outlineColor.G, outlineColor.B);
Label_Border_Color.Background = new SolidColorBrush(outlineColorV);
}
}
private void Btn_Polygon_Apply_OnClick(object sender, RoutedEventArgs e)
{
outlineSymbol.Style = outlineStyle;
outlineSymbol.Color = outlineColor;
outlineSymbol.Width = outlineSize;
fillSymbol.Style = fillStyle;
fillSymbol.Color = fillColor;
fillSymbol.Outline = outlineSymbol;
}
private void Btn_Polygon_Confirm_OnClick(object sender, RoutedEventArgs e)
{
outlineSymbol.Style = outlineStyle;
outlineSymbol.Color = outlineColor;
outlineSymbol.Width = outlineSize;
fillSymbol.Style = fillStyle;
fillSymbol.Color = fillColor;
fillSymbol.Outline = outlineSymbol;
this.DialogResult = true;
}
private void Btn_Polygon_Cancel_OnClick(object sender, RoutedEventArgs e)
{
this.DialogResult = false;
}
private void ComboBox_Border_Style_OnSelected(object sender, RoutedEventArgs e)
{
switch (ComboBox_Border_Style.SelectedIndex)
{
case 0:
outlineStyle = SimpleLineSymbolStyle.Solid;
break;
case 1:
outlineStyle = SimpleLineSymbolStyle.Dash;
break;
case 2:
outlineStyle = SimpleLineSymbolStyle.Dot;
break;
case 3:
outlineStyle = SimpleLineSymbolStyle.DashDot;
break;
case 4:
outlineStyle = SimpleLineSymbolStyle.DashDotDot;
break;
case 5:
outlineStyle = SimpleLineSymbolStyle.Null;
break;
}
}
private void ListBox_Polygln_Fill_OnSelectionChanged(object sender, SelectionChangedEventArgs e)
{
switch (ListBox_Polygln_Fill.SelectedIndex)
{
case 0:
fillStyle = SimpleFillSymbolStyle.Solid;
break;
case 1:
fillStyle = SimpleFillSymbolStyle.Horizontal;
break;
case 2:
fillStyle = SimpleFillSymbolStyle.Vertical;
break;
case 3:
fillStyle = SimpleFillSymbolStyle.Cross;
break;
case 4:
fillStyle = SimpleFillSymbolStyle.ForwardDiagonal;
break;
case 5:
fillStyle = SimpleFillSymbolStyle.BackwardDiagonal;
break;
case 6:
fillStyle = SimpleFillSymbolStyle.DiagonalCross;
break;
case 7:
fillStyle = SimpleFillSymbolStyle.Null;
break;
}
}
private void TextBox_Border_Width_OnTextChanged(object sender, TextChangedEventArgs e)
{
try
{
outlineSize = Convert.ToInt32(TextBox_Border_Width.Text);
Console.WriteLine(outlineSize);
}
catch (FormatException fe)
{
MessageBox.Show(fe.Message);
}
}
private void Checkbox_Border_OnChecked(object sender, RoutedEventArgs e)
{
switch (ComboBox_Border_Style.SelectedIndex)
{
case 0:
outlineStyle = SimpleLineSymbolStyle.Solid;
break;
case 1:
outlineStyle = SimpleLineSymbolStyle.Dash;
break;
case 2:
outlineStyle = SimpleLineSymbolStyle.Dot;
break;
case 3:
outlineStyle = SimpleLineSymbolStyle.DashDot;
break;
case 4:
outlineStyle = SimpleLineSymbolStyle.DashDotDot;
break;
case 5:
outlineStyle = SimpleLineSymbolStyle.Null;
break;
}
}
private void Checkbox_Border_OnUnchecked(object sender, RoutedEventArgs e)
{
outlineStyle = SimpleLineSymbolStyle.Null;
}
}
}