Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Picaso_4DGL-32PTU_graphics.cpp
- Committer:
- CaptainR
- Date:
- 2016-09-09
- Revision:
- 3:dcfbceb81fef
- Parent:
- 2:81eaaa491a02
- Child:
- 4:50511ed54ab4
File content as of revision 3:dcfbceb81fef:
//
// Picaso_4DGL-32PTU is a class to drive 4D Systems TFT touch screens with PICASO processor
// Tested with NUCLEO L152RE development board
// Copyright (C) <2016> Rihards Balass <rihards.balass@gmail.com>
//
// Picaso_4DGL-32PTU is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Picaso_4DGL-32PTU is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You can see GNU General Public License at <http://www.gnu.org/licenses/>.
//
#include "mbed.h"
#include "Picaso_4DGL-32PTU.h"
//**************************************************************************
// The Clear Screen command clears the screen using the current background color.
// This command brings some of the settings back to default; such as,
// Transparency turned OFF
// Outline color set to BLACK
// Opacity set to OPAQUE
// Pen set to OUTLINE
// Line patterns set to OFF
// Right text margin set to full width
// Text magnifications set to 1
// All origins set to 0:0
// The alternative to maintain settings and clear screen is
// to draw a filled rectangle with the required background color.
//**************************************************************************
void PICASO_4DGL :: cls() { // clear screen
char command[2] = "";
command[0] = (CLS >> (8*1)) & 0xff;
command[1] = (CLS >> (8*0)) & 0xff;
writeCOMMAND(command, 2);
}
//**************************************************************************
// The Change Color command changes all oldColor pixels to newColor
// within the clipping window area.
//**************************************************************************
void PICASO_4DGL :: changeColor(short oldColor, short newColor) {
char command[6] = "";
command[0] = (CHANGE_COLOR >> (8*1)) & 0xff;
command[1] = (CHANGE_COLOR >> (8*0)) & 0xff;
command[2] = (oldColor >> (8*1)) & 0xff;
command[3] = (oldColor >> (8*0)) & 0xff;
command[4] = (newColor >> (8*1)) & 0xff;
command[5] = (newColor >> (8*0)) & 0xff;
writeCOMMAND(command, 6);
}
//**************************************************************************
// The Draw Circle command draws a circle with centre point x, y
// with radius r using the specified color.
//**************************************************************************
void PICASO_4DGL :: drawCircle(short x, short y, short r, short color) {
char command[10] = "";
command[0] = (DRAW_CIRCLE >> (8*1)) & 0xff;
command[1] = (DRAW_CIRCLE >> (8*0)) & 0xff;
command[2] = (x >> (8*1)) & 0xff;
command[3] = (x >> (8*0)) & 0xff;
command[4] = (y >> (8*1)) & 0xff;
command[5] = (y >> (8*0)) & 0xff;
command[6] = (r >> (8*1)) & 0xff;
command[7] = (r >> (8*0)) & 0xff;
command[8] = (color >> (8*1)) & 0xff;
command[9] = (color >> (8*0)) & 0xff;
writeCOMMAND(command, 10);
}
//**************************************************************************
// The Draw Circle command draws a solid circle with centre point x1, y1
// with radius r using the specified color.
// The outline color can be specified with the “Outline Color” command.
// If “Outline Color” is set to 0, no outline is drawn.
//**************************************************************************
void PICASO_4DGL :: drawFilledCircle(short x, short y, short r, short color) {
char command[10] = "";
command[0] = (CIRCLE_FILLED >> (8*1)) & 0xff;
command[1] = (CIRCLE_FILLED >> (8*0)) & 0xff;
command[2] = (x >> (8*1)) & 0xff;
command[3] = (x >> (8*0)) & 0xff;
command[4] = (y >> (8*1)) & 0xff;
command[5] = (y >> (8*0)) & 0xff;
command[6] = (r >> (8*1)) & 0xff;
command[7] = (r >> (8*0)) & 0xff;
command[8] = (color >> (8*1)) & 0xff;
command[9] = (color >> (8*0)) & 0xff;
writeCOMMAND(command, 10);
}
//**************************************************************************
// The Draw Line command draws a line from x1, y1 to x2, y2
// using the specified color.
//**************************************************************************
void PICASO_4DGL :: drawLine(short x1, short y1, short x2, short y2, short color) {
char command[12] = "";
command[0] = (DRAW_LINE >> (8*1)) & 0xff;
command[1] = (DRAW_LINE >> (8*0)) & 0xff;
command[2] = (x1 >> (8*1)) & 0xff;
command[3] = (x1 >> (8*0)) & 0xff;
command[4] = (y1 >> (8*1)) & 0xff;
command[5] = (y1 >> (8*0)) & 0xff;
command[6] = (x2 >> (8*1)) & 0xff;
command[7] = (x2 >> (8*0)) & 0xff;
command[8] = (y2 >> (8*1)) & 0xff;
command[9] = (y2 >> (8*0)) & 0xff;
command[10] = (color >> (8*1)) & 0xff;
command[11] = (color >> (8*0)) & 0xff;
writeCOMMAND(command, 12);
}
//**************************************************************************
// The Draw Rectangle command draws a rectangle from x1, y1 to x2, y2
// using the specified color.
// The line may be tessellated with the “Line Pattern” command.
//**************************************************************************
void PICASO_4DGL :: drawRectangle(short x1, short y1, short x2, short y2, short color) {
char command[12] = "";
command[0] = (DRAW_RECTANGLE >> (8*1)) & 0xff;
command[1] = (DRAW_RECTANGLE >> (8*0)) & 0xff;
command[2] = (x1 >> (8*1)) & 0xff;
command[3] = (x1 >> (8*0)) & 0xff;
command[4] = (y1 >> (8*1)) & 0xff;
command[5] = (y1 >> (8*0)) & 0xff;
command[6] = (x2 >> (8*1)) & 0xff;
command[7] = (x2 >> (8*0)) & 0xff;
command[8] = (y2 >> (8*1)) & 0xff;
command[9] = (y2 >> (8*0)) & 0xff;
command[10] = (color >> (8*1)) & 0xff;
command[11] = (color >> (8*0)) & 0xff;
writeCOMMAND(command, 12);
}
//**************************************************************************
// The Draw Filled Rectangle command draws a solid rectangle from x1, y1 to x2, y2
// using the specified color.
// The line may be tessellated with the “Line Pattern” command.
// The outline color can be specified with the “Outline Color” command.
// If “Outline Color” is set to 0, no outline is drawn.
//**************************************************************************
void PICASO_4DGL :: drawFilledRectangle(short x1, short y1, short x2, short y2, short color) {
char command[12] = "";
command[0] = (RECTANGLE_FILLED >> (8*1)) & 0xff;
command[1] = (RECTANGLE_FILLED >> (8*0)) & 0xff;
command[2] = (x1 >> (8*1)) & 0xff;
command[3] = (x1 >> (8*0)) & 0xff;
command[4] = (y1 >> (8*1)) & 0xff;
command[5] = (y1 >> (8*0)) & 0xff;
command[6] = (x2 >> (8*1)) & 0xff;
command[7] = (x2 >> (8*0)) & 0xff;
command[8] = (y2 >> (8*1)) & 0xff;
command[9] = (y2 >> (8*0)) & 0xff;
command[10] = (color >> (8*1)) & 0xff;
command[11] = (color >> (8*0)) & 0xff;
writeCOMMAND(command, 12);
}
//**************************************************************************
// The Draw Polyline command plots lines between points specified by a pair of arrays
// using the specified color.
// The lines may be tessellated with the “Line Pattern” command.
// The “Draw Polyline” command can be used to create complex raster graphics
// by loading the arrays from serial input or from MEDIA with very little code requirement.
//
// n - Specifies the number of elements in the x and y arrays specifying the vertices for the polyline.
// vx, vy - Specifies the array of elements for the x/y coordinates of the vertices.
// Vx1, vx2, …, vxN, vy1, vy2, …, vyN
//**************************************************************************
void PICASO_4DGL :: drawPolyline(short n, short *vx, short *vy, short color) {
int size = 6 + (n*4);
int i, j = 4;
char command[size];
for(i = 0; i < size; i++) command[i] = 0;
command[0] = (DRAW_POLYLINE >> (8*1)) & 0xff;
command[1] = (DRAW_POLYLINE >> (8*0)) & 0xff;
command[2] = (n >> (8*1)) & 0xff;
command[3] = (n >> (8*0)) & 0xff;
for (i = 0; i < n; i++) {
command[j] = (vx[i] >> (8*1)) & 0xff;
j++;
command[j] = (vx[i] >> (8*0)) & 0xff;
j++;
}
for (i = 0; i < n; i++) {
command[j] = (vy[i] >> (8*1)) & 0xff;
j++;
command[j] = (vy[i] >> (8*0)) & 0xff;
j++;
}
command[j] = (color >> (8*1)) & 0xff;
command[j+1] = (color >> (8*0)) & 0xff;
writeCOMMAND(command, size);
}
//**************************************************************************
// The Draw Polygon command plots lines between points specified by a pair of arrays
// using the specified color.
// The last point is drawn back to the first point, completing the polygon.
// The lines may be tessellated with the “Line Pattern” command.
// The Draw Polygon command can be used to create complex raster graphics
// by loading the arrays from serial input or from MEDIA with very little code requirement.
//
// n - Specifies the number of elements in the x and y arrays specifying the vertices for the polygon.
// vx, vy - Specifies the array of elements for the x/y coordinates of the vertices.
// Vx1, vx2, …, vxN, vy1, vy2, …, vyN
//**************************************************************************
void PICASO_4DGL :: drawPolygon(short n, short *vx, short *vy, short color) {
int size = 6 + (n*4);
int i, j = 4;
char command[size];
for(i = 0; i < size; i++) command[i] = 0;
command[0] = (DRAW_POLYGON >> (8*1)) & 0xff;
command[1] = (DRAW_POLYGON >> (8*0)) & 0xff;
command[2] = (n >> (8*1)) & 0xff;
command[3] = (n >> (8*0)) & 0xff;
for (i = 0; i < n; i++) {
command[j] = (vx[i] >> (8*1)) & 0xff;
j++;
command[j] = (vx[i] >> (8*0)) & 0xff;
j++;
}
for (i = 0; i < n; i++) {
command[j] = (vy[i] >> (8*1)) & 0xff;
j++;
command[j] = (vy[i] >> (8*0)) & 0xff;
j++;
}
command[j] = (color >> (8*1)) & 0xff;
command[j+1] = (color >> (8*0)) & 0xff;
writeCOMMAND(command, size);
}
//**************************************************************************
// The Draw Filled Polygon command draws a solid Polygon between specified vertices:
// x1, y1 x2, y2, .... , xn, yn using the specified color.
// The last point is drawn back to the first point, completing the polygon.
// Vertices must be a minimum of 3 and can be specified in any fashion.
//
// n - Specifies the number of elements in the x and y arrays specifying the vertices for the polygon.
// vx, vy - Specifies the array of elements for the x/y coordinates of the vertices.
// Vx1, vx2, …, vxN, vy1, vy2, …, vyN
//**************************************************************************
void PICASO_4DGL :: drawFilledPolygon(short n, short *vx, short *vy, short color) {
if (n >= 3) {
int size = 6 + (n*4);
int i, j = 4;
char command[size];
for(i = 0; i < size; i++) command[i] = 0;
command[0] = (POLYGON_FILLED >> (8*1)) & 0xff;
command[1] = (POLYGON_FILLED >> (8*0)) & 0xff;
command[2] = (n >> (8*1)) & 0xff;
command[3] = (n >> (8*0)) & 0xff;
for (i = 0; i < n; i++) {
command[j] = (vx[i] >> (8*1)) & 0xff;
j++;
command[j] = (vx[i] >> (8*0)) & 0xff;
j++;
}
for (i = 0; i < n; i++) {
command[j] = (vy[i] >> (8*1)) & 0xff;
j++;
command[j] = (vy[i] >> (8*0)) & 0xff;
j++;
}
command[j] = (color >> (8*1)) & 0xff;
command[j+1] = (color >> (8*0)) & 0xff;
writeCOMMAND(command, size);
}
}
//**************************************************************************
// The Draw Triangle command draws a triangle outline between vertices
// x1,y1 , x2,y2 and x3,y3 using the specified color.
// The line may be tessellated with the “Line Pattern” command.
//**************************************************************************
void PICASO_4DGL :: drawTriangle(short x1, short y1, short x2, short y2, short x3, short y3, short color) {
char command[16] = "";
command[0] = (DRAW_TRIANGLE >> (8*1)) & 0xff;
command[1] = (DRAW_TRIANGLE >> (8*0)) & 0xff;
command[2] = (x1 >> (8*1)) & 0xff;
command[3] = (x1 >> (8*0)) & 0xff;
command[4] = (y1 >> (8*1)) & 0xff;
command[5] = (y1 >> (8*0)) & 0xff;
command[6] = (x2 >> (8*1)) & 0xff;
command[7] = (x2 >> (8*0)) & 0xff;
command[8] = (y2 >> (8*1)) & 0xff;
command[9] = (y2 >> (8*0)) & 0xff;
command[10] = (x3 >> (8*1)) & 0xff;
command[11] = (x3 >> (8*0)) & 0xff;
command[12] = (y3 >> (8*1)) & 0xff;
command[13] = (y3 >> (8*0)) & 0xff;
command[14] = (color >> (8*1)) & 0xff;
command[15] = (color >> (8*0)) & 0xff;
writeCOMMAND(command, 16);
}
//**************************************************************************
// The Draw Filled Triangle command draws a solid triangle between vertices
// x1, y1, x2, y2 and x3, y3 using the specified color.
//**************************************************************************
void PICASO_4DGL :: drawFilledTriangle(short x1, short y1, short x2, short y2, short x3, short y3, short color) {
char command[16] = "";
command[0] = (TRIANGLE_FILLED >> (8*1)) & 0xff;
command[1] = (TRIANGLE_FILLED >> (8*0)) & 0xff;
command[2] = (x1 >> (8*1)) & 0xff;
command[3] = (x1 >> (8*0)) & 0xff;
command[4] = (y1 >> (8*1)) & 0xff;
command[5] = (y1 >> (8*0)) & 0xff;
command[6] = (x2 >> (8*1)) & 0xff;
command[7] = (x2 >> (8*0)) & 0xff;
command[8] = (y2 >> (8*1)) & 0xff;
command[9] = (y2 >> (8*0)) & 0xff;
command[10] = (x3 >> (8*1)) & 0xff;
command[11] = (x3 >> (8*0)) & 0xff;
command[12] = (y3 >> (8*1)) & 0xff;
command[13] = (y3 >> (8*0)) & 0xff;
command[14] = (color >> (8*1)) & 0xff;
command[15] = (color >> (8*0)) & 0xff;
writeCOMMAND(command, 16);
}