|
// TypeSet.cpp: implementation of the CTypeset class.7 T6 L2 h. K- O( \1 N // //////////////////////////////////////////////////////////////////////1 `$ A: M' O3 R) s' ?2 ~# r2 p #include "stdafx.h" #include "..\INC\TypeSet.h"/ a3 [) E- Q6 |2 F //用法示例( j; M9 C8 F3 D8 b" |+ h void TestTypeset(HDC dc)& @ Y: @: K. O, |1 x1 ?+ t/ p, K4 z {8 g2 R$ a5 Y Y& H6 X8 ~ //声明一个板材对象 CTypeset typeset; //设置板材对象大小7 E! n6 Y4 w2 N$ E8 c3 @ typeset.m_Desktop.m_dHeight=9999; typeset.m_Desktop.m_dWidth=100;! ?# d5 r' q# m //声明一个排样元素对象4 J# [& r- D1 I# ] CMaterial material; //设置排样元素对象大小 material.SetSize(20,99);" d# X U1 e4 `& u //添加进入板材对象4 Y9 `/ a% r( K typeset.Add(&material);% h/ h& q/ H A //继续添加/ U5 K/ Q/ u5 s" W$ s! @ material.SetSize(99,80);4 g8 X1 @: T5 T7 ?8 E- e. L typeset.Add(&material);$ y. f" H! E4 Y material.SetSize(10,60);% G* ?0 Q1 M9 R. w3 s2 @/ q typeset.Add(&material);0 J% O. D* W) r% \ material.SetSize(50,20); typeset.Add(&material); //添加完毕,进行排样4 l7 [6 P# q k+ z2 y typeset.Go(); //排样完毕,输出- \5 s0 ~) ], m+ @( ]* l: c% r' I9 n/ j: \ list<CMaterial*>::iterator iter;% I. a$ r3 h7 Y C$ b //画板材对象9 D5 c/ H8 j1 x+ q' p ::Rectangle(dc,typeset.m_Desktop.m_dX,typeset.m_Desktop.m_dY,2 h s# A: R2 r( P0 Q: D6 F6 U9 m typeset.m_Desktop.m_dX+typeset.m_Desktop.m_dWidth,5 W! z' M0 b( n; i4 v, ?' H typeset.m_Desktop.m_dY+typeset.m_Desktop.m_dHeight); //画排样元素对象 for(iter=typeset.m_MaterialList.begin();iter!=typeset.m_MaterialList.end();iter++)6 o1 Y2 S4 Z8 d! @8 a {" V. n F; E* Y7 Q ::Rectangle(dc,(*iter)->m_dX,(*iter)->m_dY,5 Y% g) J) A' M& `& ^ (*iter)->m_dX+(*iter)->m_dWidth,/ h. d( K" g& ^( h (*iter)->m_dY+(*iter)->m_dHeight);! X; Z6 U0 Z k* F0 q, }+ ^ } 3 ~" r. U0 Y! f% q }. Q7 ~1 @0 k, }& z% w+ M3 A //////////////////////////////////////////////////////////////////////9 h& i7 @7 t$ q, G) Y6 d // CMaterial Class: e) `3 x2 v6 R- ^& ?# q( N ////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////// // Construction/Destruction4 w0 M+ K Z z ////////////////////////////////////////////////////////////////////// #define ZERO 0.00001 CMaterial::CMaterial() { m_dHeight=100;+ H$ j' l, N( v. V9 ^ m_dWidth=100;! o3 r/ |2 k4 ~6 w9 L2 V4 | m_dX=0;* h1 Q k0 e1 i. Q m_dY=0;6 D/ I& k7 ^* x) q; D m_bUsed=FALSE; m_bSeletcted=FALSE;4 O# l, ~) ^- v7 L7 { m_bRotated=FALSE; m_iIndex=0;) f# E6 I% G9 M S3 L4 f( L }6 V9 B6 ^' O$ I2 v5 P [* z CMaterial::CMaterial(double dWidth,double dHeight)2 J( \2 R/ u% c6 n/ _/ l( J4 O6 Q1 S; D# z { SetSize(dWidth,dHeight);; l# f0 l- D1 B' ?0 n9 f m_dX=0;9 d/ |. N5 s" U/ v/ e; { m_dY=0; m_bUsed=FALSE;' \4 |7 L, \- b9 x l1 V m_bSeletcted=FALSE; m_bRotated=FALSE; m_iIndex=0;% N* S6 t( O, H2 J% m+ p- }* G }* }2 s7 D1 S* L2 t8 I9 ` CMaterial::CMaterial(CMaterial *pMaterial) J/ e$ k. b# O H ~3 I { m_dX=pMaterial->m_dX;1 _* J8 u" P, f5 j) F# G- M5 P m_dY=pMaterial->m_dY;; p5 s1 p0 B& m* t m_dHeight=pMaterial->m_dHeight;! z7 {6 \5 K+ {( y& x# V3 T m_dWidth=pMaterial->m_dWidth; m_bUsed=pMaterial->m_bUsed;6 n: \- S1 c4 A8 u$ [7 r+ j m_bSeletcted=pMaterial->m_bSeletcted;$ ^$ y7 n; J9 {* A4 x m_bRotated=pMaterial->m_bRotated;5 e: a; j: d* W4 w+ x( i3 O0 d m_iIndex=pMaterial->m_iIndex; }' q0 ~& _; d4 X$ I$ \8 o4 k, J void CMaterial::SetSize(double dWidth, double dHeight) { m_dHeight=dHeight; m_dWidth=dWidth; & K( ~; W% Y: s" q- I } void CMaterial::Rotated()' q$ w1 o; r& f" s# i { m_bRotated=!m_bRotated;4 U4 }7 z% D4 Q double dA=m_dHeight; m_dHeight=m_dWidth;4 h. Y/ c; }- y+ x m_dWidth=dA;& J( h+ f& P' Z& Q8 T0 m } CMaterial::~CMaterial()2 _; G9 S) ?$ n- t: A$ G { } ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// CTypeset::CTypeset()6 Z D+ l: _" T" S) O; ~2 g {; x. d8 [( c1 B Clear();$ k* M, {8 @: Y } CTypeset::~CTypeset(). `! B* Q5 ^( k6 p5 _" V% z2 C& u* ?4 G { Clear(); " P6 I# y7 g, r4 D$ L+ K }# H2 |" b* }( K9 H, t void CTypeset::Clear()* p- X7 X2 E- z0 D4 y { list<CMaterial*>::iterator iter; for(iter=m_MaterialList.begin();iter!=m_MaterialList.end();iter++): i3 S6 e$ P5 S0 H1 w { delete (*iter); } m_MaterialList.clear(); m_iCurIndex=0; }6 [) N3 f- |/ O3 q# r void CTypeset::Add(CMaterial *pMaterial). ?0 L3 B- c# ?, o! | {0 E$ v) W4 l" b Q3 @ CMaterial *p=new CMaterial(pMaterial); |
精华推荐
换一换


