#include "stdafx.h" #include "TchKernalGlobalFunc.h" //////////////////////////////////////////////////////////////////////////// // Audit Status: OK extern AcDbObjectId GetMSpaceId(); extern TARCH_IMPEXP int g_nProductId; //extern void WblockCloneCompStyleDict(AcRxObject* pOwner, // AcDbIdMapping& idMap); // 3-TArch5;4,5-TArch6;6-TArch7;7-TArch8beta1;8-TArch8;9-TArch9 // const Adesk::UInt8 TDbConfig::g_nVersion = 8; //const Adesk::UInt8 TDbConfig::g_nVersion = 9; //const Adesk::UInt8 TDbConfig::g_nVersion = 10; // modify by gjm for t20 const Adesk::UInt8 TDbConfig::g_nVersion = 11; // modify by jsx on 1620519 for t20v3 ACRX_DXF_DEFINE_MEMBERS(ATSConfig, AcDbObject, AcDb::kDHL_CURRENT, AcDb::kMReleaseCurrent, 1, ATS_DBCONFIG, "ATS_DBCONFIG图形无法解析, 请下载上华软件|网址: www.shanghuasoft.com"); extern double g_nText2Base; TDbConfig::TDbConfig() { m_bByLayerForDOR = true; m_bByLayerForSym = true; m_bByLayerForElev = true; m_nPScale=(g_nProductId==kTSUN ? 500.0*_UNIT_SCALE : 100.0*_UNIT_SCALE); m_nLHeight=_AS_SYS_UNIT(3000.0); m_nDrawMode=DRAW_2D|DRAW_3D; m_bSolidFill=FALSE; m_bLineWeight=FALSE; m_nSpaceDispMode=SPF_AREA; m_bShowWallBase=FALSE; m_bCheckDim=FALSE; m_nHighBold=0.4; m_nElevDiff=450; m_nControlFlag=0; // TArch6 data m_nText2Base=g_nText2Base; m_nDetailScale=100.0; // 标准填充名称 比例 >= 100 //m_sHatchDivider1, //隔墙 //m_sHatchFill1, //填充墙 //m_sHatchBrick1, //砖墙柱 //m_sHatchRocket1, //石墙柱 m_sHatchConcrete1=_T("SOLID"), //砼墙柱 //m_sHatchSteel1; //钢墙柱 // 详图填充名称 比例 < 100 //m_sHatchDivider2, //隔墙 //m_sHatchFill2, //填充墙 m_sHatchBrick2=_T("普通砖"), //砖墙柱 m_sHatchRocket2=_T("天然石材"), //石墙柱 m_sHatchConcrete2=_T("钢筋混凝土"), //砼墙柱 m_sHatchSteel2=_T("金属"); //钢墙柱 // 线粗细 // 比例 >= 100 m_nBoldDivider1=0.2, //隔墙 m_nBoldFill1=0.4, //填充墙 m_nBoldFill11=0.4, //填充墙1 m_nBoldFill21=0.4, //填充墙2 m_nBoldBrick1=0.4, //砖墙柱 m_nBoldRocket1=0.4, //石墙柱 m_nBoldConcrete1=0.4, //砼墙柱 m_nBoldSteel1=0.4; //钢墙柱 // 比例 < 100 m_nBoldDivider2=0.25, //隔墙 m_nBoldFill2=0.5, //填充墙 m_nBoldFill12=0.5, //填充墙1 m_nBoldFill22=0.5, //填充墙2 m_nBoldBrick2=0.5, //砖墙柱 m_nBoldRocket2=0.5, //石墙柱 m_nBoldConcrete2=0.5, //砼墙柱 m_nBoldSteel2=0.5; //钢墙柱 m_nDividerFlag=0; m_nFillFlag=0; m_nFill1Flag=0; m_nFill2Flag=0; m_nBrickFlag=0; m_nRocketFlag=0; m_nConcreteFlag=0; m_nSteelFlag=0; m_nDividerColor=256; m_nFillColor=256; m_nFill1Color=256; m_nFill2Color=256; m_nBrickColor=256; m_nRocketColor=256; m_nConcreteColor=256; m_nSteelColor=256; m_nText2BaseRatio=g_nText2BaseRatio;//字高系数 m_nSpaceAreaPrecision = 2; // sg add 081126 m_dDrawingIndexTextRatio = g_dDrawIndexTextRatio; // sg add 090115,sg modify 090512 // sg modify 110209,支持出圈样式 // m_bOldDrawingIndex = g_bDrawIndexOldStyle?TRUE:FALSE; // sg add 090612 m_bOldDrawingIndex = g_bDrawIndexOldStyle ? 1 : 0; m_bOldDrawingIndex = g_bDIOutCircleStyle ? 3 : m_bOldDrawingIndex; //m_dEleDoteSize = 0.75; // sg add 090212 //m_dEleTriangleSize = 3.0; m_dEleDoteSize = g_dEleDoteSize*0.5; // sg add 110301,默认值从高级选项中读取 m_dEleCrossSize = g_dEleCrossSize ; //jsx add 160517,默认值从高级选项中读取 m_dEleTriangleSize = g_dEleTriangleSize; m_dMultiLeaderDistRatio = 0.3; // sg add 090216 SetAxisLabelTextRatio(g_dAxisLabelTextRatio); // sg add 090512 SetCurtainWall3Scale(g_nCurtainWall3Scale); // sg add 090609,带形窗幕墙改变样式的比例界限 SetCurtainWallFixStyle(g_bCurtainWallFixStyle); // sg add 090609,带形窗幕墙比例改变后是否不改样式 SetCurtainWallStyle(g_nCurtainWallStyle); // sg add 090609,带形窗幕墙,不改样式时的设定类型 // sg add 110120,凸窗挡板、转角窗挡板、门窗套是否加保温 SetProWinSlabInsu(TRUE); // sg add 110303,设置默认的单行文字、多行文字、专业词库文字样式 SetTgSingleTextStyle(_T("STANDARD")); // sg add 120412,根据9.0需求,增加设置弧长标注样式的设置 m_nArcLenDimType = g_nArcLenDimType; // sg add 120413,用于解决旧的尺寸标注,有可能箭头标注大小固定为2的问题,至少让它看上去是一样大的,0表示旧版本,1表示9以上版本 m_nDealOldDimArrowSize = 1; } TDbConfig::~TDbConfig() { } void SplitPath(const TCHAR* pathName, CString &filePath, CString &fileName) { TCHAR drive[_MAX_DRIVE], dir[_MAX_DIR], fname[_MAX_FNAME], ext[_MAX_EXT]=_T(""); _tsplitpath(pathName, drive, dir, fname, ext); filePath.Format(_T("%s%s"), drive, dir); fileName.Format(_T("%s"), fname); } CString TDbConfig::GetLineHatch(long i)const { AcDbObjectId id; switch(i) { case 0:id=GetHatchDividerId();break; case 1:id=GetHatchFillId();break; case 2:id=GetHatchFill1Id();break; case 3:id=GetHatchFill2Id();break; case 4:id=GetHatchBrickId();break; case 5:id=GetHatchRocketId();break; case 6:id=GetHatchConcreteId();break; case 7:id=GetHatchSteelId();break; } if(id.isNull()||!id.isValid()) return _T(""); AcDbBlockTableRecord* pRecord=NULL; acdbOpenObject(pRecord,id,AcDb::kForRead); if(pRecord!=NULL) { const TCHAR* sName=NULL; pRecord->getName(sName); pRecord->close(); CString name(sName); int pos=name.ReverseFind(_T('$')); if(pos!=-1) name=name.Right(name.GetLength()-pos-1); return name; } return _T(""); } void TDbConfig::SetLineHatch(long i,const TCHAR* sPat) { XString sTemp,sBlockName; sTemp<getFilename(sBuf); if(sBuf==NULL) return _T(""); CString sDwgFilePath(sBuf); //delete[] sBuf;不删除更加稳定 CString sPrjPath,sPrjName,sDwgPath,sDwgName; sDwgFilePath.MakeUpper(); SplitPath(m_sProjectFile,sPrjPath,sPrjName); SplitPath(sDwgFilePath,sDwgPath,sDwgName); if(sPrjName==_T("")) return _T(""); long s1=(sPrjPath==_T(""))?sDwgPath.GetLength():sDwgPath.Find(sPrjPath); if(s1!=sDwgPath.GetLength()-sPrjPath.GetLength()) return (const TCHAR*)m_sProjectFile; else { CString sDir=sDwgPath.Left(sDwgPath.GetLength()-sPrjPath.GetLength()); return sDir+sPrjName+_T(".TPR"); } } void TDbConfig::SetProjectFile(CString sPrjFilePath) { assertWriteEnabled(); if(sPrjFilePath==_T("")) { m_sProjectFile=_T(""); return; } const TCHAR* sBuf=NULL; database()->getFilename(sBuf); if(sBuf==NULL) return; CString sDwgFilePath(sBuf); //delete[] sBuf;不删除更加稳定 CString sPrjPath,sPrjName,sDwgPath,sDwgName; sPrjFilePath.MakeUpper(); sDwgFilePath.MakeUpper(); SplitPath(sPrjFilePath,sPrjPath,sPrjName); SplitPath(sDwgFilePath,sDwgPath,sDwgName); long s1=sDwgPath.Find(sPrjPath); if(s1!=0) m_sProjectFile=sPrjFilePath; else { CString sSub=sDwgPath.Right(sDwgPath.GetLength()-sPrjPath.GetLength()); m_sProjectFile=sSub+sPrjName; } } // 从DWG读入数据: Acad::ErrorStatus TDbConfig::dwgInFields (AcDbDwgFiler* pFiler) { assertWriteEnabled(); Acad::ErrorStatus es = AcDbObject::dwgInFields(pFiler); if(es != Acad::eOk) return es; Adesk::UInt8 nVer; pFiler->readItem(&nVer); if(nVer>g_nVersion) return Acad::eMakeMeProxy; pFiler->readItem(&m_nPScale); pFiler->readItem(&m_nLHeight); pFiler->readItem(&m_nDrawMode); if(nVer==1) { AcDbHardPointerId m_idWallStyle; pFiler->readItem(&m_idWallStyle); } pFiler->readItem(&m_bSolidFill); pFiler->readItem(&m_bLineWeight); if(nVer==1) { XString m_sDimBlk; ReadString(pFiler, m_sDimBlk); } pFiler->readItem(&m_nSpaceDispMode); if(nVer==1) { Adesk::UInt8 m_nWallOsnap; pFiler->readItem(&m_nWallOsnap); } pFiler->readItem(&m_bShowWallBase); if(nVer==1) { Adesk::UInt8 m_bModelNumber; pFiler->readItem(&m_bModelNumber); double m_nInsulateThickness; pFiler->readItem(&m_nInsulateThickness); } else { pFiler->readItem(&m_nHighBold); pFiler->readItem(&m_nElevDiff); pFiler->readItem(&m_bCheckDim); pFiler->readItem(&m_bDimAreaUnit); if(nVer>2) { if(nVer>3) // TArch6 pFiler->readItem(&m_nControlFlag); else { // UInt8->UInt32 Adesk::UInt8 nTempFlag=0; pFiler->readItem(&nTempFlag); m_nControlFlag=nTempFlag; } } } if(nVer>3) {//TArch6 pFiler->readItem(&m_nText2Base); pFiler->readItem(&m_nDetailScale); ReadString(pFiler, m_sHatchDivider1); ReadString(pFiler, m_sHatchFill1); ReadString(pFiler, m_sHatchBrick1); ReadString(pFiler, m_sHatchRocket1); ReadString(pFiler, m_sHatchConcrete1); ReadString(pFiler, m_sHatchSteel1); ReadString(pFiler, m_sHatchDivider2); ReadString(pFiler, m_sHatchFill2); ReadString(pFiler, m_sHatchBrick2); ReadString(pFiler, m_sHatchRocket2); ReadString(pFiler, m_sHatchConcrete2); ReadString(pFiler, m_sHatchSteel2); pFiler->readItem(&m_nBoldDivider1); pFiler->readItem(&m_nBoldFill1); pFiler->readItem(&m_nBoldBrick1); pFiler->readItem(&m_nBoldRocket1); pFiler->readItem(&m_nBoldConcrete1); pFiler->readItem(&m_nBoldSteel1); pFiler->readItem(&m_nBoldDivider2); pFiler->readItem(&m_nBoldFill2); pFiler->readItem(&m_nBoldBrick2); pFiler->readItem(&m_nBoldRocket2); pFiler->readItem(&m_nBoldConcrete2); pFiler->readItem(&m_nBoldSteel2); } else { m_nText2Base=1.5; //旧图设置 m_nDetailScale=100.0; m_sHatchDivider1=_T(""), //隔墙 m_sHatchFill1=_T(""), //填充墙 m_sHatchBrick1=_T(""), //砖墙柱 m_sHatchRocket1=_T(""), //石墙柱 m_sHatchConcrete1=_T("SOLID"), //砼墙柱 m_sHatchSteel1=_T(""); //钢墙柱 // 详图填充名称 比例 < 100 m_sHatchDivider2=_T(""), //隔墙 m_sHatchFill2=_T(""), //填充墙 m_sHatchBrick2=_T(""), //砖墙柱 m_sHatchRocket2=_T(""), //石墙柱 m_sHatchConcrete2=_T("钢筋混凝土"), //砼墙柱 m_sHatchSteel2=_T(""); //钢墙柱 // 线粗细 // 比例 >= 100 m_nBoldDivider1=m_nHighBold, //隔墙 m_nBoldFill1=m_nHighBold, //填充墙 m_nBoldBrick1=m_nHighBold, //砖墙柱 m_nBoldRocket1=m_nHighBold, //石墙柱 m_nBoldConcrete1=m_nHighBold, //砼墙柱 m_nBoldSteel1=m_nHighBold; //钢墙柱 // 比例 < 100 m_nBoldDivider2=m_nHighBold, //隔墙 m_nBoldFill2=m_nHighBold, //填充墙 m_nBoldBrick2=m_nHighBold, //砖墙柱 m_nBoldRocket2=m_nHighBold, //石墙柱 m_nBoldConcrete2=m_nHighBold, //砼墙柱 m_nBoldSteel2=m_nHighBold; //钢墙柱 SetCapLabel(TRUE); } if(nVer>4) { pFiler->readItem(&m_idLinetypeDote); pFiler->readItem(&m_idLinetypeDash); } else { if(database()==acdbCurDwg()) { m_idLinetypeDote = InitLineType(_T("DOTE")); m_idLinetypeDash = InitLineType(_T("DASH")); } else { //modify by xlc on 100628 解决弹出cad警告,提示保存时出错,建议对图形进行recover的问题 //m_idLinetypeDote = GetLinetypeIdFromString(_T("DOTE")); //m_idLinetypeDash = GetLinetypeIdFromString(_T("DASH")); m_idLinetypeDote = GetLinetypeIdFromString(_T("DOTE"), database()); m_idLinetypeDash = GetLinetypeIdFromString(_T("DASH"), database()); } } if(nVer>5) { ReadString(pFiler,m_sProjectFile); ReadString(pFiler,m_sLayerStd); ReadString(pFiler, m_sHatchFill11); ReadString(pFiler, m_sHatchFill12); pFiler->readItem(&m_nBoldFill11); pFiler->readItem(&m_nBoldFill12); ReadString(pFiler, m_sHatchFill21); ReadString(pFiler, m_sHatchFill22); pFiler->readItem(&m_nBoldFill21); pFiler->readItem(&m_nBoldFill22); #if ADS>18 pFiler->readItem((Adesk::Boolean*)&m_nDividerFlag); pFiler->readItem((Adesk::Boolean*)&m_nFillFlag); pFiler->readItem((Adesk::Boolean*)&m_nFill1Flag); pFiler->readItem((Adesk::Boolean*)&m_nFill2Flag); pFiler->readItem((Adesk::Boolean*)&m_nBrickFlag); pFiler->readItem((Adesk::Boolean*)&m_nRocketFlag); pFiler->readItem((Adesk::Boolean*)&m_nConcreteFlag); pFiler->readItem((Adesk::Boolean*)&m_nSteelFlag); #else pFiler->readItem(&m_nDividerFlag); pFiler->readItem(&m_nFillFlag); pFiler->readItem(&m_nFill1Flag); pFiler->readItem(&m_nFill2Flag); pFiler->readItem(&m_nBrickFlag); pFiler->readItem(&m_nRocketFlag); pFiler->readItem(&m_nConcreteFlag); pFiler->readItem(&m_nSteelFlag); #endif pFiler->readItem(&m_idHatchDivider); pFiler->readItem(&m_idHatchFill); pFiler->readItem(&m_idHatchFill1); pFiler->readItem(&m_idHatchFill2); pFiler->readItem(&m_idHatchBrick); pFiler->readItem(&m_idHatchRocket); pFiler->readItem(&m_idHatchConcrete); pFiler->readItem(&m_idHatchSteel); pFiler->readItem(&m_nDividerColor); pFiler->readItem(&m_nFillColor); pFiler->readItem(&m_nFill1Color); pFiler->readItem(&m_nFill2Color); pFiler->readItem(&m_nBrickColor); pFiler->readItem(&m_nRocketColor); pFiler->readItem(&m_nConcreteColor); pFiler->readItem(&m_nSteelColor); } else { m_sProjectFile=_T(""); m_sLayerStd=_T(""); } if (nVer>6) // TArch8 beta1 { pFiler->readItem(&m_nText2BaseRatio); pFiler->readItem(&m_nSpaceAreaPrecision); // sg add 081126 pFiler->readItem(&m_dDrawingIndexTextRatio); // sg add 090115 pFiler->readItem(&m_bOldDrawingIndex); pFiler->readItem(&m_dEleTriangleSize); // sg add 090212 pFiler->readItem(&m_dEleDoteSize); pFiler->readItem(&m_dMultiLeaderDistRatio); // sg add 090216 } else { // m_nText2BaseRatio = m_nText2Base*0.3; // sg modify 090527,将文字距离基线距离与系数间的换算关系由0.3精确到0.286 m_nText2BaseRatio = m_nText2Base*0.286; m_nSpaceAreaPrecision = 2; // sg add 081126 m_bOldDrawingIndex = 1; // sg add 090115 m_dDrawingIndexTextRatio = 0.8; //m_dEleTriangleSize = 3.0; // sg add 090212 //m_dEleDoteSize = 0.75; // sg modify 090320 m_dEleDoteSize = g_dEleDoteSize*0.5; // sg add 110301,默认值从高级选项中读取 m_dEleTriangleSize = g_dEleTriangleSize; m_dMultiLeaderDistRatio = 0; // sg add 090216 m_dEleCrossSize = 2.5;//jsx add 160517 } if(nVer>7)// TArch8 m_allFields.DwgIn(pFiler); if (nVer > 10) // T20V3 { pFiler->readItem(&m_nArcLenDimType); pFiler->readItem(&m_nDealOldDimArrowSize); } else if (nVer > 8 && nVer <= 10) // TArch9 { pFiler->readItem(&m_nArcLenDimType); pFiler->readItem(&m_nDealOldDimArrowSize); m_nArcLenDimType = 1; m_nDealOldDimArrowSize = 0;//T20V3之前版本的箭头大小固定写为2 } else { m_nArcLenDimType = 1; m_nDealOldDimArrowSize = 0; } if (nVer > 9) // t20 { pFiler->readItem(&m_bByLayerForDOR); pFiler->readItem(&m_bByLayerForSym); pFiler->readItem(&m_bByLayerForElev); } if (nVer > 10 && g_nSaveTArchVer > 10) //TArch20v3 { pFiler->readItem(&m_dEleCrossSize); // jsx add 160517 } else { m_dEleCrossSize = g_dEleCrossSize; } return pFiler->filerStatus(); } // 写出数据到dwg: Acad::ErrorStatus TDbConfig::dwgOutFields(AcDbDwgFiler* pFiler) const { assertReadEnabled(); Acad::ErrorStatus es = AcDbObject::dwgOutFields(pFiler); if(es != Acad::eOk) return es; if(g_nSaveTArchVer==5) pFiler->writeItem((Adesk::UInt8)3); else if(g_nSaveTArchVer==6) pFiler->writeItem((Adesk::UInt8)5); else if(g_nSaveTArchVer==7) pFiler->writeItem((Adesk::UInt8)6); else if (g_nSaveTArchVer==8) // sg modify 120617,9.0升级版本号 pFiler->writeItem((Adesk::UInt8)8); else if (g_nSaveTArchVer==9) pFiler->writeItem((Adesk::UInt8)9); else if (g_nSaveTArchVer==10) pFiler->writeItem((Adesk::UInt8)10); else pFiler->writeItem(g_nVersion); pFiler->writeItem(m_nPScale); pFiler->writeItem(m_nLHeight); pFiler->writeItem(m_nDrawMode); pFiler->writeItem(m_bSolidFill); pFiler->writeItem(m_bLineWeight); pFiler->writeItem(m_nSpaceDispMode); pFiler->writeItem(m_bShowWallBase); pFiler->writeItem(m_nHighBold); pFiler->writeItem(m_nElevDiff); pFiler->writeItem(m_bCheckDim); pFiler->writeItem(m_bDimAreaUnit); Adesk::UInt32 nFlag=m_nControlFlag; if(g_nSaveTArchVer==5) pFiler->writeItem((Adesk::UInt8)nFlag); else pFiler->writeItem(nFlag); // TArch6 data if(g_nSaveTArchVer>5) { pFiler->writeItem(m_nText2Base); pFiler->writeItem(m_nDetailScale); pFiler->writeItem((const TCHAR *)m_sHatchDivider1); pFiler->writeItem((const TCHAR *)m_sHatchFill1); pFiler->writeItem((const TCHAR *)m_sHatchBrick1); pFiler->writeItem((const TCHAR *)m_sHatchRocket1); pFiler->writeItem((const TCHAR *)m_sHatchConcrete1); pFiler->writeItem((const TCHAR *)m_sHatchSteel1); pFiler->writeItem((const TCHAR *)m_sHatchDivider2); pFiler->writeItem((const TCHAR *)m_sHatchFill2); pFiler->writeItem((const TCHAR *)m_sHatchBrick2); pFiler->writeItem((const TCHAR *)m_sHatchRocket2); pFiler->writeItem((const TCHAR *)m_sHatchConcrete2); pFiler->writeItem((const TCHAR *)m_sHatchSteel2); pFiler->writeItem(m_nBoldDivider1); pFiler->writeItem(m_nBoldFill1); pFiler->writeItem(m_nBoldBrick1); pFiler->writeItem(m_nBoldRocket1); pFiler->writeItem(m_nBoldConcrete1); pFiler->writeItem(m_nBoldSteel1); pFiler->writeItem(m_nBoldDivider2); pFiler->writeItem(m_nBoldFill2); pFiler->writeItem(m_nBoldBrick2); pFiler->writeItem(m_nBoldRocket2); pFiler->writeItem(m_nBoldConcrete2); pFiler->writeItem(m_nBoldSteel2); pFiler->writeItem(m_idLinetypeDote); pFiler->writeItem(m_idLinetypeDash); } if(g_nSaveTArchVer>6) { pFiler->writeItem((const TCHAR*)m_sProjectFile); pFiler->writeItem((const TCHAR*)m_sLayerStd); pFiler->writeString((const TCHAR*)m_sHatchFill11); pFiler->writeString((const TCHAR*)m_sHatchFill12); pFiler->writeItem(m_nBoldFill11); pFiler->writeItem(m_nBoldFill12); pFiler->writeString((const TCHAR*)m_sHatchFill21); pFiler->writeString((const TCHAR*)m_sHatchFill22); pFiler->writeItem(m_nBoldFill21); pFiler->writeItem(m_nBoldFill22); #if ADS>18 pFiler->writeBoolean((Adesk::Boolean)m_nDividerFlag); pFiler->writeBoolean((Adesk::Boolean)m_nFillFlag); pFiler->writeBoolean((Adesk::Boolean)m_nFill1Flag); pFiler->writeBoolean((Adesk::Boolean)m_nFill2Flag); pFiler->writeBoolean((Adesk::Boolean)m_nBrickFlag); pFiler->writeBoolean((Adesk::Boolean)m_nRocketFlag); pFiler->writeBoolean((Adesk::Boolean)m_nConcreteFlag); pFiler->writeBoolean((Adesk::Boolean)m_nSteelFlag); #else pFiler->writeItem(m_nDividerFlag); pFiler->writeItem(m_nFillFlag); pFiler->writeItem(m_nFill1Flag); pFiler->writeItem(m_nFill2Flag); pFiler->writeItem(m_nBrickFlag); pFiler->writeItem(m_nRocketFlag); pFiler->writeItem(m_nConcreteFlag); pFiler->writeItem(m_nSteelFlag); #endif pFiler->writeItem(m_idHatchDivider); pFiler->writeItem(m_idHatchFill); pFiler->writeItem(m_idHatchFill1); pFiler->writeItem(m_idHatchFill2); pFiler->writeItem(m_idHatchBrick); pFiler->writeItem(m_idHatchRocket); pFiler->writeItem(m_idHatchConcrete); pFiler->writeItem(m_idHatchSteel); pFiler->writeItem(m_nDividerColor); pFiler->writeItem(m_nFillColor); pFiler->writeItem(m_nFill1Color); pFiler->writeItem(m_nFill2Color); pFiler->writeItem(m_nBrickColor); pFiler->writeItem(m_nRocketColor); pFiler->writeItem(m_nConcreteColor); pFiler->writeItem(m_nSteelColor); } if(g_nSaveTArchVer>7) { pFiler->writeItem(m_nText2BaseRatio); pFiler->writeItem(m_nSpaceAreaPrecision); // sg add 081126 pFiler->writeItem(m_dDrawingIndexTextRatio); // sg add 090115 pFiler->writeItem(m_bOldDrawingIndex); pFiler->writeItem(m_dEleTriangleSize); // sg add 090212 pFiler->writeItem(m_dEleDoteSize); pFiler->writeItem(m_dMultiLeaderDistRatio); // sg add 090216 m_allFields.DwgOut(pFiler);//add by whl on 090401 } if (g_nSaveTArchVer > 8) { pFiler->writeItem(m_nArcLenDimType); pFiler->writeItem(m_nDealOldDimArrowSize); } if (g_nSaveTArchVer > 9) { pFiler->writeItem(m_bByLayerForDOR); pFiler->writeItem(m_bByLayerForSym); pFiler->writeItem(m_bByLayerForElev); } if (g_nSaveTArchVer > 10 && g_nVersion > 10) { pFiler->writeItem(m_dEleCrossSize); } return pFiler->filerStatus(); } Acad::ErrorStatus TDbConfig::dxfInFields (AcDbDxfFiler* pFiler) { Acad::ErrorStatus es = AcDbObject::dxfInFields(pFiler); if(es!=Acad::eOk) return es; if (!pFiler->atSubclassData(_T("TDbConfig"))) { return Acad::eBadDxfSequence; } return pFiler->filerStatus(); // 不读入任何数据 } Acad::ErrorStatus TDbConfig::dxfOutFields(AcDbDxfFiler* pFiler) const { Acad::ErrorStatus es; es = AcDbObject::dxfOutFields(pFiler); assert(es == Acad::eOk); es = pFiler->writeItem(AcDb::kDxfSubclass,_T("TDbConfig")); assert(es == Acad::eOk); return es; } Acad::ErrorStatus TDbConfig::subWblockClone(AcRxObject* pOwner, AcDbObject*& pClonedObject, AcDbIdMapping& idMap, Adesk::Boolean isPrimary) const { // ::WblockCloneCompStyleDict(pOwner, idMap); Acad::ErrorStatus es=AcDbObject::subWblockClone(pOwner, pClonedObject, idMap, isPrimary); return es; } resbuf * TDbConfig::xData(const TCHAR* regappName) const { assertReadEnabled(); if (regappName == NULL) { return AcDbObject::xData(regappName); } if (_tcsicmp(regappName,_T("TDbConfig")) == 0 //del by xlc on 100505 统一调整为通过TDbConfig获取变量 /*|| _tcsicmp(regappName,_T("InitLayer") == 0 || _tcsicmp(regappName,_T("DocSetMeterUnitDraw") == 0*/ ) { static TConfigDataTearoff cfgBaseData; return (resbuf *)&cfgBaseData; } return AcDbObject::xData(regappName); } Acad::ErrorStatus TDbConfig::setXData(const resbuf* xdata) { assertWriteEnabled(); if (xdata->restype == RTSTR) { if (xdata->resval.rstring != NULL && _tcsicmp(xdata->resval.rstring,_T("InitLineType")) == 0) { AcDbDatabase* pDb = acdbCurDwg(); if (xdata->rbnext != NULL && xdata->rbnext->resval.rstring != NULL) { pDb = (AcDbDatabase*)xdata->rbnext->resval.rstring; } this->SetLinetypeDash(InitLineType(_T("DASH"), pDb)); //InitTchLineType(_T("GB_DASH1")) this->SetLinetypeDote(InitLineType(_T("DOTE"), pDb)); // GB_DOT1 return Acad::eOk; } } return AcDbObject::setXData(xdata); } TConfigDataTearoff::TConfigDataTearoff() { } TConfigDataTearoff::~TConfigDataTearoff() { } BOOL TConfigDataTearoff::DocSetPScale(double nScale) { return ::DocSetPScale(nScale); } double TConfigDataTearoff::DocGetPScale() { return ::DocGetPScale(); } double TConfigDataTearoff::DocGetLHeight() { return ::DocGetLHeight(); } double TConfigDataTearoff::DocGetHighBold() { return ::DocGetHighBold(); } BOOL TConfigDataTearoff::DocGetDrawMode() { return ::DocGetDrawMode(); } BOOL TConfigDataTearoff::DocGetIsSolidFill() { return ::DocGetIsSolidFill(); } BOOL TConfigDataTearoff::DocGetIsLineWeight() { return ::DocGetIsLineWeight(); } BOOL TConfigDataTearoff::DocGetMeterUnitDraw() { return ::DocGetMeterUnitDraw(); } void TConfigDataTearoff::DocSetMeterUnitDraw(BOOL bTrue) { ::DocSetMeterUnitDraw(bTrue); } AcDbObjectId TConfigDataTearoff::InitLayer(const TCHAR *szLayer, BOOL bApplyChange) { return ::InitLayer(szLayer, bApplyChange); } int TConfigDataTearoff::BoolOper(AcDb::BoolOperType nOperType,LPVOID pPoly1,LPVOID pPoly2,LPVOID pPtrListPoly2d) { TGGePoly2D* pPoly2D1 = (TGGePoly2D*)pPoly1; TGGePoly2D* pPoly2D2 = (TGGePoly2D*)pPoly2; TDPtrList* pPoly2dList = (TDPtrList*)pPtrListPoly2d; switch(nOperType) { case AcDb::kBoolUnite: { return TchSubExport::Union(*pPoly2D1, *pPoly2D2,*pPoly2dList); } case AcDb::kBoolIntersect: { return TchSubExport::Intersect(*pPoly2D1, *pPoly2D2,*pPoly2dList); } case AcDb::kBoolSubtract: { return TchSubExport::Subtract(*pPoly2D1, *pPoly2D2,*pPoly2dList); } default: break; } return -1; } CString TConfigDataTearoff::GetCurrentCommand() { //modify by xlc on 100610消除编译警告 //return ::GetCurCommand(); return CString(::GetCurCommand()); } void TConfigDataTearoff::Close() { } // sg add 090512,轴号字高系数,动态数据 void TDbConfig::SetAxisLabelTextRatio(double dValue) { assertWriteEnabled(); TEntityFields &fd = Fields(); fd.SFD(_T("轴号字高系数"), dValue); } double TDbConfig::GetAxisLabelTextRatio() const { assertReadEnabled(); double dVal = g_dAxisLabelTextRatio; const TEntityFields &fd = GetFields(); fd.GFD(_T("轴号字高系数"), dVal); return dVal; } // sg add 090609,带形窗幕墙改变样式的比例界限,动态数据 void TDbConfig::SetCurtainWall3Scale(double dValue) { assertWriteEnabled(); TEntityFields &fd = Fields(); fd.SFD(_T("幕墙样式界限比例"), dValue); } double TDbConfig::GetCurtainWall3Scale() const { assertReadEnabled(); double dVal = g_nCurtainWall3Scale; const TEntityFields &fd = GetFields(); fd.GFD(_T("幕墙样式界限比例"), dVal); return dVal; } // sg add 090609,带形窗幕墙比例改变后是否不改样式,动态数据 void TDbConfig::SetCurtainWallFixStyle(BOOL bVal) { assertWriteEnabled(); TEntityFields &fd = Fields(); fd.SFD(_T("幕墙样式不随比例"), bVal); } Adesk::UInt8 TDbConfig::IsCurtainWallFixStyle() const { assertReadEnabled(); BOOL bVal = g_bCurtainWallFixStyle; const TEntityFields &fd = GetFields(); fd.GFD(_T("幕墙样式不随比例"), bVal); return bVal; } // sg add 090609,带形窗幕墙,不改样式时的设定类型,动态数据 void TDbConfig::SetCurtainWallStyle(int nValue) { assertWriteEnabled(); TEntityFields &fd = Fields(); fd.SFD(_T("幕墙固定样式"), nValue); } Adesk::UInt8 TDbConfig::GetCurtainWallStyle() const { assertReadEnabled(); int nVal = g_nCurtainWallStyle; const TEntityFields &fd = GetFields(); fd.GFD(_T("幕墙固定样式"), nVal); return nVal; } // sg add 110120,凸窗挡板、转角窗挡板、门窗套是否加保温 void TDbConfig::SetProWinSlabInsu(BOOL bValue) { assertWriteEnabled(); TEntityFields &fd = Fields(); fd.SFD(_T("凸窗加保温"), bValue); } BOOL TDbConfig::IsProWinSlabInsu() const { assertReadEnabled(); BOOL bValue = TRUE; const TEntityFields &fd = GetFields(); fd.GFD(_T("凸窗加保温"), bValue); return bValue; } // sg add 110303,增加单行文字、多行文字、专业词库样式的动态数据 void TDbConfig::SetTgSingleTextStyle(CString csStyle) { assertWriteEnabled(); TEntityFields &fd = Fields(); fd.SFD(_T("单行文字样式"), (const TCHAR*)csStyle); } CString TDbConfig::GetTgSingleTextStyle() const { assertReadEnabled(); CString csResult = _T(""); const TEntityFields &fd = GetFields(); fd.GFD(_T("单行文字样式"), csResult); return csResult; } void InitDbInitSet(BOOL bTrue) { if(bTrue) { TDbConfig::rxInit(); } else { deleteAcRxClass(TDbConfig::desc()); } } // Assure pXDict is open for write TARCH_IMPEXP TDbConfig * GetDbConfigFromDict(AcDbDictionary *pXDict, AcDb::OpenMode mode) { Acad::ErrorStatus es=Acad::eOk; // Now, get and open the inventory object, if it is there. // If we can_T('t open it, that')s OK for now. //AcDbObject *pExtObj=NULL; AcDbObjectId idExist; TDbConfig *pIObj=NULL; es = pXDict->getAt(_T("ATS_DBCONFIG"), idExist); if(es==Acad::eOk && !!idExist) { es=acdbOpenObject(pIObj, idExist, mode); if(es==Acad::eOk) return pIObj; } if(mode==AcDb::kForWrite) { //AcAxDocLock docLock; //VERIFY(docLock.lockStatus() == Acad::eOk); if(pXDict->upgradeOpen()==Acad::eOk) { pIObj = new TDbConfig; pIObj->SetLinetypeDash(InitLineType(_T("DASH"), pXDict->database())); //InitTchLineType(_T("GB_DASH1")) pIObj->SetLinetypeDote(InitLineType(_T("DOTE"), pXDict->database())); // GB_DOT1 AcDbObjectId id; es=pXDict->setAt(_T("ATS_DBCONFIG"), pIObj, id); ASSERT(es==Acad::eOk); pXDict->downgradeOpen(); } } return pIObj; } // 保存全局到DWG TDbConfig * GetDwgGlobal(AcDb::OpenMode opMode, AcDbDatabase *pDb) { // TDbConfig *pInitSet=NULL; // AcDbDictionary *pNamedObj=NULL; //if(!pDb) // pDb=acdbCurDwg(); // if(pDb && pDb->getNamedObjectsDictionary(pNamedObj, AcDb::kForRead)==Acad::eOk && // pNamedObj) { // pInitSet=GetDbConfigFromDict(pNamedObj, opMode); // pNamedObj->close(); // } return NULL; }