#include "stdafx.h" #define MTOMM 1000.0 //米转化为毫米 #define MMTOM 0.001 //毫米转化为米 double PropToDouble(CString sProp); void OptionDrawUnit(BOOL bUserSetUnit,double Scale); BOOL ControlEnt(AcDbEntity *pEnt,double Scale); void DocStatus(); void UnionScale() { int nRet=0; XString sKeyword; double dScale=0;//得到比例 CString prompt1; CString prompt2; TCHAR ss; if (_UNIT_SCALE==0.001) { prompt1=_T("\n请选择转换方式[米变毫米(A)/毫米变米(B)/缩放比例(S)] <米变毫米>:"); } else if (_UNIT_SCALE==1.0) { prompt1=_T("\n请选择转换方式[米变毫米(A)/毫米变米(B)/缩放比例(S)] <毫米变米>:"); } else { prompt1=_T("\n请选择转换方式[米变毫米(A)/毫米变米(B)/缩放比例(S)] <退出>:"); } INITGET_BEG(0,_T("A B S")); nRet=ads_getkword(prompt1,sKeyword); INITGET_END(); if (nRet==RTCAN) { return; } if (nRet !=RTNORM) { if (_UNIT_SCALE==1.0) { ss=_T('B'); } else { ss=_T('A'); } } if (sKeyword[0]!=NULL) { ss=sKeyword[0]; } switch(ss) { case _T('A'): {//米变毫米单位 dScale =MTOMM;//初始化缩放比例 (米转化为毫米) adsout << _T("\n提示:空选即为全选!"); PickSet ss(SS_FREE); int r=SelectEntities(_T("\n请选择缩放的对象:"),ss, RBList()); if (r==RTCAN) { return; } else if (r!=RTNORM && r!=RTCAN) { ss.Get(_T("X"), NULL, NULL, RBList()); } int i=ss.Length(); for(long j=0;jworkingDatabase(); if (pCurDB != NULL) { Adesk::Int16 iPrec = pCurDB->luprec(); iPrec = (iPrec > 2 ? iPrec - 3 : 0); pCurDB->setLuprec(iPrec); } } break; case _T('B'): {//毫米变米单位 dScale =MMTOM;//初始化缩放比例 (毫米转化为米) adsout << _T("\n提示:空选即为全选!"); PickSet ss(SS_FREE); int r=SelectEntities(_T("\n请选择缩放的对象:"),ss, RBList()); if (r==RTCAN) { return; } else if (r!=RTNORM && r!=RTCAN) { ss.Get(_T("X"), NULL, NULL, RBList()); } int i=ss.Length(); for(long j=0;jworkingDatabase(); if (pCurDB != NULL) { Adesk::Int16 iPrec = pCurDB->luprec(); iPrec += 3; pCurDB->setLuprec(iPrec); } } break; case _T('S'): {//按比例缩放 int rt; if (dScale==0) { rt=ads_getreal(_T("\n请输入要缩放的比例<退出>:"),&dScale); } if (rt!=RTNORM) { return; } if (dScale==0) { return; } PickSet ss(SS_FREE); int r=SelectEntities(_T("\n请选择缩放的对象<退出>:"),ss, RBList()); if (r==RTCAN) { return; } else if (r!=RTNORM && r!=RTCAN) { ss.Get(_T("X"), NULL, NULL, RBList()); } int i=ss.Length(); for(long j=0;jUnionScale(Scale); pTEnt->SetPScale(pTEnt->GetPScale()*Scale); } else {//AutoCAD对象 pEnt->transformBy(mat); } return TRUE; } void OptionDrawUnit(BOOL bUserSetUnit,double Scale) {//改变当前的绘图单位 //其中变量bUserSetUnit=FALSE为毫米单位,=TRUE为米单位 if (bUserSetUnit!=g_bMeterUnitDraw) {//发生变化了 double x=DocGetPScale(); DocSetMeterUnitDraw(bUserSetUnit); DocSetPScale(Scale*DocGetPScale()); } else DocSetMeterUnitDraw(bUserSetUnit); }