Tạo Lớp Quản Lý Tren d TrendSingleView

Một phần của tài liệu Xây dựng công cụ cho phép thiết kế ứng dụng SCADA vừa và nhỏ trên nền iOS (Trang 89 - 94)

5.7 Trend Form

5.7.4 Tạo Lớp Quản Lý Tren d TrendSingleView

Lớp này sẽ sữ dụng trực tiếp thư viện CorePlotHeader nên trong phần import cần import tthư viện CorePlotHeader (#import "CorePlot-CocoaTouch.h").

Page 80

Đầu tiên phân tích file TrendSingleView.h

Đây là các thuộc tính được khai báo. Một số chú ý về thuộc tính:

 IBOutletCPTGraphHostingView *hostView : lúc tạo file TrendSingleView ta tạo

kèm theo file xib và gán View ở file xib là kiểu CPTGraphHostingView sau đó kéo View vào file .h . Như vậy thì View đã được khai báo là sữ dụng để vẽ biều đồ.

 NSMutableArray *firstPlotDatas: là một mảng chứa dữ liệu trục y của đồ thị 1. Tương tự như vậy với đồ thị 2 và 3.

 NSUInteger currentIndex: là counter đếm số mẫu hiện thời trên biểu đồ.

 CPTXYPlotSpace *plotSpace : vùng không gian vẽ biểu đồ, quản lý các thông số của trục x và trục y.

#import <UIKit/UIKit.h>

#import "CorePlot-CocoaTouch.h"

#import "CPDConstants.h"

@interface TrendSingleView : UIViewController <CPTPlotDataSource,CPTPlotSpaceDelegate>{

IBOutletCPTGraphHostingView *hostView;

NSMutableArray *firstPlotDatas; NSMutableArray *secondPlotDatas; NSMutableArray *thirdPlotDatas; NSUInteger currentIndex; CPTXYPlotSpace *plotSpace; NSUInteger kMaxDataPoints; Boolean expandPlot; NSMutableArray *tagTrends; }

@property (strong, nonatomic) IBOutletCPTGraphHostingView *hostView;

@property (assign, nonatomic) NSInteger majorIncrement,minorIncrement;

@property (assign, nonatomic) Boolean expandPlot;

@property (strong, nonatomic) NSMutableArray *tagTrends;

Page 81  NSUInteger kMaxDataPoints : số mẫu cực đại cho phép hiện thị (chỉ dùng cho chế

độ Expand).

 Boolean expandPlot: biến Bool báo chế độ hiện thời của Trend là Expand hay Contract.

 NSMutableArray *tagTrends: mảng quản lý các TrendTag gắn với Trend. (vì chương trình có chế độ chạy đồng thời 2 trend nên cần phải có mảng quản lý các trendTag của từng trend).

 NSInteger majorIncrement,minorIncrement :độ chia nhỏ nhất của trục x và trục y.

 NSString *period: chu kỳ lấy mẫu của trend.

Tiếp theo là các phương thức tương tác với TrendSingleView.

 "(void)setGraphTitle:(NSString *)title numberSample: (NSInteger)

numberSample": phương thứcphương thức khởi tạo trend với tên và số lượng mẫu tối đa.

 "(void)setAutoScaleWithNumberOfPlot: (NSInteger) numberOfPlot" : cho phép trend tự động tinh chỉnh trục y theo giá trị lớn nhất trong 3 biểu đồ.

 "(void)setColorForFirstPlot:(CPTColor*)firstColorAssign secondPlot:(CPTColor

*)secondColorAssign thirdPlot:(CPTColor *)thirdColorAssign" : chọn màu cho từng biều đồ.

 "(void)configureGraph" : cấu hình không gian vẽ.

 "(void)configurePlots" : cấu hình kiểu vẽ của các biểu đồ (ví dụ độ rộng nét vẽ, màu của nét vẽ ..v..v..).

 "(void)configureAxesWithXAxisTitle :(NSString *) xTitle yAxisTitle: (NSString *) yTitle" : cấu hình trục x và trục y (vd: độ dày của độ chia, vị trí độ chia, màu của trục, tên trục ..v..v..).

 "(void) changeXAxisLabelWithMajorIncrement:(NSInteger) majorIncrement minorIncrement:(NSInteger) minorIncrement xMax:(CGFloat)xMax" : điều chỉnh giá trị trục x.

 "(void) changeYAxisLabelWithMajorIncrement:(NSInteger) majorIncrement minorIncrement:(NSInteger) minorIncrement yMax:(CGFloat)yMax" : điều chỉnh giá trị trục y.

 "(void) clearTrend" : khi gọi phương thức này sẽ xoá hết toàn bộ dữ liệu trên Trend. Phục vụ cho quá trình chuyển chế độ hoạt động của trend cần xoá hết dữ liệu cũ.

 "(void)newDataForFirstPlot: (NSString *) firstPlotData forSecondPlot: (NSString *) secondPlotData forThirdPlot: (NSString *) thirdPlotData maxData:(float)

maxData" : mỗi lần gọi phương thức này biểu đồ sẽ cập nhật dữ liệu và vẽ. phương thức này sẽ được gọi theo chu kỳ bằng với chu kỳ của Trend. Trong phương thức này có tích hợp đoạn code xử lý độ chia của trục x và trục y sao cho khi giá trị của trục x và trục y tăng lên cao mà người dùng vẫn có thể xác định dễ dàng giá trị mà không bị dồn giá trị. Thuật toán xử lý:

Page 82

Hình 5-37 Giải thuật cập nhật dữ liệu và vẽ

Ngoài ra còn có thuật toán xử lý 2 chế độ hoạt động của trend.

Hình 5-38 Giải thuật xử lý – Expand Mode Hàm cập nhật thông số trục x for (NSInteger j = minorIncrement; j <= xMax; j += minorIncrement) J mod majorIncrement == 0 Expand Mode MajorLabel có giá trị = (Xmax – KMaxDataPoint) + j MajorLabel = j NO YES NO YES

Page 83

Hình 5-39 Giải thuật xử lý – Contract Mode xValueCurrent = currentIndex +currentIndex/3 xMajorIncrement = xValueCurrent/ 10 unitMajor = xMajorIncrement %10 unitMajor <10 xMajorIncrement -=unitMajor xMinor = xMajor/ 5; Gọi hàm cập nhật trục x với xMajorIncrement và xMinorIncrement mới NO YES

Page 84

Một phần của tài liệu Xây dựng công cụ cho phép thiết kế ứng dụng SCADA vừa và nhỏ trên nền iOS (Trang 89 - 94)

Tải bản đầy đủ (PDF)

(145 trang)