Click here to Skip to main content
11,928,605 members (51,559 online)
Click here to Skip to main content
Add your own
alternative version

Tagged as


171 bookmarked

C# Avionic Instrument Controls

, 17 Jul 2008 CPOL
Rate this:
Please Sign up or sign in to vote.
The aim of this C# project is to purpose six aircraft cockpit instruments usable in forms as any other C# controls.


The aim of this C# project is to purpose six aircraft cockpit instruments usable in forms as any other C# controls and to define a generic instrument class in order to design any kind of dashboard instruments.


The controls are built with bitmaps which are rotated, translated or scaled before to be displayed. The basic methods for rotate, translate and scale images are defined in the mother class. Each control then uses its dedicated parameters (related to a physical signification) in order to manipulates the images.

Aircraft Instruments

  • Air speed indicator: airspeed (kts)
  • Attitude Indicator: pitch (deg), roll (deg)
  • Altimeter: altitude (ft)
  • Turn Coordinator: turn rate (deg/min)
  • Vertical speed indicator: vertical speed (ft/min)
  • Heading indicator: heading (deg)

Details of the Key Functions

This section explains in detail the implementation of the basic functions defined in the InstrumentControl class.

Rotate Image


The rotation of the image is divided in two main parts:

First, the rotation of the PaintEventArgs coordinate system around the upper left corner of the drawing area.

Second, the drawing of the image corrected by translation offset in order to display the image as if it has turned around a user defined point.


Let’s see step by step:

Step 0: Initial situation.


Step 1: Rotate the PaintEventArgs coordinate system around the left upper corner of the paint area.


Corresponding code sample:

// Rotate image support
pe.Graphics.RotateTransform((float)(alpha * 180 / Math.PI));

Step 2: Draw the image and apply the translation correction.


Corresponding code sample:

// Display image
pe.Graphics.DrawImage(img, (ptImg.X + deltaX) * scaleFactor, (ptImg.Y + deltaY) * 
	scaleFactor, img.Width * scaleFactor, img.Height * scaleFactor);

Step 3 (Final step): Put the PainEventArgs coordinate system as found.


Corresponding code sample:

// Put image support as found
pe.Graphics.RotateTransform((float)(-alpha * 180 / Math.PI));

The key point in those operations is the calculation of the translation correction coefficients.

The next figure explains the geometrics considerations:


G0 is the user defined rotation center
G1 is the G0 position after the step 1.

The aim of this section is to identify the G1G0 translation and apply the corresponding offset in order to draw the rotation point as if it has not moved.

Then we work with the geometrics definitions:

a. AvionicsControlDemo_RotationCalcs1.JPG
b. AvionicsControlDemo_RotationCalcs2.JPG
c. AvionicsControlDemo_RotationCalcs3.JPG
d. AvionicsControlDemo_RotationCalcs4.JPG

As a result, the offset coefficients are:


The corresponding code sample is as follows:

// Computed offset
deltaX = (float)(d * (Math.Cos(alpha - beta) - Math.Cos(alpha)* 
	Math.Cos(alpha + beta) - Math.Sin(alpha) * Math.Sin(alpha+ beta)));
deltaY = (float)(d * (Math.Sin(beta - alpha) + Math.Sin(alpha)* 
	Math.Cos(alpha + beta) - Math.Cos(alpha) * Math.Sin(alpha + beta)));


  • "pe": The paint area event where the image will be displayed
  • "img": The image to display
  • "alpha": The angle of rotation in radian
  • "ptImg": The location of the left upper corner of the image to display in the paint area in nominal situation
  • "ptRot": The location of the rotation point in the paint area
  • "scaleFactor": Multiplication factor on the display image



This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


About the Author

France France
No Biography provided

You may also be interested in...

Comments and Discussions