p->m_iIndex=m_iCurIndex;
m_MaterialList.insert(m_MaterialList.end(),p);
m_iCurIndex++; @/ v4 g5 S! Y( X3 O i; f) I* z
}! [* ^' [. E1 f
void CTypeset::Sort()
{6 Z$ s% L2 `$ Q% F; y
list<CMaterial*> MaterialList;
list<CMaterial*>::iterator iter1,iter2,iter3;' o$ r8 z/ q6 v: e! C! e- B
bool bSourceInvert=false;7 \9 [8 D5 }8 w4 }) P5 T$ V8 u
while (!m_MaterialList.empty())
{6 `, z& k) \) S6 A7 K/ ?% F
double dMaxLen=0;& `/ @/ }- }/ T7 E3 b
iter2=m_MaterialList.begin();
CMaterial *p=NULL;
iter1=m_MaterialList.end()--;& f/ X w4 {; p& y$ k# S# c
iter3=iter2;
while(iter2!=iter1)
{& {( X+ y9 y% \1 v9 Q( j5 ]
if((*iter2)->m_dWidth>dMaxLen)
{% w% A0 k+ @2 n
p=*iter2;
iter3=iter2;
dMaxLen=(*iter2)->m_dWidth;: ]& k* Q7 C% G( }; H. p
bSourceInvert=false;
}
if((*iter2)->m_dHeight>dMaxLen)! i! l: o5 C( P3 L# C" W
{0 A3 N# s: i# U5 t
p=*iter2;
iter3=iter2;! H- a* _( W; t' ~& n4 |
dMaxLen=(*iter2)->m_dHeight;
bSourceInvert=true;
}
iter2++;
}# A4 u u2 H- n' V
if(p!=NULL)' m1 B8 V$ f/ ~
{& X4 L1 o2 Y- L# F, Q
if(bSourceInvert)
p->Rotated(); . ~# p5 G2 F4 @! e6 C" a
MaterialList.insert(MaterialList.end(),p);
m_MaterialList.erase(iter3);
}9 L5 J/ q! N% V# }; B
}1 z6 X8 }! j( f) N' }' W8 ~9 N7 l5 @
m_MaterialList.clear();
for(iter1=MaterialList.begin();iter1!=MaterialList.end();iter1++)+ s" A9 P8 `9 N9 l' p
{8 R7 s9 W+ Q y/ d# j! M
m_MaterialList.insert(m_MaterialList.end(),(*iter1));
}! @9 _5 m7 p; T6 t9 K
MaterialList.clear();
}
double CTypeset::Go()
{$ S6 `6 M. E- ^9 Z
double dRet=0;
list<CMaterial*> List;+ E2 H3 A* L2 d7 p9 V, G1 S9 F
list<CMaterial*>::iterator iter;! P& A7 d& `! |0 K
Sort();
Typeset(m_Desktop.m_dX,m_Desktop.m_dY,
m_Desktop.m_dWidth,m_Desktop.m_dHeight,&List);
m_MaterialList.clear();
for(iter=List.begin();iter!=List.end();iter++)
{
if((*iter)->m_dX<ZERO)
{- |, z v% N1 `; h
dRet+=(*iter)->m_dY;* F/ j6 w! h3 h1 \4 i( X! @3 c
}
(*iter)->m_bUsed=FALSE;* e& S; r) ?, V
(*iter)->m_bSeletcted=FALSE;8 e3 M* M5 V7 X
m_MaterialList.insert(m_MaterialList.end(),(*iter));& m0 w: \5 r& q' k" \1 }7 Z
}
List.clear();; U! N, C2 O z1 t6 x2 l5 t* C
return dRet;' C9 Q* a# O( s* n8 |9 l U
}
" V3 ^1 e( Z3 [
* W& ~( B! @2 B. {8 H2 c1 o" U
double CTypeset::Typeset(double dStartX,double dStartY,double dStartHei,double dStartWid,
list<CMaterial*> *pList)$ S* T+ v5 h1 }% B
{
CMaterial *tmpunit=NULL;
list<CMaterial*>::iterator iter,iter1;
double dArea1,dArea2,dArea;//横放和竖放时的排样面积,和最后方案的排样面积' c3 p1 y' t7 S. K: v+ a
double dRestArea1,dRestArea2;//横放和竖放时排样后的剩余面积+ v' K% c* S8 j, N, D- y
list<CMaterial*> List1,List2;////横放和竖放时的最佳排样序列
double dHeight,dWidth;
dHeight=dStartHei;
dWidth=dStartWid;8 e& c4 d# p) Q2 o3 W
5 d w% z/ N* _ q. C5 Y
if(m_MaterialList.empty())
return 0;( n2 Z* u8 U9 R# U+ u
for(iter=m_MaterialList.begin();iter!=m_MaterialList.end();iter++)
{5 h" v3 e6 O- i1 h6 T. k+ a! p2 o' l) b
if((*iter)->m_bUsed!=FALSE), v9 @! r4 P) ^: ]) d% ~
continue;
if((*iter)->m_dWidth<(*iter)->m_dHeight)! L! k, e5 f2 K7 d! m$ l( W- Y
{0 _3 D& [+ k+ N5 G7 d9 b
MessageBox(NULL,"错误","ERROR",MB_OK);
return 0;! a' d- U5 P- Z9 D0 ^: O% n' a" _0 H
}6 \ A5 g3 Y G% @) g
//找出一张能放入的最大的没有排过的板材/ N; }9 d+ K( W s, `
//如果板材横竖都能放入; x0 y2 H/ H( V! m; k
if(((dHeight>(*iter)->m_dWidth-ZERO)&&(dWidth>(*iter)->m_dHeight-ZERO))! l3 X- Y$ X" q3 E4 h
&&((dHeight>(*iter)->m_dHeight-ZERO)&&(dWidth>(*iter)->m_dWidth-ZERO)))
{
if(dStartX<ZERO)
dWidth=(*iter)->m_dHeight;+ ?$ P; v+ x& ^! u! X9 K4 |
) |% ]% u8 z3 s5 U* d; s! ~ Q
(*iter)->SetUsed(TRUE);//对该图排样, T% e3 a G- C" ^+ X9 B% Q
4 f9 q! D7 y5 }: o* {! s- @
//先横着放入继续排样,计算剩余面积
dArea1=Typeset(dStartX+(*iter)->m_dWidth,dStartY,
dHeight-(*iter)->m_dWidth,(*iter)->m_dHeight,&List1);
dRestArea1=dHeight*dWidth-dArea1-(*iter)->GetArea();. S2 c' ?7 K! D* I! @
dRestArea1=dRestArea1/(dHeight*dWidth);//剩余面积率
//将刚才排过的板材状态还原,再竖直放入该图继续排样,计算剩余面积4 [ v* S0 y& J* B' ]2 n k
if(dStartX<ZERO)3 V8 @7 j8 y @; E2 B3 M5 l& \
dWidth=(*iter)->m_dWidth;
; N2 k* o! y! Z( B6 `
SetStatus(&List1,FALSE);' n' t# z7 e4 o2 D9 v
tmpunit=(*iter)->Copy();4 c3 s" S( w9 u. W% v% o. v' K
tmpunit->Rotated();
dArea2=Typeset(dStartX+tmpunit->m_dWidth,dStartY,
dHeight-tmpunit->m_dWidth,tmpunit->m_dHeight,&List2);" V6 i! g" l( V
dRestArea2=dHeight*dWidth-dArea2-tmpunit->GetArea();( {; B' r9 n! s! N: Z
dRestArea2=dRestArea2/(dHeight*dWidth);//剩余面积率
}. T; ]6 M. H: v0 | x3 g
else if((dHeight>(*iter)->m_dWidth-ZERO)&&(dWidth>(*iter)->m_dHeight-ZERO))//如果板材只能横着放入
{
if(dStartX<ZERO)
dWidth=(*iter)->m_dHeight;7 k' N) P/ h; @7 p8 h
3 t- q) ` t0 k6 W8 R* q/ a( ^
(*iter)->SetUsed(TRUE);//对该图排样
dArea1=Typeset(dStartX+(*iter)->m_dWidth,dStartY,
dHeight-(*iter)->m_dWidth,(*iter)->m_dHeight,&List1);$ H9 g9 Y2 F! v% Q
dRestArea1=dHeight*dWidth-dArea1-(*iter)->GetArea();9 r* n! u3 E* J
dRestArea1=dRestArea1/(dHeight*dWidth);//剩余面积率- y! D6 f' R! ~) h
p/ \9 n- ?" G
dRestArea2=dRestArea1+10;//不再尝试竖放,将竖放剩余面积设大
}& `7 {5 t) g4 {) p# D9 \' H& j
else if((dHeight>(*iter)->m_dHeight-ZERO)&&(dWidth>(*iter)->m_dWidth-ZERO))//如果板材只能竖着放入2 E0 |" i4 M( Q2 U9 U: r' Q; d4 R
{
if(dStartX<ZERO)6 K' b2 V; ?; f! G
dWidth=(*iter)->m_dWidth;
(*iter)->SetUsed(TRUE);//对该图排样5 s, k6 z" T! ]* c
tmpunit=(*iter)->Copy();. U2 {# t J, ~% r/ I
tmpunit->Rotated();
dArea2=Typeset(dStartX+tmpunit->m_dWidth,dStartY,
dHeight-tmpunit->m_dWidth,tmpunit->m_dHeight,&List2);0 e( P# q* W# A" O$ E( k& y
dRestArea2=dHeight*dWidth-dArea2-tmpunit->GetArea();
dRestArea2=dRestArea2/(dHeight*dWidth);//剩余面积率
dRestArea1=dRestArea2+10;//不再尝试横放,将横放剩余面积设大
}
else
continue;) \- p( G- y- P9 j, Y! P' S
& p% ]9 H9 M1 u3 A' L. |, E7 {8 q
//记录优化的排样序列3 u, V2 ?9 y' l v4 {4 f
CMaterial *tmp=NULL;
if(dRestArea1<dRestArea2+ZERO)//当前板材横向排结果优化! ]6 T" g) b( g. B- M& a
{
SetStatus(&List2,FALSE);//将纵向排的排样序列还原状态
SetStatus(&List1,TRUE);//将横向排的排样序列标志为使用) M s. s8 ^( E5 [0 S @, x$ s# L
dArea=dArea1+(*iter)->GetArea();;
tmp=(*iter)->Copy();
tmp->m_dX=(int)dStartX;) L/ j$ @$ m4 D' u- G. |
tmp->m_dY=(int)dStartY;# [/ j' l! ?8 I$ b3 A3 F h
pList->insert(pList->end(),tmp);3 w: v% t0 V. F% [6 Z
while(!List1.empty())# ~: {0 r' @& M2 ]! B" V7 L" N5 M
{& }2 b8 s! r: B% q/ p
iter1=List1.begin();
pList->insert(pList->end(),*iter1);. p- w2 Z& q7 c
List1.erase(iter1);
}
//释放不好的序列7 Z6 a- s: N9 B8 ?
for(iter1=List2.begin();iter1!=List2.end();iter1++)
{
delete (*iter1);+ G7 B& w( C) l% b# j
}. v- v0 `0 r# n
List2.clear();: S" A' y$ B6 }! {
delete tmpunit;/ J% j& J( p+ i) {, |$ Z
}: k* t$ C9 r* Q2 K* n2 c
else//当前板材纵向排结果优化! K4 v8 i3 S% U7 D! X m
{/ ?2 r7 K7 j/ l- R `& B, r3 L
SetStatus(&List1,FALSE);//将横向排的排样序列还原状态7 f) i$ ~9 G" [+ A+ o Z
SetStatus(&List2,TRUE);//将纵向排的排样序列标志为使用' I: N0 g8 X5 u4 {
if(tmpunit==NULL)
{
MessageBox(NULL,"错误","ERROR",MB_OK);
return 0;
}9 e$ d: F/ G; |8 F4 M- [
dArea=dArea2+(*iter)->GetArea();0 h6 _! `5 ~% X7 J
tmp=tmpunit->Copy();- ^+ Q6 f) I8 |! [0 H5 W
tmp->m_dX=(int)dStartX;! l$ k0 K2 w! D
tmp->m_dY=(int)dStartY;
pList->insert(pList->end(),tmp);2 u: w$ X$ l, }1 r1 p }% u
while(!List2.empty())) }2 V9 {9 u8 V$ E
{
iter1=List2.begin();, ]5 Z2 S0 t3 K& ^9 r0 u) V6 k% r
pList->insert(pList->end(),*iter1);
List2.erase(iter1);) V1 \; v. a/ w L' v
}
//释放不好的序列
for(iter1=List1.begin();iter1!=List1.end();iter1++): w1 x8 y% n' x/ h
{
delete (*iter1);* M2 H) g, _/ m8 ]7 V
}
List1.clear();
delete tmpunit;0 f# f2 e( \, ^2 _! T- e* R$ p
}; O. x a) L$ d1 q3 s0 n
double next_x,next_y,next_len,next_wid;
next_x=dStartX;
next_y=dStartY+tmp->m_dHeight;
next_len=dHeight;- O+ K% ]+ i8 }) p% G. _: l+ g
next_wid=dStartWid-tmp->m_dHeight;
if(next_wid>ZERO)//板材还有剩余' m1 Y7 O# I: k
{
//继续排下一行
dArea=dArea+Typeset(next_x,next_y,next_len,next_wid,&List1);
//记录排样序列! b1 k" l9 d% ]& F9 Q. Y
SetStatus(&List1,TRUE);! R/ o' f+ O9 w0 [7 o1 P% {
for(iter1=List1.begin();iter1!=List1.end();iter1++)& z7 E, {2 n }# M% `
{
pList->insert(pList->end(),(*iter1));) ~7 k, @2 C- b% N! @( J' O- H: K
}, K2 U, Q: G a$ l; L* D1 f) ?( Y
List1.clear();
}
return dArea;
}- [" L: o' s0 c; g7 t# s+ O
return 0;
}0 B9 B, X; ~5 l" E& e4 F4 [+ p
, C" \2 ^1 b6 Z3 W( k% m3 x
void CMaterial::SetUsed(BOOL bUsed)1 Q1 o+ u+ a3 V7 o" x) ]. _
{
m_bUsed=bUsed;
}
( [! H% Q9 n5 X3 X8 K
void CTypeset::SetStatus(list<CMaterial*> *pList, BOOL bUsed)
{
list<CMaterial*>::iterator iter1,iter2;6 R6 B: |( W/ }# F; b
for(iter1=m_MaterialList.begin();iter1!=m_MaterialList.end();iter1++)
{
for(iter2=pList->begin();iter2!=pList->end();iter2++)
{ E! K% i- x: {- i
if((*iter1)->m_iIndex==(*iter2)->m_iIndex)
{2 p3 T8 {$ J# [/ N: ?' ~
(*iter1)->m_bUsed=bUsed;1 ~- i% D* N p- i
}
}
}- v# U' S- z( _3 \ ^9 x, Q2 z
}
CMaterial* CMaterial::Copy(), w s! H% @4 c% H- Q) R+ R7 \( v' E
{
CMaterial* p=new CMaterial(this);4 |' l6 A9 M: g7 _- W! ~
return p;% g* v+ _' g) J) O' s% J6 e
}
# m! X0 r7 k: d. N
& c6 x4 U d/ y* f: p2 u7 }
// TypeSet.h: interface for the CTypeset class.
//
//////////////////////////////////////////////////////////////////////
. H4 p' d5 S5 f3 Y3 \8 r
#if !defined(AFX_TYPESET_H__46213FAE_D2D6_42A6_B801_41D9109CD0FB__INCLUDED_): j! e" z/ |4 w
#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)$ h3 ]- t& V) g
#include <list>
#include <string>1 b& G9 E8 B/ T$ a) z
using namespace std;
* J$ i5 d, K" R3 ?
#ifdef TYPESETLIB_EXPORTS1 }. S: M% z* q- u# z
#define TYPESETLIB_API __declspec(dllexport)
#else% s# a! ]/ l2 v, I
#define TYPESETLIB_API __declspec(dllimport); l5 k7 I* P t' r* z; ]/ g
#endif
2 J0 B3 x' w7 w/ p9 y
; o' w& E* v3 p/ f: P+ Z, ^ }
TYPESETLIB_API void TestTypeset(HDC dc);
class TYPESETLIB_API CMaterial ) m. A+ Q- v. b+ ~
{) a$ v6 y P4 m u& \" q
public:
virtual CMaterial* Copy();
virtual void SetUsed(BOOL bUsed);
virtual void Rotated();
virtual void SetSize(double dWidth,double dHeight);+ f- R! a i% { G- H5 e( W$ _5 I
virtual double GetArea(){ return m_dHeight*m_dWidth; }
CMaterial();
CMaterial(CMaterial *pMaterial);5 D6 t) l" M" A! B& |6 z4 O% T
CMaterial(double dWidth,double dHeight);9 Q! z; M+ o3 P: N7 w, t
virtual ~CMaterial();
double m_dHeight,m_dWidth;
double m_dX,m_dY;
BOOL m_bUsed;2 F- H6 s# ?# F) Z8 Q8 v
BOOL m_bSeletcted;; b9 i# ]+ P+ O
BOOL m_bRotated;
int m_iIndex;. A" T( W$ v; U! a# S- M
6 l; V; x( o) r: O
};
class TYPESETLIB_API CTypeset
{' X- _2 }* k& g7 Q7 {+ G
public:9 I. ]! `, g- `" X2 ^5 q
virtual double Go();
virtual void Add(CMaterial *pMaterial);2 @ B p G: a/ R
CTypeset();. N. p2 }& R. {" G: d
virtual ~CTypeset();2 a6 [# u5 s. G; R7 O0 X$ y" R
list<CMaterial*> m_MaterialList;
CMaterial m_Desktop;2 H4 c" U6 p! g1 @1 y: z
protected:
virtual void SetStatus(list<CMaterial*> *pList, BOOL bUsed);8 B. e5 w# Z( L' K* Q8 o
virtual double Typeset(double dStatrX,double dStatrY,double dStatrHei,double dStatrWid,
list<CMaterial*> *pList);
virtual void Sort();
virtual void Clear();
int m_iCurIndex;
};1 S; [ I9 E3 k6 i: h! y1 u
+ E- |9 S2 M( e% P' d
#endif // !defined(AFX_TYPESET_H__46213FAE_D2D6_42A6_B801_41D9109CD0FB__INCLUDED_)