# FCSChart **Repository Path**: yiliaokeji/FCSChart ## Basic Information - **Project Name**: FCSChart - **Description**: FCS文件图表控件 - **Primary Language**: C# - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 11 - **Created**: 2023-06-28 - **Last Updated**: 2023-10-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 开源不易,感谢支持 ![支付宝微信](doc/zfbwx.png) # FCSChart FCS文件图表控件 Chart:不带门的显示控件 ChartWithGraphicals:带门绘制的显示控件 轴类型有:线性(Line)、对数(Log10)、负数对数(Log10Biex) 门类型有:多边形门(PolygonGraphical)、四边形门(RectangleGraphical)、段选门(SegmentXGraphical、SegmentYGraphical)、直线门(LineHorizontalGraphical、LineVerticalGraphical)、四象限门(QuadrantGraphical) ![效果图](doc/charts.png) ## 文件目录结构 ## | 名称 | 说明 | | --- | --- | | Axis | XY轴上的分隔刻度控件 | | Converters | IValueConverter的实现类,用于值的转换,方便在WPF界面上显示 | | Graphical | 门 | | Series | 主要的图表数据显示控件,图表中心区域显示的内容由此目录下的类实现 | | Themes | WPF样式模板等资源文件 | | Chart | 图表控件基类 | | ChartWithGraphicals | 带门绘制的图表控件 | | ChartInCollecting | 带阈值和增益调整功能的图表控件 | | DelegateCommand | ICommand实现类 | | Helper | 帮助类,一些静态方法,包括随机颜色值等 | | NotifyPropertyChanged | INotifyPropertyChanged实现类 | ## Chart图表控件主要属性 ## | 属性 | 含义 | 类型 | 说明 | | --- | --- | --- | --- | | XSource | X轴数据源 | IList | 依赖属性。IList里的数据必须为可转成double的数据 | | YSource | Y轴数据源 | IList | 依赖属性。IList里的数据必须为可转成double的数据 | | Indexs | 数据源的过滤集合 | IList< int > | 依赖属性。数据源中的数据,索引在此集合的才显示。为空时表示使用数据源的所有值 | | XValueConverter | XSource值转换方法 | Func< object, double > | 依赖属性。FCS文件里面的数据源是通道值,需要转换成刻度值 | | YValueConverter | YSource值转换方法 | Func< object, double > | 依赖属性。FCS文件里面的数据源是通道值,需要转换成刻度值 | | Series | 图形绘制类型 | ISeries | 依赖属性。ISeries类的子类对象,ContourSeries(等高线图)、DensitySeries(密度图)、HistogramSeries(直方图)、ScatterSeries(散点图) | | XAxis | X轴类型 | IAxis | 依赖属性。IAxis类的子类对象,可选 LinearNumberAxis(线性)、LogarithmicNumberAxis(对数)、LogicleBiexAxis(可负数的对数) | | YAxis | Y轴类型 | IAxis | 依赖属性。 IAxis类的子类对象,可选 LinearNumberAxis(线性)、LogarithmicNumberAxis(对数)、LogicleBiexAxis(可负数的对数)| | ZoomType | 缩放方式 | AxisChangeType | 可指定鼠标滚轮缩放时,缩放X轴、Y轴或者两者都缩放或者都不缩放 | | MoveType | 移动方式 | AxisChangeType | 可指定鼠标左键在图表显示区域按下并移动时,X轴、Y轴或者两者或者都不跟随鼠标改变最大最小值 | ## ChartWithGraphicals图表控件主要属性和方法(继承自Chart) ## | 属性 | 含义 | 类型 | 说明 | | --- | --- | --- | --- | | Graphicals | 门集合 | ObservableCollection< BaseGraphical > | 该图表内所绘制的门的集合 | | AllAreas | 门划分的区域集合 | ObservableCollection< GraphicalArea > | 添加门后,门划分的区域会在此集合内。多图的集合共用同一个对象时,散点图和直方图会以不同颜色显示所有门的区域 | | AreaNameForeground | 区域名称显示的文字颜色 | Brush | 图表上区域内会显示一个名称 | | AreaNameFontSize | 区域名称显示的字体大小 | double | 图表上区域内会显示一个名称 | | GraphicalAreaAddCommand | 区域添加命令 | ICommand | 添加一个区域后会执行此命令 | | GraphicalAreaRemoveCommand | 区域删除命令 | ICommand | 删除一个区域后会执行此命令 | | PolygonCommand | 画多边形门命令 | ICommand | 依赖属性 | | RectangleCommand | 画四边形门命令 | ICommand | 依赖属性 | | SegmentXCommand | 画X轴段选门命令 | ICommand | 依赖属性 | | SegmentYCommand | 画Y轴段选门命令 | ICommand | 依赖属性 | | QuadrantCommand | 画四象限门命令 | ICommand | 依赖属性 | | LineHorizontalCommand | 画横线门命令 | ICommand | 依赖属性 | | LineVerticalCommand | 画竖线门命令 | ICommand | 依赖属性 | | AddGraphicalFromModel(BaseGraphicalModel model) | 向图表添加一个门 | void | 根据不同的model类型添加不同类型的门 | ## ChartInCollecting图表控件主要属性和方法(继承自ChartWithGraphicals) ## | 属性 | 含义 | 类型 | 说明 | | --- | --- | --- | --- | | MinGain | 增益最小值 | double | | | MaxGain | 增益最大值 | double | | | ShowXGain | 是否显示x轴上的增益 | bool | | | ShowYGain | 是否显示y轴上的增益 | bool | | | XGainValue | x轴的增益值 | double | 控制方式是移动x轴上的Thumb控件,鼠标移动到图表控件上时可见 | | YGainValue | y轴的增益值 | double | 控制方式是移动y轴上的Thumb控件,鼠标移动到图表控件上时可见 | | XGainChangedCommand | x轴上的增益更改完成命令 | ICommand | | | YGainChangedCommand | y轴上的增益更改完成命令 | ICommand | | | ShowXThreshold | 显示x轴上的阈值 | bool | | | ShowYThreshold | 显示y轴上的阈值 | bool | | | XThresholdValue | x轴上的阈值 | double | 控制方式是移动图中垂直于x轴的Line控件 | | YThresholdValue | y轴上的阈值 | double | 控制方式是移动图中垂直于y轴的Line控件 | | XThresholdChangedCommand | x轴阈值发生变化命令 | ICommand | | | YThresholdChangedCommand | y轴阈值发生变化命令 | ICommand | | ## 示例 ## ### 前端 ### ``` ``` ### 后端 ### 使用到[FCS](https://gitee.com/Lvwl-CN/FCS)库 ``` var fcss = FCS.Factory.ReadFCSFile(@"C:\test.fcs").ToList(); if (fcss.Count > 0) { var fcs = fcslist[0]; c1.XValueConverter = fcs.Measurements[1].ConvertChannelToScaleValue; c1.YValueConverter = fcs.Measurements[4].ConvertChannelToScaleValue; c1.XSource = fcs.Measurements[1].Values; c1.YSource = fcs.Measurements[4].Values; c1.AddGraphicalFromModel(new FCSChart.Graphical.PolygonGraphicalModel() { AreaNames = new List() { "test" }, Points = new List() { new Point(100, 100), new Point(10000, 100), new Point(10000, 10000) } }); } ```