home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World Komputer 2001 December
/
pcwk12201b.iso
/
Reklamy
/
CAD-Projekt
/
MegaCAD-4_5
/
CC
/
LEKCJA05.C_
/
LEKCJA05.C
Wrap
C/C++ Source or Header
|
1995-09-01
|
7KB
|
256 lines
/* LEKCJA05.C
//---------------------------------------------------------------------------
Tematy:
Struktura budowy danych.
Definiowanie elementów:
PUNKT, ODCINEK, OKRñG, ¥UK, ELIPSA, WYCINEK ELIPSY
//---------------------------------------------------------------------------
Funkcje:
EXT(212) ulong CreateEntity(
EXT(210) void savecount (
//---------------------------------------------------------------------------
Elementy rysunku sÑ zapisywane w MegaCADzie w formie struktury
zdefiniowanej nast⌐pujÑco:
typedef struct _entity
{
ushort type; // typ elementu
ulong id; // numer identyfikacyjny
t_attribs attr; // atrybuty elementu
t_en_data data; // dane
} t_entity;
typedef struct _attribs
{
uchar stl; // styl linii (1 - 14)
uchar pen; // pisak plotera(0 - 15) u╛ytkownik (1 - 16) !!!
uchar col; // kolor (1 - 15)
uchar wid; // gruboÿå linii(1 - 8)
uchar lay; // layer (0 - 255)
uchar grp; // grupa (0 - 255)
} t_attribs;
typedef union _en_data
{
t_text txt; // tekst
t_point pnt; // punkt
t_line lin; // linia
t_circle cir; // okrÑg
t_c_arc arc; // êuk
t_ellipse elp; // elipsa
t_e_arc ela; // wycinek elipsy
t_polyln pol; // polilinia-kontur
t_polygon spl; // zbiór punktów
t_dimension dim; // wymiarowanie
} t_en_data;
//---------------------------------------------------------------------------
W MegaCAD-zie jest zdefiniowanych 19 podstawowych typów elementów,
którym nadano wêasne nazwy.
E_POINT : punkt
E_LINE : odcinek
E_CIRCLE : okrÑg
E_C_ARC : êuk
E_ELLIPS : elipsa
E_E_ARC : wycinek elipsy
E_POLYLN : polilinia (kontur)
E_SPLINE : linia êamana
E_TXTLIN : linia tekstu
E_TXTBLK : blok tekstu
E_MACRO : makro
E_XHATCH : kreskowanie
E_H_DIM : wymiar poziomy
E_V_DIM : wymiar pionowy
E_P_DIM : wymiar ukoÿny
E_A_DIM : wymiar kÑta
E_D_DIM : wymiar ÿrednicy
E_R_DIM : wymiar promienia
E_T_DIM : tolerancja wymiaru
//---------------------------------------------------------------------------
Podstawowe elementy graficzne u╛ywane w MegaCAD-zie sÑ zdefiniowane
jako struktury. Oto ich definicje (znajdujÑ si⌐ one w pliku MEGATYP.H)
i znaczenie elementów struktur.
PUNKT:
typedef struct _point
{
double x; // wspóêrz⌐dna X
double y; // wspóêrz⌐dna Y
} t_point;
ODCINEK czyli LINIA:
typedef struct _line
{
double x1; // wspóêrz⌐dna X poczÑtku
double y1; // wspóêrz⌐dna Y poczÑtku
double x2; // wspóêrz⌐dna X koΣca
double y2; // wspóêrz⌐dna Y koΣca
} t_line;
OKRñG:
typedef struct _circle
{
double xm; // wspóêrz⌐dna X ÿrodka okr⌐gu
double ym; // wspóêrz⌐dna Y ÿrodka okr⌐gu
double rd; // promieΣ
} t_circle;
¥UK:
typedef struct _c_arc
{
double xm; // wspóêrz⌐dna X ÿrodka okr⌐gu
double ym; // wspóêrz⌐dna Y ÿrodka okr⌐gu
double rd; // promieΣ
double a1; // kÑt poczÑtku êuku
double a2; // kÑt koΣca êuku
} t_c_arc;
ELIPSA:
typedef struct _ellipse
{
double xm; // wspóêrz⌐dna X ÿrodka elipsy
double ym; // wspóêrz⌐dna Y ÿrodka elipsy
double ra; // poêowa ÿrednicy 1 osi
double rb; // poêowa ÿrednicy 2 osi
double an; // kÑt poêo╛enia osi 1
} t_ellipse;
WYCINEK ELIPSY:
typedef struct _e_arc
{
double xm; // wspóêrz⌐dna X ÿrodka elipsy
double ym; // wspóêrz⌐dna Y ÿrodka elipsy
double ra; // poêowa ÿrednicy 1 osi
double rb; // poêowa ÿrednicy 2 osi
double an; // kÑt poêo╛enia osi 1
double a1; // kÑt poczÑtku wycinka w stosunku do osi 1
double a2; // kÑt koΣca wycinka w stosunku do osi 1
} t_e_arc;
//---------------------------------------------------------------------------
EXT(212) ulong CreateEntity( //
ushort type, // typ elementu
t_attribs *attr, // atrybuty (albo NULL)
void *data); // dane elementu
Opis:
Funkcja tworzy zdefiniowany element i przedstawia go na ekranie.
Jeÿli parametr 'attr' ma wartoÿå NULL element b⌐dzie tworzony z
wartoÿciami aktualnie ustawionymi w programie MegaCAD.
Return:
0L => w przypadku wystÑpienia bê⌐du
ID => numer identyfikacyjny 'ID' stworzonego elementu
Przykêad wywoêania:
CreateEntity(E_POINT,NULL,&punkt);
//---------------------------------------------------------------------------
EXT(210) void savecount (void);
Opis:
Funkcja sêu╛y do zakoΣczenia operacji zapisu stworzonych elementów.
Wszystkie elementy (stworzone lub zmienione) od ostatniego wywoêania
funkcji 'savecount' sÑ traktowane przez 'Undo' i 'Redo' jako "jedna
caêoÿå".
Przykêad wywoêania:
savecount();
*/
//---------------------------------------------------------------------------
//Andrzej Setman WiedeΣ 18.08.95
//---------------------------------------------------------------------------
#include "std.h"
#include "megatyp.h"
#include "megacad.h"
//---------------------------------------------------------------------------
short main(char *filename, char *args)
{
int f;
t_point punkt;
t_line linia;
t_circle okrag;
t_c_arc luk;
t_ellipse elipsa;
t_e_arc wyc_elipsy;
// 20 punktów
for (f=1; f<=20; f++)
{
punkt.y= 140+f;
punkt.x= 8*f;
CreateEntity(E_POINT,NULL,&punkt);
}
// 20 linii
linia.x1= 200;
linia.y1= 150;
linia.y2= 20;
for (f=1; f<=20; f++)
{
linia.x2= 120+5*f;
CreateEntity(E_LINE,NULL,&linia);
}
// 20 okr⌐gów
for (f=1; f<=20; f++)
{
okrag.xm= 20+f;
okrag.ym= 30+f;
okrag.rd= 5+f;
CreateEntity(E_CIRCLE,NULL,&okrag);
}
// 20 êuków
luk.xm= 120;
luk.ym= 50;
for (f=1; f<=20; f++)
{
luk.rd= 5+2*f;
luk.a1= DEF_PI/24*f;
luk.a2= DEF_PI/12*f;
CreateEntity(E_C_ARC,NULL,&luk);
}
// 20 elips
for (f=1; f<=20; f++)
{
elipsa.xm= 40+f;
elipsa.ym= 90+f;
elipsa.ra= f;
elipsa.rb= 3*f;
elipsa.an= DEF_PI/36*f;
CreateEntity(E_ELLIPS,NULL,&elipsa);
}
// 10 wycinków elips
for (f=1; f<=10; f++)
{
wyc_elipsy.xm= 140+f;
wyc_elipsy.ym= 130+f;
wyc_elipsy.ra= 1+f;
wyc_elipsy.rb= 5+3*f;
wyc_elipsy.an= DEF_PI/18*f;
wyc_elipsy.a1= DEF_PI/18*f;
wyc_elipsy.a2= DEF_PI/9*f;
CreateEntity(E_E_ARC,NULL,&wyc_elipsy);
}
savecount();
return(0);
}
//----------------------------koniec-----------------------------------------