1 | P a g e
AN
INTERNSHIP REPORT
ON
COMPUTER GRAPHICS SYSTEM PROJECT
REPORT
BY
KAMAL ACHARYA
(Tribhuvan University)
Date: 2021/11/10
2 | P a g e
1. INTRODUCTION
1.1 Overview
Computer graphics is one of the most exciting and rapidly growing
computer fields. It is also an extremely effective medium for communication
between man and computer; a human being can understand the information
content of a displayed diagram or perspective view much faster than he can
understand a table of numbers or text containing the same information. Thus,
computer graphics is being used more extensively.
There is a lot of development in hardware and software
required to generate images, and nowadays the cost of such hardware and
software is dropping rapidly. Due to this the interactive computer graphics is
becoming available to more and more people.
Computer graphics started with the display of data on hardcopy
plotters and cathode ray tube (CRT) screens soon after the introduction of
computers themselves. It has grown to include the creation, storage, and
manipulation of models and images of objects. These models come from a
diverse and expanding set of fields, and include physical, mathematical,
engineering, architectural, and even conceptual structures, natural phenomena,
and so on.
Computer graphics today is largely interactive. The user controls the
contents, structure, and appearance of objects and their displayed images by
using input devices, such as a keyboard, mouse, or touch sensitive panel on the
screen. The handling of such devices is included in the study of computer
graphics, because of the close relationship between the input devices and the
display.
Chapter 1 Introduction
3 | P a g e
1.2 About C:
‘C’ seems a strange name for a programming language. But this
strange sounding language is one of the most popular computer languages
today. C is an offspring of ‘Basic Combined Programming Language’
(BPCL) called B, developed in 1960’s at Cambridge University. B language
was modified by Dennis Ritchie and was implemented in Bell laboratories in
1972. This new language was named C.
‘C++’ has its origin in C language. It was developed by Bjarne
Stroustrup at AT&T Bell labs in the early 1980’s to overcome the
shortcomings of C. Initially named ‘C with classes’, the language is actually
improved version of C language with some additional features made possible
by using classes and an object-oriented approach.
1.3 Important Features of C/C++
The following are the most important features of C/C++
1.3.1. Simple
1.3.2. Object oriented (C++)
1.3.3 Robust
1.3.4 Rich set of built in programs and operations
1.3.5 Programs written are efficient and fast.
1.3.6 Highly portable.
1.3.7 Ability to extend itself.
1.4 Graphics Support in C/C++:
One of the most important features of C/C++ is its ability to draw
graphics. We can write C/C++ graphics programs to draw figures of
different shapes, images and text in different forms and styles. It has a
rich set of built in functions and operations in the basic graphical interface
Chapter 1 Introduction
4 | P a g e
(BGI). All interfaces to the SRGP and SPHIGS graphics package are
defined in C/C++.
The objective of this project is to design and implement a paint editor
similar to the MS-PAINT application. We use our computer graphics skills
to create this application by operating on C in ‘graphics’ mode.
C/C++ co-ordinate system has a origin (0,0) in the upper-left
corner. Positive x values are to the right, and positive y values are to the
bottom. The values of the coordinates x and y are in pixels.
1.5 Co-ordinate System
----------->x-axis
|
|
|
V
y-axis
5 | P a g e
2. REQUIREMENT SPECIFICATIONS
Purpose: The purpose of this document is to describe all external
requirements for designing a graphics package called Paint.
Scope: This document describes the functional requirements for the graphics
package to run efficiently and provide optimum results. It is meant for use by
the developers and will also be used for further maintaining and upgrading the
various components of the requirements in future. Then, it will be reflected as
an addition to this document.
2.1 User characteristics:
2.1.1. User should be proficient in C/C++ and Windows environment.
2.1.2. User should know to compile and run files in C/C++.
2.2 Software Requirements:
2.2.1. Platform: DOS/Windows family
2.2.2. Software Tools: C++ Compiler
2.3 Hardware Requirements:
2.3.1. Pentium processor-III/IV
2.3.2. Max:4 GB Disk Drive.
2.3.3. Input devices-Mouse and Keyboard.
2.3.4. IBM compatible PC.
2.3.5. RGB 256 colours-Video minimum 16 colours and 640x480
resolutions.
2.3.6. 32 MB RAM.
Chapter 2 Requirement Specification
6 | P a g e
2. 4 Features of the project:
The graphics package supports interaction with mouse through menus
for the users to implement various options such as
2.4.1. Drawing a line
2.4.2. Drawing a circle
2.4.3. Drawing an ellipse
2.4.4. Drawing a rectangle
2.4.5. Drawing a spiral
2.4.6. Rotating wheel
2.4.7. Moving line around circle
2.4.8. Translation of rectangle
2.4.9. Rotation of rectangle
2.4.10. Scaling of rectangle
2.4.11. 3D transformations on rectangle
2.4.12. Segmentation
2.4.13. Clipping outside region of a selected area
2.4.14. Creating a new file
2.4.15. Saving the current file
2.4.16. Loading an old file
2.4.17. Filling entire area with selected colour
2.4.18. Displays the current mouse position
7 | P a g e
3. SYSTEM DESIGN
The objective of this particular design is to implement the
graphics project called Paint in an efficient way. It is designed using many
built-in functions and also user-defined functions. This increases the speed and
efficiency.
3.1 Design Methodology
3.1.1 Mouse Interfacing
We use the following functions to interface the mouse with the user
screen.
void showmouse( )
This is a function which displays mouse position on the screen. It
is called using service 01h and has no return value. It uses interrupt 33h.
void hidemouse( )
This is a function which hides the mouse pointer on the screen. It
is called using service 02h and has no return value. It uses interrupt 33h.
Int getmousepos( )
This is a function which gets the current mouse pointer on the screen.
It is called using service 03h. This returns mouse button status to BX and x-
coordinate to CX and y-coordinate to DX . It uses interrupt 33h.
Chapter 3 System Design
8 | P a g e
int restrictmouse( )
This is a function which sets the horizontal and vertical limits
for pointer. Horizontal limit is set using service 07h. Register CX contains
minimum x-coordinate and DX contains maximum x-coordinate. Vertical
limit is set using service 08h. Register CX contains minimum y-coordinate and
DX contains maximum y-coordinate.
3.12 Other Features
Line: We can draw a line in any of the coordinates using Bresenham’s line
algorithm. Based on the input values given by the user, slopes are calculated
and corresponding pixels are called using putpixel( ) built-in function. We also
ensure that the line lies within the user area.
Rectangle: We can draw a rectangle using service 03h, which returns current
x and y coordinates. Then, we call line function 4 times to draw a rectangle
and ensure that it is within user area as long as left button is pressed.
Circle: We can draw a circle using Bresenham’s circle algorithm. The initial
left click position of the mouse is taken as the centre of the circle. The radius
is given by service 03h which returns x and y coordinates when the left button
is released. We ensure that it is within the user area.
Ellipse: We can draw an ellipse using modified Bresenham’s algorithm. An
ellipse of any major and minor axis may be drawn. We ensure that it is within
the user area.
Spiral: We can draw a spiral using service 02h. It makes use of contents of
CX and DX registers to know the centre and maximum radius. We ensure that
it is within the user area.
Clip-out: We can clip objects outside a selected area. We use Cohen
Sutherland method of clipping.
Chapter 3 System Design
9 | P a g e
Wheel: When this icon is clicked, a rotating wheel is displayed within the
user screen, until right button of mouse is clicked.
Rotating tangent: When this icon is clicked, a tangent moves around a
circle until keyboard is hit.
Translate: We can translate a given circle within the user screen. The circle
is translated to the position where the mouse is clicked.
New file: We can create a new file by filling the entire user area with white
colour and naming it as untitled.bmp.
Save file: We can save a created image by using file operations.
Load file: We can load a saved file by using file operations. If the file is not
present, error is displayed.
Segmentation: When this icon is clicked, the segmentation program output
is displayed.
Clear: This option clears the screen and fills the user area with white colour.
Colours: We can select a colour and perform any of the operations using that
colour.
Fill colour: This option fills the entire user screen within the selected colour.
Locator position: It displays the coordinate position of the mouse
Pointer.
Most graphics editors use the following screed design.
Chapter 3 System Design
10 | P a g e
The construction techniques are one of the most important ingredients of a graphics
editor. A superior approach to the construction technique is the rubber-band
technique, which is used in this editor. The state diagram for rubber-band line
drawing is show below.
Chapter 4 Source Code
11 | P a g e
Source Code
/* GLOBAL DECLARATION
*/
#include<stdio.h>
#include<dos.h>
#include<graphics.h>
#include<conio.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
#define MIN_X 100
#define MAX_X 627
#define MIN_Y 70
#define MAX_Y 390
#define MAX_BUTTONS 25
#define MAX_COLOR 16 //total no of color buttons
#define NEW 0
#define SAVE 1
#define LOAD 2
#define CLEAR 3
#define CLIP_OP 10
#define TRANS_OP 19
#define MAX_PIXEL 5000
#define ORG -50
#define PI 3.1415927
#define M 5
void wel();
int initmouse();
void startmouse(int x,int y);
void showmouse();
void hidemouse();
void getxy();
void disp_coord();
void restrictmouse(int,int,int,int);
void tme();
void ClearStatus();
void ShowStatus(char*);
void beep();
char* readline(char*);
void animate();
//void loading();
void save();
void load();
void clear();
void exchange(int*,int*);
Chapter 4 Source Code
12 | P a g e
//void erase();
void drawtext();
void putback();
void set(int x,int y);
void putcircle(int,int,int,int);
void bcircle( int,int,int);
void setpixel(int,int,int);
void bline(int,int,int,int);
void brectangle(int,int,int,int);
void spiral(int,int,int,int,int);
void plotpnts(int,int,int,int,int,int);
void bellipse(int,int,int,int);
void myw(int,int,float);
void Wheel();
void myl(int,int,float);
void rotate_line();
void rubberband();
void scale();
void rotate();
void translate();
void
CohenSutherlandLine(int,int,int,int,int,int,int,int);
void lineclipping();
void clearin();
void clearout();
void seg();
void New_icon(int x1, int y1);
void Save_icon(int x1, int y1);
void Open_icon(int x1, int y1);
void Line_icon(int x1, int y1);
void Rectangle_icon(int x1, int y1);
void Circle_icon(int x1, int y1);
void Ellipse_icon(int x2,int y1);
void Spiral_icon(int x1,int y1);
void Rot_icon(int x1,int y1);
void Rotate_icon(int x, int y);
void Translate_icon(int x1, int y1);
void scale_icon(int x1,int y1);
void Clip_icon(int x1,int y1);
void Wheel_icon(int x2,int y1);
void Seg_icon(int x1,int y1);
void icons(int,int,int,int,int);
void init_button(int,int,int,int,int,char*);
void draw_button_border(int);
void undraw_button_border(int);
void init_color_button(int,int,int,int,int);
void draw_color_button_border(int);
void init();
Chapter 4 Source Code
13 | P a g e
void dispfile();
void frame();
int check_mouse_on(int,int,int,int);
void check_if_exit();
int check_if_color();
int check_if_button_pressed();
void tools();
void drawrectangle();
int a,b,c,d;
int Current_Color=BLACK;
int Current_Pattern=EMPTY_FILL;
struct //the button-structure consists of
{
int xmin,ymin,xmax,ymax; //1.boundaries-field
int button_no; //2.the button-no. for
access
char* desc; //3.a string for
description to the user
}buttons[MAX_BUTTONS];
struct //another structure-this time for color-
buttons
{ //consists of:
int xmin,ymin,xmax,ymax; //1.boundaries-fields
int color; //2.color-i.e. color no.
}colorbuttons[MAX_COLOR];
struct
{
int x,y;
int c;
}r[MAX_PIXEL];
struct Node
{
int x,y;
struct Node* next;
};
int R; //restore mode
int t; //number of pixel to restore
char filename[20]="Untitled";
int saved;
int LeftButtonPressed; //is leftbutton-pressed
int RightButtonPressed;// is Right button pressed
int mousex,mousey; //current mouse pos
int prevx,prevy; //prev mouse pos
//int Current_Color=BLACK; // to Store the current color
int Current_Button=9;// to store the current button
pressed
Chapter 4 Source Code
14 | P a g e
int Prev_Button=1;// to store the previous button
union REGS regs;
void wel()
{
}
/* INITIALISE THE SCREEN
*/
void frame()
{
char name[20];
setcolor(WHITE);
rectangle(3,3,637,477);
setfillstyle(1,10);
floodfill(6,6,WHITE);
icons(10,70,93,455,0); // icon button panel
icons(MIN_X+1,MIN_Y+1,MAX_X-1,MAX_Y-1,0);
icons(MIN_X-1,MIN_Y-1,MAX_X+1,MAX_Y+1,1);
setfillstyle(SOLID_FILL, WHITE);
bar(MIN_X+2,MIN_Y+2,MAX_X-2,MAX_Y-2); //drawing
screen
icons(10,460,629-200,477-3,0); //help message
panel(status display)
icons(20,MAX_Y+50,83,MAX_Y+60,0);
icons(629-200+32,460,MAX_X-34,477-3,0); //for x y
display_panel
setcolor(BLACK);
outtextxy(467,464,"x :");
outtextxy(533,464,"y :");
icons(MIN_X+70,MAX_Y+25,MIN_X+75+2+240,MAX_Y+65,1); //
For color panel
setcolor(DARKGRAY);
icons(MIN_X+15,MAX_Y+30,MIN_X+49,MAX_Y+55,1); //for
current_Color_indicator
icons(MIN_X+16,MAX_Y+31,MIN_X+48,MAX_Y+55,1);
setfillstyle(SOLID_FILL,Current_Color);
bar(MIN_X+15+5,MAX_Y+35,MIN_X+49-5,MAX_Y+50);
setcolor(WHITE);
line(3,35,637,35);
setfillstyle(SOLID_FILL,BLUE);floodfill(630,30,WHITE);
setcolor(4);
settextstyle(7,HORIZ_DIR,2);
outtextxy((getmaxx()-textwidth(" 2DPACKAGE
"))/2,7," 2DPACKAGE");
settextstyle(SMALL_FONT,HORIZ_DIR,4);
setcolor(4);
outtextxy(438,417,"Designed by : ");
settextstyle(SMALL_FONT,HORIZ_DIR,4);
settextstyle(4,0,1);
Chapter 4 Source Code
15 | P a g e
outtextxy(430,432,"chinmaya n amar");
settextstyle(SMALL_FONT,HORIZ_DIR,5);
icons(MAX_X-208,MAX_Y+25,MAX_X-2,MAX_Y+65,1);
icons(MIN_X,MAX_Y+6,MAX_X,MAX_Y+18,0);
}
void New_icon(int x1, int y1)// used to show new file
icon
{
y1+=1;
setlinestyle(0,1,1);
setcolor(BLACK);
line(9+x1,4+y1,9+x1,20+y1);
line(9+x1,20+y1,21+x1,20+y1);
line(21+x1,20+y1,21+x1,8+y1);
line(9+x1,4+y1,17+x1,4+y1);
line(17+x1,4+y1,17+x1,8+y1);
line(17+x1,8+y1,21+x1,8+y1);
line(21+x1,8+y1,17+x1,4+y1);
setfillstyle(1,WHITE);
floodfill(10+x1,9+y1,BLACK);
}
void Save_icon(int x1, int y1) // for saving
{
y1+=1;
setlinestyle(0,1,1);
setcolor(BLACK);
line(6+x1,4+y1,24+x1,4+y1);
line(24+x1,4+y1,24+x1,20+y1);
line(24+x1,20+y1,8+x1,20+y1);
line(8+x1,20+y1,6+x1,18+y1);
line(6+x1,18+y1,6+x1,4+y1);
line(9+x1,4+y1,9+x1,12+y1);
line(9+x1,12+y1,21+x1,12+y1);
line(21+x1,12+y1,21+x1,4+y1);
line(10+x1,20+y1,10+x1,15+y1);
line(10+x1,15+y1,20+x1,15+y1);
line(20+x1,15+y1,20+x1,20+y1);
line(17+x1,15+y1,17+x1,20+y1);
line(21+x1,7+y1,24+x1,7+y1);
setfillstyle(1,WHITE);
floodfill(10+x1,5+y1,BLACK);
setfillstyle(1,BROWN);
floodfill(7+x1,5+y1,BLACK);
setfillstyle(1,DARKGRAY);
floodfill(11+x1,19+y1,BLACK);
}
Chapter 4 Source Code
16 | P a g e
void Open_icon(int x1, int y1)// for opening
{
y1+=1;
setlinestyle(0,1,1);
setcolor(BLACK);
line(5+x1,20+y1,17+x1,20+y1);
line(17+x1,20+y1,24+x1,15+y1);
line(24+x1,15+y1,12+x1,15+y1);
line(12+x1,15+y1,5+x1,20+y1);
setfillstyle(1,DARKGRAY);
floodfill(10+x1,18+y1,BLACK);
line(5+x1,20+y1,5+x1,10+y1);
line(5+x1,10+y1,6+x1,8+y1);
line(6+x1,8+y1,8+x1,8+y1);
line(8+x1,8+y1,9+x1,10+y1);
line(9+x1,10+y1,17+x1,10+y1);
line(17+x1,10+y1,17+x1,15+y1);
setfillstyle(1,YELLOW);
floodfill(6+x1,12+y1,BLACK);
line(15+x1,7+y1,17+x1,5+y1);
line(17+x1,5+y1,22+x1,7+y1);
line(22+x1,7+y1,24+x1,12+y1);
line(24+x1,12+y1,20+x1,10+y1);
line(24+x1,12+y1,26+x1,9+y1);
}
void Clear_icon(int x,int y)//clearing the working area
{
setfillstyle(SOLID_FILL,WHITE);
bar3d(x+5,y+5,x+25,y+20,0,0);
}
void Line_icon(int x1, int y1)// used to show line icon
{
line(x1+8,y1+5,x1+22,y1+19);
line(x1+7,y1+4,x1+21,y1+18);
}
void Circle_icon(int x1, int y1)// used to show circle
icon
{
circle(x1+15,y1+13,8);
}
void Ellipse_icon(int x2,int y1)//used to show ellipse
tool
{
ellipse(x2+15,y1+13,0,360,10,7);
}
Chapter 4 Source Code
17 | P a g e
void Spiral_icon(int x1,int y1) //used to show spiral
icon
{
setcolor(BLACK);
spiral(x1+15,y1+14,10,0,37);
}
void Rot_icon(int x1,int y1)//used to show rotate icon
{
setfillstyle(SOLID_FILL,YELLOW);
circle(x1+15,y1+13,7);
line(x1+23,y1+5,x1+23,y1+21);
}
void Clip_icon(int x1,int y1)//used to display line
clipping
{
setlinestyle(3,0,2);
rectangle(x1+6,y1+6,x1+24,y1+19);
setlinestyle(0,0,0);
line(x1+20,y1+3,x1+10,y1+23);
}
void Wheel_icon(int x2,int y1) //used to show moving
wheel
{
circle(x2+15,y1+13,8);
circle(x2+15,y1+13,10);
line(x2+7,y1+13,x2+23,y1+13);
line(x2+15,y1+5,x2+15,y1+21);
line(x2+9,y1+7,x2+21,y1+19);
line(x2+21,y1+7,x2+9,y1+19);
}
void Seg_icon(int x,int y)
{
setcolor(4);
settextstyle(DEFAULT_FONT,HORIZ_DIR,0);
outtextxy(x+4,y+9,"SEG");
}
void hr_icon(int x,int y)
{
setcolor(4);
settextstyle(1,0,1);
outtextxy(x+8,y+10,"HR");
}
void bz_icon(int x,int y)
{
setcolor(RED);
Chapter 4 Source Code
18 | P a g e
settextstyle(1,0,1);
outtextxy(x+8,y+10,"BZ");
}
void t3d_icon(int x,int y)
{
setcolor(RED);
settextstyle(1,0,1);
outtextxy(x+8,y+10,"3D");
}
void fl_icon(int x,int y)
{
setcolor(RED);
settextstyle(1,0,1);
outtextxy(x+4,y+10,"FIL");
}
void Rotate_icon(int x, int y)
{
setcolor(0);
rectangle(x+6,y+4,x+23,y+18);
setcolor(RED);
line(x+11,y+4,x+6,y+18);
line(x+11,y+4,x+27,y+9);
line(x+27,y+9,x+22,y+22);
line(x+22,y+22,x+6,y+18);
}
void Rectangle_icon(int x1, int y1)// used to show
rectangle icon
{
rectangle(x1+6,y1+6,x1+23,y1+20);
}
void Translate_icon(int x1, int y1)// used to display
translation
{
setcolor(0);
rectangle(x1+4,y1+4,x1+21,y1+18);
setcolor(RED);
rectangle(x1+7,y1+7,x1+24,y1+21);
}
void scale_icon(int x1, int y1)// used to display
scaling picture
{
setcolor(0);
rectangle(x1+4,y1+4,x1+21,y1+18);
rectangle(x1+7,y1+7,x1+17,y1+12);
Chapter 4 Source Code
19 | P a g e
setfillstyle(1,RED);
floodfill(x1+8,y1+8,BLACK);
}
/* MOUSE FUNCTIONS
*/
int initmouse()
{
regs.x.ax=0;
int86(0x33,&regs,&regs);
return(regs.x.bx);
}
void startmouse(int x,int y) //start mouse in pos(x,y)
using
{ //fn. 04h of int 33h
regs.x.ax=4;
regs.x.cx=x;
regs.x.dx=y;
int86(0x33,&regs,&regs);
}
void showmouse()
{
regs.x.ax=1;
int86(0x33,&regs,&regs);
}
void getxy()
{
regs.x.ax=3; //get mouse status using 03h
of int 33h
int86(0x33,&regs,&regs);
prevx=mousex;
prevy=mousey;
if(regs.x.bx&1) //LSB of reg BX
LeftButtonPressed=1;
else
LeftButtonPressed=0;
mousex=regs.x.cx; //(cx,dx)=(x,y)
mousey=regs.x.dx;
if(regs.x.bx&2)
RightButtonPressed=1;
else
RightButtonPressed=0;
}
void hidemouse()
Chapter 4 Source Code
20 | P a g e
{
regs.x.ax=2;
int86(0x33,&regs,&regs);
}
void disp_coord() //this fn display current mouse co-
ordinates only when
{ //the mouse is on the canvas
char x[5],y[5];
int color;
if(prevx!=mousex||prevy!=mousey)
//otherwise don't update
if((mousex>MIN_X+1)&&(mousex<MAX_X-
1)&&(mousey>MIN_Y+1)&&(mousey<MAX_Y-1))
{
settextstyle(DEFAULT_FONT,HORIZ_DIR,0);//restore
normal font style/size
sprintf(x," %d ",mousex-MIN_X-2); //copy positions
into respective
sprintf(y," %d ",mousey-MIN_Y-2); //strings
color=getcolor();
setfillstyle(SOLID_FILL,LIGHTGRAY);
bar(487,462,522,472); //refresh display
bar(555,462,585,472);
setcolor(BLACK);
outtextxy(487,464,x); //display
current positions
outtextxy(555,464,y);
setcolor(color);
}
}
void restrictmouse(int minx,int miny,int maxx,int maxy)
{
regs.x.cx=minx;
regs.x.dx=maxx;
regs.x.ax=0x7; //restrict along x-axis using fn
07h
int86(0x33,&regs,&regs);
regs.x.cx=miny;
regs.x.dx=maxy;
regs.x.ax=0x8; //restrict along y-axis using fn
08h
int86(0x33,&regs,&regs);
}
//Time function
void tme()
{
char k[3],l[3],m[4]=" : ";
static int hour,minute;
Chapter 4 Source Code
21 | P a g e
regs.h.ah=0x2c;
int86(0x21,&regs,&regs);
if(hour!=regs.h.ch||minute!=regs.h.cl)
{
setfillstyle(SOLID_FILL,LIGHTGRAY);
bar(22,MAX_Y+52,81,MAX_Y+58); //refresh
display
settextstyle(DEFAULT_FONT,HORIZ_DIR,0);//restore
normal font style/size
//setusercharsize(0,0,0,0);
setcolor(BLACK);
sprintf(k,"%d",regs.h.ch);
outtextxy(25,442,k);
outtextxy(40,442,m);
sprintf(l,"%d",regs.h.cl);
outtextxy(62,442,l);
}
hour=regs.h.ch,minute=regs.h.cl;
}
/* FILE OPERATIONS
*/
extern void dispfile();
void ClearStatus()
{
static int first_time;
static char text[52];
int i;
setcolor(LIGHTGRAY);
if(!first_time)
{
strcpy(text,"");
for(i=0;i<51;++i)
strcat(text,"Û");
text[51]='0';
first_time=1;
}
outtextxy(12,464,text);
}
void ShowStatus(char* str)
{
int color=getcolor();
ClearStatus();
setcolor(BLACK);
outtextxy(32,464,str);
setcolor(color);
}
Chapter 4 Source Code
22 | P a g e
void beep()
{
sound(1000);
delay(75);
nosound();
}
char* readline(char* msg)
{
char* Line;
char temp[40];
char Disp_Line[60];
char ch;
int i=0,length=0;
int max=((475-12)-strlen(msg)*8)/8;// find maximum
number of characters
ClearStatus();
setcolor(BLACK);
outtextxy(12,464,msg);
strcpy(Disp_Line,msg);
ch=getch();
while((ch!=27)&&(ch!=13))
{
switch (ch)
{
case 'b' :
if(i==0)
beep();
else
{
i--;
ClearStatus();
length=strlen(Disp_Line);
Disp_Line[length-1]='0';
setcolor(BLACK);
outtextxy(12,464,Disp_Line);
}
break;
default :
if(i > max)
beep();
else
{
length=strlen(Disp_Line);
Disp_Line[length]=ch; //copy next char
into Disp_Line
Disp_Line[length+1]='0';
outtextxy(12,464,Disp_Line);
temp[i++]=ch;
}
break;
Chapter 4 Source Code
23 | P a g e
}
ch=getch();
}
temp[i]='0';
ClearStatus();
if(ch==27)
return NULL;
else
{
Line=malloc(strlen(temp)+1);
strcpy(Line,temp);
}
return Line;
}
void animate()
{
int i,j=2;
setfillstyle(SOLID_FILL,BLUE);
for(i=1;i<66;i++)
{
bar(MIN_X+j,MAX_Y+15,MIN_X+j+6,MAX_Y+9);
j+=8;
delay(10);
}
setfillstyle(SOLID_FILL,LIGHTGRAY);
bar(MIN_X+2,MAX_Y+16,626,MAX_Y+8);
}
void save()
{
char* name;
FILE* out;
char ch;
int row,col;
char byte;
if(strcmp(filename,"Untitled")==0)
{
name=readline("Save File As : ");
if(name==NULL) return;
}
else
{
name=malloc(strlen(filename)+1);
strcpy(name,filename);
}
out=fopen(name,"w");
if(out==NULL)
{
ShowStatus(" Error Opening File !");
delay(1000);
ClearStatus();
Chapter 4 Source Code
24 | P a g e
return;
}
ShowStatus(" Saving File (Please Wait) ");
animate();
for(row=MIN_Y+2;row<=MAX_Y-2;++row)
{
for(col=MIN_X+2;col<=MAX_X-2;)
{
byte=getpixel(col,row);
byte=byte<<4;
col++;
byte+=getpixel(col,row);
col++;
if(fputc(byte,out)==EOF)
{
ShowStatus("Error Writing FIle ! ");
delay(1000);
ClearStatus();
free(name);
fclose(out);
}
}
}
ClearStatus();
strcpy(filename,name);
dispfile();
free(name);
fclose(out);
saved=1;
}
void load()
{
FILE* in;
char* name;
char ch;
char byte;
int row,col;
int temp;
if(!saved)
{
ShowStatus(" Save Current File ? ");
ch=getch();
if(ch=='y'||ch=='Y')
save();
}
name=readline(" Enter File To Open : ");
if(name==NULL)
return;
in=fopen(name,"r");
if(in==NULL)
Chapter 4 Source Code
25 | P a g e
{
ShowStatus(" Error Opening File ");
delay(1000);
ClearStatus();
return;
}
byte=fgetc(in);// gets a char from a stream
ClearStatus();
ShowStatus("Loading....");
animate();
ClearStatus();
strcpy(filename,name);
dispfile();
for(row=MIN_Y+2;row<=MAX_Y-2;row++)
{
for(col=MIN_X+2;col<=MAX_X-2;)
{
temp=(byte&0xf0)>>4;
putpixel(col,row,temp);
col++;
temp=(byte&0x0f);
putpixel(col,row,temp);
col++;
byte=fgetc(in);
}
}
free(name);
fclose(in);
saved=1;
}
/* ALGORITHMS
*/
void clear()
{
setfillstyle(SOLID_FILL,WHITE);
bar(MIN_X+2,MIN_Y+2,MAX_X-2,MAX_Y-2);
}
void exchange(int *v1,int *v2) // to swap variables in
line algo
{
int temp;
temp=*v1;
*v1=*v2;
*v2=temp;
}
Chapter 4 Source Code
26 | P a g e
void putback()
{
int i;
for(i=0;i<t;i++)
{
if(getpixel(r[i].x,r[i].y)!=r[i].c)
putpixel(r[i].x,r[i].y,r[i].c);
}
t=0;
}
void set(int x,int y)
{
if(x>MIN_X+1&&x<MAX_X-1&&y>MIN_Y+1&&y<MAX_Y-1)
{
if(getpixel(x,y)!=Current_Color)
{
if(R)
{
r[t].c=getpixel(x,y);
r[t].x=x;
r[t++].y=y;
}
putpixel(x,y,Current_Color);
}
}
}
void putcircle(int x,int y,int xc,int yc)
{
set(x+xc,y+yc);
set(-x+xc,y+yc);
set(y+xc,-x+yc);
set(-y+xc,x+yc);
set(x+xc,-y+yc);
set(-x+xc,-y+yc);
set(y+xc,x+yc);
set(-y+xc,-x+yc);
}
void bcircle( int xc,int yc,int rad)
{
int x=0,y=rad,p=3-2*rad;
if(rad<3)
return;
hidemouse();
while(x<=y)
{
putcircle(x,y,xc,yc);
if(p<0)
Chapter 4 Source Code
27 | P a g e
p+=4*x+6;
else
{
p+=4*(x-y)+10;
y--;
}
x++;
if(x==y)
putcircle(x,y,xc,yc);
}
showmouse();
}
void setpixel(int x,int y,int slope)
{
if(slope)
exchange(&x,&y);
set(x,y);
}
void bline(int xs,int ys,int xe,int ye)
{
int dx,dy,c1,c2,slope,stype=1;
signed long int p;
dx=abs(xe-xs);
dy=abs(ye-ys);
slope=dy>dx;
if(slope)
{
exchange(&dx,&dy);
exchange(&xs,&ys);
exchange(&xe,&ye);
}
c1=2*dy; c2=2*(dy-dx); p=2*dy-dx;
if(xe<xs)
{
exchange(&xs,&xe);
exchange(&ys,&ye);
}
if(ye<ys)
stype=-1;
setpixel(xs,ys,slope);
while(xs<xe)
{
++xs;
if(p<0)
p+=c1;
else
{
p+=c2;
ys+=stype;
Chapter 4 Source Code
28 | P a g e
}
setpixel(xs,ys,slope);
}
}
void brectangle(int x1,int y1,int x2,int y2)
{
hidemouse();
if(x1==x2&&y1==y2)
{
showmouse();
return;
}
bline(x1,y1,x2,y1);
bline(x2,y1,x2,y2);
bline(x2,y2,x1,y2);
bline(x1,y1,x1,y2);
showmouse();
}
void spiral(int xc,int yc,int r,int cip,int inc)
{
int x1,y1,x2,y2;
float theta,dtheta,rad;
if(r<=5)
return;
x1=xc;
y1=yc;
theta=rad=0.0;
dtheta=M_PI/(60);
while(rad<=r)
{
x2=xc+rad*cos(theta);
y2=yc+rad*sin(theta);
if(cip)
bline(x1,y1,x2,y2);
else
line(x1,y1,x2,y2); //for icon
x1=x2;
y1=y2;
rad+=(0.1/inc)*r;
theta+=dtheta;
}
return;
}
void plotpnts(int xc,int yc,int x,int y,int r1,int r2)
{
float r=1.0,ro=1.0;
if(r1>r2)
r=(float)(r2*1.0/r1);
Chapter 4 Source Code
29 | P a g e
else
ro=(float)(r1*1.0/r2);
set(xc+x*ro,(int)(yc+y*r));
set(xc-y*ro,(int)(yc+x*r));
set(xc-x*ro,(int)(yc+y*r));
set(xc+y*ro,(int)(yc+x*r));
set(xc-x*ro,(int)(yc-y*r));
set(xc+y*ro,(int)(yc-x*r));
set(xc+x*ro,(int)(yc-y*r));
set(xc-y*ro,(int)(yc-x*r));
}
void bellipse(int xc,int yc,int r1,int r2)
{
int p,x,y,b;
x=0;
if(r1>r2)
y=r1;
else
y=r2;
p=3-2*r1;
while(x<=y)
{
hidemouse();
plotpnts(xc,yc,x,y,r1,r2);
showmouse();
if(p<0)
p+=4*x+6;
else
{
y--;
p+=4*(x-y)+10;
}
x++;
}
showmouse();
}
void myw(int x,int y,float theta)
{
int i;
circle(x,y,50);
circle(x,y,48);
for(i=0;i<3;i++)
{
line(x+50*cos(theta),y+50*sin(theta),x-
50*cos(theta),y-50*sin(theta));
theta+=M_PI/3;
}
}
Chapter 4 Source Code
30 | P a g e
void hrcurve(int x1,int y1,int x4,int y4)
{
int x3,y3;
double a,b,t,r1,r2;
//x2=87,y2=47;
//x3=632,y3=427;
r1=abs(x4-x1);
r2=abs(y4-y1);
for(t=0;t<1;t+=0.001)
{
a=(2*t*t*t-3*t*t+1)*x1+(-2*t*t*t+3*t*t)*x4+(t*t*t-
2*t*t+t)*r1+(t*t*t-t*t)*r2;
b=(2*t*t*t-3*t*t+1)*y1+(-2*t*t*t+3*t*t)*y4+(t*t*t-
2*t*t+1)*r1+(t*t*t-t*t)*r2;
if((a>87&&a<632)&&(b>47&&b<427))
bline((int)a,(int)b,(int)a,(int)b);
}
}
void bzcurve(int x1,int y1,int x4,int y4)
{
int x3,y3,x2,y2;
double a,b,t;
x2=87,y2=47;
x3=632,y3=427;
for(t=0;t<1;t+=0.0001)
{
a=(1-t)*(1-t)*(1-t)*x1+3*t*(1-t)*(1-t)*x2+3*t*t*(1-
t)*x3+t*t*t*x4;
b=(1-t)*(1-t)*(1-t)*y1+3*t*(1-t)*(1-t)*y2+3*t*t*(1-
t)*y3+t*t*t*y4;
if((a>87&&a<632)&&(b>47&&b<427))
bline((int)a,(int)b,(int)a,(int)b);
}
}
void rotate()
{
char *name;
int x,y,xnew=0,ynew=0;
float tx=0,th=0;
setcolor(Current_Color);
rectangle(MIN_X,MIN_Y,MAX_X,MAX_Y);
ShowStatus("Draw rectangle to rotate");
drawrectangle();
name=readline("Enter the rotational angle along x-
axis: ");
tx=atoi(name);
th= (3.1416 * tx)/180.0;
Chapter 4 Source Code
31 | P a g e
for(x=MIN_X+2; x<=MAX_X-2; x++)
for(y=MIN_Y+2; y<=MAX_Y-2; y++)
if(getpixel(x,y) !=WHITE &&
getpixel(x,y)==BLACK)
{
xnew = ( ( x*cos(th) -
y*sin(th)) );
ynew = ( ( x*sin(th) +
y*cos(th)) );
// if(xnew>100&&ynew<340)
putpixel(x,y,15);
putpixel(xnew+200,abs(ynew-
70),10);
continue;
}
}
void seg()
{
setcolor(BLACK);
rectangle(200,200,400,380);
line(200,200,300,100);
line(300,100,400,200);
rectangle(275,300,325,380);
rectangle(212,225,263,275);
rectangle(337,225,388,275);
line(237,225,237,275);
line(212,250,263,250);
line(362,225,362,275);
line(337,250,388,250);
circle(300,165,25);
setfillstyle(SOLID_FILL,GREEN);
floodfill(210,210,BLACK);
setfillstyle(SOLID_FILL,WHITE);
floodfill(300,165,BLACK);
setfillstyle(SOLID_FILL,BROWN);
floodfill(300,125,BLACK);
/*int i,j=0,k=0;
//delay(1000);
settextstyle(3,0,3);
setcolor(RED);
outtextxy(250,350,"DEMONSTRATION OF SEGMENTATION");
setcolor(0);
//MONITOR
rectangle(140,110,220,210);
rectangle(130,100,230,220);
line(165,220,145,250);
Chapter 4 Source Code
32 | P a g e
line(195,220,215,250);
ellipse(180,250,130,50,45,15);
line(120,90,120,210);
line(120,210,130,220);
line(120,90,220,90);
line(220,90,230,100);
setfillstyle(1,7);
floodfill(131,101,0);
setfillstyle(1,7);
floodfill(121,91,0);
line(120,90,130,100);
setfillstyle(1,7);
floodfill(166,222,0);
getch();
//delay(1100);
//CABINET
setfillstyle(1,7);
bar3d(350,90,280,250,7,1);
setfillstyle(1,8);
floodfill(345,87,0);
setfillstyle(1,8);
floodfill(353,235,0);
getch();
//delay(1000);
//CD ROM
setcolor(0);
line(280,100,350,100);
line(280,110,350,110);
setfillstyle(1,8);
floodfill(281,101,0);
setfillstyle(1,GREEN);
fillellipse(340,105,4,4);
ellipse(340,105,100,90,5,5);
//delay(1000);
getch();
//FLOPPY
setfillstyle(1,7);
floodfill(291,151,0);
rectangle(290,150,335,158);
setfillstyle(1,8);
floodfill(291,151,0);
//delay(1000);
getch();
//RESET BUTTON
setfillstyle(1,RED);
fillellipse(310,180,4,4);
ellipse(310,180,100,90,3,5);
Chapter 4 Source Code
33 | P a g e
//delay(1000);
getch();
//POWER BUTTON
setfillstyle(1,YELLOW);
fillellipse(310,200,4,4);
ellipse(310,200,100,90,7,8);
circle(310,200,8);
//MONITOR CONNECTOR
//delay(1000);
getch();
setcolor(0);
line(230,210,250,200);
line(231,211,251,201);
line(232,212,252,202);
line(250,200,280,180);
line(251,201,280,181);
line(252,202,280,182);
setcolor(0);
//delay(1000);
getch();
//KEYBOAD
k=0;
for(i=0;i<7;i++)
{
line(106+k,280+j,258+k,280+j);
j+=8;
k+=3;
}
j=0;
for(i=0;i<20;i++)
{
line(106+j,280,125+j,328);
j+=8;
}
line(106,280,106,290);
line(106,290,125,338);
line(277,328,277,338);
line(125,338,277,338);
setfillstyle(1,7);
floodfill(126,329,0);
line(125,328,125,338);
//delay(1000);
Chapter 4 Source Code
34 | P a g e
getch();
//KEYBOARD CONNECTOR
line(210,280,280,230);
line(211,281,281,231);
line(250,250,280,230);
//delay(1000);
getch();
//MOUSE
setfillstyle(1,7);
fillellipse(300,300,9,15);
ellipse(300,300,100,90,10,18);
//delay(1000);
getch();
line(300,285,270,260);
line(301,286,271,261);
line(302,287,272,262);
line(270,260,245,250);
line(271,261,246,251);
line(272,262,247,252);
line(245,250,280,205);
line(246,251,280,206);
line(247,252,280,207);
//display on screen
settextstyle(3,0,1);
setcolor(0);
outtextxy(142,150,"CG PROJECT");
outtextxy(142,165,"By:uub1970");
//outtextxy(165,175,"Usha");
for(i=0;i<=5;i++)
{ delay(1000);
if(i%2==0)
{
setfillstyle(1,11);
floodfill(141,111,0);
}
else
{
setfillstyle(1,14);
floodfill(141,111,0);
}
}*/
}
void mul(float a[10][10],float d[10][10])
{
Chapter 4 Source Code
35 | P a g e
char k1[4],l1[4],m1[4];
int i,j,k,xc,yc,zc;
float c[10][10];
for(i=0;i<1;i++)
{
for(j=0;j<4;j++)
{
c[i][j]=0;
for(k=0;k<4;k++)
c[i][j]+=a[i][k]*d[k][j];
}
}
xc=c[0][0],yc=c[0][1],zc=c[0][2];
outtextxy(570,100,"x=");
outtextxy(570,120,"y=");
outtextxy(570,140,"z=");
sprintf(k1,"%d",(xc-MIN_X));
outtextxy(600,100,k1);
sprintf(l1,"%d",(yc-MIN_Y));
outtextxy(600,120,l1);
sprintf(m1,"%d",(zc-100));
outtextxy(600,140,m1);
if(xc>MIN_X&&yc>MIN_Y&&xc<MAX_X&&yc<MAX_Y)
{
putpixel(xc,yc,RED);
putpixel(xc+1,yc+1,RED);
putpixel(xc,yc+1,RED);
putpixel(xc+1,yc,RED);
}
else
outtextxy(150,316 ,"sorry! pixel is outside the
boundary");
}
void t3d()
{
char
*xs,*ys,*zs,*chs,*txs,*tys,*tzs,*sxs,*sys,*szs,*angs;
float a[10][10],d[10][10],c[9][9];
int tx,ty,tz,sx,sy,sz,ch;
int x,y,z,ang,i;
float th;
xs=readline("Enter x cordinate:(0-525) ");
x=atoi(xs);
ys=readline("Enter y cordinate:(0-290) ");
y=atoi(ys);
zs=readline("Enter z cordinate:(0-300) ");
z=atoi(zs);
x=x+MIN_X;
y=y+MIN_Y;
Chapter 4 Source Code
36 | P a g e
z=z+100;
putpixel(x,y,BLUE);
putpixel(x+1,y+1,BLUE);
putpixel(x+1,y,BLUE);
putpixel(x,y+1,BLUE);
d[0][0]=x,d[0][1]=y,d[0][2]=z,d[0][3]=1;
chs=readline("1.TRANS 2.SCALING 3.Zrotate
4.Yrotate 5.Xrotate");
ch=atoi(chs);
switch(ch)
{
case 1:
txs=readline("Enter tx: ");
tx=atoi(txs);
tys=readline("Enter ty ");
ty=atoi(tys);
tzs=readline("Enter tz: ");
tz=atoi(tzs);
a[0][0]=a[1][1]=a[2][2]=a[3][3]=1;
a[3][0]=tx;a[3][1]=ty;a[3][2]=tz;
a[0][1]=a[0][2]=a[0][3]=a[1][0]=a[1][2]=a[1][3]=a[2]
[0]=a[2][1]=a[2][3]=0;
mul(d,a);
break;
case 2:sxs=readline("Enter sx: ");
sx=atoi(sxs);
sys=readline("Enter sy ");
sy=atoi(sys);
szs=readline("Enter sz: ");
sz=atoi(szs);
a[0][0]=sx;a[1][1]=sy;
a[2][2]=sz;a[3][3]=1;
a[0][1]=a[0][2]=a[0][3]=a[1][0]=a[1][2]=a[1][3]=a[2]
[0]=a[2][1]=a[2][3]=a[3][0]=a[3][1]=a[3][2]=0;
mul(d,a);
break;
case 3:
angs=readline("enter rotatinal angle about
z");
ang=atoi(angs);
th=(3.142*ang)/180;
a[0][0]=a[1][1]=cos(th);
Chapter 4 Source Code
37 | P a g e
a[0][2]=a[1][2]=a[0][3]=a[1][3]=a[2][1]=a[2][0]=a[3]
[0]=a[3][1]=a[3][2]=a[2][3]=0;
a[3][3]=a[2][2]=1;
a[0][1]=sin(th);a[1][0]=-sin(th);
mul(d,a);
break;
case 4:
angs=readline("enter rotatinal angle
about y");
ang=atoi(angs);
th=(3.142*ang)/180;
a[1][1]=a[3][3]=1;
a[0][1]=a[0][3]=a[1][0]=a[1][2]=a[1][3]=a[2][1]=a[2]
[3]=a[3][0]=a[3][1]=a[3][2]=0;
a[0][0]=a[2][2]=cos(th);
a[2][0]=sin(th);
a[0][2]=-sin(th);
mul(d,a);
break;
case 5:
angs=readline("enter rotatinal angle
about x");
ang=atoi(angs);
th=(3.142*ang)/180;
a[0][0]=a[3][3]=1;
a[1][1]=a[2][2]=cos(th);
a[1][2]=sin(th);a[2][1]=-sin(th);
a[0][1]=a[0][2]=a[0][3]=a[1][0]=a[1][3]=a[2][0]=a[2]
[3]=a[3][0]=a[3][1]=a[3][2]=0;
mul(d,a);
break;
default:exit(0);
}
}
void translate()
{
char *name;
int tx,ty;
setcolor(Current_Color);
rectangle(MIN_X,MIN_Y,MAX_X,MAX_Y);
ShowStatus("Draw rectangle to translate");
drawrectangle();
Chapter 4 Source Code
38 | P a g e
name=readline("Enter the translation factor tx: ");
tx=atoi(name);
name=readline("Enter the translation factor ty: ");
ty=atoi(name);
setcolor(WHITE);
setfillstyle(SOLID_FILL,WHITE);
bar(a,b,c,d);
if(c+tx >MAX_X) c=MAX_X;
else if(c+tx < MIN_Y) c=MIN_Y;
else c=c+tx;
if(d+ty >MAX_Y) d=MAX_Y;
else if(d+ty <MIN_Y) d=MIN_Y;
else d=d+ty;
if(a+tx <MIN_X) a=MIN_X;
else if( a+tx >MAX_X) a=MAX_X;
else a=a+tx;
if( b+ty<MIN_Y) b=MIN_Y;
else if(b+ty >MAX_Y) b=MAX_Y;
else b=b+ty;
setcolor(Current_Color);
if(Current_Pattern!=EMPTY_FILL)
setfillstyle(Current_Pattern,Current_Color);
bar(a,b,c,d);
rectangle(a,b,c,d);
}
void insert(int x,int y,struct Node** last)
{
struct Node* p;
p=(struct Node*)malloc(sizeof(struct Node));
if(p==NULL)
{
closegraph();
fprintf(stderr,"ninsert:Out of memory.n");
exit(2);
}
p->x=x;
p->y=y;
p->next=NULL;
(*last)->next=p;
*last=(*last)->next;
}
void floodfill4(int x,int y,int oldclr,int newclr)
{
struct Node* first,*last,*tmp;
struct Node* p,*q;
Chapter 4 Source Code
39 | P a g e
first=(struct Node*)malloc(sizeof(struct Node));
if(first==NULL)
{
closegraph();
fprintf(stderr,"floodfill4: Out of memory.n");
exit(2);
}
if(oldclr==newclr)
{
free(first);
return;
}
//Create a node and stpre the seed there.
first->x=x;
first->y=y;
first->next=NULL;
last=first;
//Use a linked list of adjacent nodes for filling
while(first!=NULL)
{
putpixel(x,y,newclr);
if(getpixel(x,y-1)==oldclr)
{
putpixel(x,y-1,newclr);
insert(x,y-1,&last);//insert at the end
}
if(getpixel(x,y+1)==oldclr)
{
putpixel(x,y+1,newclr);
insert(x,y+1,&last);//insert at the end
}
if(getpixel(x-1,y)==oldclr)
{
putpixel(x-1,y,newclr);
insert(x-1,y,&last);//insert at the end
}
if(getpixel(x+1,y)==oldclr)
{
putpixel(x+1,y,newclr);
insert(x+1,y,&last);//insert at the end
}
//This pixel is done .try the next node in the list
tmp=first;
first=first->next;
x=first->x;
y=first->y;
free(tmp);
Chapter 4 Source Code
40 | P a g e
}
for(p=first;p!=NULL;p=q)
{
q=p->next;
free(p);
}
}
void fillcolor()
{
unsigned oldcolor;
int x=mousex;
int y=mousey;
oldcolor=getpixel(mousex,mousey);
hidemouse();
floodfill4(x,y,oldcolor,Current_Color);
showmouse();
}
void myl(int x,int y,float theta)
{
line((int)(x+70*sqrt(2)*cos(theta)),(int)(y+70*sqrt(2)*si
n(theta)),(int)
(x+70*sqrt(2)*cos(theta+M_PI_2)),(int)(y+70*sqrt(2)*
sin(theta+M_PI_2)));
circle(x,y,70);
}
void rotate_line()
{
float theta=0;
int i,j;
clear();
ShowStatus("Press ESC to terminate");
while(1)
{
if(kbhit())
if(getch()==27)
{
clear();
return;
}
setcolor(BLACK);
myl(360,249,theta);
delay(100);
setcolor(WHITE);
myl(360,249,theta);
theta+=M_PI_2/10;
Chapter 4 Source Code
41 | P a g e
}
}
extern void draw_button_border(int);
extern void undraw_button_border(int);
typedef unsigned int outcode;
enum
{
top=0x1,bottom=0x2,right=0x4,left=0x8
};
outcode compcode(int x,int y,int xmin,int ymin,int
xmax,int ymax)
{
outcode code=0;
if(y>ymax)code|=top;
if(y<ymin)code|=bottom;
if(x>xmax)code|=right;
if(x<xmin)code|=left;
return code;
}
int x2,y2,x3,y3;
void CohenSutherlandLine(int x0,int y0,int x1,int y1,int
xmin,int ymin,int xmax,int ymax)
{
outcode outcodeout,outcode0,outcode1;
int
accept=0,done=1,x,y,umin=MIN_X+100,vmin=MIN_Y+50,umax=MAX
_X-100,vmax=MAX_Y-50;
float m;
outcode0=compcode(x0,y0,xmin,ymin,xmax,ymax);
outcode1=compcode(x1,y1,xmin,ymin,xmax,ymax);
while(done)
{
if(!(outcode0|outcode1))
{
accept=1;
done=0;
}
else if(outcode0&outcode1)
done=0;
else
{
outcodeout=outcode0?outcode0:outcode1;
m=(y1-y0)/(float)(x1-x0);
if(outcodeout&top)
Chapter 4 Source Code
42 | P a g e
{
x=x0+(ymax-y0)/m;
y=ymax;
}
else if(outcodeout&bottom)
{
x=x0+(ymin-y0)/m;
y=ymin;
}
else if(outcodeout&right)
{
y=y0+(xmax-x0)*m;
x=xmax;
}
else
{
y=y0+(xmin-x0)*m;
x=xmin;
}
if(outcodeout==outcode0)
{
x0=x; y0=y;
outcode0=compcode(x0,y0,xmin,ymin,xmax,ymax);
}
else
{
x1=x; y1=y;
outcode1=compcode(x1,y1,xmin,ymin,xmax,ymax);
}
}
}
hidemouse();
clear();
if(accept)
{
setcolor(BLACK);
outtextxy(110,80,"Clipped line in the window");
rectangle(x3,y3,x2,y2);
setcolor(Current_Color);
bline(x0,y0,x1,y1);
ClearStatus();
ShowStatus("Right click to view Clipped line in
Viewport");
getxy();
while(!RightButtonPressed)getxy();
x0=(float)(x0-xmin)*(umax-umin)/(xmax-xmin)+umin;
x1=(float)(x1-xmin)*(umax-umin)/(xmax-xmin)+umin;
y0=(float)(y0-ymin)*(vmax-vmin)/(ymax-ymin)+vmin;
y1=(float)(y1-ymin)*(vmax-vmin)/(ymax-ymin)+vmin;
Chapter 4 Source Code
43 | P a g e
clear();
setcolor(BLACK);
outtextxy(110,80,"Clipped line in viewport");
rectangle(umin,vmin,umax,vmax);
setcolor(Current_Color);
bline(x0,y0,x1,y1);
} // if line within the region
showmouse();
setcolor(Current_Color);
}
void lineclipping()
{
int x,y,current_x,current_y,tx,ty,b,color;
int x0,y0,x1,y1;
R=1;
clear();
showmouse();
getxy();
x=mousex;y=mousey;
disp_coord();
if(LeftButtonPressed)
{
while(LeftButtonPressed)
{
getxy();disp_coord();
if(prevx==mousex&&prevy==mousey)
continue;
hidemouse();
putback();
showmouse();
getxy();
hidemouse();
bline(x,y,mousex,mousey);
showmouse();
delay(10);
}
x0=x;y0=y;x1=mousex;y1=mousey;
ClearStatus(); ShowStatus("Draw the Clipping
Window");
getxy();
while(!LeftButtonPressed)
{
getxy();
disp_coord();
}
hidemouse();
setcolor(15-BLACK);
setwritemode(XOR_PUT);
x=mousex;
y=mousey;
Chapter 4 Source Code
44 | P a g e
while(LeftButtonPressed)
{
setlinestyle(3,1,1);
disp_coord();
current_x=mousex;
current_y=mousey;
while(current_x==mousex && current_y==mousey)
getxy();
rectangle(x,y,current_x,current_y);
rectangle(x,y,mousex,mousey);
}
setlinestyle(0,1,1);
setwritemode(COPY_PUT);
setcolor(Current_Color);
ClearStatus();
showmouse();
x3=mousex, y3=mousey, x2=x, y2=y;
if(x2>x3)
current_x=x2,x2=x3,x3=current_x;
if(y2>y3)
current_y=y2,y2=y3,y3=current_y;
CohenSutherlandLine(x0,y0,x1,y1,x2,y2,x3,y3);
t=0;
draw_button_border(Current_Button);
undraw_button_border(Prev_Button);
Current_Button=Prev_Button;
}//if left button
}
void icons(int minx,int miny,int maxx,int maxy,int
status)
{
int up=WHITE,down=DARKGRAY; // ICON is used to draw
buttons creating a
int color=getcolor();// 3d effect with top and left
drawn in darkgray
if(status==0)// bottom and right drawn in white ,color
gets swapped
{ // when a button is pressed indicating as
though it has
up=DARKGRAY;// gone inside
down=WHITE;
}
setcolor(up);
line(minx,miny,maxx,miny);
line(minx,miny,minx,maxy);
setcolor(down);
line(minx,maxy,maxx,maxy);
line(maxx,maxy,maxx,miny);
setcolor(color);
}
Chapter 4 Source Code
45 | P a g e
void init_button(int no,int xmin,int ymin,int xwidth,int
ywidth,char* desc)
{
int ygap=4; //the vertical gap between two
buttons
buttons[no].xmin=xmin;
buttons[no].ymin=ymin;
buttons[no].xmax=xmin+xwidth;
buttons[no].ymax=ymin+ywidth-ygap;
buttons[no].desc=(char
*)malloc(strlen(desc)+1);//string for ShowStatus()
if(buttons[no].desc==NULL)
{
cleardevice();
printf("n No MEMORY ");
}
strcpy(buttons[no].desc,desc);
}
void draw_button_border(int no)//this creates the "not-
pressed-normal" effect
{
hidemouse(); //hiding mouse using dos
interrupt
icons(buttons[no].xmin,buttons[no].ymin,buttons[no].xmax,
buttons[no].ymax,1);
icons(buttons[no].xmin+1,buttons[no].ymin+1,buttons[no].x
max-1,buttons[no].ymax-1,1);
showmouse();
}
void undraw_button_border(int no)//this creates the
"pressed" effect
{
hidemouse();//actually to avoid graying effect along
the edges
icons(buttons[no].xmin,buttons[no].ymin,buttons[no].xmax,
buttons[no].ymax,0);
icons(buttons[no].xmin+1,buttons[no].ymin+1,buttons[no].x
max-1,buttons[no].ymax-1,0);
showmouse();
}
void init_color_button(int color,int xmin,int ymin,int
xwidth,int ywidth)
Chapter 4 Source Code
46 | P a g e
{ //this actually inits various fields of
struct color-button
int xgap=4; //the hori-gap between 2 color buttons
colorbuttons[color].xmin=xmin;
colorbuttons[color].xmax=xmin+xwidth-xgap;
colorbuttons[color].ymin=ymin;
colorbuttons[color].ymax=ymin+ywidth;
colorbuttons[color].color=color;
}
// draws color buttons that are in struct colorbuttons
void draw_color_button_border(int no)
{
int color=getcolor();
setcolor(BLACK);
rectangle(colorbuttons[no].xmin+1,colorbuttons[no].ymin+1
,colorbuttons[no].xmax-1,colorbuttons[no].ymax-1);
setfillstyle(SOLID_FILL,no);
floodfill(colorbuttons[no].xmin+3,colorbuttons[no].ymin+3
,BLACK);
setcolor(color);
}
void init() //this fn initializes the various fields of
the struct button
{ //this is done iteratively for all buttons of
the struct-array
int
x1=10+10,y1=MIN_Y+12,x2=54,y2=MAX_Y+47,ywidth=30,xwidth=3
0;
int butt=0,i,j;
setcolor(BROWN);
//icon panel
New_icon(x1,y1+1);
init_button(butt,x1,y1,xwidth,ywidth,"New File"); //of
struct button
draw_button_border(butt++);
Save_icon(x2,y1);
init_button(butt,x2,y1,xwidth,ywidth,"Save File");
draw_button_border(butt++);
y1+=ywidth;
Open_icon(x1,y1);
init_button(butt,x1,y1,xwidth,ywidth,"Load File");
draw_button_border(butt++);
Chapter 4 Source Code
47 | P a g e
Clear_icon(x2,y1);
init_button(butt,x2,y1,xwidth,ywidth,"Clear File");
draw_button_border(butt++);
y1+=ywidth;
Line_icon(x1,y1);
init_button(butt,x1,y1,xwidth,ywidth,"Line Drawing
Tool");
draw_button_border(butt++);
Rectangle_icon(x2,y1);
init_button(butt,x2,y1,xwidth,ywidth,"Rectangle
Drawing Tool");
draw_button_border(butt++);
y1+=ywidth;
Circle_icon(x1,y1);
init_button(butt,x1,y1,xwidth,ywidth,"Circle Drawing
Tool");
draw_button_border(butt++);
Ellipse_icon(x2,y1);
init_button(butt,x2,y1,xwidth,ywidth,"Ellipse Drawing
Tool");
draw_button_border(butt++);
y1+=ywidth;
Spiral_icon(x1,y1);
init_button(butt,x1,y1,xwidth,ywidth,"Spiral Drawing
Tool");
draw_button_border(butt++);
Clip_icon(x2,y1);
init_button(butt,x2,y1,xwidth,ywidth,"Line Clipper");
draw_button_border(butt++);
y1+=ywidth;
Rot_icon(x1,y1);
init_button(butt,x1,y1,xwidth,ywidth,"Rotating line
around circle tangentially");
draw_button_border(butt++);
Wheel_icon(x2,y1);
init_button(butt,x2,y1,xwidth,ywidth,"Rotating
Wheel");
draw_button_border(butt++);
y1+=ywidth;
Chapter 4 Source Code
48 | P a g e
Seg_icon(x1,y1);
init_button(butt,x1,y1,xwidth,ywidth,"Segmentation");
draw_button_border(butt++);
hr_icon(x2,y1);
init_button(butt,x2,y1,xwidth,ywidth,"DRAW HRMITE
CURVE ");
draw_button_border(butt++);
y1+=ywidth;
bz_icon(x1,y1);
init_button(butt,x1,y1,xwidth,ywidth,"DRAW BEZIER
CURVE");
draw_button_border(butt++);
t3d_icon(x2,y1);
init_button(butt,x2,y1,xwidth,ywidth,"3D ROTATION ");
draw_button_border(butt++);
y1+=ywidth;
Translate_icon(x1,y1);
init_button(butt,x1,y1,xwidth,ywidth,"TRANSLATE
RECTANGLE");
draw_button_border(butt++);
//y1+=ywidth;
fl_icon(x2,y1);
init_button(butt,x2,y1,xwidth,ywidth,"FILL A COLOR");
draw_button_border(butt++);
y1+=ywidth;
scale_icon(x1,y1);
init_button(butt,x1,y1,xwidth,ywidth,"SCALING
RECTANGLE");
draw_button_border(butt++);
Rotate_icon(x2,y1);
init_button(butt,x2,y1,xwidth,ywidth,"ROTATING A
RECTANGLE");
draw_button_border(butt++);
y1+=ywidth;
//now,the color buttons
butt=0;
x1=MIN_X+75;
y1=MAX_Y+28;
Chapter 4 Source Code
49 | P a g e
xwidth=30;ywidth=15;
for(i=0;i<8;i++) //iteratively init the col-but
structure
{ //init color button is very
similar to init_button
init_color_button(butt,x1,y1,xwidth,ywidth);
draw_color_button_border(butt++);
init_color_button(butt,x1,y2,xwidth,ywidth);
draw_color_button_border(butt++);
x1=x1+xwidth;
}
setcolor(Current_Color); }
void dispfile() //display and updates filename in case of
load/save,etc
{
setfillstyle(SOLID_FILL,LIGHTGRAY);
bar(260,MIN_Y-30,379,MIN_Y-6);
icons(260,MIN_Y-30,379,MIN_Y-6,1);
setfillstyle(SOLID_FILL,LIGHTGRAY);
bar(MAX_X-15+8,4,MAX_X+1+8,15-2);
icons(MAX_X-15+8,4,MAX_X+1+8,15-2,1);
icons(MAX_X-14+8,5,MAX_X+8,15-3,1);
setcolor(BLACK);
settextstyle(DEFAULT_FONT,HORIZ_DIR,0);
outtextxy(MAX_X-10+8,4,"x"); // exits on clicking
outtextxy((getmaxx()-
textwidth(filename))/2,48,filename);
}
/* BASIC OPERATIONS
*/
int check_mouse_on(int minx,int miny,int maxx,int
maxy)//is mouse is on area
{
//defined by boundary?
if(mousex<minx || mousex>maxx || mousey<miny ||
mousey>maxy)
return 0;
return 1;
}
int check_if_color()
{
int i=0;
for(i=0;i<MAX_COLOR;i++)
{
Chapter 4 Source Code
50 | P a g e
if(check_mouse_on(colorbuttons[i].xmin,colorbuttons[i].ym
in,colorbuttons[i].xmax,colorbuttons[i].ymax))
{
Current_Color=colorbuttons[i].color;
setfillstyle(SOLID_FILL,Current_Color);
bar(MIN_X+20,MAX_Y+35,MIN_X+44,MAX_Y+50);
setcolor(BLACK);
rectangle(MIN_X+20,MAX_Y+35,MIN_X+44,MAX_Y+50);
setcolor(Current_Color);
return 1;
}
}
return 0;
}
int check_if_button_pressed()
{
int ret_value=-1,color;
int i;
char ch;
for(i=0;i<MAX_BUTTONS;++i)
{
if(check_mouse_on(buttons[i].xmin,buttons[i].ymin,buttons
[i].xmax,buttons[i].ymax))
{
if(LeftButtonPressed && i!=Current_Button) //check
which button
{ // if not
current button
ret_value=i; //change current
button = i
draw_button_border(Current_Button);
Prev_Button=Current_Button;
Current_Button=i;
undraw_button_border(Current_Button);
switch(Current_Button)
{
case NEW :
hidemouse();
if(!saved)
{
ShowStatus("Save Changes (Y or N) ? ");
ch=getch();
if(ch=='y'||ch=='Y')
save();
}
strcpy(filename,"Untitled");
dispfile();
clear();
draw_button_border(Current_Button);
Chapter 4 Source Code
51 | P a g e
undraw_button_border(Prev_Button);
Current_Button=Prev_Button;
showmouse();
break;
case CLEAR :
hidemouse();
clear();
draw_button_border(Current_Button);
undraw_button_border(Prev_Button);
Current_Button=Prev_Button;
showmouse();
break;
case LOAD:
hidemouse();
load();
draw_button_border(Current_Button);
undraw_button_border(Prev_Button);
Current_Button=Prev_Button;
showmouse();
break;
case SAVE:
hidemouse();
save();
draw_button_border(Current_Button);
undraw_button_border(Prev_Button);
Current_Button=Prev_Button;
showmouse();
break;
case CLIP_OP:
clear();
break;
case TRANS_OP:
clear();
}
}
if(prevx!=mousex||prevy!=mousey)
ShowStatus(buttons[i].desc);
return ret_value;
}//check on which button
}//for all button
ClearStatus();
return ret_value;
}
void tools()
{
Chapter 4 Source Code
52 | P a g e
restrictmouse(MIN_X+2,MIN_Y+2,MAX_X-2,MAX_Y-2);
hidemouse();
switch(Current_Button)
{
case 4 :
case 5 :
case 6 :
case 7 :
case 13:
case 14:
case 8 : rubberband();
break;
case 9 : //freehand();
lineclipping();
break;
case 10: //lineclipping();
rotate_line();
break;
case 11: //drawtext();
Wheel();
break;
case 12: //rotate_line();
seg();
break;
case 15: //restrictmouse(MIN_X+2,MIN_Y+2,MAX_X-
10,MAX_Y-10);
//brush();
t3d();
break;
case 17: //clearout();
fillcolor();
break;
case 16:translate();
//clearin();
break;
case 18: //seg();
scale();
break;
case 19: rotate();
break;
/*
Chapter 4 Source Code
53 | P a g e
case 22:// t3d();
break;
case 23:
//fillcolor();
break;
*/
}
showmouse();
restrictmouse(0,0,639,479);
}
void rubberband()
{
int x,y,xe,ye,tx,ty,b,r1,r2;
R=1;
showmouse();
getxy();
x=mousex;y=mousey;
disp_coord();
if(LeftButtonPressed)
{
while(LeftButtonPressed)
{
getxy();disp_coord();
if(prevx==mousex&&prevy==mousey)
continue;
hidemouse();
putback();
showmouse();
getxy();
hidemouse();
switch(Current_Button)
{
case 4: bline(x,y,mousex,mousey);
break;
case 5: brectangle(x,y,mousex,mousey);
break;
case 6: bcircle(x,y,abs(x-mousex)<abs(y-
mousey)?abs(y-mousey):abs(x-mousex));
break;
case 7: r1=abs(x-mousex),r2=abs(y-mousey);
if(r1!=0&&r2!=0) //else floating point
error
bellipse(x,y,abs(x-mousex),abs(y-
mousey));
break;
Chapter 4 Source Code
54 | P a g e
case 8: spiral(x,y,abs(x-mousex)<abs(y-
mousey)?abs(y-mousey):abs(x-mousex),1,50);
break;
case 13:hrcurve(x,y,mousex,mousey);
break;
case 14:bzcurve(x,y,mousex,mousey);
break;
}
showmouse();
delay(10);
}//while left button
t=0;
}//if left button
}
void Wheel()
{
char ch;
int x,y,s;
float theta=0;
int i,j,f,b;
// flushall();
clear();
ShowStatus("Press ESC to terminate");
getxy();
hidemouse();
while(!LeftButtonPressed)
{
getxy();
for(i=153;i<=573;i+=8)
{
if(kbhit())
if(getch()==27)
{
clear();
showmouse();
return;
}
setcolor(BLACK);
myw(i,230,theta);
delay(130);
setcolor(WHITE);
myw(i,230,theta);
theta+=M_PI/10;
}
for(i=573;i>=153;i-=8)
{
if(kbhit())
Chapter 4 Source Code
55 | P a g e
if(getch()==27)
{
clear();
showmouse();
return;
}
setcolor(BLACK);
myw(i,230,theta);
delay(130);
setcolor(WHITE);
myw(i,230,theta);
theta-=M_PI/10;
}
}
clear();
showmouse();
}
void scale()
{
char *name;
float sx,sy;
setcolor(Current_Color);
rectangle(MIN_X,MIN_Y,MAX_X,MAX_Y);
ShowStatus("Draw rectangle to scale");
drawrectangle();
name=readline("Enter the scaling factor sx: ");
sx=atof(name);
name=readline("Enter the scaling factor sy: ");
sy=atof(name);
setcolor(WHITE);
setfillstyle(SOLID_FILL,WHITE);
bar(a,b,c,d);
c= (float)(c-a)*sx + (float)a;
d= (float)(d-b)*sy + (float)b;
if(c >=MAX_X) c=MAX_X-1;
if(d >=MAX_Y) d=MAX_Y-1;
setcolor(Current_Color);
if(Current_Pattern!=EMPTY_FILL)
setfillstyle(Current_Pattern,Current_Color);
bar(a,b,c,d);
rectangle(a,b,c,d);
}
void drawrectangle()
{
Chapter 4 Source Code
56 | P a g e
int color=15-Current_Color;
int x,y;
setcolor(color);
setwritemode(XOR_PUT);
x=mousex;
y=mousey;
while(LeftButtonPressed)
{
disp_coord();
rectangle(x,y,mousex,mousey);
getxy();
rectangle(x,y,mousex,mousey);
}
setwritemode(COPY_PUT);
setcolor(Current_Color);
a=x, b=y, c=mousex, d=mousey;
if(Current_Pattern==EMPTY_FILL)
rectangle(x,y,mousex,mousey);
else
{
setfillstyle(Current_Pattern,Current_Color);
bar(x,y,mousex,mousey);
}
}
void main()
{
int gd=DETECT,gm;
initgraph(&gd,&gm,"C:tcbgi");
if(!initmouse())
{
outtextxy(250,230,"Mouse not present");
getch();
exit(0);
}
wel();
cleardevice();
frame();// To create window
startmouse((MIN_X+MAX_X)/2,(MIN_Y+MAX_Y)/2);
showmouse();
init(); // To display all icons
undraw_button_border(Current_Button);
dispfile();
while(1)
{
tme();
Chapter 4 Source Code
57 | P a g e
getxy();
if(!check_mouse_on(MIN_X+2,MIN_Y+2,MAX_X-2,MAX_Y-
2))
{
setfillstyle(SOLID_FILL,LIGHTGRAY);
bar(487,462,522,472); //refresh display
bar(555,462,585,472);
}
else disp_coord();
if(LeftButtonPressed)
{
if(check_if_button_pressed()>=0) ;
else if(check_if_color())
ClearStatus();
else if(check_mouse_on(MIN_X+2,MIN_Y+2,MAX_X-
2,MAX_Y-2))
{
ClearStatus();
saved=0;
tools();
}
else check_if_exit();
}
else check_if_button_pressed();
}
}
// to display exiting page
void check_if_exit()//is mouse on exit area?
{ char ch;
struct dosdate_t d;
struct dostime_t t;
if((check_mouse_on(MAX_X-15+1+8,4,MAX_X-1+8,15-
3))&&LeftButtonPressed)
{
hidemouse();
icons(MAX_X-15+8,4,MAX_X-1+8,15-3,0);
icons(MAX_X-14+8,4,MAX_X+8,15-3,0);
ClearStatus();
ShowStatus("Save and exit(Y or N)?");
ch=getch();
if(ch=='y' || ch=='Y')
{
save();
}
clearviewport();
cleardevice();
settextstyle(8,0,4);
setcolor(5);
outtextxy(50,100,"n");
outtextxy(50,300,"n");
Chapter 4 Source Code
58 | P a g e
setcolor(RED);
outtextxy(100,25,"n");
outtextxy(100,375,"n");
rectangle(1,1,637,477);
rectangle(3,3,635,475);
setcolor(BLUE);
outtextxy(190,200,"THANK YOU!!!!!");
setcolor(9);
outtextxy(189,201,"THANK YOU!!!!!");
settextstyle(0,0,0);
setcolor(12);
_dos_getdate(&d);
printf(" %d-%d-%d ", d.day,d.month,d.year);
_dos_gettime(&t);
printf(" %2d:%02d:%02dn", t.hour, t.minute,t.second);
outtextxy(430,450,"NOW PRESS ANY KEY TO EXIT");
settextstyle(DEFAULT_FONT,HORIZ_DIR,0);
getch(); exit(0);
}
}
59 | P a g e
5. SAMPLE OUTPUT
60 | P a g e
CONCLUSION
We have attempted to design and implement a paint editor using
C/C++, which supports enormous flexibility in the design and the use of
graphics functions .The presence of many in-built classes and methods take
care of many of the functionalities and reduce the job of coding as well as
makes the implementation simpler.
The project was started with the designing phase in which we
figured the requirements needed, the layout design, then comes the detail
designing of each function after which, was the testing and debugging stage.
We have tried to implement the project making it as user-
friendly and error free as possible.
In future enhancement, the following features are addressed.
The most obvious enhancement that we see is, support for the standard image
formats such as BMP, JPEG, GIF etc. This would allow the editor to open image
documents stored in these standard formats. We would also like to support saving of
our documents in these formats so that the editor is compatible with all the standard
graphics editors.
Another feature we would like to incorporate is to provide a way for the user to store
and open documents in directories other than the current directory. We would like to
provide the user with a simple way to traverse the directory structure for file
operations.
61 | P a g e
References
Kamal Acharya. School management system project report. Authorea. August
01, 2024. DOI: https://doi.org/10.22541/au.172254873.34023165/v1
Kamal Acharya. A CASE STUDY OF CINEMA MANAGEMENT SYSTEM
PROJECT. Authorea. August 01, 2024. DOI:
https://doi.org/10.22541/au.172254873.30191075/v1
Kamal Acharya. A CASE STUDY ON ONLINE TICKET BOOKING SYSTEM
PROJECT. Authorea. August 01, 2024. DOI:
https://doi.org/10.22541/au.172254872.26972790/v1
Kamal Acharya. Web chatting application project report management
system. Authorea. August 01, 2024. DOI:
https://doi.org/10.22541/au.172254871.18588592/v1
Kamal Acharya. RETAIL STORE MANAGEMENT SYSTEM PROJECT
REPORT. Authorea. August 01, 2024. DOI:
https://doi.org/10.22541/au.172254871.14590154/v1
Kamal Acharya. SUPERMARKET MANAGEMENT SYSTEM PROJECT
REPORT. Authorea. August 01, 2024. DOI:
https://doi.org/10.22541/au.172252491.19145062/v1
Kamal Acharya. SOCIAL MEDIA MANAGEMENT SYSTEM PROJECT
REPORT. Authorea. August 01, 2024. DOI:
https://doi.org/10.22541/au.172252491.11210579/v1
Kamal Acharya. Online music portal management system project
report. Authorea. August 01, 2024. DOI:
https://doi.org/10.22541/au.172252488.89734698/v1
Kamal Acharya. COLLEGE BUS MANAGEMENT SYSTEM PROJECT
REPORT. Authorea. July 31, 2024. DOI:
https://doi.org/10.22541/au.172245277.70798942/v1
Kamal Acharya. AUTOMOBILE MANAGEMENT SYSTEM PROJECT
REPORT. Authorea. July 31, 2024. DOI:
https://doi.org/10.22541/au.172245276.67982593/v1
Kamal Acharya. Ludo management system project report. Authorea. July 31,
2024. DOI: https://doi.org/10.22541/au.172243999.98091616/v1
Kamal Acharya. Literature online quiz system project report. Authorea. July
31, 2024 DOI: https://doi.org/10.22541/au.172243825.53562953/v1
Kamal Acharya. Avoid waste management system project. Authorea. July 29,
2024. DOI: https://doi.org/10.22541/au.172228528.85022205/v1
Kamal Acharya. CHAT APPLICATION THROUGH CLIENT SERVER
MANAGEMENT SYSTEM PROJECT. Authorea. July 29, 2024. DOI:
https://doi.org/10.22541/au.172228527.74316529/v1
62 | P a g e
Acharya, Kamal, Online Job Portal Management System (May 5, 2024).
Available at
SSRN: https://ssrn.com/abstract=4817534 or http://dx.doi.org/10.2139/ssrn.4
817534
Acharya, Kamal, Employee leave management system. (May 7, 2024).
Available at
SSRN: https://ssrn.com/abstract=4819626 or http://dx.doi.org/10.2139/ssrn.4
819626
Acharya, Kamal, Online electricity billing project report. (May 7, 2024).
Available at
SSRN: https://ssrn.com/abstract=4819630 or http://dx.doi.org/10.2139/ssrn.4
819630
Acharya, Kamal, POLICY MANAGEMENT SYSTEM PROJECT REPORT.
(December 10, 2023). Available at
SSRN: https://ssrn.com/abstract=4831694 or http://dx.doi.org/10.2139/ssrn.4
831694
Acharya, Kamal, Online job placement system project report. (January 10,
2023). Available at
SSRN: https://ssrn.com/abstract=4831638 or http://dx.doi.org/10.2139/ssrn.4
831638
Acharya, Kamal, Software testing for project report. (May 16, 2023).
Available at
SSRN: https://ssrn.com/abstract=4831028 or http://dx.doi.org/10.2139/ssrn.4
831028
Acharya, Kamal, ONLINE CRIME REPORTING SYSTEM PROJECT. (August
10, 2022). Available at
SSRN: https://ssrn.com/abstract=4831015 or http://dx.doi.org/10.2139/ssrn.4
831015
Acharya, Kamal, Burger ordering system project report. (October 10, 2022).
Available at
SSRN: https://ssrn.com/abstract=4832704 or http://dx.doi.org/10.2139/ssrn.4
832704
Acharya, Kamal, Teachers Record Management System Project Report
(December 10, 2023). Available at
SSRN: https://ssrn.com/abstract=4833821 or http://dx.doi.org/10.2139/ssrn.4
833821
63 | P a g e
Acharya, Kamal, Dairy Management System Project Report (December 20,
2020). Available at
SSRN: https://ssrn.com/abstract=4835231 or http://dx.doi.org/10.2139/ssrn.4
835231
Acharya, Kamal, Electrical Shop Management System Project (December 10,
2019). Available at
SSRN: https://ssrn.com/abstract=4835238 or http://dx.doi.org/10.2139/ssrn.4
835238
Acharya, Kamal, Online book store management system project report.
(Febuary 10, 2020). Available at
SSRN: https://ssrn.com/abstract=4835277 or http://dx.doi.org/10.2139/ssrn.4
835277
Acharya, Kamal, Paint shop management system project report. (January 10,
2019). Available at
SSRN: https://ssrn.com/abstract=4835441 or http://dx.doi.org/10.2139/ssrn.4
835441
Acharya, Kamal, Supermarket billing system project report. (August 10,
2021). Available at
SSRN: https://ssrn.com/abstract=4835474 or http://dx.doi.org/10.2139/ssrn.4
835474
Acharya, Kamal, Online taxi booking system project report. (March 10, 2022).
Available at
SSRN: https://ssrn.com/abstract=4837729 or http://dx.doi.org/10.2139/ssrn.4
837729
Acharya, Kamal, Online car servicing system project report. (March 10,
2023). Available at
SSRN: https://ssrn.com/abstract=4837832 or http://dx.doi.org/10.2139/ssrn.4
837832
Acharya, Kamal, School management system project report. (July 10, 2021).
Available at
SSRN: https://ssrn.com/abstract=4837837 or http://dx.doi.org/10.2139/ssrn.4
837837
Acharya, Kamal, Furniture Showroom Management System Project Report
(March 21, 2021). Available at
SSRN: https://ssrn.com/abstract=4839422 or http://dx.doi.org/10.2139/ssrn.4
839422
Acharya, Kamal, Online Vehicle Rental System Project Report (March 21,
2019). Available at
SSRN: https://ssrn.com/abstract=4839429 or http://dx.doi.org/10.2139/ssrn.4
839429
64 | P a g e
Acharya, Kamal, Fruit Shop Management System Project Report (August 10,
2023). Available at
SSRN: https://ssrn.com/abstract=4841048 or http://dx.doi.org/10.2139/ssrn.4
841048
Acharya, Kamal, Hall Booking Management System Project Report
(December 21, 2023). Available at
SSRN: https://ssrn.com/abstract=4841055 or http://dx.doi.org/10.2139/ssrn.4
841055
Acharya, Kamal, Lundry Management System Project Report (October 21,
2023). Available at
SSRN: https://ssrn.com/abstract=4841059 or http://dx.doi.org/10.2139/ssrn.4
841059
Acharya, Kamal, A CASE STUDY OF CINEMA MANAGEMENT SYSTEM
PROJECT (September 25, 2023). Available at
SSRN: https://ssrn.com/abstract=4841209 or http://dx.doi.org/10.2139/ssrn.4
841209
Acharya, Kamal, A CASE STUDY ON ONLINE TICKET BOOKING SYSTEM
PROJECT (May 25, 2024). Available at
SSRN: https://ssrn.com/abstract=4841210 or http://dx.doi.org/10.2139/ssrn.4
841210
Acharya, Kamal, ONLINE DATING MANAGEMENT SYSTEM PROJECT
REPORT. (April 25, 2023). Available at
SSRN: https://ssrn.com/abstract=4842066 or http://dx.doi.org/10.2139/ssrn.4
842066
Acharya, Kamal, ONLINE RESUME BUILDER MANAGEMENT SYSTEM
PROJECT REPORT. (April 25, 2021). Available at
SSRN: https://ssrn.com/abstract=4842071 or http://dx.doi.org/10.2139/ssrn.4
842071
Acharya, Kamal, TOLL TEX MANAGEMENT SYSTEM PROJECT REPORT
(August 21, 2023). Available at
SSRN: https://ssrn.com/abstract=4842082 or http://dx.doi.org/10.2139/ssrn.4
842082
Acharya, Kamal, Chat Application Through Client Server Management
System Project Report (June 25, 2023). Available at
SSRN: https://ssrn.com/abstract=4842761 or http://dx.doi.org/10.2139/ssrn.4
842761
Acharya, Kamal, Web Chatting Application Management System Project
Report (April 25, 2022). Available at
SSRN: https://ssrn.com/abstract=4842771 or http://dx.doi.org/10.2139/ssrn.4
842771
65 | P a g e
Acharya, Kamal, Automobile management system project report (May 25,
2022). Available at
SSRN: https://ssrn.com/abstract=4846917 or http://dx.doi.org/10.2139/ssrn.4
846917
Acharya, Kamal, College bus management system project report (April 25,
2023). Available at
SSRN: https://ssrn.com/abstract=4846920 or http://dx.doi.org/10.2139/ssrn.4
846920
Acharya, Kamal, Courier management system project report (May 25, 2023).
Available at
SSRN: https://ssrn.com/abstract=4846922 or http://dx.doi.org/10.2139/ssrn.4
846922
Acharya, Kamal, Event management system project report (April 25, 2021).
Available at
SSRN: https://ssrn.com/abstract=4846927 or http://dx.doi.org/10.2139/ssrn.4
846927
Acharya, Kamal, Library management system project report II (May 25,
2020). Available at
SSRN: https://ssrn.com/abstract=4848857 or http://dx.doi.org/10.2139/ssrn.4
848857

Computer graphics system project report..pdf

  • 1.
    1 | Pa g e AN INTERNSHIP REPORT ON COMPUTER GRAPHICS SYSTEM PROJECT REPORT BY KAMAL ACHARYA (Tribhuvan University) Date: 2021/11/10
  • 2.
    2 | Pa g e 1. INTRODUCTION 1.1 Overview Computer graphics is one of the most exciting and rapidly growing computer fields. It is also an extremely effective medium for communication between man and computer; a human being can understand the information content of a displayed diagram or perspective view much faster than he can understand a table of numbers or text containing the same information. Thus, computer graphics is being used more extensively. There is a lot of development in hardware and software required to generate images, and nowadays the cost of such hardware and software is dropping rapidly. Due to this the interactive computer graphics is becoming available to more and more people. Computer graphics started with the display of data on hardcopy plotters and cathode ray tube (CRT) screens soon after the introduction of computers themselves. It has grown to include the creation, storage, and manipulation of models and images of objects. These models come from a diverse and expanding set of fields, and include physical, mathematical, engineering, architectural, and even conceptual structures, natural phenomena, and so on. Computer graphics today is largely interactive. The user controls the contents, structure, and appearance of objects and their displayed images by using input devices, such as a keyboard, mouse, or touch sensitive panel on the screen. The handling of such devices is included in the study of computer graphics, because of the close relationship between the input devices and the display.
  • 3.
    Chapter 1 Introduction 3| P a g e 1.2 About C: ‘C’ seems a strange name for a programming language. But this strange sounding language is one of the most popular computer languages today. C is an offspring of ‘Basic Combined Programming Language’ (BPCL) called B, developed in 1960’s at Cambridge University. B language was modified by Dennis Ritchie and was implemented in Bell laboratories in 1972. This new language was named C. ‘C++’ has its origin in C language. It was developed by Bjarne Stroustrup at AT&T Bell labs in the early 1980’s to overcome the shortcomings of C. Initially named ‘C with classes’, the language is actually improved version of C language with some additional features made possible by using classes and an object-oriented approach. 1.3 Important Features of C/C++ The following are the most important features of C/C++ 1.3.1. Simple 1.3.2. Object oriented (C++) 1.3.3 Robust 1.3.4 Rich set of built in programs and operations 1.3.5 Programs written are efficient and fast. 1.3.6 Highly portable. 1.3.7 Ability to extend itself. 1.4 Graphics Support in C/C++: One of the most important features of C/C++ is its ability to draw graphics. We can write C/C++ graphics programs to draw figures of different shapes, images and text in different forms and styles. It has a rich set of built in functions and operations in the basic graphical interface
  • 4.
    Chapter 1 Introduction 4| P a g e (BGI). All interfaces to the SRGP and SPHIGS graphics package are defined in C/C++. The objective of this project is to design and implement a paint editor similar to the MS-PAINT application. We use our computer graphics skills to create this application by operating on C in ‘graphics’ mode. C/C++ co-ordinate system has a origin (0,0) in the upper-left corner. Positive x values are to the right, and positive y values are to the bottom. The values of the coordinates x and y are in pixels. 1.5 Co-ordinate System ----------->x-axis | | | V y-axis
  • 5.
    5 | Pa g e 2. REQUIREMENT SPECIFICATIONS Purpose: The purpose of this document is to describe all external requirements for designing a graphics package called Paint. Scope: This document describes the functional requirements for the graphics package to run efficiently and provide optimum results. It is meant for use by the developers and will also be used for further maintaining and upgrading the various components of the requirements in future. Then, it will be reflected as an addition to this document. 2.1 User characteristics: 2.1.1. User should be proficient in C/C++ and Windows environment. 2.1.2. User should know to compile and run files in C/C++. 2.2 Software Requirements: 2.2.1. Platform: DOS/Windows family 2.2.2. Software Tools: C++ Compiler 2.3 Hardware Requirements: 2.3.1. Pentium processor-III/IV 2.3.2. Max:4 GB Disk Drive. 2.3.3. Input devices-Mouse and Keyboard. 2.3.4. IBM compatible PC. 2.3.5. RGB 256 colours-Video minimum 16 colours and 640x480 resolutions. 2.3.6. 32 MB RAM.
  • 6.
    Chapter 2 RequirementSpecification 6 | P a g e 2. 4 Features of the project: The graphics package supports interaction with mouse through menus for the users to implement various options such as 2.4.1. Drawing a line 2.4.2. Drawing a circle 2.4.3. Drawing an ellipse 2.4.4. Drawing a rectangle 2.4.5. Drawing a spiral 2.4.6. Rotating wheel 2.4.7. Moving line around circle 2.4.8. Translation of rectangle 2.4.9. Rotation of rectangle 2.4.10. Scaling of rectangle 2.4.11. 3D transformations on rectangle 2.4.12. Segmentation 2.4.13. Clipping outside region of a selected area 2.4.14. Creating a new file 2.4.15. Saving the current file 2.4.16. Loading an old file 2.4.17. Filling entire area with selected colour 2.4.18. Displays the current mouse position
  • 7.
    7 | Pa g e 3. SYSTEM DESIGN The objective of this particular design is to implement the graphics project called Paint in an efficient way. It is designed using many built-in functions and also user-defined functions. This increases the speed and efficiency. 3.1 Design Methodology 3.1.1 Mouse Interfacing We use the following functions to interface the mouse with the user screen. void showmouse( ) This is a function which displays mouse position on the screen. It is called using service 01h and has no return value. It uses interrupt 33h. void hidemouse( ) This is a function which hides the mouse pointer on the screen. It is called using service 02h and has no return value. It uses interrupt 33h. Int getmousepos( ) This is a function which gets the current mouse pointer on the screen. It is called using service 03h. This returns mouse button status to BX and x- coordinate to CX and y-coordinate to DX . It uses interrupt 33h.
  • 8.
    Chapter 3 SystemDesign 8 | P a g e int restrictmouse( ) This is a function which sets the horizontal and vertical limits for pointer. Horizontal limit is set using service 07h. Register CX contains minimum x-coordinate and DX contains maximum x-coordinate. Vertical limit is set using service 08h. Register CX contains minimum y-coordinate and DX contains maximum y-coordinate. 3.12 Other Features Line: We can draw a line in any of the coordinates using Bresenham’s line algorithm. Based on the input values given by the user, slopes are calculated and corresponding pixels are called using putpixel( ) built-in function. We also ensure that the line lies within the user area. Rectangle: We can draw a rectangle using service 03h, which returns current x and y coordinates. Then, we call line function 4 times to draw a rectangle and ensure that it is within user area as long as left button is pressed. Circle: We can draw a circle using Bresenham’s circle algorithm. The initial left click position of the mouse is taken as the centre of the circle. The radius is given by service 03h which returns x and y coordinates when the left button is released. We ensure that it is within the user area. Ellipse: We can draw an ellipse using modified Bresenham’s algorithm. An ellipse of any major and minor axis may be drawn. We ensure that it is within the user area. Spiral: We can draw a spiral using service 02h. It makes use of contents of CX and DX registers to know the centre and maximum radius. We ensure that it is within the user area. Clip-out: We can clip objects outside a selected area. We use Cohen Sutherland method of clipping.
  • 9.
    Chapter 3 SystemDesign 9 | P a g e Wheel: When this icon is clicked, a rotating wheel is displayed within the user screen, until right button of mouse is clicked. Rotating tangent: When this icon is clicked, a tangent moves around a circle until keyboard is hit. Translate: We can translate a given circle within the user screen. The circle is translated to the position where the mouse is clicked. New file: We can create a new file by filling the entire user area with white colour and naming it as untitled.bmp. Save file: We can save a created image by using file operations. Load file: We can load a saved file by using file operations. If the file is not present, error is displayed. Segmentation: When this icon is clicked, the segmentation program output is displayed. Clear: This option clears the screen and fills the user area with white colour. Colours: We can select a colour and perform any of the operations using that colour. Fill colour: This option fills the entire user screen within the selected colour. Locator position: It displays the coordinate position of the mouse Pointer. Most graphics editors use the following screed design.
  • 10.
    Chapter 3 SystemDesign 10 | P a g e The construction techniques are one of the most important ingredients of a graphics editor. A superior approach to the construction technique is the rubber-band technique, which is used in this editor. The state diagram for rubber-band line drawing is show below.
  • 11.
    Chapter 4 SourceCode 11 | P a g e Source Code /* GLOBAL DECLARATION */ #include<stdio.h> #include<dos.h> #include<graphics.h> #include<conio.h> #include<stdlib.h> #include<math.h> #include<time.h> #define MIN_X 100 #define MAX_X 627 #define MIN_Y 70 #define MAX_Y 390 #define MAX_BUTTONS 25 #define MAX_COLOR 16 //total no of color buttons #define NEW 0 #define SAVE 1 #define LOAD 2 #define CLEAR 3 #define CLIP_OP 10 #define TRANS_OP 19 #define MAX_PIXEL 5000 #define ORG -50 #define PI 3.1415927 #define M 5 void wel(); int initmouse(); void startmouse(int x,int y); void showmouse(); void hidemouse(); void getxy(); void disp_coord(); void restrictmouse(int,int,int,int); void tme(); void ClearStatus(); void ShowStatus(char*); void beep(); char* readline(char*); void animate(); //void loading(); void save(); void load(); void clear(); void exchange(int*,int*);
  • 12.
    Chapter 4 SourceCode 12 | P a g e //void erase(); void drawtext(); void putback(); void set(int x,int y); void putcircle(int,int,int,int); void bcircle( int,int,int); void setpixel(int,int,int); void bline(int,int,int,int); void brectangle(int,int,int,int); void spiral(int,int,int,int,int); void plotpnts(int,int,int,int,int,int); void bellipse(int,int,int,int); void myw(int,int,float); void Wheel(); void myl(int,int,float); void rotate_line(); void rubberband(); void scale(); void rotate(); void translate(); void CohenSutherlandLine(int,int,int,int,int,int,int,int); void lineclipping(); void clearin(); void clearout(); void seg(); void New_icon(int x1, int y1); void Save_icon(int x1, int y1); void Open_icon(int x1, int y1); void Line_icon(int x1, int y1); void Rectangle_icon(int x1, int y1); void Circle_icon(int x1, int y1); void Ellipse_icon(int x2,int y1); void Spiral_icon(int x1,int y1); void Rot_icon(int x1,int y1); void Rotate_icon(int x, int y); void Translate_icon(int x1, int y1); void scale_icon(int x1,int y1); void Clip_icon(int x1,int y1); void Wheel_icon(int x2,int y1); void Seg_icon(int x1,int y1); void icons(int,int,int,int,int); void init_button(int,int,int,int,int,char*); void draw_button_border(int); void undraw_button_border(int); void init_color_button(int,int,int,int,int); void draw_color_button_border(int); void init();
  • 13.
    Chapter 4 SourceCode 13 | P a g e void dispfile(); void frame(); int check_mouse_on(int,int,int,int); void check_if_exit(); int check_if_color(); int check_if_button_pressed(); void tools(); void drawrectangle(); int a,b,c,d; int Current_Color=BLACK; int Current_Pattern=EMPTY_FILL; struct //the button-structure consists of { int xmin,ymin,xmax,ymax; //1.boundaries-field int button_no; //2.the button-no. for access char* desc; //3.a string for description to the user }buttons[MAX_BUTTONS]; struct //another structure-this time for color- buttons { //consists of: int xmin,ymin,xmax,ymax; //1.boundaries-fields int color; //2.color-i.e. color no. }colorbuttons[MAX_COLOR]; struct { int x,y; int c; }r[MAX_PIXEL]; struct Node { int x,y; struct Node* next; }; int R; //restore mode int t; //number of pixel to restore char filename[20]="Untitled"; int saved; int LeftButtonPressed; //is leftbutton-pressed int RightButtonPressed;// is Right button pressed int mousex,mousey; //current mouse pos int prevx,prevy; //prev mouse pos //int Current_Color=BLACK; // to Store the current color int Current_Button=9;// to store the current button pressed
  • 14.
    Chapter 4 SourceCode 14 | P a g e int Prev_Button=1;// to store the previous button union REGS regs; void wel() { } /* INITIALISE THE SCREEN */ void frame() { char name[20]; setcolor(WHITE); rectangle(3,3,637,477); setfillstyle(1,10); floodfill(6,6,WHITE); icons(10,70,93,455,0); // icon button panel icons(MIN_X+1,MIN_Y+1,MAX_X-1,MAX_Y-1,0); icons(MIN_X-1,MIN_Y-1,MAX_X+1,MAX_Y+1,1); setfillstyle(SOLID_FILL, WHITE); bar(MIN_X+2,MIN_Y+2,MAX_X-2,MAX_Y-2); //drawing screen icons(10,460,629-200,477-3,0); //help message panel(status display) icons(20,MAX_Y+50,83,MAX_Y+60,0); icons(629-200+32,460,MAX_X-34,477-3,0); //for x y display_panel setcolor(BLACK); outtextxy(467,464,"x :"); outtextxy(533,464,"y :"); icons(MIN_X+70,MAX_Y+25,MIN_X+75+2+240,MAX_Y+65,1); // For color panel setcolor(DARKGRAY); icons(MIN_X+15,MAX_Y+30,MIN_X+49,MAX_Y+55,1); //for current_Color_indicator icons(MIN_X+16,MAX_Y+31,MIN_X+48,MAX_Y+55,1); setfillstyle(SOLID_FILL,Current_Color); bar(MIN_X+15+5,MAX_Y+35,MIN_X+49-5,MAX_Y+50); setcolor(WHITE); line(3,35,637,35); setfillstyle(SOLID_FILL,BLUE);floodfill(630,30,WHITE); setcolor(4); settextstyle(7,HORIZ_DIR,2); outtextxy((getmaxx()-textwidth(" 2DPACKAGE "))/2,7," 2DPACKAGE"); settextstyle(SMALL_FONT,HORIZ_DIR,4); setcolor(4); outtextxy(438,417,"Designed by : "); settextstyle(SMALL_FONT,HORIZ_DIR,4); settextstyle(4,0,1);
  • 15.
    Chapter 4 SourceCode 15 | P a g e outtextxy(430,432,"chinmaya n amar"); settextstyle(SMALL_FONT,HORIZ_DIR,5); icons(MAX_X-208,MAX_Y+25,MAX_X-2,MAX_Y+65,1); icons(MIN_X,MAX_Y+6,MAX_X,MAX_Y+18,0); } void New_icon(int x1, int y1)// used to show new file icon { y1+=1; setlinestyle(0,1,1); setcolor(BLACK); line(9+x1,4+y1,9+x1,20+y1); line(9+x1,20+y1,21+x1,20+y1); line(21+x1,20+y1,21+x1,8+y1); line(9+x1,4+y1,17+x1,4+y1); line(17+x1,4+y1,17+x1,8+y1); line(17+x1,8+y1,21+x1,8+y1); line(21+x1,8+y1,17+x1,4+y1); setfillstyle(1,WHITE); floodfill(10+x1,9+y1,BLACK); } void Save_icon(int x1, int y1) // for saving { y1+=1; setlinestyle(0,1,1); setcolor(BLACK); line(6+x1,4+y1,24+x1,4+y1); line(24+x1,4+y1,24+x1,20+y1); line(24+x1,20+y1,8+x1,20+y1); line(8+x1,20+y1,6+x1,18+y1); line(6+x1,18+y1,6+x1,4+y1); line(9+x1,4+y1,9+x1,12+y1); line(9+x1,12+y1,21+x1,12+y1); line(21+x1,12+y1,21+x1,4+y1); line(10+x1,20+y1,10+x1,15+y1); line(10+x1,15+y1,20+x1,15+y1); line(20+x1,15+y1,20+x1,20+y1); line(17+x1,15+y1,17+x1,20+y1); line(21+x1,7+y1,24+x1,7+y1); setfillstyle(1,WHITE); floodfill(10+x1,5+y1,BLACK); setfillstyle(1,BROWN); floodfill(7+x1,5+y1,BLACK); setfillstyle(1,DARKGRAY); floodfill(11+x1,19+y1,BLACK); }
  • 16.
    Chapter 4 SourceCode 16 | P a g e void Open_icon(int x1, int y1)// for opening { y1+=1; setlinestyle(0,1,1); setcolor(BLACK); line(5+x1,20+y1,17+x1,20+y1); line(17+x1,20+y1,24+x1,15+y1); line(24+x1,15+y1,12+x1,15+y1); line(12+x1,15+y1,5+x1,20+y1); setfillstyle(1,DARKGRAY); floodfill(10+x1,18+y1,BLACK); line(5+x1,20+y1,5+x1,10+y1); line(5+x1,10+y1,6+x1,8+y1); line(6+x1,8+y1,8+x1,8+y1); line(8+x1,8+y1,9+x1,10+y1); line(9+x1,10+y1,17+x1,10+y1); line(17+x1,10+y1,17+x1,15+y1); setfillstyle(1,YELLOW); floodfill(6+x1,12+y1,BLACK); line(15+x1,7+y1,17+x1,5+y1); line(17+x1,5+y1,22+x1,7+y1); line(22+x1,7+y1,24+x1,12+y1); line(24+x1,12+y1,20+x1,10+y1); line(24+x1,12+y1,26+x1,9+y1); } void Clear_icon(int x,int y)//clearing the working area { setfillstyle(SOLID_FILL,WHITE); bar3d(x+5,y+5,x+25,y+20,0,0); } void Line_icon(int x1, int y1)// used to show line icon { line(x1+8,y1+5,x1+22,y1+19); line(x1+7,y1+4,x1+21,y1+18); } void Circle_icon(int x1, int y1)// used to show circle icon { circle(x1+15,y1+13,8); } void Ellipse_icon(int x2,int y1)//used to show ellipse tool { ellipse(x2+15,y1+13,0,360,10,7); }
  • 17.
    Chapter 4 SourceCode 17 | P a g e void Spiral_icon(int x1,int y1) //used to show spiral icon { setcolor(BLACK); spiral(x1+15,y1+14,10,0,37); } void Rot_icon(int x1,int y1)//used to show rotate icon { setfillstyle(SOLID_FILL,YELLOW); circle(x1+15,y1+13,7); line(x1+23,y1+5,x1+23,y1+21); } void Clip_icon(int x1,int y1)//used to display line clipping { setlinestyle(3,0,2); rectangle(x1+6,y1+6,x1+24,y1+19); setlinestyle(0,0,0); line(x1+20,y1+3,x1+10,y1+23); } void Wheel_icon(int x2,int y1) //used to show moving wheel { circle(x2+15,y1+13,8); circle(x2+15,y1+13,10); line(x2+7,y1+13,x2+23,y1+13); line(x2+15,y1+5,x2+15,y1+21); line(x2+9,y1+7,x2+21,y1+19); line(x2+21,y1+7,x2+9,y1+19); } void Seg_icon(int x,int y) { setcolor(4); settextstyle(DEFAULT_FONT,HORIZ_DIR,0); outtextxy(x+4,y+9,"SEG"); } void hr_icon(int x,int y) { setcolor(4); settextstyle(1,0,1); outtextxy(x+8,y+10,"HR"); } void bz_icon(int x,int y) { setcolor(RED);
  • 18.
    Chapter 4 SourceCode 18 | P a g e settextstyle(1,0,1); outtextxy(x+8,y+10,"BZ"); } void t3d_icon(int x,int y) { setcolor(RED); settextstyle(1,0,1); outtextxy(x+8,y+10,"3D"); } void fl_icon(int x,int y) { setcolor(RED); settextstyle(1,0,1); outtextxy(x+4,y+10,"FIL"); } void Rotate_icon(int x, int y) { setcolor(0); rectangle(x+6,y+4,x+23,y+18); setcolor(RED); line(x+11,y+4,x+6,y+18); line(x+11,y+4,x+27,y+9); line(x+27,y+9,x+22,y+22); line(x+22,y+22,x+6,y+18); } void Rectangle_icon(int x1, int y1)// used to show rectangle icon { rectangle(x1+6,y1+6,x1+23,y1+20); } void Translate_icon(int x1, int y1)// used to display translation { setcolor(0); rectangle(x1+4,y1+4,x1+21,y1+18); setcolor(RED); rectangle(x1+7,y1+7,x1+24,y1+21); } void scale_icon(int x1, int y1)// used to display scaling picture { setcolor(0); rectangle(x1+4,y1+4,x1+21,y1+18); rectangle(x1+7,y1+7,x1+17,y1+12);
  • 19.
    Chapter 4 SourceCode 19 | P a g e setfillstyle(1,RED); floodfill(x1+8,y1+8,BLACK); } /* MOUSE FUNCTIONS */ int initmouse() { regs.x.ax=0; int86(0x33,&regs,&regs); return(regs.x.bx); } void startmouse(int x,int y) //start mouse in pos(x,y) using { //fn. 04h of int 33h regs.x.ax=4; regs.x.cx=x; regs.x.dx=y; int86(0x33,&regs,&regs); } void showmouse() { regs.x.ax=1; int86(0x33,&regs,&regs); } void getxy() { regs.x.ax=3; //get mouse status using 03h of int 33h int86(0x33,&regs,&regs); prevx=mousex; prevy=mousey; if(regs.x.bx&1) //LSB of reg BX LeftButtonPressed=1; else LeftButtonPressed=0; mousex=regs.x.cx; //(cx,dx)=(x,y) mousey=regs.x.dx; if(regs.x.bx&2) RightButtonPressed=1; else RightButtonPressed=0; } void hidemouse()
  • 20.
    Chapter 4 SourceCode 20 | P a g e { regs.x.ax=2; int86(0x33,&regs,&regs); } void disp_coord() //this fn display current mouse co- ordinates only when { //the mouse is on the canvas char x[5],y[5]; int color; if(prevx!=mousex||prevy!=mousey) //otherwise don't update if((mousex>MIN_X+1)&&(mousex<MAX_X- 1)&&(mousey>MIN_Y+1)&&(mousey<MAX_Y-1)) { settextstyle(DEFAULT_FONT,HORIZ_DIR,0);//restore normal font style/size sprintf(x," %d ",mousex-MIN_X-2); //copy positions into respective sprintf(y," %d ",mousey-MIN_Y-2); //strings color=getcolor(); setfillstyle(SOLID_FILL,LIGHTGRAY); bar(487,462,522,472); //refresh display bar(555,462,585,472); setcolor(BLACK); outtextxy(487,464,x); //display current positions outtextxy(555,464,y); setcolor(color); } } void restrictmouse(int minx,int miny,int maxx,int maxy) { regs.x.cx=minx; regs.x.dx=maxx; regs.x.ax=0x7; //restrict along x-axis using fn 07h int86(0x33,&regs,&regs); regs.x.cx=miny; regs.x.dx=maxy; regs.x.ax=0x8; //restrict along y-axis using fn 08h int86(0x33,&regs,&regs); } //Time function void tme() { char k[3],l[3],m[4]=" : "; static int hour,minute;
  • 21.
    Chapter 4 SourceCode 21 | P a g e regs.h.ah=0x2c; int86(0x21,&regs,&regs); if(hour!=regs.h.ch||minute!=regs.h.cl) { setfillstyle(SOLID_FILL,LIGHTGRAY); bar(22,MAX_Y+52,81,MAX_Y+58); //refresh display settextstyle(DEFAULT_FONT,HORIZ_DIR,0);//restore normal font style/size //setusercharsize(0,0,0,0); setcolor(BLACK); sprintf(k,"%d",regs.h.ch); outtextxy(25,442,k); outtextxy(40,442,m); sprintf(l,"%d",regs.h.cl); outtextxy(62,442,l); } hour=regs.h.ch,minute=regs.h.cl; } /* FILE OPERATIONS */ extern void dispfile(); void ClearStatus() { static int first_time; static char text[52]; int i; setcolor(LIGHTGRAY); if(!first_time) { strcpy(text,""); for(i=0;i<51;++i) strcat(text,"Û"); text[51]='0'; first_time=1; } outtextxy(12,464,text); } void ShowStatus(char* str) { int color=getcolor(); ClearStatus(); setcolor(BLACK); outtextxy(32,464,str); setcolor(color); }
  • 22.
    Chapter 4 SourceCode 22 | P a g e void beep() { sound(1000); delay(75); nosound(); } char* readline(char* msg) { char* Line; char temp[40]; char Disp_Line[60]; char ch; int i=0,length=0; int max=((475-12)-strlen(msg)*8)/8;// find maximum number of characters ClearStatus(); setcolor(BLACK); outtextxy(12,464,msg); strcpy(Disp_Line,msg); ch=getch(); while((ch!=27)&&(ch!=13)) { switch (ch) { case 'b' : if(i==0) beep(); else { i--; ClearStatus(); length=strlen(Disp_Line); Disp_Line[length-1]='0'; setcolor(BLACK); outtextxy(12,464,Disp_Line); } break; default : if(i > max) beep(); else { length=strlen(Disp_Line); Disp_Line[length]=ch; //copy next char into Disp_Line Disp_Line[length+1]='0'; outtextxy(12,464,Disp_Line); temp[i++]=ch; } break;
  • 23.
    Chapter 4 SourceCode 23 | P a g e } ch=getch(); } temp[i]='0'; ClearStatus(); if(ch==27) return NULL; else { Line=malloc(strlen(temp)+1); strcpy(Line,temp); } return Line; } void animate() { int i,j=2; setfillstyle(SOLID_FILL,BLUE); for(i=1;i<66;i++) { bar(MIN_X+j,MAX_Y+15,MIN_X+j+6,MAX_Y+9); j+=8; delay(10); } setfillstyle(SOLID_FILL,LIGHTGRAY); bar(MIN_X+2,MAX_Y+16,626,MAX_Y+8); } void save() { char* name; FILE* out; char ch; int row,col; char byte; if(strcmp(filename,"Untitled")==0) { name=readline("Save File As : "); if(name==NULL) return; } else { name=malloc(strlen(filename)+1); strcpy(name,filename); } out=fopen(name,"w"); if(out==NULL) { ShowStatus(" Error Opening File !"); delay(1000); ClearStatus();
  • 24.
    Chapter 4 SourceCode 24 | P a g e return; } ShowStatus(" Saving File (Please Wait) "); animate(); for(row=MIN_Y+2;row<=MAX_Y-2;++row) { for(col=MIN_X+2;col<=MAX_X-2;) { byte=getpixel(col,row); byte=byte<<4; col++; byte+=getpixel(col,row); col++; if(fputc(byte,out)==EOF) { ShowStatus("Error Writing FIle ! "); delay(1000); ClearStatus(); free(name); fclose(out); } } } ClearStatus(); strcpy(filename,name); dispfile(); free(name); fclose(out); saved=1; } void load() { FILE* in; char* name; char ch; char byte; int row,col; int temp; if(!saved) { ShowStatus(" Save Current File ? "); ch=getch(); if(ch=='y'||ch=='Y') save(); } name=readline(" Enter File To Open : "); if(name==NULL) return; in=fopen(name,"r"); if(in==NULL)
  • 25.
    Chapter 4 SourceCode 25 | P a g e { ShowStatus(" Error Opening File "); delay(1000); ClearStatus(); return; } byte=fgetc(in);// gets a char from a stream ClearStatus(); ShowStatus("Loading...."); animate(); ClearStatus(); strcpy(filename,name); dispfile(); for(row=MIN_Y+2;row<=MAX_Y-2;row++) { for(col=MIN_X+2;col<=MAX_X-2;) { temp=(byte&0xf0)>>4; putpixel(col,row,temp); col++; temp=(byte&0x0f); putpixel(col,row,temp); col++; byte=fgetc(in); } } free(name); fclose(in); saved=1; } /* ALGORITHMS */ void clear() { setfillstyle(SOLID_FILL,WHITE); bar(MIN_X+2,MIN_Y+2,MAX_X-2,MAX_Y-2); } void exchange(int *v1,int *v2) // to swap variables in line algo { int temp; temp=*v1; *v1=*v2; *v2=temp; }
  • 26.
    Chapter 4 SourceCode 26 | P a g e void putback() { int i; for(i=0;i<t;i++) { if(getpixel(r[i].x,r[i].y)!=r[i].c) putpixel(r[i].x,r[i].y,r[i].c); } t=0; } void set(int x,int y) { if(x>MIN_X+1&&x<MAX_X-1&&y>MIN_Y+1&&y<MAX_Y-1) { if(getpixel(x,y)!=Current_Color) { if(R) { r[t].c=getpixel(x,y); r[t].x=x; r[t++].y=y; } putpixel(x,y,Current_Color); } } } void putcircle(int x,int y,int xc,int yc) { set(x+xc,y+yc); set(-x+xc,y+yc); set(y+xc,-x+yc); set(-y+xc,x+yc); set(x+xc,-y+yc); set(-x+xc,-y+yc); set(y+xc,x+yc); set(-y+xc,-x+yc); } void bcircle( int xc,int yc,int rad) { int x=0,y=rad,p=3-2*rad; if(rad<3) return; hidemouse(); while(x<=y) { putcircle(x,y,xc,yc); if(p<0)
  • 27.
    Chapter 4 SourceCode 27 | P a g e p+=4*x+6; else { p+=4*(x-y)+10; y--; } x++; if(x==y) putcircle(x,y,xc,yc); } showmouse(); } void setpixel(int x,int y,int slope) { if(slope) exchange(&x,&y); set(x,y); } void bline(int xs,int ys,int xe,int ye) { int dx,dy,c1,c2,slope,stype=1; signed long int p; dx=abs(xe-xs); dy=abs(ye-ys); slope=dy>dx; if(slope) { exchange(&dx,&dy); exchange(&xs,&ys); exchange(&xe,&ye); } c1=2*dy; c2=2*(dy-dx); p=2*dy-dx; if(xe<xs) { exchange(&xs,&xe); exchange(&ys,&ye); } if(ye<ys) stype=-1; setpixel(xs,ys,slope); while(xs<xe) { ++xs; if(p<0) p+=c1; else { p+=c2; ys+=stype;
  • 28.
    Chapter 4 SourceCode 28 | P a g e } setpixel(xs,ys,slope); } } void brectangle(int x1,int y1,int x2,int y2) { hidemouse(); if(x1==x2&&y1==y2) { showmouse(); return; } bline(x1,y1,x2,y1); bline(x2,y1,x2,y2); bline(x2,y2,x1,y2); bline(x1,y1,x1,y2); showmouse(); } void spiral(int xc,int yc,int r,int cip,int inc) { int x1,y1,x2,y2; float theta,dtheta,rad; if(r<=5) return; x1=xc; y1=yc; theta=rad=0.0; dtheta=M_PI/(60); while(rad<=r) { x2=xc+rad*cos(theta); y2=yc+rad*sin(theta); if(cip) bline(x1,y1,x2,y2); else line(x1,y1,x2,y2); //for icon x1=x2; y1=y2; rad+=(0.1/inc)*r; theta+=dtheta; } return; } void plotpnts(int xc,int yc,int x,int y,int r1,int r2) { float r=1.0,ro=1.0; if(r1>r2) r=(float)(r2*1.0/r1);
  • 29.
    Chapter 4 SourceCode 29 | P a g e else ro=(float)(r1*1.0/r2); set(xc+x*ro,(int)(yc+y*r)); set(xc-y*ro,(int)(yc+x*r)); set(xc-x*ro,(int)(yc+y*r)); set(xc+y*ro,(int)(yc+x*r)); set(xc-x*ro,(int)(yc-y*r)); set(xc+y*ro,(int)(yc-x*r)); set(xc+x*ro,(int)(yc-y*r)); set(xc-y*ro,(int)(yc-x*r)); } void bellipse(int xc,int yc,int r1,int r2) { int p,x,y,b; x=0; if(r1>r2) y=r1; else y=r2; p=3-2*r1; while(x<=y) { hidemouse(); plotpnts(xc,yc,x,y,r1,r2); showmouse(); if(p<0) p+=4*x+6; else { y--; p+=4*(x-y)+10; } x++; } showmouse(); } void myw(int x,int y,float theta) { int i; circle(x,y,50); circle(x,y,48); for(i=0;i<3;i++) { line(x+50*cos(theta),y+50*sin(theta),x- 50*cos(theta),y-50*sin(theta)); theta+=M_PI/3; } }
  • 30.
    Chapter 4 SourceCode 30 | P a g e void hrcurve(int x1,int y1,int x4,int y4) { int x3,y3; double a,b,t,r1,r2; //x2=87,y2=47; //x3=632,y3=427; r1=abs(x4-x1); r2=abs(y4-y1); for(t=0;t<1;t+=0.001) { a=(2*t*t*t-3*t*t+1)*x1+(-2*t*t*t+3*t*t)*x4+(t*t*t- 2*t*t+t)*r1+(t*t*t-t*t)*r2; b=(2*t*t*t-3*t*t+1)*y1+(-2*t*t*t+3*t*t)*y4+(t*t*t- 2*t*t+1)*r1+(t*t*t-t*t)*r2; if((a>87&&a<632)&&(b>47&&b<427)) bline((int)a,(int)b,(int)a,(int)b); } } void bzcurve(int x1,int y1,int x4,int y4) { int x3,y3,x2,y2; double a,b,t; x2=87,y2=47; x3=632,y3=427; for(t=0;t<1;t+=0.0001) { a=(1-t)*(1-t)*(1-t)*x1+3*t*(1-t)*(1-t)*x2+3*t*t*(1- t)*x3+t*t*t*x4; b=(1-t)*(1-t)*(1-t)*y1+3*t*(1-t)*(1-t)*y2+3*t*t*(1- t)*y3+t*t*t*y4; if((a>87&&a<632)&&(b>47&&b<427)) bline((int)a,(int)b,(int)a,(int)b); } } void rotate() { char *name; int x,y,xnew=0,ynew=0; float tx=0,th=0; setcolor(Current_Color); rectangle(MIN_X,MIN_Y,MAX_X,MAX_Y); ShowStatus("Draw rectangle to rotate"); drawrectangle(); name=readline("Enter the rotational angle along x- axis: "); tx=atoi(name); th= (3.1416 * tx)/180.0;
  • 31.
    Chapter 4 SourceCode 31 | P a g e for(x=MIN_X+2; x<=MAX_X-2; x++) for(y=MIN_Y+2; y<=MAX_Y-2; y++) if(getpixel(x,y) !=WHITE && getpixel(x,y)==BLACK) { xnew = ( ( x*cos(th) - y*sin(th)) ); ynew = ( ( x*sin(th) + y*cos(th)) ); // if(xnew>100&&ynew<340) putpixel(x,y,15); putpixel(xnew+200,abs(ynew- 70),10); continue; } } void seg() { setcolor(BLACK); rectangle(200,200,400,380); line(200,200,300,100); line(300,100,400,200); rectangle(275,300,325,380); rectangle(212,225,263,275); rectangle(337,225,388,275); line(237,225,237,275); line(212,250,263,250); line(362,225,362,275); line(337,250,388,250); circle(300,165,25); setfillstyle(SOLID_FILL,GREEN); floodfill(210,210,BLACK); setfillstyle(SOLID_FILL,WHITE); floodfill(300,165,BLACK); setfillstyle(SOLID_FILL,BROWN); floodfill(300,125,BLACK); /*int i,j=0,k=0; //delay(1000); settextstyle(3,0,3); setcolor(RED); outtextxy(250,350,"DEMONSTRATION OF SEGMENTATION"); setcolor(0); //MONITOR rectangle(140,110,220,210); rectangle(130,100,230,220); line(165,220,145,250);
  • 32.
    Chapter 4 SourceCode 32 | P a g e line(195,220,215,250); ellipse(180,250,130,50,45,15); line(120,90,120,210); line(120,210,130,220); line(120,90,220,90); line(220,90,230,100); setfillstyle(1,7); floodfill(131,101,0); setfillstyle(1,7); floodfill(121,91,0); line(120,90,130,100); setfillstyle(1,7); floodfill(166,222,0); getch(); //delay(1100); //CABINET setfillstyle(1,7); bar3d(350,90,280,250,7,1); setfillstyle(1,8); floodfill(345,87,0); setfillstyle(1,8); floodfill(353,235,0); getch(); //delay(1000); //CD ROM setcolor(0); line(280,100,350,100); line(280,110,350,110); setfillstyle(1,8); floodfill(281,101,0); setfillstyle(1,GREEN); fillellipse(340,105,4,4); ellipse(340,105,100,90,5,5); //delay(1000); getch(); //FLOPPY setfillstyle(1,7); floodfill(291,151,0); rectangle(290,150,335,158); setfillstyle(1,8); floodfill(291,151,0); //delay(1000); getch(); //RESET BUTTON setfillstyle(1,RED); fillellipse(310,180,4,4); ellipse(310,180,100,90,3,5);
  • 33.
    Chapter 4 SourceCode 33 | P a g e //delay(1000); getch(); //POWER BUTTON setfillstyle(1,YELLOW); fillellipse(310,200,4,4); ellipse(310,200,100,90,7,8); circle(310,200,8); //MONITOR CONNECTOR //delay(1000); getch(); setcolor(0); line(230,210,250,200); line(231,211,251,201); line(232,212,252,202); line(250,200,280,180); line(251,201,280,181); line(252,202,280,182); setcolor(0); //delay(1000); getch(); //KEYBOAD k=0; for(i=0;i<7;i++) { line(106+k,280+j,258+k,280+j); j+=8; k+=3; } j=0; for(i=0;i<20;i++) { line(106+j,280,125+j,328); j+=8; } line(106,280,106,290); line(106,290,125,338); line(277,328,277,338); line(125,338,277,338); setfillstyle(1,7); floodfill(126,329,0); line(125,328,125,338); //delay(1000);
  • 34.
    Chapter 4 SourceCode 34 | P a g e getch(); //KEYBOARD CONNECTOR line(210,280,280,230); line(211,281,281,231); line(250,250,280,230); //delay(1000); getch(); //MOUSE setfillstyle(1,7); fillellipse(300,300,9,15); ellipse(300,300,100,90,10,18); //delay(1000); getch(); line(300,285,270,260); line(301,286,271,261); line(302,287,272,262); line(270,260,245,250); line(271,261,246,251); line(272,262,247,252); line(245,250,280,205); line(246,251,280,206); line(247,252,280,207); //display on screen settextstyle(3,0,1); setcolor(0); outtextxy(142,150,"CG PROJECT"); outtextxy(142,165,"By:uub1970"); //outtextxy(165,175,"Usha"); for(i=0;i<=5;i++) { delay(1000); if(i%2==0) { setfillstyle(1,11); floodfill(141,111,0); } else { setfillstyle(1,14); floodfill(141,111,0); } }*/ } void mul(float a[10][10],float d[10][10]) {
  • 35.
    Chapter 4 SourceCode 35 | P a g e char k1[4],l1[4],m1[4]; int i,j,k,xc,yc,zc; float c[10][10]; for(i=0;i<1;i++) { for(j=0;j<4;j++) { c[i][j]=0; for(k=0;k<4;k++) c[i][j]+=a[i][k]*d[k][j]; } } xc=c[0][0],yc=c[0][1],zc=c[0][2]; outtextxy(570,100,"x="); outtextxy(570,120,"y="); outtextxy(570,140,"z="); sprintf(k1,"%d",(xc-MIN_X)); outtextxy(600,100,k1); sprintf(l1,"%d",(yc-MIN_Y)); outtextxy(600,120,l1); sprintf(m1,"%d",(zc-100)); outtextxy(600,140,m1); if(xc>MIN_X&&yc>MIN_Y&&xc<MAX_X&&yc<MAX_Y) { putpixel(xc,yc,RED); putpixel(xc+1,yc+1,RED); putpixel(xc,yc+1,RED); putpixel(xc+1,yc,RED); } else outtextxy(150,316 ,"sorry! pixel is outside the boundary"); } void t3d() { char *xs,*ys,*zs,*chs,*txs,*tys,*tzs,*sxs,*sys,*szs,*angs; float a[10][10],d[10][10],c[9][9]; int tx,ty,tz,sx,sy,sz,ch; int x,y,z,ang,i; float th; xs=readline("Enter x cordinate:(0-525) "); x=atoi(xs); ys=readline("Enter y cordinate:(0-290) "); y=atoi(ys); zs=readline("Enter z cordinate:(0-300) "); z=atoi(zs); x=x+MIN_X; y=y+MIN_Y;
  • 36.
    Chapter 4 SourceCode 36 | P a g e z=z+100; putpixel(x,y,BLUE); putpixel(x+1,y+1,BLUE); putpixel(x+1,y,BLUE); putpixel(x,y+1,BLUE); d[0][0]=x,d[0][1]=y,d[0][2]=z,d[0][3]=1; chs=readline("1.TRANS 2.SCALING 3.Zrotate 4.Yrotate 5.Xrotate"); ch=atoi(chs); switch(ch) { case 1: txs=readline("Enter tx: "); tx=atoi(txs); tys=readline("Enter ty "); ty=atoi(tys); tzs=readline("Enter tz: "); tz=atoi(tzs); a[0][0]=a[1][1]=a[2][2]=a[3][3]=1; a[3][0]=tx;a[3][1]=ty;a[3][2]=tz; a[0][1]=a[0][2]=a[0][3]=a[1][0]=a[1][2]=a[1][3]=a[2] [0]=a[2][1]=a[2][3]=0; mul(d,a); break; case 2:sxs=readline("Enter sx: "); sx=atoi(sxs); sys=readline("Enter sy "); sy=atoi(sys); szs=readline("Enter sz: "); sz=atoi(szs); a[0][0]=sx;a[1][1]=sy; a[2][2]=sz;a[3][3]=1; a[0][1]=a[0][2]=a[0][3]=a[1][0]=a[1][2]=a[1][3]=a[2] [0]=a[2][1]=a[2][3]=a[3][0]=a[3][1]=a[3][2]=0; mul(d,a); break; case 3: angs=readline("enter rotatinal angle about z"); ang=atoi(angs); th=(3.142*ang)/180; a[0][0]=a[1][1]=cos(th);
  • 37.
    Chapter 4 SourceCode 37 | P a g e a[0][2]=a[1][2]=a[0][3]=a[1][3]=a[2][1]=a[2][0]=a[3] [0]=a[3][1]=a[3][2]=a[2][3]=0; a[3][3]=a[2][2]=1; a[0][1]=sin(th);a[1][0]=-sin(th); mul(d,a); break; case 4: angs=readline("enter rotatinal angle about y"); ang=atoi(angs); th=(3.142*ang)/180; a[1][1]=a[3][3]=1; a[0][1]=a[0][3]=a[1][0]=a[1][2]=a[1][3]=a[2][1]=a[2] [3]=a[3][0]=a[3][1]=a[3][2]=0; a[0][0]=a[2][2]=cos(th); a[2][0]=sin(th); a[0][2]=-sin(th); mul(d,a); break; case 5: angs=readline("enter rotatinal angle about x"); ang=atoi(angs); th=(3.142*ang)/180; a[0][0]=a[3][3]=1; a[1][1]=a[2][2]=cos(th); a[1][2]=sin(th);a[2][1]=-sin(th); a[0][1]=a[0][2]=a[0][3]=a[1][0]=a[1][3]=a[2][0]=a[2] [3]=a[3][0]=a[3][1]=a[3][2]=0; mul(d,a); break; default:exit(0); } } void translate() { char *name; int tx,ty; setcolor(Current_Color); rectangle(MIN_X,MIN_Y,MAX_X,MAX_Y); ShowStatus("Draw rectangle to translate"); drawrectangle();
  • 38.
    Chapter 4 SourceCode 38 | P a g e name=readline("Enter the translation factor tx: "); tx=atoi(name); name=readline("Enter the translation factor ty: "); ty=atoi(name); setcolor(WHITE); setfillstyle(SOLID_FILL,WHITE); bar(a,b,c,d); if(c+tx >MAX_X) c=MAX_X; else if(c+tx < MIN_Y) c=MIN_Y; else c=c+tx; if(d+ty >MAX_Y) d=MAX_Y; else if(d+ty <MIN_Y) d=MIN_Y; else d=d+ty; if(a+tx <MIN_X) a=MIN_X; else if( a+tx >MAX_X) a=MAX_X; else a=a+tx; if( b+ty<MIN_Y) b=MIN_Y; else if(b+ty >MAX_Y) b=MAX_Y; else b=b+ty; setcolor(Current_Color); if(Current_Pattern!=EMPTY_FILL) setfillstyle(Current_Pattern,Current_Color); bar(a,b,c,d); rectangle(a,b,c,d); } void insert(int x,int y,struct Node** last) { struct Node* p; p=(struct Node*)malloc(sizeof(struct Node)); if(p==NULL) { closegraph(); fprintf(stderr,"ninsert:Out of memory.n"); exit(2); } p->x=x; p->y=y; p->next=NULL; (*last)->next=p; *last=(*last)->next; } void floodfill4(int x,int y,int oldclr,int newclr) { struct Node* first,*last,*tmp; struct Node* p,*q;
  • 39.
    Chapter 4 SourceCode 39 | P a g e first=(struct Node*)malloc(sizeof(struct Node)); if(first==NULL) { closegraph(); fprintf(stderr,"floodfill4: Out of memory.n"); exit(2); } if(oldclr==newclr) { free(first); return; } //Create a node and stpre the seed there. first->x=x; first->y=y; first->next=NULL; last=first; //Use a linked list of adjacent nodes for filling while(first!=NULL) { putpixel(x,y,newclr); if(getpixel(x,y-1)==oldclr) { putpixel(x,y-1,newclr); insert(x,y-1,&last);//insert at the end } if(getpixel(x,y+1)==oldclr) { putpixel(x,y+1,newclr); insert(x,y+1,&last);//insert at the end } if(getpixel(x-1,y)==oldclr) { putpixel(x-1,y,newclr); insert(x-1,y,&last);//insert at the end } if(getpixel(x+1,y)==oldclr) { putpixel(x+1,y,newclr); insert(x+1,y,&last);//insert at the end } //This pixel is done .try the next node in the list tmp=first; first=first->next; x=first->x; y=first->y; free(tmp);
  • 40.
    Chapter 4 SourceCode 40 | P a g e } for(p=first;p!=NULL;p=q) { q=p->next; free(p); } } void fillcolor() { unsigned oldcolor; int x=mousex; int y=mousey; oldcolor=getpixel(mousex,mousey); hidemouse(); floodfill4(x,y,oldcolor,Current_Color); showmouse(); } void myl(int x,int y,float theta) { line((int)(x+70*sqrt(2)*cos(theta)),(int)(y+70*sqrt(2)*si n(theta)),(int) (x+70*sqrt(2)*cos(theta+M_PI_2)),(int)(y+70*sqrt(2)* sin(theta+M_PI_2))); circle(x,y,70); } void rotate_line() { float theta=0; int i,j; clear(); ShowStatus("Press ESC to terminate"); while(1) { if(kbhit()) if(getch()==27) { clear(); return; } setcolor(BLACK); myl(360,249,theta); delay(100); setcolor(WHITE); myl(360,249,theta); theta+=M_PI_2/10;
  • 41.
    Chapter 4 SourceCode 41 | P a g e } } extern void draw_button_border(int); extern void undraw_button_border(int); typedef unsigned int outcode; enum { top=0x1,bottom=0x2,right=0x4,left=0x8 }; outcode compcode(int x,int y,int xmin,int ymin,int xmax,int ymax) { outcode code=0; if(y>ymax)code|=top; if(y<ymin)code|=bottom; if(x>xmax)code|=right; if(x<xmin)code|=left; return code; } int x2,y2,x3,y3; void CohenSutherlandLine(int x0,int y0,int x1,int y1,int xmin,int ymin,int xmax,int ymax) { outcode outcodeout,outcode0,outcode1; int accept=0,done=1,x,y,umin=MIN_X+100,vmin=MIN_Y+50,umax=MAX _X-100,vmax=MAX_Y-50; float m; outcode0=compcode(x0,y0,xmin,ymin,xmax,ymax); outcode1=compcode(x1,y1,xmin,ymin,xmax,ymax); while(done) { if(!(outcode0|outcode1)) { accept=1; done=0; } else if(outcode0&outcode1) done=0; else { outcodeout=outcode0?outcode0:outcode1; m=(y1-y0)/(float)(x1-x0); if(outcodeout&top)
  • 42.
    Chapter 4 SourceCode 42 | P a g e { x=x0+(ymax-y0)/m; y=ymax; } else if(outcodeout&bottom) { x=x0+(ymin-y0)/m; y=ymin; } else if(outcodeout&right) { y=y0+(xmax-x0)*m; x=xmax; } else { y=y0+(xmin-x0)*m; x=xmin; } if(outcodeout==outcode0) { x0=x; y0=y; outcode0=compcode(x0,y0,xmin,ymin,xmax,ymax); } else { x1=x; y1=y; outcode1=compcode(x1,y1,xmin,ymin,xmax,ymax); } } } hidemouse(); clear(); if(accept) { setcolor(BLACK); outtextxy(110,80,"Clipped line in the window"); rectangle(x3,y3,x2,y2); setcolor(Current_Color); bline(x0,y0,x1,y1); ClearStatus(); ShowStatus("Right click to view Clipped line in Viewport"); getxy(); while(!RightButtonPressed)getxy(); x0=(float)(x0-xmin)*(umax-umin)/(xmax-xmin)+umin; x1=(float)(x1-xmin)*(umax-umin)/(xmax-xmin)+umin; y0=(float)(y0-ymin)*(vmax-vmin)/(ymax-ymin)+vmin; y1=(float)(y1-ymin)*(vmax-vmin)/(ymax-ymin)+vmin;
  • 43.
    Chapter 4 SourceCode 43 | P a g e clear(); setcolor(BLACK); outtextxy(110,80,"Clipped line in viewport"); rectangle(umin,vmin,umax,vmax); setcolor(Current_Color); bline(x0,y0,x1,y1); } // if line within the region showmouse(); setcolor(Current_Color); } void lineclipping() { int x,y,current_x,current_y,tx,ty,b,color; int x0,y0,x1,y1; R=1; clear(); showmouse(); getxy(); x=mousex;y=mousey; disp_coord(); if(LeftButtonPressed) { while(LeftButtonPressed) { getxy();disp_coord(); if(prevx==mousex&&prevy==mousey) continue; hidemouse(); putback(); showmouse(); getxy(); hidemouse(); bline(x,y,mousex,mousey); showmouse(); delay(10); } x0=x;y0=y;x1=mousex;y1=mousey; ClearStatus(); ShowStatus("Draw the Clipping Window"); getxy(); while(!LeftButtonPressed) { getxy(); disp_coord(); } hidemouse(); setcolor(15-BLACK); setwritemode(XOR_PUT); x=mousex; y=mousey;
  • 44.
    Chapter 4 SourceCode 44 | P a g e while(LeftButtonPressed) { setlinestyle(3,1,1); disp_coord(); current_x=mousex; current_y=mousey; while(current_x==mousex && current_y==mousey) getxy(); rectangle(x,y,current_x,current_y); rectangle(x,y,mousex,mousey); } setlinestyle(0,1,1); setwritemode(COPY_PUT); setcolor(Current_Color); ClearStatus(); showmouse(); x3=mousex, y3=mousey, x2=x, y2=y; if(x2>x3) current_x=x2,x2=x3,x3=current_x; if(y2>y3) current_y=y2,y2=y3,y3=current_y; CohenSutherlandLine(x0,y0,x1,y1,x2,y2,x3,y3); t=0; draw_button_border(Current_Button); undraw_button_border(Prev_Button); Current_Button=Prev_Button; }//if left button } void icons(int minx,int miny,int maxx,int maxy,int status) { int up=WHITE,down=DARKGRAY; // ICON is used to draw buttons creating a int color=getcolor();// 3d effect with top and left drawn in darkgray if(status==0)// bottom and right drawn in white ,color gets swapped { // when a button is pressed indicating as though it has up=DARKGRAY;// gone inside down=WHITE; } setcolor(up); line(minx,miny,maxx,miny); line(minx,miny,minx,maxy); setcolor(down); line(minx,maxy,maxx,maxy); line(maxx,maxy,maxx,miny); setcolor(color); }
  • 45.
    Chapter 4 SourceCode 45 | P a g e void init_button(int no,int xmin,int ymin,int xwidth,int ywidth,char* desc) { int ygap=4; //the vertical gap between two buttons buttons[no].xmin=xmin; buttons[no].ymin=ymin; buttons[no].xmax=xmin+xwidth; buttons[no].ymax=ymin+ywidth-ygap; buttons[no].desc=(char *)malloc(strlen(desc)+1);//string for ShowStatus() if(buttons[no].desc==NULL) { cleardevice(); printf("n No MEMORY "); } strcpy(buttons[no].desc,desc); } void draw_button_border(int no)//this creates the "not- pressed-normal" effect { hidemouse(); //hiding mouse using dos interrupt icons(buttons[no].xmin,buttons[no].ymin,buttons[no].xmax, buttons[no].ymax,1); icons(buttons[no].xmin+1,buttons[no].ymin+1,buttons[no].x max-1,buttons[no].ymax-1,1); showmouse(); } void undraw_button_border(int no)//this creates the "pressed" effect { hidemouse();//actually to avoid graying effect along the edges icons(buttons[no].xmin,buttons[no].ymin,buttons[no].xmax, buttons[no].ymax,0); icons(buttons[no].xmin+1,buttons[no].ymin+1,buttons[no].x max-1,buttons[no].ymax-1,0); showmouse(); } void init_color_button(int color,int xmin,int ymin,int xwidth,int ywidth)
  • 46.
    Chapter 4 SourceCode 46 | P a g e { //this actually inits various fields of struct color-button int xgap=4; //the hori-gap between 2 color buttons colorbuttons[color].xmin=xmin; colorbuttons[color].xmax=xmin+xwidth-xgap; colorbuttons[color].ymin=ymin; colorbuttons[color].ymax=ymin+ywidth; colorbuttons[color].color=color; } // draws color buttons that are in struct colorbuttons void draw_color_button_border(int no) { int color=getcolor(); setcolor(BLACK); rectangle(colorbuttons[no].xmin+1,colorbuttons[no].ymin+1 ,colorbuttons[no].xmax-1,colorbuttons[no].ymax-1); setfillstyle(SOLID_FILL,no); floodfill(colorbuttons[no].xmin+3,colorbuttons[no].ymin+3 ,BLACK); setcolor(color); } void init() //this fn initializes the various fields of the struct button { //this is done iteratively for all buttons of the struct-array int x1=10+10,y1=MIN_Y+12,x2=54,y2=MAX_Y+47,ywidth=30,xwidth=3 0; int butt=0,i,j; setcolor(BROWN); //icon panel New_icon(x1,y1+1); init_button(butt,x1,y1,xwidth,ywidth,"New File"); //of struct button draw_button_border(butt++); Save_icon(x2,y1); init_button(butt,x2,y1,xwidth,ywidth,"Save File"); draw_button_border(butt++); y1+=ywidth; Open_icon(x1,y1); init_button(butt,x1,y1,xwidth,ywidth,"Load File"); draw_button_border(butt++);
  • 47.
    Chapter 4 SourceCode 47 | P a g e Clear_icon(x2,y1); init_button(butt,x2,y1,xwidth,ywidth,"Clear File"); draw_button_border(butt++); y1+=ywidth; Line_icon(x1,y1); init_button(butt,x1,y1,xwidth,ywidth,"Line Drawing Tool"); draw_button_border(butt++); Rectangle_icon(x2,y1); init_button(butt,x2,y1,xwidth,ywidth,"Rectangle Drawing Tool"); draw_button_border(butt++); y1+=ywidth; Circle_icon(x1,y1); init_button(butt,x1,y1,xwidth,ywidth,"Circle Drawing Tool"); draw_button_border(butt++); Ellipse_icon(x2,y1); init_button(butt,x2,y1,xwidth,ywidth,"Ellipse Drawing Tool"); draw_button_border(butt++); y1+=ywidth; Spiral_icon(x1,y1); init_button(butt,x1,y1,xwidth,ywidth,"Spiral Drawing Tool"); draw_button_border(butt++); Clip_icon(x2,y1); init_button(butt,x2,y1,xwidth,ywidth,"Line Clipper"); draw_button_border(butt++); y1+=ywidth; Rot_icon(x1,y1); init_button(butt,x1,y1,xwidth,ywidth,"Rotating line around circle tangentially"); draw_button_border(butt++); Wheel_icon(x2,y1); init_button(butt,x2,y1,xwidth,ywidth,"Rotating Wheel"); draw_button_border(butt++); y1+=ywidth;
  • 48.
    Chapter 4 SourceCode 48 | P a g e Seg_icon(x1,y1); init_button(butt,x1,y1,xwidth,ywidth,"Segmentation"); draw_button_border(butt++); hr_icon(x2,y1); init_button(butt,x2,y1,xwidth,ywidth,"DRAW HRMITE CURVE "); draw_button_border(butt++); y1+=ywidth; bz_icon(x1,y1); init_button(butt,x1,y1,xwidth,ywidth,"DRAW BEZIER CURVE"); draw_button_border(butt++); t3d_icon(x2,y1); init_button(butt,x2,y1,xwidth,ywidth,"3D ROTATION "); draw_button_border(butt++); y1+=ywidth; Translate_icon(x1,y1); init_button(butt,x1,y1,xwidth,ywidth,"TRANSLATE RECTANGLE"); draw_button_border(butt++); //y1+=ywidth; fl_icon(x2,y1); init_button(butt,x2,y1,xwidth,ywidth,"FILL A COLOR"); draw_button_border(butt++); y1+=ywidth; scale_icon(x1,y1); init_button(butt,x1,y1,xwidth,ywidth,"SCALING RECTANGLE"); draw_button_border(butt++); Rotate_icon(x2,y1); init_button(butt,x2,y1,xwidth,ywidth,"ROTATING A RECTANGLE"); draw_button_border(butt++); y1+=ywidth; //now,the color buttons butt=0; x1=MIN_X+75; y1=MAX_Y+28;
  • 49.
    Chapter 4 SourceCode 49 | P a g e xwidth=30;ywidth=15; for(i=0;i<8;i++) //iteratively init the col-but structure { //init color button is very similar to init_button init_color_button(butt,x1,y1,xwidth,ywidth); draw_color_button_border(butt++); init_color_button(butt,x1,y2,xwidth,ywidth); draw_color_button_border(butt++); x1=x1+xwidth; } setcolor(Current_Color); } void dispfile() //display and updates filename in case of load/save,etc { setfillstyle(SOLID_FILL,LIGHTGRAY); bar(260,MIN_Y-30,379,MIN_Y-6); icons(260,MIN_Y-30,379,MIN_Y-6,1); setfillstyle(SOLID_FILL,LIGHTGRAY); bar(MAX_X-15+8,4,MAX_X+1+8,15-2); icons(MAX_X-15+8,4,MAX_X+1+8,15-2,1); icons(MAX_X-14+8,5,MAX_X+8,15-3,1); setcolor(BLACK); settextstyle(DEFAULT_FONT,HORIZ_DIR,0); outtextxy(MAX_X-10+8,4,"x"); // exits on clicking outtextxy((getmaxx()- textwidth(filename))/2,48,filename); } /* BASIC OPERATIONS */ int check_mouse_on(int minx,int miny,int maxx,int maxy)//is mouse is on area { //defined by boundary? if(mousex<minx || mousex>maxx || mousey<miny || mousey>maxy) return 0; return 1; } int check_if_color() { int i=0; for(i=0;i<MAX_COLOR;i++) {
  • 50.
    Chapter 4 SourceCode 50 | P a g e if(check_mouse_on(colorbuttons[i].xmin,colorbuttons[i].ym in,colorbuttons[i].xmax,colorbuttons[i].ymax)) { Current_Color=colorbuttons[i].color; setfillstyle(SOLID_FILL,Current_Color); bar(MIN_X+20,MAX_Y+35,MIN_X+44,MAX_Y+50); setcolor(BLACK); rectangle(MIN_X+20,MAX_Y+35,MIN_X+44,MAX_Y+50); setcolor(Current_Color); return 1; } } return 0; } int check_if_button_pressed() { int ret_value=-1,color; int i; char ch; for(i=0;i<MAX_BUTTONS;++i) { if(check_mouse_on(buttons[i].xmin,buttons[i].ymin,buttons [i].xmax,buttons[i].ymax)) { if(LeftButtonPressed && i!=Current_Button) //check which button { // if not current button ret_value=i; //change current button = i draw_button_border(Current_Button); Prev_Button=Current_Button; Current_Button=i; undraw_button_border(Current_Button); switch(Current_Button) { case NEW : hidemouse(); if(!saved) { ShowStatus("Save Changes (Y or N) ? "); ch=getch(); if(ch=='y'||ch=='Y') save(); } strcpy(filename,"Untitled"); dispfile(); clear(); draw_button_border(Current_Button);
  • 51.
    Chapter 4 SourceCode 51 | P a g e undraw_button_border(Prev_Button); Current_Button=Prev_Button; showmouse(); break; case CLEAR : hidemouse(); clear(); draw_button_border(Current_Button); undraw_button_border(Prev_Button); Current_Button=Prev_Button; showmouse(); break; case LOAD: hidemouse(); load(); draw_button_border(Current_Button); undraw_button_border(Prev_Button); Current_Button=Prev_Button; showmouse(); break; case SAVE: hidemouse(); save(); draw_button_border(Current_Button); undraw_button_border(Prev_Button); Current_Button=Prev_Button; showmouse(); break; case CLIP_OP: clear(); break; case TRANS_OP: clear(); } } if(prevx!=mousex||prevy!=mousey) ShowStatus(buttons[i].desc); return ret_value; }//check on which button }//for all button ClearStatus(); return ret_value; } void tools() {
  • 52.
    Chapter 4 SourceCode 52 | P a g e restrictmouse(MIN_X+2,MIN_Y+2,MAX_X-2,MAX_Y-2); hidemouse(); switch(Current_Button) { case 4 : case 5 : case 6 : case 7 : case 13: case 14: case 8 : rubberband(); break; case 9 : //freehand(); lineclipping(); break; case 10: //lineclipping(); rotate_line(); break; case 11: //drawtext(); Wheel(); break; case 12: //rotate_line(); seg(); break; case 15: //restrictmouse(MIN_X+2,MIN_Y+2,MAX_X- 10,MAX_Y-10); //brush(); t3d(); break; case 17: //clearout(); fillcolor(); break; case 16:translate(); //clearin(); break; case 18: //seg(); scale(); break; case 19: rotate(); break; /*
  • 53.
    Chapter 4 SourceCode 53 | P a g e case 22:// t3d(); break; case 23: //fillcolor(); break; */ } showmouse(); restrictmouse(0,0,639,479); } void rubberband() { int x,y,xe,ye,tx,ty,b,r1,r2; R=1; showmouse(); getxy(); x=mousex;y=mousey; disp_coord(); if(LeftButtonPressed) { while(LeftButtonPressed) { getxy();disp_coord(); if(prevx==mousex&&prevy==mousey) continue; hidemouse(); putback(); showmouse(); getxy(); hidemouse(); switch(Current_Button) { case 4: bline(x,y,mousex,mousey); break; case 5: brectangle(x,y,mousex,mousey); break; case 6: bcircle(x,y,abs(x-mousex)<abs(y- mousey)?abs(y-mousey):abs(x-mousex)); break; case 7: r1=abs(x-mousex),r2=abs(y-mousey); if(r1!=0&&r2!=0) //else floating point error bellipse(x,y,abs(x-mousex),abs(y- mousey)); break;
  • 54.
    Chapter 4 SourceCode 54 | P a g e case 8: spiral(x,y,abs(x-mousex)<abs(y- mousey)?abs(y-mousey):abs(x-mousex),1,50); break; case 13:hrcurve(x,y,mousex,mousey); break; case 14:bzcurve(x,y,mousex,mousey); break; } showmouse(); delay(10); }//while left button t=0; }//if left button } void Wheel() { char ch; int x,y,s; float theta=0; int i,j,f,b; // flushall(); clear(); ShowStatus("Press ESC to terminate"); getxy(); hidemouse(); while(!LeftButtonPressed) { getxy(); for(i=153;i<=573;i+=8) { if(kbhit()) if(getch()==27) { clear(); showmouse(); return; } setcolor(BLACK); myw(i,230,theta); delay(130); setcolor(WHITE); myw(i,230,theta); theta+=M_PI/10; } for(i=573;i>=153;i-=8) { if(kbhit())
  • 55.
    Chapter 4 SourceCode 55 | P a g e if(getch()==27) { clear(); showmouse(); return; } setcolor(BLACK); myw(i,230,theta); delay(130); setcolor(WHITE); myw(i,230,theta); theta-=M_PI/10; } } clear(); showmouse(); } void scale() { char *name; float sx,sy; setcolor(Current_Color); rectangle(MIN_X,MIN_Y,MAX_X,MAX_Y); ShowStatus("Draw rectangle to scale"); drawrectangle(); name=readline("Enter the scaling factor sx: "); sx=atof(name); name=readline("Enter the scaling factor sy: "); sy=atof(name); setcolor(WHITE); setfillstyle(SOLID_FILL,WHITE); bar(a,b,c,d); c= (float)(c-a)*sx + (float)a; d= (float)(d-b)*sy + (float)b; if(c >=MAX_X) c=MAX_X-1; if(d >=MAX_Y) d=MAX_Y-1; setcolor(Current_Color); if(Current_Pattern!=EMPTY_FILL) setfillstyle(Current_Pattern,Current_Color); bar(a,b,c,d); rectangle(a,b,c,d); } void drawrectangle() {
  • 56.
    Chapter 4 SourceCode 56 | P a g e int color=15-Current_Color; int x,y; setcolor(color); setwritemode(XOR_PUT); x=mousex; y=mousey; while(LeftButtonPressed) { disp_coord(); rectangle(x,y,mousex,mousey); getxy(); rectangle(x,y,mousex,mousey); } setwritemode(COPY_PUT); setcolor(Current_Color); a=x, b=y, c=mousex, d=mousey; if(Current_Pattern==EMPTY_FILL) rectangle(x,y,mousex,mousey); else { setfillstyle(Current_Pattern,Current_Color); bar(x,y,mousex,mousey); } } void main() { int gd=DETECT,gm; initgraph(&gd,&gm,"C:tcbgi"); if(!initmouse()) { outtextxy(250,230,"Mouse not present"); getch(); exit(0); } wel(); cleardevice(); frame();// To create window startmouse((MIN_X+MAX_X)/2,(MIN_Y+MAX_Y)/2); showmouse(); init(); // To display all icons undraw_button_border(Current_Button); dispfile(); while(1) { tme();
  • 57.
    Chapter 4 SourceCode 57 | P a g e getxy(); if(!check_mouse_on(MIN_X+2,MIN_Y+2,MAX_X-2,MAX_Y- 2)) { setfillstyle(SOLID_FILL,LIGHTGRAY); bar(487,462,522,472); //refresh display bar(555,462,585,472); } else disp_coord(); if(LeftButtonPressed) { if(check_if_button_pressed()>=0) ; else if(check_if_color()) ClearStatus(); else if(check_mouse_on(MIN_X+2,MIN_Y+2,MAX_X- 2,MAX_Y-2)) { ClearStatus(); saved=0; tools(); } else check_if_exit(); } else check_if_button_pressed(); } } // to display exiting page void check_if_exit()//is mouse on exit area? { char ch; struct dosdate_t d; struct dostime_t t; if((check_mouse_on(MAX_X-15+1+8,4,MAX_X-1+8,15- 3))&&LeftButtonPressed) { hidemouse(); icons(MAX_X-15+8,4,MAX_X-1+8,15-3,0); icons(MAX_X-14+8,4,MAX_X+8,15-3,0); ClearStatus(); ShowStatus("Save and exit(Y or N)?"); ch=getch(); if(ch=='y' || ch=='Y') { save(); } clearviewport(); cleardevice(); settextstyle(8,0,4); setcolor(5); outtextxy(50,100,"n"); outtextxy(50,300,"n");
  • 58.
    Chapter 4 SourceCode 58 | P a g e setcolor(RED); outtextxy(100,25,"n"); outtextxy(100,375,"n"); rectangle(1,1,637,477); rectangle(3,3,635,475); setcolor(BLUE); outtextxy(190,200,"THANK YOU!!!!!"); setcolor(9); outtextxy(189,201,"THANK YOU!!!!!"); settextstyle(0,0,0); setcolor(12); _dos_getdate(&d); printf(" %d-%d-%d ", d.day,d.month,d.year); _dos_gettime(&t); printf(" %2d:%02d:%02dn", t.hour, t.minute,t.second); outtextxy(430,450,"NOW PRESS ANY KEY TO EXIT"); settextstyle(DEFAULT_FONT,HORIZ_DIR,0); getch(); exit(0); } }
  • 59.
    59 | Pa g e 5. SAMPLE OUTPUT
  • 60.
    60 | Pa g e CONCLUSION We have attempted to design and implement a paint editor using C/C++, which supports enormous flexibility in the design and the use of graphics functions .The presence of many in-built classes and methods take care of many of the functionalities and reduce the job of coding as well as makes the implementation simpler. The project was started with the designing phase in which we figured the requirements needed, the layout design, then comes the detail designing of each function after which, was the testing and debugging stage. We have tried to implement the project making it as user- friendly and error free as possible. In future enhancement, the following features are addressed. The most obvious enhancement that we see is, support for the standard image formats such as BMP, JPEG, GIF etc. This would allow the editor to open image documents stored in these standard formats. We would also like to support saving of our documents in these formats so that the editor is compatible with all the standard graphics editors. Another feature we would like to incorporate is to provide a way for the user to store and open documents in directories other than the current directory. We would like to provide the user with a simple way to traverse the directory structure for file operations.
  • 61.
    61 | Pa g e References Kamal Acharya. School management system project report. Authorea. August 01, 2024. DOI: https://doi.org/10.22541/au.172254873.34023165/v1 Kamal Acharya. A CASE STUDY OF CINEMA MANAGEMENT SYSTEM PROJECT. Authorea. August 01, 2024. DOI: https://doi.org/10.22541/au.172254873.30191075/v1 Kamal Acharya. A CASE STUDY ON ONLINE TICKET BOOKING SYSTEM PROJECT. Authorea. August 01, 2024. DOI: https://doi.org/10.22541/au.172254872.26972790/v1 Kamal Acharya. Web chatting application project report management system. Authorea. August 01, 2024. DOI: https://doi.org/10.22541/au.172254871.18588592/v1 Kamal Acharya. RETAIL STORE MANAGEMENT SYSTEM PROJECT REPORT. Authorea. August 01, 2024. DOI: https://doi.org/10.22541/au.172254871.14590154/v1 Kamal Acharya. SUPERMARKET MANAGEMENT SYSTEM PROJECT REPORT. Authorea. August 01, 2024. DOI: https://doi.org/10.22541/au.172252491.19145062/v1 Kamal Acharya. SOCIAL MEDIA MANAGEMENT SYSTEM PROJECT REPORT. Authorea. August 01, 2024. DOI: https://doi.org/10.22541/au.172252491.11210579/v1 Kamal Acharya. Online music portal management system project report. Authorea. August 01, 2024. DOI: https://doi.org/10.22541/au.172252488.89734698/v1 Kamal Acharya. COLLEGE BUS MANAGEMENT SYSTEM PROJECT REPORT. Authorea. July 31, 2024. DOI: https://doi.org/10.22541/au.172245277.70798942/v1 Kamal Acharya. AUTOMOBILE MANAGEMENT SYSTEM PROJECT REPORT. Authorea. July 31, 2024. DOI: https://doi.org/10.22541/au.172245276.67982593/v1 Kamal Acharya. Ludo management system project report. Authorea. July 31, 2024. DOI: https://doi.org/10.22541/au.172243999.98091616/v1 Kamal Acharya. Literature online quiz system project report. Authorea. July 31, 2024 DOI: https://doi.org/10.22541/au.172243825.53562953/v1 Kamal Acharya. Avoid waste management system project. Authorea. July 29, 2024. DOI: https://doi.org/10.22541/au.172228528.85022205/v1 Kamal Acharya. CHAT APPLICATION THROUGH CLIENT SERVER MANAGEMENT SYSTEM PROJECT. Authorea. July 29, 2024. DOI: https://doi.org/10.22541/au.172228527.74316529/v1
  • 62.
    62 | Pa g e Acharya, Kamal, Online Job Portal Management System (May 5, 2024). Available at SSRN: https://ssrn.com/abstract=4817534 or http://dx.doi.org/10.2139/ssrn.4 817534 Acharya, Kamal, Employee leave management system. (May 7, 2024). Available at SSRN: https://ssrn.com/abstract=4819626 or http://dx.doi.org/10.2139/ssrn.4 819626 Acharya, Kamal, Online electricity billing project report. (May 7, 2024). Available at SSRN: https://ssrn.com/abstract=4819630 or http://dx.doi.org/10.2139/ssrn.4 819630 Acharya, Kamal, POLICY MANAGEMENT SYSTEM PROJECT REPORT. (December 10, 2023). Available at SSRN: https://ssrn.com/abstract=4831694 or http://dx.doi.org/10.2139/ssrn.4 831694 Acharya, Kamal, Online job placement system project report. (January 10, 2023). Available at SSRN: https://ssrn.com/abstract=4831638 or http://dx.doi.org/10.2139/ssrn.4 831638 Acharya, Kamal, Software testing for project report. (May 16, 2023). Available at SSRN: https://ssrn.com/abstract=4831028 or http://dx.doi.org/10.2139/ssrn.4 831028 Acharya, Kamal, ONLINE CRIME REPORTING SYSTEM PROJECT. (August 10, 2022). Available at SSRN: https://ssrn.com/abstract=4831015 or http://dx.doi.org/10.2139/ssrn.4 831015 Acharya, Kamal, Burger ordering system project report. (October 10, 2022). Available at SSRN: https://ssrn.com/abstract=4832704 or http://dx.doi.org/10.2139/ssrn.4 832704 Acharya, Kamal, Teachers Record Management System Project Report (December 10, 2023). Available at SSRN: https://ssrn.com/abstract=4833821 or http://dx.doi.org/10.2139/ssrn.4 833821
  • 63.
    63 | Pa g e Acharya, Kamal, Dairy Management System Project Report (December 20, 2020). Available at SSRN: https://ssrn.com/abstract=4835231 or http://dx.doi.org/10.2139/ssrn.4 835231 Acharya, Kamal, Electrical Shop Management System Project (December 10, 2019). Available at SSRN: https://ssrn.com/abstract=4835238 or http://dx.doi.org/10.2139/ssrn.4 835238 Acharya, Kamal, Online book store management system project report. (Febuary 10, 2020). Available at SSRN: https://ssrn.com/abstract=4835277 or http://dx.doi.org/10.2139/ssrn.4 835277 Acharya, Kamal, Paint shop management system project report. (January 10, 2019). Available at SSRN: https://ssrn.com/abstract=4835441 or http://dx.doi.org/10.2139/ssrn.4 835441 Acharya, Kamal, Supermarket billing system project report. (August 10, 2021). Available at SSRN: https://ssrn.com/abstract=4835474 or http://dx.doi.org/10.2139/ssrn.4 835474 Acharya, Kamal, Online taxi booking system project report. (March 10, 2022). Available at SSRN: https://ssrn.com/abstract=4837729 or http://dx.doi.org/10.2139/ssrn.4 837729 Acharya, Kamal, Online car servicing system project report. (March 10, 2023). Available at SSRN: https://ssrn.com/abstract=4837832 or http://dx.doi.org/10.2139/ssrn.4 837832 Acharya, Kamal, School management system project report. (July 10, 2021). Available at SSRN: https://ssrn.com/abstract=4837837 or http://dx.doi.org/10.2139/ssrn.4 837837 Acharya, Kamal, Furniture Showroom Management System Project Report (March 21, 2021). Available at SSRN: https://ssrn.com/abstract=4839422 or http://dx.doi.org/10.2139/ssrn.4 839422 Acharya, Kamal, Online Vehicle Rental System Project Report (March 21, 2019). Available at SSRN: https://ssrn.com/abstract=4839429 or http://dx.doi.org/10.2139/ssrn.4 839429
  • 64.
    64 | Pa g e Acharya, Kamal, Fruit Shop Management System Project Report (August 10, 2023). Available at SSRN: https://ssrn.com/abstract=4841048 or http://dx.doi.org/10.2139/ssrn.4 841048 Acharya, Kamal, Hall Booking Management System Project Report (December 21, 2023). Available at SSRN: https://ssrn.com/abstract=4841055 or http://dx.doi.org/10.2139/ssrn.4 841055 Acharya, Kamal, Lundry Management System Project Report (October 21, 2023). Available at SSRN: https://ssrn.com/abstract=4841059 or http://dx.doi.org/10.2139/ssrn.4 841059 Acharya, Kamal, A CASE STUDY OF CINEMA MANAGEMENT SYSTEM PROJECT (September 25, 2023). Available at SSRN: https://ssrn.com/abstract=4841209 or http://dx.doi.org/10.2139/ssrn.4 841209 Acharya, Kamal, A CASE STUDY ON ONLINE TICKET BOOKING SYSTEM PROJECT (May 25, 2024). Available at SSRN: https://ssrn.com/abstract=4841210 or http://dx.doi.org/10.2139/ssrn.4 841210 Acharya, Kamal, ONLINE DATING MANAGEMENT SYSTEM PROJECT REPORT. (April 25, 2023). Available at SSRN: https://ssrn.com/abstract=4842066 or http://dx.doi.org/10.2139/ssrn.4 842066 Acharya, Kamal, ONLINE RESUME BUILDER MANAGEMENT SYSTEM PROJECT REPORT. (April 25, 2021). Available at SSRN: https://ssrn.com/abstract=4842071 or http://dx.doi.org/10.2139/ssrn.4 842071 Acharya, Kamal, TOLL TEX MANAGEMENT SYSTEM PROJECT REPORT (August 21, 2023). Available at SSRN: https://ssrn.com/abstract=4842082 or http://dx.doi.org/10.2139/ssrn.4 842082 Acharya, Kamal, Chat Application Through Client Server Management System Project Report (June 25, 2023). Available at SSRN: https://ssrn.com/abstract=4842761 or http://dx.doi.org/10.2139/ssrn.4 842761 Acharya, Kamal, Web Chatting Application Management System Project Report (April 25, 2022). Available at SSRN: https://ssrn.com/abstract=4842771 or http://dx.doi.org/10.2139/ssrn.4 842771
  • 65.
    65 | Pa g e Acharya, Kamal, Automobile management system project report (May 25, 2022). Available at SSRN: https://ssrn.com/abstract=4846917 or http://dx.doi.org/10.2139/ssrn.4 846917 Acharya, Kamal, College bus management system project report (April 25, 2023). Available at SSRN: https://ssrn.com/abstract=4846920 or http://dx.doi.org/10.2139/ssrn.4 846920 Acharya, Kamal, Courier management system project report (May 25, 2023). Available at SSRN: https://ssrn.com/abstract=4846922 or http://dx.doi.org/10.2139/ssrn.4 846922 Acharya, Kamal, Event management system project report (April 25, 2021). Available at SSRN: https://ssrn.com/abstract=4846927 or http://dx.doi.org/10.2139/ssrn.4 846927 Acharya, Kamal, Library management system project report II (May 25, 2020). Available at SSRN: https://ssrn.com/abstract=4848857 or http://dx.doi.org/10.2139/ssrn.4 848857