티스토리 뷰

Measurement Studio는 LabVIEW에서 제공하는 다양한 컨트롤과 인디게이터를 Visual Studio에서 사용할 수 있게 UI Component를 제공해주고 있습니다. 하지만 LabVIEW에서 기본적으로 제공하는 기능들이 Measurement Studio에서는 바로 사용할 수가 없습니다. 가장 큰 예가 게이지의 지침추가입니다.


LabVIEW에서는 아래의 그림과 같이 프론트 패널에서 Gauge에서 오른쪽 마우스 버튼을 누르면 'Add Needle' 혹은 '지침 추가'라는 메뉴를 누르게 되면 Gauge에 여러개의 지침을 추가할 수 있습니다. 



아래의 그림은 지침을 하나 추가하여, 색을 변경한 그림입니다. 위의 메뉴만 누르게 되면 LabVIEW에서는 지침이 바로 생성이 됩니다. 



Measurement Studio에서는 위와 같은 방법으로 지침을 추가할 수 없습니다. Measurement Studio에서 제공하는 Gauge와 Meter UI Component는 기본적으로 다중 지침에 대한 기능을 제공하고 있지 않습니다. 


하지만 기존의 클래스를 상속받아 이 기능을 구현할 수 있습니다. 상속 시 반드시 따라야 하는 점은 색과 값에 대한 프로퍼티를 Public으로 생성해주셔야 한다는 점입니다. 자식 클래스의 구현이 종료가 되면 Gauge를 UI에 추가한 뒤, InitializeComponent 함수에서 Gauge 클래스 부분을 새로 생성한 클래스의 이름으로 변경하면 됩니다. 지침을 추가한 게이지에 새로운 게이지를 추가하고 싶다면 동일한 과정을 거쳐 값과 컬러에 대한 변수를 추가하면 됩니다. 


아래는 2개의 지침이 추가된 Gauge의 예제 코드를 보여주고 있습니다. 


public partial class NewGauge : Gauge

{

private double _Value1;

private double _Value2;

private Color _PointerColor1;

private Color _PointerColor2;


public NewGauge()

: base()

{

GaugeStyle = new MpStyle();


_PointerColor1 = PointerColor;

_PointerColor2 = PointerColor;

_Value1 = Value;

_Value2 = Value;


InitializeComponent();

}


public void SetStyle(GaugeStyle style)

{

this.GaugeStyle = new MpStyle(style);

}


public Color PointerColor1

{

get

{

return _PointerColor1;

}

set

{

_PointerColor1 = value;

Invalidate();

}

}


public double Value1

{

get

{

return _Value1;

}

set

{

_Value1 = value;

Invalidate();

}

}


public Color PointerColor2

{

get

{

return _PointerColor2;

}

set

{

_PointerColor2 = value;

Invalidate();

}

}


public double Value2

{

get

{

return _Value2;

}

set

{

_Value2 = value;

Invalidate();

}

}


private class MpStyle : GaugeStyle

{

private GaugeStyle _baseStyle;


public MpStyle()

: this(GaugeStyle.SunkenWithThickNeedle3D)

{

}


public MpStyle(GaugeStyle baseStyle)

{

if (baseStyle == null)

throw new ArgumentNullException("baseStyle");


_baseStyle = baseStyle;

}


public override void DrawSpindle(IGauge context, RadialNumericPointerStyleDrawArgs args)

{

_baseStyle.DrawSpindle(context, args);

}


public override float GetDialRadius(IRadialNumericPointer context, Graphics graphics, Rectangle bounds)

{

return _baseStyle.GetDialRadius(context, graphics, bounds);

}


public override void DrawDial(IRadialNumericPointer context, RadialNumericPointerStyleDrawArgs args)

{

_baseStyle.DrawDial(context, args);

}


public override RadialNumericPointerHitTestInfo HitTest(IRadialNumericPointer context, Rectangle bounds, int x, int y)

{

return _baseStyle.HitTest(context, bounds, x, y);

}


public override void DrawPointer(INumericPointer context, NumericPointerStyleDrawArgs args, double value)

{

MpGauge gauge = context as MpGauge;


Color defaultColor = context.PointerColor;

_baseStyle.DrawPointer(context, args, value);


context.PointerColor = gauge.PointerColor1;

_baseStyle.DrawPointer(context, args, gauge.Value1);


context.PointerColor = gauge.PointerColor2;

_baseStyle.DrawPointer(context, args, gauge.Value2);


context.PointerColor = defaultColor;

}


public override float GetScaleRadius(IRadialNumericPointer context, Graphics graphics, Rectangle bounds)

{

return _baseStyle.GetScaleRadius(context, graphics, bounds);

}

}

}


위와 같이 구현을 한다면 아래의 그림과 같은 결과를 확인할 수 있습니다. 



이 글에서는 Measurement Studio에서 제공하는 Gauge, Meter에 대한 지침을 추가하는 방법에 대해서 알아보았습니다.


이 글이 도움이 되셨나요? 그렇다면 아래의 그림을 클릭해주세요.


댓글