// ////////////////////////////////////////////////////////////////////// #include "stdafx.h"3 Q1 t2 O) I1 w2 s3 C% i6 S0 q- y #include "..\INC\TypeSet.h" //用法示例% u; ^7 r# J9 s; w) o& D void TestTypeset(HDC dc) {* Z0 g V* E, O& b% S- s //声明一个板材对象4 @8 I) ^5 ?, x I r CTypeset typeset;5 @4 U+ F; q8 [# { //设置板材对象大小) k9 o3 `4 T7 C; ~1 A( T typeset.m_Desktop.m_dHeight=9999;- y* t9 p/ K$ H& m0 x7 i+ q typeset.m_Desktop.m_dWidth=100;8 d& R8 {+ i) M1 s: |0 z; m) C //声明一个排样元素对象 CMaterial material; //设置排样元素对象大小9 C/ V# d# Y! v material.SetSize(20,99); //添加进入板材对象. d" G5 H/ W) v$ E typeset.Add(&material);. J' f: e6 W h( B //继续添加& v0 X1 ?; x" j$ z material.SetSize(99,80);- C* m; }& M+ f8 K9 q typeset.Add(&material); material.SetSize(10,60); typeset.Add(&material);/ t& \) B* ^ f material.SetSize(50,20);2 ?' }' k8 |, |' z, E typeset.Add(&material); //添加完毕,进行排样1 n, W8 Y+ | r1 _8 \ typeset.Go();5 l8 G: z2 t3 j5 x% P; \8 b) n6 E //排样完毕,输出 list<CMaterial*>::iterator iter; //画板材对象 ::Rectangle(dc,typeset.m_Desktop.m_dX,typeset.m_Desktop.m_dY, typeset.m_Desktop.m_dX+typeset.m_Desktop.m_dWidth,0 }# r9 p2 Y& a typeset.m_Desktop.m_dY+typeset.m_Desktop.m_dHeight);7 U5 F& s2 n2 N# R. a6 x+ u //画排样元素对象 for(iter=typeset.m_MaterialList.begin();iter!=typeset.m_MaterialList.end();iter++) { ::Rectangle(dc,(*iter)->m_dX,(*iter)->m_dY, (*iter)->m_dX+(*iter)->m_dWidth, (*iter)->m_dY+(*iter)->m_dHeight); }5 M1 q+ j$ I* X6 e6 W" [ . Q, e/ V1 J( C; G% j! \: Y/ c }0 H& | m2 P( i2 E0 x& m# N ////////////////////////////////////////////////////////////////////// // CMaterial Class ////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////// // Construction/Destruction //////////////////////////////////////////////////////////////////////8 P2 F. @) m, A5 j' Q' e' z #define ZERO 0.000016 \# V+ m# Y. y: {6 A ~ CMaterial::CMaterial()% w/ d8 k# d- g$ T" c5 j* _ s {1 z6 e6 T5 b5 y7 G m_dHeight=100;$ l) [* y. M E2 n9 d) P, W* P3 {- j9 y9 q m_dWidth=100;% U; B0 h( v( C& U6 y- h$ T m_dX=0; m_dY=0; m_bUsed=FALSE; m_bSeletcted=FALSE;5 O& c$ m7 ^8 K v3 [7 k! s5 m# a m_bRotated=FALSE; m_iIndex=0;& d' h' L; C3 z2 _) r } CMaterial::CMaterial(double dWidth,double dHeight)0 f1 C) {. W; G. o: l { SetSize(dWidth,dHeight);" q7 C+ i+ w/ T0 L: I9 \' V m_dX=0;3 {5 z8 `9 {+ Q% t8 f m_dY=0; m_bUsed=FALSE;" f6 K9 `1 ?# S9 Y8 e+ l" t m_bSeletcted=FALSE; m_bRotated=FALSE;6 |* }7 p5 o* `2 h m_iIndex=0;" a- {' F* E! s2 y } CMaterial::CMaterial(CMaterial *pMaterial) {- h, |. \, I9 z3 B+ p" j m_dX=pMaterial->m_dX; m_dY=pMaterial->m_dY;! J% P9 t9 ]" F: B m_dHeight=pMaterial->m_dHeight; m_dWidth=pMaterial->m_dWidth; m_bUsed=pMaterial->m_bUsed;6 p8 Y8 i, G' U$ Z m_bSeletcted=pMaterial->m_bSeletcted; m_bRotated=pMaterial->m_bRotated;- D1 \; p+ `( p0 t a; k* x) g m_iIndex=pMaterial->m_iIndex; }) s+ ] G, K; k) g, ^5 | void CMaterial::SetSize(double dWidth, double dHeight) {- G' p7 D7 P& R m_dHeight=dHeight;6 `" I- ~. X9 K: ~) K0 {+ T: f m_dWidth=dWidth;0 G9 Q6 f3 r8 p; u7 }' D) K }- D1 g: [8 G! D2 C( x. T6 G% R/ o, N/ \ void CMaterial::Rotated()' ?- _# T' W7 H3 \ @: z& M w6 T {* I* F4 D$ s M& U m_bRotated=!m_bRotated; double dA=m_dHeight; m_dHeight=m_dWidth; m_dWidth=dA; } CMaterial::~CMaterial(). P/ S1 r9 X, v {2 C3 p% v, y4 s3 }1 B7 e }! F! D" w5 I9 _( C! Y ////////////////////////////////////////////////////////////////////// // Construction/Destruction //////////////////////////////////////////////////////////////////////2 ~# o( w: x: i6 Z& b$ B. {1 k1 X7 `. s CTypeset::CTypeset() { Clear();9 Z$ X4 I. }" r& M. S) @6 ^3 U }; E( M" }: {* t; A' q( D5 Z CTypeset::~CTypeset()0 k9 y% x0 s7 o. V { Clear(); : ~! y( p- B3 U) h. c, W% z } ) t( Z) U4 _( b0 P- z void CTypeset::Clear() {+ p. K5 H8 H. x" _1 ^% z5 {) d: A' J list<CMaterial*>::iterator iter;5 J, N. ^+ a5 A* [. H8 | for(iter=m_MaterialList.begin();iter!=m_MaterialList.end();iter++)# j. [% o" w$ ?3 g2 t { delete (*iter);9 J% y$ s2 E. k } m_MaterialList.clear();- _% i; U$ W' Q0 b1 [ m_iCurIndex=0; } void CTypeset::Add(CMaterial *pMaterial)8 [. S9 x8 U, e; s/ K {, Z; L A0 i; n) R/ D CMaterial *p=new CMaterial(pMaterial); |
// TypeSet.cpp: implementation of the CTypeset class.# P4 _) I9 x7 E+ D0 T
精华推荐
换一换
p->m_iIndex=m_iCurIndex;
m_MaterialList.insert(m_MaterialList.end(),p);
m_iCurIndex++;7 x0 C: E( v" e% R) s
}) k8 s8 u. y2 S/ A0 d7 X! c" R0 D
" E9 Q4 A( F5 W: [5 g
void CTypeset::Sort()
{. N3 I' ` ~0 B+ h5 X: W
list<CMaterial*> MaterialList;* s' n! n* P0 j8 M6 E
list<CMaterial*>::iterator iter1,iter2,iter3;& x; B. ]. F, ~1 Q9 k. \- E! ~
bool bSourceInvert=false;
while (!m_MaterialList.empty())9 v# ]7 k R5 b) v2 h6 k
{
double dMaxLen=0;
iter2=m_MaterialList.begin();/ s8 [! C& E$ Q6 E y
CMaterial *p=NULL;7 X" N* C, P" x/ w1 }
iter1=m_MaterialList.end()--;: c8 V3 \# H3 Y; P: H& ^# ^
iter3=iter2;
while(iter2!=iter1)/ W2 e/ n3 X& U9 K# n6 Y
{! x6 g" ~5 W9 `4 ^# d; \
if((*iter2)->m_dWidth>dMaxLen)9 T( Y, `6 _) q6 d+ `6 A
{3 m1 N! _" A w4 K
p=*iter2;
iter3=iter2;
dMaxLen=(*iter2)->m_dWidth;, S1 \3 N3 c: P/ x+ c
bSourceInvert=false; f+ t0 }/ X) }3 w5 j
}8 X5 v5 @) z; x" a
if((*iter2)->m_dHeight>dMaxLen)
{9 }& z) M1 _& |+ Q1 w' @( Y* C. C8 I
p=*iter2;
iter3=iter2;4 N: q( G: }& C% z* ?& u
dMaxLen=(*iter2)->m_dHeight;
bSourceInvert=true;% R7 t# V+ |) d' _% e
}: q1 w3 A% P2 n; O* B$ i( e f
iter2++;, [5 J4 T" `6 ?# P1 x% H% K3 C5 @6 w6 F
}2 s2 z$ A1 z( J3 @) F4 t- \( E
if(p!=NULL)
{ N) c( b# ~7 w8 P) k [, L
if(bSourceInvert)$ O7 X: Z T/ a/ S' ~! b
p->Rotated(); # M: @ R1 {+ F: n1 s
MaterialList.insert(MaterialList.end(),p);; G; U8 p& M7 \, |; x
m_MaterialList.erase(iter3);
}; g( q/ e3 p+ }6 a
}
m_MaterialList.clear();
for(iter1=MaterialList.begin();iter1!=MaterialList.end();iter1++)1 C' x. R6 v, P
{. F" c$ S5 ~2 ?, E7 S
m_MaterialList.insert(m_MaterialList.end(),(*iter1));8 _8 a3 I9 T/ e4 h7 W7 X9 N
}
MaterialList.clear();
}
double CTypeset::Go()2 a% d3 e! v% H' j P0 l
{# ~3 L/ ^( I: s8 f- _ S8 Y7 B
double dRet=0;
list<CMaterial*> List;
list<CMaterial*>::iterator iter;
Sort();
Typeset(m_Desktop.m_dX,m_Desktop.m_dY,
m_Desktop.m_dWidth,m_Desktop.m_dHeight,&List);' H; b7 f) j5 K% p/ F
m_MaterialList.clear();
for(iter=List.begin();iter!=List.end();iter++)$ X" S: M/ e& l- ]0 \5 c; I8 \
{
if((*iter)->m_dX<ZERO)
{- o/ h; d, t2 i( d
dRet+=(*iter)->m_dY;* {* i/ m1 Q& N) N$ @/ n$ M, l
}8 x: |, A2 Q i" r% B( C
(*iter)->m_bUsed=FALSE;$ v& Z) N9 F2 S! F+ I. {
(*iter)->m_bSeletcted=FALSE;
m_MaterialList.insert(m_MaterialList.end(),(*iter));6 G2 w) U0 G& V% V+ C9 ?7 X
}5 g# u1 M' ^! }- ~ X% c
List.clear();& v H. c6 Y- i
return dRet;
}8 ]' i/ X I1 o/ w1 w B3 J+ _3 M
% v* e) d( f. E0 p; |, C+ s
# W8 B- v& x( g/ G4 {" u% c7 y
double CTypeset::Typeset(double dStartX,double dStartY,double dStartHei,double dStartWid,4 {6 v6 z6 B( [$ i
list<CMaterial*> *pList)0 d) \/ Z1 C1 H0 X/ |1 F1 z
{
CMaterial *tmpunit=NULL;
list<CMaterial*>::iterator iter,iter1;3 ]- Z% A9 Y% A- M2 K2 c
double dArea1,dArea2,dArea;//横放和竖放时的排样面积,和最后方案的排样面积* T2 c3 Y/ t+ n9 @
double dRestArea1,dRestArea2;//横放和竖放时排样后的剩余面积. L* v& e8 E r* ?3 e. G) q- v. E
list<CMaterial*> List1,List2;////横放和竖放时的最佳排样序列
double dHeight,dWidth;" t3 `8 R D9 {
1 e% F: z3 q2 D- \
; [, A3 x7 d$ S7 S/ R
dHeight=dStartHei;
dWidth=dStartWid;7 a6 U7 R3 P& z& q! S2 k- E
5 r/ |* ~% |; s3 }# o+ g3 t
if(m_MaterialList.empty())
return 0;. K9 H1 H# f- p6 }7 l! o
for(iter=m_MaterialList.begin();iter!=m_MaterialList.end();iter++)* A' C3 f- n7 |+ @ |
{
if((*iter)->m_bUsed!=FALSE)# V( A+ Q1 X3 v. {1 R* ^
continue;
if((*iter)->m_dWidth<(*iter)->m_dHeight)5 Q! ~5 Z4 a* w# x# a8 X
{
MessageBox(NULL,"错误","ERROR",MB_OK);3 B' C2 R9 `" n& D! a* ?" f
return 0;/ }# x3 v) A- n" i8 v) p- B
}8 P0 H2 |' ^0 s
//找出一张能放入的最大的没有排过的板材" G! u7 q* G! n0 Y: v6 O
//如果板材横竖都能放入0 @- c& L0 H q, l" {0 p
if(((dHeight>(*iter)->m_dWidth-ZERO)&&(dWidth>(*iter)->m_dHeight-ZERO))' ~7 @' V- I; C+ M
&&((dHeight>(*iter)->m_dHeight-ZERO)&&(dWidth>(*iter)->m_dWidth-ZERO)))
{
if(dStartX<ZERO)
dWidth=(*iter)->m_dHeight;; q+ Q- y" z- p5 i/ W3 H% w
9 ~- j! Z3 ]' B" _; C S" G
(*iter)->SetUsed(TRUE);//对该图排样
" J' d" `! ~1 m- `
//先横着放入继续排样,计算剩余面积
dArea1=Typeset(dStartX+(*iter)->m_dWidth,dStartY,, V% N8 b6 C. E4 f
dHeight-(*iter)->m_dWidth,(*iter)->m_dHeight,&List1);" i! X( L m9 M2 q1 t# t) l5 }
dRestArea1=dHeight*dWidth-dArea1-(*iter)->GetArea();
dRestArea1=dRestArea1/(dHeight*dWidth);//剩余面积率
3 G7 s8 ]; Y: L5 D* ~1 A
//将刚才排过的板材状态还原,再竖直放入该图继续排样,计算剩余面积8 m' J* L, }2 h1 y* I+ w
if(dStartX<ZERO)7 g1 m3 g1 H; M# V. v' A
dWidth=(*iter)->m_dWidth;# j0 h" H) m) e5 p9 y8 U
- |/ j7 _- J/ Y: r- C
SetStatus(&List1,FALSE);
tmpunit=(*iter)->Copy();
tmpunit->Rotated();$ j8 O; y n" V% o6 Z( K
dArea2=Typeset(dStartX+tmpunit->m_dWidth,dStartY,
dHeight-tmpunit->m_dWidth,tmpunit->m_dHeight,&List2);' A0 [6 x- E( j- V' E S
dRestArea2=dHeight*dWidth-dArea2-tmpunit->GetArea();+ F) [; t5 K, v6 l
dRestArea2=dRestArea2/(dHeight*dWidth);//剩余面积率$ ?3 u$ _' W/ u; R$ ^( N
}
else if((dHeight>(*iter)->m_dWidth-ZERO)&&(dWidth>(*iter)->m_dHeight-ZERO))//如果板材只能横着放入
{
if(dStartX<ZERO)9 _( G: Z9 @- d9 p P& K
dWidth=(*iter)->m_dHeight;
(*iter)->SetUsed(TRUE);//对该图排样9 t5 F: n2 y( W( t1 M( `' `
dArea1=Typeset(dStartX+(*iter)->m_dWidth,dStartY,
dHeight-(*iter)->m_dWidth,(*iter)->m_dHeight,&List1);
dRestArea1=dHeight*dWidth-dArea1-(*iter)->GetArea();. {; W7 Z' A: q. C7 x+ Z
dRestArea1=dRestArea1/(dHeight*dWidth);//剩余面积率
/ M5 N9 S! j1 f- R$ m& R3 X
dRestArea2=dRestArea1+10;//不再尝试竖放,将竖放剩余面积设大# s5 L; [1 l7 I& B4 z" C5 d
}
else if((dHeight>(*iter)->m_dHeight-ZERO)&&(dWidth>(*iter)->m_dWidth-ZERO))//如果板材只能竖着放入
{
if(dStartX<ZERO)! p. b/ F7 D* d
dWidth=(*iter)->m_dWidth;* Y/ H) H) }# t, h; @% @
(*iter)->SetUsed(TRUE);//对该图排样
tmpunit=(*iter)->Copy();8 r; } {: V) D6 d& N
tmpunit->Rotated();# w6 }8 ] C% o4 G
dArea2=Typeset(dStartX+tmpunit->m_dWidth,dStartY,
dHeight-tmpunit->m_dWidth,tmpunit->m_dHeight,&List2);
dRestArea2=dHeight*dWidth-dArea2-tmpunit->GetArea();
dRestArea2=dRestArea2/(dHeight*dWidth);//剩余面积率' J- E; E) l+ O# [- f* P
4 @6 H% D5 B- t/ t# y
dRestArea1=dRestArea2+10;//不再尝试横放,将横放剩余面积设大) L; ?$ I/ l7 c+ u1 T
}
else
continue;
//记录优化的排样序列& r0 p2 P1 P& { ~: ^. g
CMaterial *tmp=NULL;) k+ y/ s* f% L) J" w- j
if(dRestArea1<dRestArea2+ZERO)//当前板材横向排结果优化- z( I% Z( ~7 i3 \( R* U
{1 a8 E+ ]$ V# e0 E' C: W+ @
SetStatus(&List2,FALSE);//将纵向排的排样序列还原状态. k! p4 s8 y4 T L
SetStatus(&List1,TRUE);//将横向排的排样序列标志为使用7 \3 [0 S& o5 {3 Y
dArea=dArea1+(*iter)->GetArea();;
tmp=(*iter)->Copy();
tmp->m_dX=(int)dStartX;/ _6 A. }$ x2 t% h- C+ J0 p
tmp->m_dY=(int)dStartY;$ U+ `7 E, z4 U" y1 `
pList->insert(pList->end(),tmp);) [2 \! V7 f2 u7 U3 F. j& T
while(!List1.empty()) G' ?5 K- a: q( `: R, E
{9 _, u% r5 \7 o! l/ M0 e& s
iter1=List1.begin();+ N7 G+ i9 ]/ J: f0 a6 O
pList->insert(pList->end(),*iter1);
List1.erase(iter1);/ u7 ^: M: r& V: @9 F3 L( o. p, y
}
//释放不好的序列
for(iter1=List2.begin();iter1!=List2.end();iter1++)' d% I! Y) v* D% H& u8 ~
{
delete (*iter1);4 Y% R3 K2 w! S7 f' w' [; S. L9 `
}
List2.clear();
delete tmpunit;3 Z; Y# r, u6 A
}
else//当前板材纵向排结果优化
{
SetStatus(&List1,FALSE);//将横向排的排样序列还原状态
SetStatus(&List2,TRUE);//将纵向排的排样序列标志为使用; W0 j9 w1 g2 G9 F2 n/ T& H
if(tmpunit==NULL)
{
MessageBox(NULL,"错误","ERROR",MB_OK);
return 0;# j' a7 [8 Z7 \5 t: L Y7 @; x' p! D
}
6 Q2 V8 }5 e7 ^, a7 ?8 [
dArea=dArea2+(*iter)->GetArea();. q- m1 Q8 E3 s) M# p$ d+ e' o; v
tmp=tmpunit->Copy();
tmp->m_dX=(int)dStartX;8 R; P' Z# D, R0 \8 u
tmp->m_dY=(int)dStartY;* P) V8 l! }' v/ [
pList->insert(pList->end(),tmp);
while(!List2.empty()) l9 O, P3 y) |2 B' L
{" x, {5 `. A+ p5 k/ C
iter1=List2.begin();
pList->insert(pList->end(),*iter1);
List2.erase(iter1);# t+ Q7 L- V6 ^# H0 H
}6 x+ J& p: }( h! G' U. x9 p
//释放不好的序列) ]' E8 P4 D8 C) I0 r7 y# a8 B
for(iter1=List1.begin();iter1!=List1.end();iter1++)! B. t y5 ]( Q1 G
{
delete (*iter1);
}: C2 g# o, S: b! Z }
List1.clear();2 y# D( P. @. D0 X1 m8 x; E
delete tmpunit;+ o4 W+ J3 k0 h: F4 d7 R
}! F) g- K! h! J" {9 I, W
double next_x,next_y,next_len,next_wid;6 Z; g1 S7 P+ B. T% N- }" g+ M" V
next_x=dStartX;, [, Y5 K# p. R0 G" H. s6 }2 I
next_y=dStartY+tmp->m_dHeight;6 y. j4 g$ W2 t4 x( F7 q6 K! b
next_len=dHeight;
next_wid=dStartWid-tmp->m_dHeight;* L) `9 W: D( V1 C
if(next_wid>ZERO)//板材还有剩余: m7 f6 l' ~5 N ^: C
{
//继续排下一行
dArea=dArea+Typeset(next_x,next_y,next_len,next_wid,&List1);
//记录排样序列& L. t; L9 K" ?) T5 f
SetStatus(&List1,TRUE);
for(iter1=List1.begin();iter1!=List1.end();iter1++)
{
pList->insert(pList->end(),(*iter1));3 H3 ?3 X5 Q* B$ r7 K0 }; _/ A
}
List1.clear();
}
return dArea;
}
return 0;6 h: I2 l5 p( q7 J9 J& Y
}
) |- j! ^0 J/ o+ }7 g
void CMaterial::SetUsed(BOOL bUsed)+ j, W m, M9 q! i: a, N4 W: L
{
m_bUsed=bUsed;: C" ~& i$ I/ T9 x( s2 _
}
) r. A3 X7 t1 C! S/ E
void CTypeset::SetStatus(list<CMaterial*> *pList, BOOL bUsed)8 Q" T* f) y* ]; w2 |
{
list<CMaterial*>::iterator iter1,iter2;* K2 O' L4 q6 J4 ~% i, l5 K
for(iter1=m_MaterialList.begin();iter1!=m_MaterialList.end();iter1++)
{& `1 F+ i) n. o0 d
for(iter2=pList->begin();iter2!=pList->end();iter2++)7 O. A0 j8 X. ~( n; @7 C7 A
{' \$ c1 n5 n0 y9 M9 f8 _
if((*iter1)->m_iIndex==(*iter2)->m_iIndex)
{+ ~" g1 D; m) Z3 r
(*iter1)->m_bUsed=bUsed;
}+ m8 S7 O! Z' w3 p/ s
}
}
}* U5 Q! Y; u$ l! o2 I! i& t) q# u
, N6 I6 {" J9 z6 x9 C1 j& T
CMaterial* CMaterial::Copy()
{
CMaterial* p=new CMaterial(this);
return p;
}
* D6 ^ c1 i" D! }' u- F/ T
! g" U* [% J' `" w$ z
7 x7 J+ @% @1 f: J2 A! i% q9 `/ Z
// TypeSet.h: interface for the CTypeset class.5 R& Q' y$ }+ u3 D: ?+ }* a$ }
// [1 P4 ?* E; C) B& R) a# `
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_TYPESET_H__46213FAE_D2D6_42A6_B801_41D9109CD0FB__INCLUDED_)/ N8 q4 X7 R4 H9 v. J, g6 M! Q' |
#define AFX_TYPESET_H__46213FAE_D2D6_42A6_B801_41D9109CD0FB__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#pragma warning(disable:4786)
#pragma warning(disable:4251)
#include <list>
#include <string>
using namespace std;# V0 _; R& R5 Y9 K# L0 D1 p$ [
#ifdef TYPESETLIB_EXPORTS% [& ]9 Z; T+ {( N, a- [
#define TYPESETLIB_API __declspec(dllexport)" C: E8 F% F2 O, Q* x0 j
#else
#define TYPESETLIB_API __declspec(dllimport)
#endif
# ]6 ^4 o% U2 r
5 _3 K4 ?" y t5 l( j$ a+ B) y
TYPESETLIB_API void TestTypeset(HDC dc);# ~# Q# h. y3 K$ L
class TYPESETLIB_API CMaterial 9 t8 l0 K2 G: w! c. V" U4 c
{) l& {& b1 J, H5 z$ `, p1 J6 i
public:& Z5 s) ?; O$ h/ M, i
virtual CMaterial* Copy();! X2 ?+ |4 [1 V8 U# U1 K
virtual void SetUsed(BOOL bUsed);7 a7 J7 Y+ |; E3 c Y" T" y: n
virtual void Rotated();
virtual void SetSize(double dWidth,double dHeight);: [, K5 q- P" @: ]+ X3 f( K4 P
virtual double GetArea(){ return m_dHeight*m_dWidth; }
CMaterial();# n' f6 p% L9 j' r M
CMaterial(CMaterial *pMaterial);
CMaterial(double dWidth,double dHeight);& B1 H9 e: u/ g T- i+ G
virtual ~CMaterial();' D4 ]6 ?; k4 U
double m_dHeight,m_dWidth;- Y/ @2 Q T$ a; l1 T3 p$ {
double m_dX,m_dY;
BOOL m_bUsed;
BOOL m_bSeletcted;1 J0 r5 W$ N4 U/ k
BOOL m_bRotated;( W3 L$ a2 `( C9 v
int m_iIndex;9 m' R' } p: _$ n/ X
" D' X, l1 u& R+ h/ X( V
};
class TYPESETLIB_API CTypeset 9 |5 j! o2 @$ A. k5 W
{ M& H& o( L+ V6 S( q( {2 M
public:' r# ?6 y$ ]# B$ S" R
virtual double Go();
virtual void Add(CMaterial *pMaterial);
CTypeset();% k- `9 h8 g: P/ Z1 S& ~
virtual ~CTypeset();5 `' ^# g# o: l, ~$ D$ N- n# _4 J0 W
list<CMaterial*> m_MaterialList;1 o4 d! k. l1 M5 r F* z
CMaterial m_Desktop;# K, b8 T5 S; W" e* n
protected:& H2 D: |3 q5 A# o6 `
virtual void SetStatus(list<CMaterial*> *pList, BOOL bUsed);
virtual double Typeset(double dStatrX,double dStatrY,double dStatrHei,double dStatrWid,
list<CMaterial*> *pList);
virtual void Sort();
virtual void Clear();
int m_iCurIndex;9 F- x8 f+ O5 ]0 G( y* ]
};
: O* j3 {: u1 X) P" E. v
#endif // !defined(AFX_TYPESET_H__46213FAE_D2D6_42A6_B801_41D9109CD0FB__INCLUDED_)