|
// TypeSet.cpp: implementation of the CTypeset class.9 y- h) n5 U% C0 i) U! F //8 r/ j, N% Z d6 j; B6 o; Z //////////////////////////////////////////////////////////////////////& f4 Z% N- Z$ L# n2 a7 s #include "stdafx.h" #include "..\INC\TypeSet.h"7 Q6 O( o0 ?- L8 V- H3 ^3 c //用法示例( Q' |7 Z9 K; g% v% U! w void TestTypeset(HDC dc) { //声明一个板材对象 CTypeset typeset;" v8 K3 O9 _2 K8 r //设置板材对象大小 typeset.m_Desktop.m_dHeight=9999; typeset.m_Desktop.m_dWidth=100;2 d9 B2 u& S: T+ r //声明一个排样元素对象 CMaterial material;! c' Y3 g: h- n- T6 V. E //设置排样元素对象大小 material.SetSize(20,99);0 ]% _& E4 J" S" r: q; { //添加进入板材对象 typeset.Add(&material);- P$ n8 v/ T1 N- J; N" R //继续添加- U! [* T/ M! l; T- D o material.SetSize(99,80); typeset.Add(&material);, s8 v) `4 y# Z T( ? material.SetSize(10,60);' y7 n2 q! m9 H typeset.Add(&material);; R; j$ z6 g" H material.SetSize(50,20);$ g/ M& h+ D ?8 N$ k8 E* q3 _ typeset.Add(&material); //添加完毕,进行排样 typeset.Go();; o; V) j( J" K6 Y5 |! |- R: k5 x; H //排样完毕,输出 list<CMaterial*>::iterator iter; //画板材对象: d* g7 n% I5 A: ^1 P* w5 F ::Rectangle(dc,typeset.m_Desktop.m_dX,typeset.m_Desktop.m_dY, typeset.m_Desktop.m_dX+typeset.m_Desktop.m_dWidth, typeset.m_Desktop.m_dY+typeset.m_Desktop.m_dHeight);; a P9 }% d. U+ r2 d //画排样元素对象- B, Q; Y( |. Y* ~. E. [: [ for(iter=typeset.m_MaterialList.begin();iter!=typeset.m_MaterialList.end();iter++)) h) i. g+ }. q' \ { ::Rectangle(dc,(*iter)->m_dX,(*iter)->m_dY, (*iter)->m_dX+(*iter)->m_dWidth," d4 k" }( a8 M6 z; Y# K (*iter)->m_dY+(*iter)->m_dHeight); } / W# o) K% F$ c4 e$ Q }% M$ Q) J% u! q& x7 r, p, | ////////////////////////////////////////////////////////////////////// // CMaterial Class /////////////////////////////////////////////////////////////////////// D/ D8 X* [, g; B1 O; a5 ~, A. x //////////////////////////////////////////////////////////////////////5 f) }# i, s. v1 _; I g( b // Construction/Destruction //////////////////////////////////////////////////////////////////////- v! v' y( A, m$ X; k #define ZERO 0.00001+ D6 `2 a1 h1 O) y3 [ CMaterial::CMaterial(): N8 ?6 t- L4 l/ A2 X/ @ { m_dHeight=100; m_dWidth=100;4 T: v2 W. b' j( c. i& D. ] m_dX=0;" n: `$ o# [9 `* M1 A) C+ e m_dY=0; m_bUsed=FALSE;: @( Z7 b6 G# K L$ J/ g m_bSeletcted=FALSE; m_bRotated=FALSE; m_iIndex=0; }. @2 ^" C) z7 b2 [ CMaterial::CMaterial(double dWidth,double dHeight)8 Y5 L0 W' L1 o' j/ R) o { SetSize(dWidth,dHeight); H) Z$ X% A8 F8 i& R: Q, U/ | m_dX=0; m_dY=0; m_bUsed=FALSE; m_bSeletcted=FALSE; m_bRotated=FALSE; m_iIndex=0; } CMaterial::CMaterial(CMaterial *pMaterial)0 X4 m$ O6 P! b0 y8 M1 D {# u7 ?* s# j2 K m_dX=pMaterial->m_dX; m_dY=pMaterial->m_dY; m_dHeight=pMaterial->m_dHeight;0 X9 u! a. _- ?8 Y6 g( q m_dWidth=pMaterial->m_dWidth;, ]5 ^% [. b v& K8 w m_bUsed=pMaterial->m_bUsed; m_bSeletcted=pMaterial->m_bSeletcted;+ V3 m- l! ]+ ]1 l; P4 f& q m_bRotated=pMaterial->m_bRotated; m_iIndex=pMaterial->m_iIndex; }; A0 u1 j2 ]( v t! L void CMaterial::SetSize(double dWidth, double dHeight) {, Q' M& L. w5 t4 L2 U8 I m_dHeight=dHeight; m_dWidth=dWidth; }" T9 |1 R% w/ v. ? void CMaterial::Rotated()3 o6 u s" b" i' V; o { m_bRotated=!m_bRotated; double dA=m_dHeight; m_dHeight=m_dWidth;# u1 }2 m8 o6 h' P6 B; P m_dWidth=dA; } CMaterial::~CMaterial()( r; i% h$ E: N3 w4 d { }: @- `3 V5 y0 X& ^ ////////////////////////////////////////////////////////////////////// // Construction/Destruction //////////////////////////////////////////////////////////////////////) Y) h! A- v/ S) _$ v4 K! q CTypeset::CTypeset() {5 [7 l' u3 R# L0 F% W Clear(); } CTypeset::~CTypeset()/ |( Q" p+ t; D7 X5 n {' D, p+ r7 }3 X6 k Clear(); }4 O8 ~9 g. X; s" y$ \ / o* B! z5 K( F2 t0 d8 C9 L void CTypeset::Clear() {3 y; {1 d( K9 |: b# G list<CMaterial*>::iterator iter; for(iter=m_MaterialList.begin();iter!=m_MaterialList.end();iter++) {3 s. O' R5 Q2 g& g/ u" R6 w delete (*iter); E3 h: C! ~# f; p } m_MaterialList.clear();" K1 P. b1 a) |/ b2 }6 R1 w) E m_iCurIndex=0;) @( u6 w3 s4 A5 j1 l }. D: n4 x- V" z# z/ J8 @& x void CTypeset::Add(CMaterial *pMaterial)& L9 z5 z$ P3 y2 l {, F/ H d' i/ M8 |5 I d CMaterial *p=new CMaterial(pMaterial); |
精华推荐
换一换


