using GeoSigma.SigmaDrawerElement; using SigmaDrawerElement; using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing.Design; using System.Drawing.Drawing2D; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms.Design; namespace GeoSigma.SigmaDrawerStyle { //设置曲线填充的渐进色 public class PropertyEditorFillCurveGradient : UITypeEditor { public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context) { return UITypeEditorEditStyle.Modal; } public override bool GetPaintValueSupported(ITypeDescriptorContext context) { return true; } public override void PaintValue(PaintValueEventArgs e) { if (e.Value is WellTrackGradientStyle style) { var g = e.Graphics; var rect = e.Bounds; // rect.Width += 100; using (LinearGradientBrush brush = new LinearGradientBrush( rect, // 渐变作用区域 style.LeftColor, // 起始颜色 style.RightColor, // 结束颜色 LinearGradientMode.Horizontal)) // 渐变方向 { // 用渐变色填充矩形 g.FillRectangle(brush, rect); } } } public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value) { if (!(value is WellTrackGradientStyle style)) { return value; } IWindowsFormsEditorService edSvc = provider?.GetService(typeof(IWindowsFormsEditorService)) as IWindowsFormsEditorService; if (edSvc == null) { return value; } List curvesNames = new List(); if (context.Instance is WellCurveTrack curveTrack) { if (curveTrack.wellPoleContext.geoWellPole.GetWellAllCurveNames(curveTrack.wellPoleContext.wellObjHandle, out string[] NamesArr) == true) { curvesNames = new List(NamesArr); curvesNames.Insert(0, ""); } } else return value; using (var editorForm = new FillCurveGradientFrm(style, curvesNames) { StartPosition = FormStartPosition.CenterScreen }) { if (edSvc.ShowDialog(editorForm) == DialogResult.OK) { return new WellTrackGradientStyle() { AutoMiddleColor = style.AutoMiddleColor, Left = style.Left, Right = style.Right, CurveName = style.CurveName, LeftColor = style.LeftColor, RightColor = style.RightColor, MiddleColor = style.MiddleColor }; } } return value; } } }