You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

173 lines
5.9 KiB
C#

1 month ago
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using SigmaDrawerStyle;
namespace GeoSigmaViewer
{
public partial class PanelProperty : UserControl
{
public Viewer DrawViewer { get; set; }
public string LayerName { get; set; }
private int propertyType = 0;//0-层位属性1-元素属性
private int propertyIndex = -1;
public PanelProperty()
{
InitializeComponent();
}
private DrawerStyle _CurrentStyle;
public DrawerStyle CurrentStyle {
get => _CurrentStyle;
set
{
_CurrentStyle=value;
propertyGrid.SelectedObject=null;
lsvLayer.Items.Clear();
//lsvElement.Items.Clear();
if (_CurrentStyle==null)
{
return;
}
if (_CurrentStyle.CurveStyle!=null)
{
List<CurveView> lstCurve = _CurrentStyle.CurveStyle.Properties;
if (lstCurve!=null&&lstCurve.Count>0)
{
int nIndex = 0;
foreach (CurveView curve in lstCurve)
{
if (curve is CurveStyleBase) { continue; }
nIndex++;
ListViewItem lvi = new ListViewItem(""+nIndex);
lvi.SubItems.Add(new ListViewItem.ListViewSubItem(lvi, curve.TypeName));
lvi.SubItems.Add(new ListViewItem.ListViewSubItem(lvi, "线"));
lvi.Tag=curve;
lsvLayer.Items.Add(lvi);
}
}
}
if (_CurrentStyle.PontStyle!=null)
{
ListViewItem lvi = new ListViewItem("1");
lvi.SubItems.Add(new ListViewItem.ListViewSubItem(lvi, "点属性"));
lvi.SubItems.Add(new ListViewItem.ListViewSubItem(lvi, "点"));
lvi.Tag=_CurrentStyle.PontStyle;
lsvLayer.Items.Add(lvi);
}
if (lsvLayer.Items.Count>0)
{
//CurveProperty property = lsvCurve.Items[0].Tag as CurveProperty;
propertyGrid.SelectedObject=lsvLayer.Items[0].Tag;
}
//else
//{
// if (lsvPoint.Items.Count>0)
// {
// propertyGrid.SelectedObject=lsvPoint.Items[0];
// tabControl1.SelectTab(1);
// }
//}
lsvLayer.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent);
}
}
private void lsvCurve_SelectedIndexChanged(object sender, EventArgs e)
{
if(lsvLayer.SelectedItems.Count>0)
{
propertyGrid.SelectedObject=lsvLayer.SelectedItems[0].Tag;
propertyType=0;
propertyIndex=lsvLayer.SelectedItems[0].Index;
}
}
private void tsbLayerDel_Click(object sender, EventArgs e)
{
if(lsvLayer.SelectedItems.Count==0)
{
return;
}
ListViewItem lviSelect = lsvLayer.SelectedItems[0];
int nIndex = lviSelect.Index;
string strType = lviSelect.SubItems[2].Text+"";
lviSelect.Remove();
int nCount = lsvLayer.Items.Count;
if (nIndex==nCount)
{
if (lsvLayer.Items.Count>0)
{ lsvLayer.Items[0].Selected=true; }
}
else
{
lsvLayer.Items[nIndex].Selected=true;
}
if (strType.Equals("线"))
{
if (DrawViewer.RemoveCurveStyle(LayerName, nIndex))
{
DrawViewer.Redraw();
}
ResetLayerIndex();
}
else if (strType.Equals("点"))
{
if (DrawViewer.RemovePointStyle(LayerName))
{
DrawViewer.Redraw();
}
}
if(nCount ==0)
{
propertyGrid.SelectedObject=null;
}
}
private void ResetLayerIndex()
{
int nCount = lsvLayer.Items.Count;
int nIndex = 0;
for (int i=0;i<nCount;i++)
{
ListViewItem lviSelect = lsvLayer.Items[i];
if (lviSelect.SubItems[2].Text.Equals("线"))
{
nIndex++;
lviSelect.Text=nIndex+"";
}
}
}
/// <summary>
/// 属性修改事件
/// </summary>
/// <param name="s"></param>
/// <param name="e"></param>
private void propertyGrid_PropertyValueChanged(object s, PropertyValueChangedEventArgs e)
{
var varStyle = propertyGrid.SelectedObject;
if(varStyle is DrawerPointStyle)
{
string strPointStyle = ((DrawerPointStyle)varStyle).SerialXml();
if( DrawViewer.SetLayerHowtoViewPoint(LayerName, strPointStyle)==true)
{
DrawViewer.Redraw();
}
}
else
{
string strCurveStyle = ((CurveView)varStyle).SerialXml();
Console.WriteLine(strCurveStyle);
if (DrawViewer.SetLayerHowtoViewCurve(LayerName, strCurveStyle, propertyIndex)==true)
{
DrawViewer.Redraw();
}
}
}
}
}