646a131a8e8eeea149e820af709d70030819cc96
Stefan Schuermans add config file generator

Stefan Schuermans authored 7 years ago

1) /*
Stefan Schuermans rename "FlexiPix" to "Ether...

Stefan Schuermans authored 7 years ago

2)  * EtherPix config file generator
Stefan Schuermans add config file generator

Stefan Schuermans authored 7 years ago

3)  *
Stefan Schuermans update copyright year

Stefan Schuermans authored 7 years ago

4)  * Copyright 2010-2017 Stefan Schuermans <stefan schuermans info>
Stefan Schuermans add config file generator

Stefan Schuermans authored 7 years ago

5)  *
6)  * This program is free software: you can redistribute it and/or modify
7)  * it under the terms of the GNU General Public License as published by
8)  * the Free Software Foundation, version 3 of the License.
9)  *
10)  *
11)  * This program is distributed in the hope that it will be useful,
12)  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13)  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14)  * GNU General Public License for more details.
15)  *
16)  * You should have received a copy of the GNU Lesser General Public License
17)  * along with this program. If not, see <http://www.gnu.org/licenses/>.
18)  */
19) 
20) #include <stdlib.h>
21) 
22) #include "box.h"
23) #include "constants.h"
24) #include "point.h"
25) 
26) Box::Box()
27) {
28) }
29) 
30) Box::Box(const Point &bl, const Point &tr):
31)   mBL(bl),
32)   mTR(tr)
33) {
34)   fix();
35) }
36) 
37) void Box::fix()
38) {
39)   if (mBL.mX > mTR.mX) {
40)     double tmp = mBL.mX;
41)     mBL.mX = mTR.mX;
42)     mTR.mX = tmp;
43)   }
44)   if (mBL.mY > mTR.mY) {
45)     double tmp = mBL.mY;
46)     mBL.mY = mTR.mY;
47)     mTR.mY = tmp;
48)   }
49) }
50) 
51) void Box::getCenter(Point &center)
52) {
53)   center = (mBL + mTR) / 2.0;
54) }
55) 
56) void Box::include(const Point &p)
57) {
58)   if (p.mX < mBL.mX)
59)     mBL.mX = p.mX;
60)   if (p.mY < mBL.mY)
61)     mBL.mY = p.mY;
62)   if (p.mX > mTR.mX)
63)     mTR.mX = p.mX;
64)   if (p.mY > mTR.mY)
65)     mTR.mY = p.mY;
66) }
67) 
68) void Box::include(const Box &b)
69) {
70)   if (b.mBL.mX < mBL.mX)
71)     mBL.mX = b.mBL.mX;
72)   if (b.mBL.mY < mBL.mY)
73)     mBL.mY = b.mBL.mY;
74)   if (b.mTR.mX > mTR.mX)
75)     mTR.mX = b.mTR.mX;
76)   if (b.mTR.mY > mTR.mY)
77)     mTR.mY = b.mTR.mY;
78) }
79) 
80) bool Box::isIntersecting(const Box *pBox) const
81) {
82)   return getIntersection(pBox, NULL);
83) }
84) 
85) bool Box::getIntersection(const Box *pBox, Box *pIntersect) const
86) {
87)   Point bl = mBL, tr = mTR;
88)   if (pBox->mBL.mX > bl.mX)
89)     bl.mX = pBox->mBL.mX;
90)   if (pBox->mBL.mY > bl.mY)
91)     bl.mY = pBox->mBL.mY;
92)   if (pBox->mTR.mX < tr.mX)
93)     tr.mX = pBox->mTR.mX;
94)   if (pBox->mTR.mY < tr.mY)
95)     tr.mY = pBox->mTR.mY;
96)   if (tr.mX - bl.mX < -EPSILON || tr.mY - bl.mY < -EPSILON)
97)     return false;
98)   if (pIntersect) {
99)     pIntersect->mBL = bl;
100)     pIntersect->mTR = tr;
101)     pIntersect->fix();
102)   }
103)   return true;
104) }
105)