QuestionUpgraded altimeter Pin
Redgum20-Nov-14 11:58
memberRedgum20-Nov-14 11:58 
Question!Need Help in Creating a VB.NET Avionics Intsrument Control Pin
schematicsman7-Jan-14 2:30
memberschematicsman7-Jan-14 2:30 
QuestionHow to use these controls for an existing project Pin
Member 1016504020-Jul-13 12:15
memberMember 1016504020-Jul-13 12:15 
QuestionHow to add these controls to my project? Pin
Breaka18-Apr-13 16:34
memberBreaka18-Apr-13 16:34 
GeneralVery very nice Code Project sample... Pin
Destiny77718-Sep-12 9:35
memberDestiny77718-Sep-12 9:35 
QuestionAide Pin
bbjodel27-Jun-12 6:53
memberbbjodel27-Jun-12 6:53 
QuestionVery nice controls Pin
Mike Hankey15-Apr-12 1:30
memberMike Hankey15-Apr-12 1:30 
QuestionImport to VB.Net Pin
JTmetoo28-Aug-11 10:06
memberJTmetoo28-Aug-11 10:06 
QuestionGreat Job Pin
Lamar Seifuddin29-Jul-11 22:36
memberLamar Seifuddin29-Jul-11 22:36 
GeneralRe: Great Job Pin
Destiny77718-Sep-12 9:42
memberDestiny77718-Sep-12 9:42 
QuestionC# avionic controls Pin
JPC0624020-Jun-11 4:31
memberJPC0624020-Jun-11 4:31 
Generalthank you Pin
yardloun4-Apr-11 5:56
memberyardloun4-Apr-11 5:56 
GeneralMy vote of 5 Pin
YEBM Knight8-Feb-11 4:14
memberYEBM Knight8-Feb-11 4:14 
GeneralGreat work - I am using these with the AR Drone Pin
shobley17-Oct-10 7:52
membershobley17-Oct-10 7:52 
GeneralRe: Great work - I am using these with the AR Drone Pin
Destiny77718-Sep-12 9:43
memberDestiny77718-Sep-12 9:43 
Generali love the control I hope Pin
StringDotEmpty16-May-10 3:23
memberStringDotEmpty16-May-10 3:23 
GeneralWell done. Pin
Serhat20-Apr-10 21:47
memberSerhat20-Apr-10 21:47 
GeneralConnect up to FlightGear flight simulator Pin
steveyork28-Oct-09 7:25
membersteveyork28-Oct-09 7:25 
GeneralAdd to page Pin
girishdpatil24-Feb-09 21:09
membergirishdpatil24-Feb-09 21:09 
GeneralAdd to projects Pin
Frank Shearer20-Feb-09 15:28
memberFrank Shearer20-Feb-09 15:28 
GeneralRe: Add to projects Pin
alejos30-Mar-10 4:26
memberalejos30-Mar-10 4:26 
GeneralRe: Add to projects Pin
Serhat20-Apr-10 22:14
memberSerhat20-Apr-10 22:14 
GeneralRe: Add to projects Pin
Member 779617320-Apr-11 7:29
memberMember 779617320-Apr-11 7:29 
GeneralRe: Add to projects Pin
Member 779617320-Apr-11 12:30
memberMember 779617320-Apr-11 12:30 
GeneralTransform Pin
NicolasG25-Jul-08 11:59
memberNicolasG25-Jul-08 11:59 
GeneralRe: Transform Pin
DrGanjoo12-Nov-08 0:08
memberDrGanjoo12-Nov-08 0:08 
GeneralExcellent look and feel to these controls - well done Pin
BradOsterloo21-Jul-08 13:05
memberBradOsterloo21-Jul-08 13:05 
GeneralCool! Pin
bigals20-Jul-08 14:55
memberbigals20-Jul-08 14:55 
GeneralRe: Cool! Pin
Destiny7779-Oct-12 18:41
memberDestiny7779-Oct-12 18:41 
GeneralFantastic job.... But there is something missing... Pin
The Infomercial King18-Jul-08 8:11
memberThe Infomercial King18-Jul-08 8:11 
GeneralRe: Fantastic job.... But there is something missing... Pin
andre1234518-Jul-08 9:53
memberandre1234518-Jul-08 9:53 
GeneralRe: Fantastic job.... But there is something missing... Pin
The Infomercial King18-Jul-08 10:55
memberThe Infomercial King18-Jul-08 10:55 
GeneralRe: Fantastic job.... But there is something missing... Shudder? Pin
Destiny77718-Sep-12 9:46
memberDestiny77718-Sep-12 9:46 
GeneralRe: Fantastic job.... But there is something missing... Shudder? Pin
Bill SerGio, The Infomercial King18-Sep-12 11:14
memberBill SerGio, The Infomercial King18-Sep-12 11:14 
GeneralRe: Fantastic job.... But there is something missing... Shudder? Pin
Destiny7779-Oct-12 18:38
memberDestiny7779-Oct-12 18:38 
GeneralRe: Fantastic job.... But there is something missing... Shudder? Pin
Bill SerGio, The Infomercial King10-Oct-12 2:05
memberBill SerGio, The Infomercial King10-Oct-12 2:05 
GeneralRe: Fantastic job.... But there is something missing... Shudder? Pin
Destiny77730-Dec-12 22:39
memberDestiny77730-Dec-12 22:39 
GeneralAH for 90 degree pitch Pin
jknickel8-Jul-08 1:24
memberjknickel8-Jul-08 1:24 
GeneralRe: AH for 90 degree pitch Pin
Chootair17-Jul-08 12:59
memberChootair17-Jul-08 12:59 
GeneralGreat stuff Pin
jknickel7-Jul-08 23:54
memberjknickel7-Jul-08 23:54 
GeneralSuperb but... Pin
Joe Sonderegger7-Jul-08 23:01
memberJoe Sonderegger7-Jul-08 23:01 
GeneralGreat work.... Pin
Peter Villadsen7-Jul-08 15:33
memberPeter Villadsen7-Jul-08 15:33 
GeneralRe: Great work.... Pin
Chootair17-Jul-08 13:03
memberChootair17-Jul-08 13:03 
JokeImpressive Pin
Ivertheengine7-Jul-08 10:32
memberIvertheengine7-Jul-08 10:32 
GeneralWow! Pin
Rafferty Uy3-Jul-08 16:48
memberRafferty Uy3-Jul-08 16:48 
GeneralVery nice indeed. Question... Pin
thompsons2-Jul-08 7:42
memberthompsons2-Jul-08 7:42 
GeneralVery Good Pin
JBAK_CP2-Jul-08 4:41
memberJBAK_CP2-Jul-08 4:41 
GeneralRemarkable! Pin
LastZolex2-Jul-08 0:15
memberLastZolex2-Jul-08 0:15 
GeneralExcellento! Pin
Tage Lejon1-Jul-08 22:08
memberTage Lejon1-Jul-08 22:08 
GeneralThis could be very cool Pin
Bert delaVega1-Jul-08 18:28
memberBert delaVega1-Jul-08 18:28 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Terms of Use | Mobile
Web02 | 2.8.151126.1 | Last Updated 17 Jul 2008
Article Copyright 2008 by Chootair
Everything else Copyright © CodeProject, 1999-2015
Layout: fixed | fluid