p->m_iIndex=m_iCurIndex;4 X: D' m6 Y; h8 ^/ [& X( y
m_MaterialList.insert(m_MaterialList.end(),p);3 X7 ]9 X6 Y/ D4 w( h' M& I
m_iCurIndex++;
}
5 z2 K) [, v3 U/ {2 B' S
void CTypeset::Sort(): z. m+ R/ _3 K, U% y
{9 Y$ y, e+ }$ P' p" j2 X
list<CMaterial*> MaterialList;1 O+ g* v, ^1 m# h! `& A
list<CMaterial*>::iterator iter1,iter2,iter3;5 e0 ~% y& c @4 l( s/ S
bool bSourceInvert=false;
while (!m_MaterialList.empty())
{
double dMaxLen=0;
iter2=m_MaterialList.begin();# D! e1 r, q) Y1 z; b/ O2 v/ M) O
CMaterial *p=NULL;9 n! [8 @, s' b" c$ r4 u1 o
iter1=m_MaterialList.end()--;: H- g- C5 `+ Q# K6 j' O* Y
iter3=iter2;
while(iter2!=iter1)- W4 R Q d: S3 v4 Z
{# S; P; T* I5 H. L, X
if((*iter2)->m_dWidth>dMaxLen)
{
p=*iter2;
iter3=iter2;
dMaxLen=(*iter2)->m_dWidth;
bSourceInvert=false;1 L- i9 E; s& c# y' |9 ?. d
}) _) y+ z+ E; x1 E4 O6 ~) G& d
if((*iter2)->m_dHeight>dMaxLen)! I- f: ]3 _( A" u. T
{* G0 `2 E# Z% O a! j
p=*iter2;
iter3=iter2;& R, ]3 g/ \0 z6 W
dMaxLen=(*iter2)->m_dHeight;. k( I9 o9 n" `5 M0 `
bSourceInvert=true;7 }, x* ^8 q5 v9 h) [/ I: [
}6 E: d2 F/ Y- Q. l
iter2++;* e! g" y A% e0 F; j! C: L: Z
} K+ X8 [5 Z8 b) ~" @% e% h
if(p!=NULL)
{: C$ x' S0 u$ O4 }& Y) K) P v
if(bSourceInvert)& l1 g, ~6 _5 }1 P
p->Rotated();
MaterialList.insert(MaterialList.end(),p);. y3 }" m5 e& e: x$ j7 W' p. z9 h
m_MaterialList.erase(iter3);
}8 E( D2 |' J3 {3 A" H
}3 w2 H3 ?( ^7 U8 y2 x/ }$ Z0 _
m_MaterialList.clear();
for(iter1=MaterialList.begin();iter1!=MaterialList.end();iter1++)6 h' \1 m2 M, B
{6 z# P! H: S: g: c9 P
m_MaterialList.insert(m_MaterialList.end(),(*iter1));
}
MaterialList.clear();
} a* }' ]% c8 u! q4 d. u" u9 T* g
double CTypeset::Go()
{) D& R+ c$ w/ G+ g0 {" I
double dRet=0;
list<CMaterial*> List;
list<CMaterial*>::iterator iter;" w) u: w# [/ C, n2 F5 s+ h
Sort();, F) ?" \ H* e5 J( h- d8 R- Z& n2 T
Typeset(m_Desktop.m_dX,m_Desktop.m_dY,8 O/ @7 T3 _6 S5 w
m_Desktop.m_dWidth,m_Desktop.m_dHeight,&List);2 y+ T$ J- R$ U, z3 `% X
m_MaterialList.clear();8 c4 f P, p! A5 _# k& a
for(iter=List.begin();iter!=List.end();iter++)% j& E4 O5 K6 g" z3 k
{% A7 y M2 h3 q3 V
if((*iter)->m_dX<ZERO)
{
dRet+=(*iter)->m_dY;
}
(*iter)->m_bUsed=FALSE;$ ] W1 P+ v" M0 ?. e
(*iter)->m_bSeletcted=FALSE;
m_MaterialList.insert(m_MaterialList.end(),(*iter));
}
List.clear();
return dRet;
}
% {0 ~+ V. {& M. K/ d/ k
0 d9 V* j5 j& a0 G# D! k
double CTypeset::Typeset(double dStartX,double dStartY,double dStartHei,double dStartWid,
list<CMaterial*> *pList): L! @( B5 f4 g6 p O
{
CMaterial *tmpunit=NULL;7 J) J8 x! k4 K' h/ o9 d
list<CMaterial*>::iterator iter,iter1;
double dArea1,dArea2,dArea;//横放和竖放时的排样面积,和最后方案的排样面积
double dRestArea1,dRestArea2;//横放和竖放时排样后的剩余面积0 O! K. g* c% C, n
list<CMaterial*> List1,List2;////横放和竖放时的最佳排样序列/ l1 _7 z5 u( b0 s; ~2 T! v( |
double dHeight,dWidth;
dHeight=dStartHei;
dWidth=dStartWid;$ i$ m) }% J' \4 I# y X1 H
7 O- u, ~* B5 |- I" [' h, P3 w
if(m_MaterialList.empty())7 [* _& z% N+ a v: s) i" B9 t
return 0;
for(iter=m_MaterialList.begin();iter!=m_MaterialList.end();iter++) Z. p; ^; ^9 }! [7 W' w
{: W! s/ b1 `1 S! A
if((*iter)->m_bUsed!=FALSE)& {" ^5 b0 o7 }* B6 k# [" R
continue;6 n N3 [6 l0 \ F9 r8 L
if((*iter)->m_dWidth<(*iter)->m_dHeight) J* \) J- {" ?1 K: o- H# B' O
{
MessageBox(NULL,"错误","ERROR",MB_OK); d* [, B& X7 j# P) }
return 0;7 J* q' v x6 G3 ]
}5 m' Z. R" g! k8 \2 _- o' C
//找出一张能放入的最大的没有排过的板材
//如果板材横竖都能放入$ A* R* V9 l. c: p
if(((dHeight>(*iter)->m_dWidth-ZERO)&&(dWidth>(*iter)->m_dHeight-ZERO))+ f! ~6 a8 ]6 @% H; c
&&((dHeight>(*iter)->m_dHeight-ZERO)&&(dWidth>(*iter)->m_dWidth-ZERO)))7 G! C% R; @2 Q
{ ; ~) V) v2 w/ v9 t( U$ M1 X; @# d
if(dStartX<ZERO)
dWidth=(*iter)->m_dHeight;
7 o4 l6 {$ \0 o+ h3 s
(*iter)->SetUsed(TRUE);//对该图排样( ^# C4 K6 L6 X/ V
//先横着放入继续排样,计算剩余面积7 p1 u4 E" N- e$ U- ], \. m( l, }/ R
dArea1=Typeset(dStartX+(*iter)->m_dWidth,dStartY,
dHeight-(*iter)->m_dWidth,(*iter)->m_dHeight,&List1);. L( T" o" _% _, C2 ^/ Y5 p1 Z
dRestArea1=dHeight*dWidth-dArea1-(*iter)->GetArea();1 H9 J6 Z+ w. H Q* H& d/ x
dRestArea1=dRestArea1/(dHeight*dWidth);//剩余面积率
/ V. S* L F- U( e! \
2 A' O0 n2 L0 H2 ?) Z/ @2 \
//将刚才排过的板材状态还原,再竖直放入该图继续排样,计算剩余面积
if(dStartX<ZERO)
dWidth=(*iter)->m_dWidth;
SetStatus(&List1,FALSE);: j p7 O- K. {
tmpunit=(*iter)->Copy();
tmpunit->Rotated();8 }) X, c- L6 M7 l. {% @: i
dArea2=Typeset(dStartX+tmpunit->m_dWidth,dStartY,
dHeight-tmpunit->m_dWidth,tmpunit->m_dHeight,&List2);
dRestArea2=dHeight*dWidth-dArea2-tmpunit->GetArea();" K& k2 _# |" k
dRestArea2=dRestArea2/(dHeight*dWidth);//剩余面积率
}1 H# Z% z3 I( \% r2 I
else if((dHeight>(*iter)->m_dWidth-ZERO)&&(dWidth>(*iter)->m_dHeight-ZERO))//如果板材只能横着放入
{
if(dStartX<ZERO)
dWidth=(*iter)->m_dHeight;
5 P. H9 G5 z3 p+ [3 \
(*iter)->SetUsed(TRUE);//对该图排样
dArea1=Typeset(dStartX+(*iter)->m_dWidth,dStartY,
dHeight-(*iter)->m_dWidth,(*iter)->m_dHeight,&List1);
dRestArea1=dHeight*dWidth-dArea1-(*iter)->GetArea();( q/ `: O6 f' }% b0 q
dRestArea1=dRestArea1/(dHeight*dWidth);//剩余面积率
dRestArea2=dRestArea1+10;//不再尝试竖放,将竖放剩余面积设大5 Z3 ]- L+ d4 l5 Y8 n* a
}$ s( z# |5 I4 U$ w, k3 r
else if((dHeight>(*iter)->m_dHeight-ZERO)&&(dWidth>(*iter)->m_dWidth-ZERO))//如果板材只能竖着放入, b/ w2 L. \7 V. g" ]0 T# o
{
if(dStartX<ZERO)
dWidth=(*iter)->m_dWidth;$ |8 f |9 J1 `% O
4 F! R* ?' x: |8 t3 n2 u
(*iter)->SetUsed(TRUE);//对该图排样# A5 m* x9 @ W- b( @
tmpunit=(*iter)->Copy();
tmpunit->Rotated();
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);//剩余面积率; {% e. c! @3 N; N& N
5 t, a9 v# u: l+ |$ h0 u! k" v
dRestArea1=dRestArea2+10;//不再尝试横放,将横放剩余面积设大
}7 S+ [( O1 \, }/ |7 I
else
continue;8 P) |/ D& { {: L8 X j# `: C
4 L8 z0 ]3 ?3 V2 ]' @: [. I2 }5 L7 a
//记录优化的排样序列1 n; d4 k9 M8 K4 y9 P. a% z
CMaterial *tmp=NULL;
if(dRestArea1<dRestArea2+ZERO)//当前板材横向排结果优化
{7 C7 v; c5 i* T. ~% h/ b8 w
SetStatus(&List2,FALSE);//将纵向排的排样序列还原状态
SetStatus(&List1,TRUE);//将横向排的排样序列标志为使用, K+ Q9 W- O3 I. V6 H; R% S
dArea=dArea1+(*iter)->GetArea();;5 f& K8 F. v9 e$ ~5 N
tmp=(*iter)->Copy();
tmp->m_dX=(int)dStartX;
tmp->m_dY=(int)dStartY;# l2 f0 P- x2 A# {$ p4 _8 ^% V. u
pList->insert(pList->end(),tmp);
while(!List1.empty())- O. z& N) P6 a6 n" M+ c5 a6 i
{. M+ \$ _$ R; a# m
iter1=List1.begin(); l0 F5 g& K4 T
pList->insert(pList->end(),*iter1);% s/ T/ {' b! G* \8 D+ U; i# B& N
List1.erase(iter1);
}
//释放不好的序列
for(iter1=List2.begin();iter1!=List2.end();iter1++)
{0 T+ Y' R& ~, I1 x; Y
delete (*iter1);3 K$ z0 q6 h: `: w1 f) g5 q
}, X' v2 a# A u l- K
List2.clear();, g; N- v8 Y- w: V( J8 C; U
delete tmpunit;
}
else//当前板材纵向排结果优化" G4 _& M1 L6 j( O0 e. j
{* {2 I3 F* Z+ A2 `9 C# p
SetStatus(&List1,FALSE);//将横向排的排样序列还原状态* q8 }# ?, f% n
SetStatus(&List2,TRUE);//将纵向排的排样序列标志为使用
if(tmpunit==NULL)
{
MessageBox(NULL,"错误","ERROR",MB_OK);' f" L, h" x) u6 [) H1 {0 p+ j
return 0;9 B% R7 }* \# j* I% `
}# P a1 [' y P) \+ q9 y
9 }" u; o( i! z( z- g
dArea=dArea2+(*iter)->GetArea();7 q2 W; E$ x; m; H. |
tmp=tmpunit->Copy();
tmp->m_dX=(int)dStartX;
tmp->m_dY=(int)dStartY;
pList->insert(pList->end(),tmp); }( X! r9 G% J$ m
while(!List2.empty())
{1 Z+ g3 n/ I; i3 h' [
iter1=List2.begin();
pList->insert(pList->end(),*iter1);1 B* U" b( o$ _5 j6 {( I; V
List2.erase(iter1);
}5 s8 L1 N' i2 `2 v( O8 l5 v
//释放不好的序列7 e/ {1 `6 t! \( t! m
for(iter1=List1.begin();iter1!=List1.end();iter1++) o. c+ _. x9 T0 g- ^
{
delete (*iter1);) a& D( @5 l" i; w! s! g
}! z) Y; |. W* B
List1.clear();
delete tmpunit;! n$ T* u0 }% G) [1 T
}
double next_x,next_y,next_len,next_wid;9 P2 i4 e# Z, s
next_x=dStartX;. p( O9 u+ o% j
next_y=dStartY+tmp->m_dHeight;
next_len=dHeight;
next_wid=dStartWid-tmp->m_dHeight;) M5 j! ]- g; D8 L
if(next_wid>ZERO)//板材还有剩余7 s8 S5 Z0 ~2 ^8 B+ Q
{: E2 h% I& m9 Q6 I3 I1 l7 g" x. [2 Y
//继续排下一行. Y0 U# U" r" M# [; W1 f9 d6 J+ c7 D
dArea=dArea+Typeset(next_x,next_y,next_len,next_wid,&List1);
//记录排样序列' B9 {6 M1 x/ [4 L- v/ v; L
SetStatus(&List1,TRUE);
for(iter1=List1.begin();iter1!=List1.end();iter1++). L9 M4 ] }$ ]2 [! U& M2 W
{
pList->insert(pList->end(),(*iter1));
}
List1.clear();9 G. t2 k" h' p1 ~* ^
}6 @4 s v1 f9 }( c" x
return dArea;0 B# d* h$ i4 [) t6 P$ } d3 G
}
return 0;& n5 ~7 z% F4 k# v2 ~7 P
}0 H8 }1 @% v X8 o
) q \6 h* ]9 Y! q& n) c- o% Z8 R
void CMaterial::SetUsed(BOOL bUsed)1 q N1 k/ m3 U7 f- ?
{
m_bUsed=bUsed;# A( @7 P u8 a
}
void CTypeset::SetStatus(list<CMaterial*> *pList, BOOL bUsed)
{
list<CMaterial*>::iterator iter1,iter2;
for(iter1=m_MaterialList.begin();iter1!=m_MaterialList.end();iter1++)! n; `! y" P8 d" ?2 E5 v
{4 O% @+ B' E9 j7 @8 x* d0 Z
for(iter2=pList->begin();iter2!=pList->end();iter2++)* X+ H' R* y" K) M/ x
{. Q6 K1 F+ B- o3 Y
if((*iter1)->m_iIndex==(*iter2)->m_iIndex)
{- \1 L$ K) h, X4 p* Z7 x: ~
(*iter1)->m_bUsed=bUsed;+ x4 w$ Y& ~4 S
}
}$ l1 c( w: S. ~; d. i- q* l
}
}
CMaterial* CMaterial::Copy()
{
CMaterial* p=new CMaterial(this);
return p;
}
- \; c; y6 g" r0 B
# T8 x. I9 | C- ~% z2 l; M' ?8 O
// TypeSet.h: interface for the CTypeset class., U3 f9 w. S, ?' S4 t5 V
//9 D* w' i6 |5 u
////////////////////////////////////////////////////////////////////// _9 ]9 Y6 s: A9 R1 `
" y* e5 B" L4 n5 ]4 v. q
#if !defined(AFX_TYPESET_H__46213FAE_D2D6_42A6_B801_41D9109CD0FB__INCLUDED_)1 K3 s* J1 ?8 k4 u; j
#define AFX_TYPESET_H__46213FAE_D2D6_42A6_B801_41D9109CD0FB__INCLUDED_4 A. p0 F* x6 U' ]" u, V, ?
% J9 ]0 E0 S% f K7 }
#if _MSC_VER > 1000
#pragma once7 e: h& p, H4 X& b: b8 N' m
#endif // _MSC_VER > 1000
#pragma warning(disable:4786)
#pragma warning(disable:4251)
#include <list>
#include <string>
using namespace std;
9 w: p, b) U2 O
#ifdef TYPESETLIB_EXPORTS& s; J3 \5 Z. h- z8 A3 d
#define TYPESETLIB_API __declspec(dllexport)/ _% U% J! [8 W
#else
#define TYPESETLIB_API __declspec(dllimport)- z' `, C$ |$ `/ h% e
#endif v/ v, f- z8 L& c. M2 l
( V6 ?9 ^ U4 ^4 X& A( p! w4 o2 v" [
TYPESETLIB_API void TestTypeset(HDC dc);) F. z( r* n6 |) l9 f
" p+ t+ e! e1 g! o
class TYPESETLIB_API CMaterial
{6 f; f, @; V4 b3 Y' }' T" Z! j. D) {
public:, n- D" F' G4 E( k
virtual CMaterial* Copy();+ @- q! B* C( K: `7 y- ]9 W
virtual void SetUsed(BOOL bUsed);
virtual void Rotated();
virtual void SetSize(double dWidth,double dHeight);
virtual double GetArea(){ return m_dHeight*m_dWidth; }
CMaterial();
CMaterial(CMaterial *pMaterial);/ C1 Q' a' u" j: X9 o* y+ ?
CMaterial(double dWidth,double dHeight);
virtual ~CMaterial();7 F$ U* {. j* k2 G
double m_dHeight,m_dWidth;+ X) _( d2 e5 K6 x, h
double m_dX,m_dY;
BOOL m_bUsed;
BOOL m_bSeletcted;
BOOL m_bRotated;
int m_iIndex;. ]8 F( C! r7 u* L' y0 Q
+ S8 s) A4 M! g2 _8 U
};
class TYPESETLIB_API CTypeset ) U! H/ d' h; L% o
{
public:
virtual double Go();
virtual void Add(CMaterial *pMaterial);- s$ j8 \2 J+ {9 ]7 `
CTypeset();
virtual ~CTypeset();! @9 t& P( O1 M& m0 F7 k; C
list<CMaterial*> m_MaterialList;
CMaterial m_Desktop;
protected:7 v9 e+ @" P0 m; a6 D, ]. n# X
virtual void SetStatus(list<CMaterial*> *pList, BOOL bUsed);
virtual double Typeset(double dStatrX,double dStatrY,double dStatrHei,double dStatrWid,
list<CMaterial*> *pList);+ n" B0 t x% G: r3 [
virtual void Sort();0 i. q- p U" |6 J" A
virtual void Clear();
int m_iCurIndex;$ M0 D( q9 F- W2 p
};5 n5 i% c& w& g! b: ?
) g7 H# N4 C' ^* E" L' D; F, C
#endif // !defined(AFX_TYPESET_H__46213FAE_D2D6_42A6_B801_41D9109CD0FB__INCLUDED_)