// //////////////////////////////////////////////////////////////////////% Y8 Q3 V W- U# H6 Z #include "stdafx.h"% t/ p5 e7 R! } #include "..\INC\TypeSet.h"# b/ `; P9 O2 ?" U //用法示例- b+ M( F7 V( R+ V0 T2 Z! E& r void TestTypeset(HDC dc)9 e: D1 y9 Y ]- F" K1 W x {( v( N, `2 V2 @! \! N3 v //声明一个板材对象 CTypeset typeset;9 P0 I& y2 d' v9 f4 g5 t5 V" M //设置板材对象大小# X8 |# J) L* }( {4 F typeset.m_Desktop.m_dHeight=9999; typeset.m_Desktop.m_dWidth=100; //声明一个排样元素对象 CMaterial material; //设置排样元素对象大小( s( l# ], ?$ |" K* q6 U$ i material.SetSize(20,99);3 y5 t0 M! s0 |5 ~3 R, D //添加进入板材对象" ^6 E% k# y" l3 ]( C typeset.Add(&material); //继续添加1 T6 q$ ?9 U$ \8 w4 r material.SetSize(99,80);: T0 K- w9 k$ h0 c. [! ] typeset.Add(&material); material.SetSize(10,60);9 S2 w$ T7 v* S typeset.Add(&material);1 l1 q3 b$ Z+ v1 I material.SetSize(50,20); typeset.Add(&material); //添加完毕,进行排样( r% Y5 L, M7 f/ f7 M* e4 [ typeset.Go(); //排样完毕,输出+ E6 R% P8 E$ b2 D list<CMaterial*>::iterator iter;% Q- K# F2 \; H' v; \- _1 r: J //画板材对象- O$ p L1 j0 f' W$ ?5 S. a ::Rectangle(dc,typeset.m_Desktop.m_dX,typeset.m_Desktop.m_dY,; W1 D) A X, _2 x2 L, z$ N0 ]( F typeset.m_Desktop.m_dX+typeset.m_Desktop.m_dWidth,- k* }7 [) f1 C typeset.m_Desktop.m_dY+typeset.m_Desktop.m_dHeight);9 D+ B( ^8 m) c# L# H) P //画排样元素对象 for(iter=typeset.m_MaterialList.begin();iter!=typeset.m_MaterialList.end();iter++) { ::Rectangle(dc,(*iter)->m_dX,(*iter)->m_dY,1 c" }/ X- v6 |8 X9 f% }9 w) q (*iter)->m_dX+(*iter)->m_dWidth,& R0 x. v& }( Q5 { (*iter)->m_dY+(*iter)->m_dHeight);+ L/ g% U! B5 P2 l } ( X* x* `" m$ Z( o! `1 z } ////////////////////////////////////////////////////////////////////// // CMaterial Class //////////////////////////////////////////////////////////////////////+ ]2 f# O( {0 I ////////////////////////////////////////////////////////////////////// // Construction/Destruction: }" l! r. z( S$ R6 ]3 d //////////////////////////////////////////////////////////////////////% O8 `9 I& A5 H+ {( g* Z #define ZERO 0.00001 CMaterial::CMaterial()+ ?: l* x: L7 R$ e9 d' r8 N {$ i1 Q! |! P' J. c; \% f" } m_dHeight=100;, ?( s* M/ |: Q+ y m_dWidth=100; m_dX=0; m_dY=0;$ {0 |- s/ a o: q! { m_bUsed=FALSE; m_bSeletcted=FALSE; m_bRotated=FALSE; m_iIndex=0; }$ |& F( {! H. Y9 v8 I. F# L" I! C CMaterial::CMaterial(double dWidth,double dHeight)* l0 F7 b3 {# F& } {5 x5 n; Q% x: w4 t# `% ~' Z0 w0 ?/ z SetSize(dWidth,dHeight);- o c7 D" \- k/ W( @1 E m_dX=0;( Z( H; \- h2 o' L$ d, Q m_dY=0;5 b. p: b! v, _/ U+ ~8 B/ a* D: L m_bUsed=FALSE; m_bSeletcted=FALSE; m_bRotated=FALSE;& ?* n) [4 G1 h `0 o m_iIndex=0;8 m' |# f R9 `* w, a0 s# G+ h0 t# g }+ H: }8 ^( x7 |' m+ r; S% N CMaterial::CMaterial(CMaterial *pMaterial)- g, g* I) K) ~& \2 { { m_dX=pMaterial->m_dX;4 ^* Y: _. ]* D5 M5 j0 z( u( Q3 w, Y m_dY=pMaterial->m_dY; m_dHeight=pMaterial->m_dHeight; m_dWidth=pMaterial->m_dWidth;8 p5 Z# o2 O2 S; C$ M m_bUsed=pMaterial->m_bUsed; m_bSeletcted=pMaterial->m_bSeletcted;7 e! Z7 D( N: o5 Z& z- N- D m_bRotated=pMaterial->m_bRotated; m_iIndex=pMaterial->m_iIndex;# Z& t! F M, d: L }( y5 z# U/ A: a! b* _8 S void CMaterial::SetSize(double dWidth, double dHeight): u6 @0 K) q* r6 ^3 |! O2 v { m_dHeight=dHeight; m_dWidth=dWidth; } void CMaterial::Rotated()% {, S, }6 Z5 H0 B; h) K {9 P) l, L$ J+ y. l' W m_bRotated=!m_bRotated;! F$ E" b! F) f( x2 |. Y( F6 W double dA=m_dHeight; m_dHeight=m_dWidth;& p5 q% x5 K& ^. |( j" n# P ~ m_dWidth=dA;# x, w- Y. n+ `+ [' k }' z8 L5 L+ s) I: a0 {' C1 W9 t CMaterial::~CMaterial()0 X6 f2 K0 b8 h$ W1 w; ]' L { }1 _% ~, n& a7 W3 e5 D7 |0 q3 O( _( p) k //////////////////////////////////////////////////////////////////////2 r v; x- J; B2 ], E0 @' |1 ? // Construction/Destruction' Y& \ _" B% Z* [7 J) G$ B" L //////////////////////////////////////////////////////////////////////. ]* l" q" `+ l: h# r7 b4 Q CTypeset::CTypeset() { Clear();( I& Z3 k/ y% w! V" N: S- F% T }3 I4 z/ d9 w3 U! U8 E( \2 V7 x2 |" Q CTypeset::~CTypeset() { Clear(); 4 T9 F! Q% O7 Y. f. w C+ Y- m }( p9 B, y8 A. M6 w9 i* n0 W, N! ~ + \. {! h7 g) f void CTypeset::Clear() { list<CMaterial*>::iterator iter; for(iter=m_MaterialList.begin();iter!=m_MaterialList.end();iter++)9 B" C9 V" a F# g# e# L { delete (*iter); }, N& u" W) F. H7 Q( L; R! z8 { m_MaterialList.clear();! p/ r/ H: X. F: S/ k% c m_iCurIndex=0;. b3 _8 \3 c; z }$ {7 Z T6 i* Y4 U* q! { void CTypeset::Add(CMaterial *pMaterial)% g3 i/ h/ z) ^/ O { CMaterial *p=new CMaterial(pMaterial); |
// TypeSet.cpp: implementation of the CTypeset class.
精华推荐
换一换
p->m_iIndex=m_iCurIndex;, S4 Q) U/ [1 i/ ]$ `
m_MaterialList.insert(m_MaterialList.end(),p);1 b7 p( }3 A) w
m_iCurIndex++;9 F" L- g' X1 t" q
}5 W: ]* K ~$ A- V: P6 f6 {
void CTypeset::Sort()8 X1 W4 W6 ?( p) j! _: O
{
list<CMaterial*> MaterialList;( H* J* ]8 [/ b
list<CMaterial*>::iterator iter1,iter2,iter3;
bool bSourceInvert=false;6 o' `6 w8 g% K5 c( x/ Y
while (!m_MaterialList.empty())
{
double dMaxLen=0;
iter2=m_MaterialList.begin();& J* D @$ D; {9 _& D, n- A6 a
CMaterial *p=NULL;
iter1=m_MaterialList.end()--;
iter3=iter2;
while(iter2!=iter1)
{3 o" J8 r9 k# a* t( v
if((*iter2)->m_dWidth>dMaxLen)4 h* j" |) a4 p/ v% r
{( q# a% ~2 ]/ b6 l- ^% c
p=*iter2;6 Z! I" S% @$ s+ h1 t
iter3=iter2;
dMaxLen=(*iter2)->m_dWidth;
bSourceInvert=false;* T& @) U5 ~9 }. |: g0 z4 R1 z
}
if((*iter2)->m_dHeight>dMaxLen)& d3 Y6 t- r6 ~$ H& `6 V4 D8 d6 b D
{5 l. {$ W0 { ?6 E. J3 P# \
p=*iter2;, c; C" r- r7 y7 W4 T5 W7 K
iter3=iter2;
dMaxLen=(*iter2)->m_dHeight;
bSourceInvert=true;) g1 {9 I) Q- q+ i8 L
}
iter2++;
}
if(p!=NULL)
{2 K1 o$ o: _( o) f' c
if(bSourceInvert)
p->Rotated(); . d$ X; r" e. f4 Q5 m
MaterialList.insert(MaterialList.end(),p);, S9 X$ W; B2 z# z) U" i1 n
m_MaterialList.erase(iter3);
}
}
m_MaterialList.clear();
for(iter1=MaterialList.begin();iter1!=MaterialList.end();iter1++)
{
m_MaterialList.insert(m_MaterialList.end(),(*iter1));2 I m4 }3 q3 A0 j6 W4 q
}$ c) R% U' R9 z5 S- z3 b
MaterialList.clear();6 F/ A& y' W" g" f; q0 J; Z3 E
}
double CTypeset::Go()( M4 B: ]4 W9 N$ @# U& P) y
{( ?" H5 I; g# {: M6 @# M7 }
double dRet=0;
list<CMaterial*> List;
list<CMaterial*>::iterator iter; u2 Z4 |! G+ S" ^, r) Z& O
Sort();
Typeset(m_Desktop.m_dX,m_Desktop.m_dY,
m_Desktop.m_dWidth,m_Desktop.m_dHeight,&List);7 }1 g( l* Z7 E# w
m_MaterialList.clear();
for(iter=List.begin();iter!=List.end();iter++)
{5 B3 w- Z! c3 y e
if((*iter)->m_dX<ZERO)2 {6 {- ]& |+ U, X- Q" Z
{; \, {2 e0 t: f' _
dRet+=(*iter)->m_dY;0 q! q% ~: W: y. s, U" d0 y
}0 Q5 u% }& u+ x1 _
(*iter)->m_bUsed=FALSE;4 e1 y% T4 I3 V0 x9 F) ^% l
(*iter)->m_bSeletcted=FALSE;
m_MaterialList.insert(m_MaterialList.end(),(*iter));6 \6 [. _2 Q" k+ G4 i8 y7 M
}( x- j6 C: E) |* c$ v
List.clear();& `% C% ], m. g- E. U1 Y6 I9 G
return dRet;( L# U: |7 {5 a3 e4 c
}; |" ?4 B0 \" \4 g" g5 K
/ V# Q: k) s6 }, V; a3 t
double CTypeset::Typeset(double dStartX,double dStartY,double dStartHei,double dStartWid,7 [' E; W: `* w) n% X
list<CMaterial*> *pList)
{; E# {& p& f4 E$ y% J) u0 ^, A
CMaterial *tmpunit=NULL;
list<CMaterial*>::iterator iter,iter1;
double dArea1,dArea2,dArea;//横放和竖放时的排样面积,和最后方案的排样面积
double dRestArea1,dRestArea2;//横放和竖放时排样后的剩余面积6 U$ ?; E6 h+ \
list<CMaterial*> List1,List2;////横放和竖放时的最佳排样序列
double dHeight,dWidth;3 c: }5 E& c1 D' `: T$ {7 a
0 c- C; ?) _6 ?( u/ G9 o; ]# o, W
dHeight=dStartHei;- W0 G) D# \! f) q- \1 j2 x9 j
dWidth=dStartWid;
5 a# H1 P4 U! N! q7 X1 D4 q
if(m_MaterialList.empty())) @' ?5 m' w4 C2 D/ j
return 0;. |0 w( ]6 A" v. o1 G B
for(iter=m_MaterialList.begin();iter!=m_MaterialList.end();iter++)
{/ H- Q/ B6 r& p3 c
if((*iter)->m_bUsed!=FALSE)
continue;
if((*iter)->m_dWidth<(*iter)->m_dHeight)
{
MessageBox(NULL,"错误","ERROR",MB_OK);0 w4 s, K1 [; z \- e1 P* O
return 0;
}
//找出一张能放入的最大的没有排过的板材
//如果板材横竖都能放入2 V1 P1 z4 ~! @
if(((dHeight>(*iter)->m_dWidth-ZERO)&&(dWidth>(*iter)->m_dHeight-ZERO))$ H+ j( Z" ?% c3 ^) x( K5 o
&&((dHeight>(*iter)->m_dHeight-ZERO)&&(dWidth>(*iter)->m_dWidth-ZERO)))
{ $ _1 S% O! F; W! t9 X0 d
if(dStartX<ZERO)
dWidth=(*iter)->m_dHeight;
' `8 {2 `9 o0 L, V9 j) q
(*iter)->SetUsed(TRUE);//对该图排样
: H2 g7 h3 t/ v
//先横着放入继续排样,计算剩余面积
dArea1=Typeset(dStartX+(*iter)->m_dWidth,dStartY,
dHeight-(*iter)->m_dWidth,(*iter)->m_dHeight,&List1);
dRestArea1=dHeight*dWidth-dArea1-(*iter)->GetArea();
dRestArea1=dRestArea1/(dHeight*dWidth);//剩余面积率
, h' }/ w% K7 q
//将刚才排过的板材状态还原,再竖直放入该图继续排样,计算剩余面积" v' y, {4 g: J7 _
if(dStartX<ZERO)+ R2 h0 J2 p z1 H& |: ~% R
dWidth=(*iter)->m_dWidth;% M! t" L) Q8 x/ H( ]3 Y
4 H2 o. b" G4 }% N7 O2 _
SetStatus(&List1,FALSE);) A) ]5 Q! ~" H s
tmpunit=(*iter)->Copy();
tmpunit->Rotated();) n- ~/ g7 J; k, [$ }' `. Q
dArea2=Typeset(dStartX+tmpunit->m_dWidth,dStartY,: L# e9 F$ C3 [+ `1 }
dHeight-tmpunit->m_dWidth,tmpunit->m_dHeight,&List2);7 o2 p6 @7 E5 x# P0 d' R! [
dRestArea2=dHeight*dWidth-dArea2-tmpunit->GetArea();5 x9 ]6 S) L) s$ b4 C, J. W
dRestArea2=dRestArea2/(dHeight*dWidth);//剩余面积率
}
else if((dHeight>(*iter)->m_dWidth-ZERO)&&(dWidth>(*iter)->m_dHeight-ZERO))//如果板材只能横着放入4 I# ^; _, y# v' _1 U
{
if(dStartX<ZERO)3 @& A' m4 @0 S; u2 ^) p
dWidth=(*iter)->m_dHeight;5 g& D! l. Q! c2 J1 k, p' A
(*iter)->SetUsed(TRUE);//对该图排样
dArea1=Typeset(dStartX+(*iter)->m_dWidth,dStartY,, e% Y+ }% [5 p* }2 d8 G0 S
dHeight-(*iter)->m_dWidth,(*iter)->m_dHeight,&List1);
dRestArea1=dHeight*dWidth-dArea1-(*iter)->GetArea();5 |7 s, n' j5 ^
dRestArea1=dRestArea1/(dHeight*dWidth);//剩余面积率
+ D! @ A; N7 b$ h- q9 Z
dRestArea2=dRestArea1+10;//不再尝试竖放,将竖放剩余面积设大
}. G3 ?. @+ r" ?" a; k1 z
else if((dHeight>(*iter)->m_dHeight-ZERO)&&(dWidth>(*iter)->m_dWidth-ZERO))//如果板材只能竖着放入
{
if(dStartX<ZERO)- {9 G' H+ b/ V) O& i& `5 V
dWidth=(*iter)->m_dWidth;' t2 A' T* p, b
* i1 s( V, q* F+ V, t
(*iter)->SetUsed(TRUE);//对该图排样
tmpunit=(*iter)->Copy();
tmpunit->Rotated();. h* x4 J8 ?$ R( ^" S; ]/ y) _" K
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);//剩余面积率
dRestArea1=dRestArea2+10;//不再尝试横放,将横放剩余面积设大
}
else l9 b1 y1 h5 Q6 U
continue;
//记录优化的排样序列
CMaterial *tmp=NULL;
if(dRestArea1<dRestArea2+ZERO)//当前板材横向排结果优化
{
SetStatus(&List2,FALSE);//将纵向排的排样序列还原状态! T1 v0 l3 I# e. U. Y* x0 q
SetStatus(&List1,TRUE);//将横向排的排样序列标志为使用0 i; K8 L( ?& E T8 Y: ]
dArea=dArea1+(*iter)->GetArea();;
tmp=(*iter)->Copy();
tmp->m_dX=(int)dStartX;9 e, h: a6 Y* E: L4 x
tmp->m_dY=(int)dStartY;
pList->insert(pList->end(),tmp);7 w% j3 C. D$ M& j G: `4 z" N1 o
while(!List1.empty())% T; N- u+ L O) ~9 Z i! `
{ U& p( \. R) p: v5 E
iter1=List1.begin();
pList->insert(pList->end(),*iter1);
List1.erase(iter1);
}5 v& g& e( d. p( [0 i2 C
//释放不好的序列7 `" E" h% J5 v9 q; z/ R# ?
for(iter1=List2.begin();iter1!=List2.end();iter1++)) i1 L* j0 T& o+ S% J4 ?+ X. d
{1 X D- A8 k- S- n- v8 J
delete (*iter1);
}& Z: t$ J+ W( [! q3 n
List2.clear();8 F6 W% j2 S- l1 C0 z' i2 i! j
delete tmpunit;
}
else//当前板材纵向排结果优化7 h+ W/ e9 e7 Q! d9 f
{
SetStatus(&List1,FALSE);//将横向排的排样序列还原状态1 X# P! A! b0 l) F E
SetStatus(&List2,TRUE);//将纵向排的排样序列标志为使用$ ]/ k5 y$ {. ^# X( l( }
if(tmpunit==NULL)6 d" n8 }: r9 f( N6 |/ ] J' b, e
{* w. t8 k1 Y1 u- \& H, A
MessageBox(NULL,"错误","ERROR",MB_OK);% n! |) V/ z' K3 ?7 w% I7 @) J: _
return 0;
}
, K( f) E0 G0 _. f
dArea=dArea2+(*iter)->GetArea(); |$ W1 S0 l& {0 ]$ G- e- U
tmp=tmpunit->Copy();
tmp->m_dX=(int)dStartX;
tmp->m_dY=(int)dStartY;
pList->insert(pList->end(),tmp);
while(!List2.empty())6 J5 S8 G! m$ h
{
iter1=List2.begin();. q6 _) X) T& S$ g: p* C8 E. |' T7 |
pList->insert(pList->end(),*iter1);
List2.erase(iter1);
}
//释放不好的序列
for(iter1=List1.begin();iter1!=List1.end();iter1++)' R) |6 y8 s; ]. T2 c. }5 z
{
delete (*iter1);4 R, p2 X q# m `; G$ \
}
List1.clear();
' k2 t! i$ t8 P( V
delete tmpunit;' @' X( C! L" a& R
}
double next_x,next_y,next_len,next_wid; F8 t% Z$ R) K- p# l3 C
next_x=dStartX;
next_y=dStartY+tmp->m_dHeight;! U; X9 }+ S$ |/ X3 N, ]1 \
next_len=dHeight;
next_wid=dStartWid-tmp->m_dHeight;
if(next_wid>ZERO)//板材还有剩余
{) M2 X2 g" r6 E8 G$ o5 |
//继续排下一行
dArea=dArea+Typeset(next_x,next_y,next_len,next_wid,&List1);
//记录排样序列
SetStatus(&List1,TRUE); @0 z6 m& f% K" Y; S0 N
for(iter1=List1.begin();iter1!=List1.end();iter1++)
{
pList->insert(pList->end(),(*iter1));
}0 ]$ ^) e5 I1 D$ @0 d
List1.clear();
}
return dArea; K) l+ [* G- e9 X" J$ d3 a; A
}. k: T9 W. O( t1 l; E( O: {. `
return 0;
}
5 O$ i4 p8 h" O, B/ Z
void CMaterial::SetUsed(BOOL bUsed)5 _1 n# D+ t3 x4 ?, `
{
m_bUsed=bUsed;
}
* L% M# X' S6 g( ~
void CTypeset::SetStatus(list<CMaterial*> *pList, BOOL bUsed)
{
list<CMaterial*>::iterator iter1,iter2;
for(iter1=m_MaterialList.begin();iter1!=m_MaterialList.end();iter1++)3 P& {. s; p% R) H( ]
{
for(iter2=pList->begin();iter2!=pList->end();iter2++)' T- E/ Y0 i/ U. q
{; H+ p& T/ L0 S6 {) F1 k3 s5 p
if((*iter1)->m_iIndex==(*iter2)->m_iIndex): E( p: l, p. N( b9 S7 Z9 a/ F9 h& a
{) v# o) N1 z" B/ R' w3 u2 a! Z! W
(*iter1)->m_bUsed=bUsed;' I; U2 K$ _" X+ A; P
}2 p; I1 m4 H1 Z* ~7 |8 l
}
}; p( Y) W H* c. w( C
}
CMaterial* CMaterial::Copy()- X; i5 Y" I1 o( w5 l9 ]" N
{% P8 @" S' V& R8 W
CMaterial* p=new CMaterial(this);
return p;
}" ~5 `8 z' D% {* v' |
a, I& W% X$ J! S
2 ]" K: g% c7 g5 P& J/ y- L8 n
F0 A2 v& h( p9 u. K6 R7 `$ R) I
// TypeSet.h: interface for the CTypeset class.! _; Q2 c, H* E f/ c7 T5 M% k' M
//
//////////////////////////////////////////////////////////////////////
6 ]' l* Z* x5 i) X( o, a3 c# E
#if !defined(AFX_TYPESET_H__46213FAE_D2D6_42A6_B801_41D9109CD0FB__INCLUDED_)
#define AFX_TYPESET_H__46213FAE_D2D6_42A6_B801_41D9109CD0FB__INCLUDED_: w R1 ?6 d( s7 J' y
5 {3 `' J- \* p7 ?: S
#if _MSC_VER > 10007 x; @6 s7 y1 Z8 }9 e
#pragma once% w) ~' u. _9 I7 F" [# r, ^
#endif // _MSC_VER > 1000
#pragma warning(disable:4786)
#pragma warning(disable:4251)9 o6 D7 }0 A% t, Z/ o8 M
#include <list>
#include <string>
using namespace std;
#ifdef TYPESETLIB_EXPORTS8 ?0 O# ^3 L6 r% x- g
#define TYPESETLIB_API __declspec(dllexport)
#else$ Z# {: ^" f7 [, z& k; i0 {8 `& {
#define TYPESETLIB_API __declspec(dllimport)
#endif0 ^: [# S0 V- H
TYPESETLIB_API void TestTypeset(HDC dc);
! Z Z) P; g, Z0 M" {
class TYPESETLIB_API CMaterial
{8 [# i* B) E8 T
public:0 a$ s. I; m5 r( |
virtual CMaterial* Copy();
virtual void SetUsed(BOOL bUsed);
virtual void Rotated();
virtual void SetSize(double dWidth,double dHeight);" L2 r" t# a- ?7 n
virtual double GetArea(){ return m_dHeight*m_dWidth; }9 u& R5 _- ^1 r) V* s. T# N
CMaterial();' ]% C6 s$ q5 A, y' l+ w" H
CMaterial(CMaterial *pMaterial);0 e* t1 t% B& @3 I9 R2 i h
CMaterial(double dWidth,double dHeight);
virtual ~CMaterial();
double m_dHeight,m_dWidth;' t9 a l& ?$ u! M& Y% M) z9 L
double m_dX,m_dY;& ^# [, l: o8 q, z) c! L0 u
BOOL m_bUsed;
BOOL m_bSeletcted;
BOOL m_bRotated;
int m_iIndex;6 K& ?! m# R2 U+ L1 I k- x* U
}; {; f# c) y9 K
class TYPESETLIB_API CTypeset
{
public: d8 Y! f& `/ p5 C7 I
virtual double Go();9 L# }; x7 { ~- Y
virtual void Add(CMaterial *pMaterial);# I6 N/ d/ {# a1 O( N) G5 l
CTypeset();
virtual ~CTypeset();6 v1 X8 ? x9 b. w2 b
list<CMaterial*> m_MaterialList;
CMaterial m_Desktop;% t( F. l" Y& r+ Q
protected:5 H8 z( q( q8 r' {. d
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();' J. P% d6 n- r# R" T" s
virtual void Clear();" y3 k5 j3 D3 F" s$ i* g( X
int m_iCurIndex;: k5 b9 T3 C$ t/ V8 {3 \( e! T
};0 c8 P; `) W" Z: l4 w' S! y
( J- b3 i* J/ O$ g* w
#endif // !defined(AFX_TYPESET_H__46213FAE_D2D6_42A6_B801_41D9109CD0FB__INCLUDED_)