1 /* @(#)db2.c	1.2	04/18/83
2  *
3  * Copyright -C- 1982 Barry S. Roitblat
4  *
5  *      This file contains routines for implementing the database
6  * manipulations for the gremlin picture editor.
7  */
8 
9 #include "gremlin.h"
10 #include "grem2.h"
11 
12 /* imports from undodb.c  */
13 
14 extern UNRembAdd(), UNRembMod();
15 
16 /* imports from db1.c */
17 
18 extern ELT *DBCreateElt();
19 
20 /* imports from point.c */
21 
22 extern POINT *PTMakePoint(), *PTInit();
23 
24 /* imports from c */
25 
26 extern char *malloc();
27 extern char *strcpy();
28 
29 ELT *DBCopy(element,transform,db)
30 ELT *element, *(*db);
31 float transform[3][2];
32 /*
33  *      This routine creates a copy of the the element transformed by
34  * the transformation matrix and adds the new copy to the database.
35  */
36 
37 {
38 	POINT *pt, *newlist;
39 	char *newtext;
40 
41 	newlist = PTInit();
42 	pt = element->ptlist;
43 	while ( !Nullpoint(pt) )
44 	{                  /* matrix multiply */
45 		(void) PTMakePoint((  ( (pt->x) * transform[0][0])
46 		                    + ( (pt->y) * transform[1][0])
47 		                    + transform[2][0]),
48 		                   (  ( (pt->x) * transform[0][1])
49 		                    + ( (pt->y) * transform[1][1])
50 		                    + transform[2][1]), &newlist);
51 		pt = pt->nextpt;
52 	}  /* end while */;
53 	newtext = malloc((unsigned) strlen(element->textpt) + 1);
54 	(void) strcpy(newtext, element->textpt);
55 	return( DBCreateElt(element->type, newlist, element->brushf,
56 	                    element->size, newtext, db) );
57 }  /* end copy */
58 
59 
DBXform(element,transform,db)60 DBXform(element, transform, db)
61 ELT *element;
62 float transform[3][2];
63 ELT *(*db);
64 /*
65  *      This routine transforms the element by multiplying the
66  * coordinates of each of the points in the element by the
67  * transformation matrix.
68  */
69 
70 {
71 	POINT *pt;
72 	float px, py;
73 
74 	UNRembMod(element, db);
75 	pt = element->ptlist;
76 	while ( !Nullpoint(pt) )
77 	{
78 		px =  ( (pt->x) * transform[0][0] )
79 		    + ( (pt->y) * transform[1][0] )
80 		    + transform[2][0];
81 		py =  ( (pt->x) * transform[0][1] )
82 		    + ( (pt->y) * transform[1][1] )
83 		    + transform[2][1];
84 		pt->x = px;
85 		pt->y = py;
86 		pt = pt->nextpt;
87 	}  /* end while */;
88 }  /* end Xform */
89 
90 
91 DBChangeBrush(element, brush, db)
92 ELT *element, *(*db);
93 int brush;
94 /*
95  *      This routine changes the brush attribute of the element
96  */
97 
98 {
99 	UNRembMod(element, db);
100 	element->brushf = brush;
101 }  /* end ChangeBrush */
102 
103 DBChangeFont(element, font, size, db)
104 ELT *element, *(*db);
105 int font, size;
106 /*
107  *      This routine changes the font and size attributes of the  given
108  * element.
109  */
110 
111 {
112 	UNRembMod(element, db);
113 	element->brushf = font;
114 	element->size = size;
115 }  /* end ChangeFont */
116