水無瀬の部屋 > Programming > sample > tools > toolptrc.cpp |
---|
1: //*********************************************************
2: // プロジェクト: TOOLS
3: // ファイル名: toolptrc.cpp
4: //*********************************************************
5: #include <header/toolptrc.h>
6: #include <header/tooldbg.h>
7: #include <header/toolbase.h> //
8: #include <header/toolwind.h>
9:
10:
11: //---------------------------------------------------------
12: // テスト関数 の 宣言
13: //---------------------------------------------------------
14: DECLARE_TESTPROC( test_ptrc );
15:
16:
17: //*********************************************************
18: // CopyPoint
19: // 座標 ptSrc を座標 ptDst に複写する
20: //*********************************************************
21: bool
22: CopyPoint
23: (
24: POINT *ptDst,
25: const POINT *ptSrc
26: )
27: {
28: CALLONCE_TESTPROC( test_ptrc ); // [テスト]
29:
30: // パラメタの仮定
31: ASSERT( IsValidPtr( ptDst, sizeof( *ptDst ) ) );
32: ASSERT( IsValidReadPtr( ptSrc, sizeof( *ptSrc ) ) );
33: ASSERT( ptSrc != ptDst );
34:
35: *ptDst = *ptSrc;
36: ASSERT( IsEqualPoint( ptDst, ptSrc ) );
37: return true;
38: }//CopyPoint
39:
40: //*********************************************************
41: // IsEqualPoint
42: // 2つの座標が等しければ真を返す
43: //*********************************************************
44: bool
45: IsEqualPoint
46: (
47: const POINT *a,
48: const POINT *b
49: )
50: {
51: CALLONCE_TESTPROC( test_ptrc ); // [テスト]
52:
53: // パラメタの仮定
54: ASSERT( IsValidReadPtr( a, sizeof( *a ) ) );
55: ASSERT( IsValidReadPtr( b, sizeof( *b ) ) );
56: ASSERT( a != b );
57:
58: return (a->y == b->y)
59: && (a->x == b->x);
60: }//IsEqualPoint
61:
62: //*********************************************************
63: // MakePoint
64: // 座標 pt を設定する
65: // 成功すれば真さもなくば偽を返す
66: //*********************************************************
67: bool
68: MakePoint
69: (
70: POINT *pt,
71: int x,
72: int y
73: )
74: {
75: CALLONCE_TESTPROC( test_ptrc ); // [テスト]
76:
77: // パラメタの仮定
78: ASSERT( IsValidPtr( pt, sizeof( *pt ) ) );
79:
80: pt->x = x;
81: pt->y = y;
82: return true;
83: }//MakePoint
84:
85: //*********************************************************
86: // OffsetPoint
87: // 指定された座標を指定されたオフセットだけ移動する
88: // x …… 座標を左に動かすときは負の値を指定する
89: // y …… 座標を上に動かすときは負の値を指定する
90: //*********************************************************
91: bool
92: OffsetPoint
93: (
94: POINT *pt,
95: int x,
96: int y
97: )
98: {
99: CALLONCE_TESTPROC( test_ptrc ); // [テスト]
100:
101: // パラメタの仮定
102: // ASSERT( (0 != x) || (0 != y) ); // あまりに不便か?
103: ASSERT( IsValidPtr( pt, sizeof( *pt ) ) );
104:
105: pt->x += x;
106: pt->y += y;
107: return true;
108: }//OffsetPoint
109:
110: //*********************************************************
111: // PointIntoRect
112: // 座標 pt を矩形 rc 内に移動する
113: //*********************************************************
114: bool
115: PointIntoRect
116: (
117: POINT *pt,
118: const RECT *rc
119: )
120: {
121: // パラメタの仮定
122: ASSERT( IsValidRect( rc ) );
123: ASSERT( IsValidPtr( pt, sizeof( *pt ) ) );
124:
125: pt->x = max( rc->left, min(pt->x, rc->right-1) );
126: pt->y = max( rc->top, min(pt->y, rc->bottom-1) );
127: ASSERT( PtInRect( rc, *pt ) );
128: return true;
129: }//PointIntoRect
130:
131: //*********************************************************
132: // GetCenterPoint
133: // 矩形 rc の中心 pt を得る
134: //*********************************************************
135: bool
136: GetCenterPoint
137: (
138: POINT *pt,
139: const RECT *rc
140: )
141: {
142: // パラメタの仮定
143: ASSERT( IsValidRect( rc ) );
144: ASSERT( IsValidPtr( pt, sizeof( *pt ) ) );
145:
146: pt->x = (rc->left + rc->right ) / 2;
147: pt->y = (rc->top + rc->bottom) / 2;
148: ASSERT( (rc->left <= pt->x) && (pt->x <= rc->right) );
149: ASSERT( (rc->top <= pt->y) && (pt->y <= rc->bottom) );
150: return true;
151: }//GetCenterPoint
152:
153: //*********************************************************
154: // GetRectHeight
155: // 矩形 rc の高さを返す
156: //*********************************************************
157: int
158: GetRectHeight
159: (
160: const RECT *rc
161: )
162: {
163: // パラメタの仮定
164: ASSERT( IsValidRect( rc ) );
165:
166: return rc->bottom - rc->top;
167: }//GetRectHeight
168:
169: //*********************************************************
170: // GetRectSize
171: // 矩形 rc の大きさを返す
172: //*********************************************************
173: bool
174: GetRectSize
175: (
176: const RECT *rc,
177: SIZE *size
178: )
179: {
180: // パラメタの仮定
181: ASSERT( IsValidRect( rc ) );
182: ASSERT( IsValidPtr( size, sizeof( *size ) ) );
183:
184: size->cx = GetRectWidth( rc );
185: size->cy = GetRectHeight( rc );
186: return true;
187: }//GetRectSize
188:
189: //*********************************************************
190: // GetRectWidth
191: // 矩形 rc の幅を返す
192: //*********************************************************
193: int
194: GetRectWidth
195: (
196: const RECT *rc
197: )
198: {
199: // パラメタの仮定
200: ASSERT( IsValidRect( rc ) );
201:
202: return rc->right - rc->left;
203: }//GetRectWidth
204:
205: //*********************************************************
206: // IsValidRect
207: // 矩形 rc が有効であれば真を返す
208: // ・左辺が右辺よりも左側にあるか右辺に等しい
209: // ・上辺が下辺よりも上側にあるか下辺に等しい
210: //*********************************************************
211: bool
212: IsValidRect
213: (
214: const RECT *rc
215: )
216: {
217: // パラメタの仮定
218: ASSERT( IsValidReadPtr( rc, sizeof( *rc ) ) );
219:
220: return (rc->top <= rc->bottom) && (rc->left <= rc->right);
221: }//IsValidRect
222:
223: //*********************************************************
224: // MakeSizeRect
225: // 左上隅座標 (x, y) で大きさ sz の矩形を得る
226: //*********************************************************
227: bool
228: MakeSizeRect
229: (
230: RECT *rc,
231: int x,
232: int y,
233: const SIZE *sz
234: )
235: {
236: // パラメタの仮定
237: ASSERT( IsValidPtr( rc, sizeof( *rc ) ) );
238: ASSERT( IsValidReadPtr( sz, sizeof( *sz ) ) );
239:
240: VERIFY( SetRect( rc, x, y, x + sz->cx, y + sz->cy ) );
241: ASSERT( IsValidRect( rc ) );
242: return true;
243: }//MakeSizeRect
244:
245: //*********************************************************
246: // PointOnRect
247: //*********************************************************
248: bool
249: PointOnRect
250: (
251: const RECT *rc,
252: const POINT *pt
253: )
254: {
255: // パラメタの仮定
256: ASSERT( IsValidRect( rc ) );
257: ASSERT( IsValidReadPtr( pt, sizeof( *pt ) ) );
258:
259: return ( pt->x >= rc->left ) && ( pt->x <= rc->right )
260: && ( pt->y >= rc->top ) && ( pt->y <= rc->bottom );
261: }//PointOnRect
262:
263: //*********************************************************
264: // ScaleRect
265: // 各辺の長さが rcDst : rcSrc == n : m となる矩形 rcDst を得る
266: //*********************************************************
267: bool
268: ScaleRect
269: (
270: RECT *rcDst,
271: const RECT *rcSrc,
272: int n,
273: int m
274: )
275: {
276: // パラメタの仮定
277: ASSERT( 0 < n );
278: ASSERT( 0 < m );
279: ASSERT( IsValidRect( rcSrc ) );
280: ASSERT( IsValidPtr( rcDst, sizeof( *rcDst ) ) );
281: // ASSERT( rcSrc != rcDst );
282:
283: POINT pt;
284: VERIFY( GetCenterPoint( &pt, rcSrc ) );
285: const int width = GetRectWidth( rcSrc );
286: const int height = GetRectHeight( rcSrc );
287: rcDst->left = pt.x - ((n * width) / (2 * m));
288: rcDst->top = pt.y - ((n * height) / (2 * m));
289: rcDst->right = pt.x + ((n * width) / (2 * m));
290: rcDst->bottom = pt.y + ((n * height) / (2 * m));
291: ASSERT( IsValidRect( rcDst ) );
292: return true;
293: }//ScaleRect
294:
295:
296: //******************************************************************************************************************
297: // TEST
298: //******************************************************************************************************************
299:
300:
301: #ifdef _DEBUG // デバッグ時のみ
302:
303:
304: //*********************************************************
305: // test_ptrc()
306: //*********************************************************
307: DEFINE_TESTPROC( test_ptrc )
308: {
309: //---------------------------------------------------------
310: // 定数 の テスト
311: //---------------------------------------------------------
312:
313: //---------------------------------------------------------
314: // ファイルスコープ関数 の テスト
315: //---------------------------------------------------------
316:
317: //---------------------------------------------------------
318: // 公開関数 の テスト
319: //---------------------------------------------------------
320:
321:
322: // PointSet
323: // IsEqualPoint
324: // CopyPoint
325: // OffsetPoint
326: {
327: POINT ptA, ptB, ptC;
328: VERIFY( MakePoint( &ptA, 0, 0 ) );
329: VERIFY( 0 == ptA.x );
330: VERIFY( 0 == ptA.y );
331: VERIFY( MakePoint( &ptB, 1, -1 ) );
332: VERIFY( 1 == ptB.x );
333: VERIFY( -1 == ptB.y );
334: VERIFY( MakePoint( &ptC, -1, 1 ) );
335: VERIFY( -1 == ptC.x );
336: VERIFY( 1 == ptC.y );
337: VERIFY( !IsEqualPoint( &ptA, &ptB ) );
338: VERIFY( !IsEqualPoint( &ptA, &ptC ) );
339: VERIFY( !IsEqualPoint( &ptB, &ptC ) );
340: VERIFY( CopyPoint( &ptB, &ptC ) );
341: VERIFY( IsEqualPoint( &ptB, &ptC ) );
342: VERIFY( -1 == ptB.x );
343: VERIFY( 1 == ptB.y );
344: VERIFY( OffsetPoint( &ptB, -1, 1 ) );
345: VERIFY( -2 == ptB.x );
346: VERIFY( 2 == ptB.y );
347: VERIFY( OffsetPoint( &ptB, 2, -2 ) );
348: VERIFY( 0 == ptB.x );
349: VERIFY( 0 == ptB.y );
350: VERIFY( IsEqualPoint( &ptB, &ptA ) );
351: }
352:
353: }//test_ptrc
354:
355:
356: #endif // #ifdef _DEBUG
357:
358:
359: //** end **
360:
参照:
水無瀬の部屋 > sample > tools > toolptrc.cpp |
---|
このページは cpp2web が出力しました。
水無瀬 優 postmaster@katsura-kotonoha.sakura.ne.jp
http://katsura-kotonoha.sakura.ne.jp/prog/code/tools/toolptrc_cpp.shtml