#include "stdafx.h" #include "BlockManDlg.h" #include "TKWorkspace.h" #include "tuanmanage.h" #include "gjkworkspace.h" extern int DlgContainInsert(); GEOAPI void MakeVisible(PickSet &ss, bool bTrue); extern int TKW(); int RepInsert() { extern BOOL GetFullTkwFile(const TCHAR* szShortFile, CString &csTkwFileName); extern BOOL DoReplaceBlock(int nControlFlag, Entity &ent, AcDbObjectId &idBlock); RBList mask(RTDXF0, _T("INSERT,AEC_BLOCK_INSERT,ATS_MVINSERT"), NULL); Entity ent; if(SelectEntity(_T("\n选择插入的图块<退出>:"), ent, mask)==RTNORM) { BOOL bRet=FALSE; XDbObject obj(ent, AcDb::kForRead); if(!obj) return RTERROR; AcDbObjectId idBlock; AcDbBlockReference *pBlk = AcDbBlockReference::cast(obj.m_pObject); if(pBlk) idBlock=pBlk->blockTableRecord(); else { TDbMultiViewInsert *pMv = TDbMultiViewInsert::cast(obj.m_pObject); idBlock=pMv->GetBlockId(TRUE); } obj.Close(); if(!idBlock.isValid()) return RTERROR; XString sTkw, sTk, sDwg; OPENOBJ_BEGIN(idBlock, AcDb::kForRead, AcDbBlockTableRecord, pBlock); if(pBlock) { const TCHAR *pComments=NULL; if(pBlock->comments(pComments)==Acad::eOk && pComments) { CT_strnth(pComments, 1, sTkw); CT_strnth(pComments, 2, sTk); CT_strnth(pComments, 3, sDwg); } } OPENOBJ_END(); CString csFullTkwFile; if(!GetFullTkwFile(sTkw, csFullTkwFile)) { sTkw=_T(""); sTk=_T(""); sDwg=_T(""); TKW(); return RTNORM; } else { sTk << _T(".tk"); XPathParser paser1(csFullTkwFile), paser2(sTk); if(!paser2.m_sDir) paser2.m_sDir=paser1.m_sDir; if(!paser2.m_sDrive) paser2.m_sDrive=paser1.m_sDrive; XString sTkFile; sTkFile << paser2.m_sDrive << paser2.m_sDir << paser2.m_sFileName << paser2.m_sExt; if(!FindFile(sTkFile)) { sTk=_T(""); sDwg=_T(""); } } CTemporaryResourceOverride vTemp; CTKWorkspace dlg((const TCHAR *)csFullTkwFile, (const TCHAR *)sTk, (const TCHAR *)sDwg, FALSE); if(dlg.DoModal()==IDOK) { XString xsTKFile, xsDefaultItem; TCHAR szDrive[_MAX_DRIVE]=_T(""), szDir[_MAX_DIR]=_T(""), szFile[_MAX_FNAME]=_T(""), szExt[_MAX_EXT]=_T(""); _tsplitpath(dlg.m_csLastTKName, szDrive, szDir, szFile, szExt); CString csTmp; SplitSlbName(dlg.m_csRet, xsTKFile, xsDefaultItem); csTmp.Format(_T("%s%s%s(%s)"), szDrive,szDir,xsTKFile,xsDefaultItem); XString blkName; _stprintf(blkName, _T("$%s$%s"), (const TCHAR *)xsTKFile, (const TCHAR *)xsDefaultItem); BOOL bNewBlock=!XSymbolTable(_T("BLOCK"), blkName); XString sBlock(256); if(LoadDwbBlock(csTmp, sBlock)) { if(bNewBlock) { XDbBlockTableRec rec(sBlock, AcDb::kForWrite); if(!!rec) { XString sComments(1024); // tkw, tk, block sComments << XPathParser(dlg.m_csCurTKWFile).m_sFileName << _T(",") << xsTKFile << _T(",") << (const TCHAR *)xsDefaultItem; rec.m_pBlockTableRec->setComments(sComments); } } AcDbObjectId idBlockNew=GetBlockIdFromString(sBlock); if(idBlockNew.isValid()) { adsout << _T("\n[维持相同插入比例替换(S)/维持相同插入尺寸替换(D)]<退出>:"); XString sKword; int nCode; INITGET_BEG(0, _T("S D")); nCode=ads_getkword(_T(""), sKword); INITGET_END(); int nFlag=-1; if(nCode==RTNORM) { if(sKword==_T("S")) nFlag=0; else if(sKword==_T("D")) nFlag=LO_FIXDIMENSION_R; } if(nFlag>=0) { if(!DoReplaceBlock(nFlag, ent, idBlockNew)) adsout << _T("\n不能替换!"); } } } } } return RTNORM; } //(itkw _T("F:\\tangent\\tarch5\\sys\\1.tkw") T _T("rail(00000001)")) 单选不带入库 //(itkw _T("F:\\tangent\\tarch5\\sys\\1.tkw") Nil _T("")) 多选带入库 int CallTKW() { resbuf *rb=ads_getargs(); RBList rbArgs=rb; int iMode=0;//add by whl if(rb && rb->restype==RTSTR) { XString xsTKFile, xsDefaultItem; BOOL bSelOnly=FALSE; if(rb->rbnext && rb->rbnext->restype==RTT) bSelOnly=TRUE; if(rb->rbnext && rb->rbnext->rbnext) { resbuf *rbItem=rb->rbnext->rbnext; if(rbItem->restype==RTSTR && rbItem->resval.rstring) { if(rbItem->restype==RTSTR && rbItem->resval.rstring) { SplitSlbName(rbItem->resval.rstring, xsTKFile, xsDefaultItem); } } //add by whl resbuf *rbItem1=rbItem->rbnext; if(rbItem1!=NULL&&rbItem1->restype==RTLONG) iMode=rbItem1->resval.rlong; } if(!!xsTKFile) xsTKFile << _T(".tk"); //xsTKFile = XString(_T("%s.tk"), xsTKFile); CTemporaryResourceOverride vTemp; CTKWorkspace dlg((const TCHAR *)rb->resval.rstring, (const TCHAR *)xsTKFile, (const TCHAR *)xsDefaultItem, !bSelOnly); dlg.SetWorkType(iMode);//add by whl if(dlg.DoModal()==IDOK) { ads_retstr(dlg.m_csRet); return RTNORM; } } ads_retnil(); return RTNORM; } //add by cwk int PatternMgr() { resbuf *rb=ads_getargs(); if(rb && rb->restype==RTSTR) { CPatternManage dlg(rb->resval.rstring); if (dlg.DoModal() == IDOK) { CString sRoot, sKey; TCHAR cTemp[256]; sKey = _T("PATMAN"); _tcscpy(cTemp, GetRegLocation()); sRoot = cTemp; CRegProperty regProp(sRoot, sKey); regProp.SetTopRootKey(HKEY_CURRENT_USER); CString str; regProp.GetValue(_T("PatName"), str); ads_retstr(str); return RTNORM; } } ads_retnil(); return RTNONE; } //add by cwk int InvokeGJKW() { resbuf *rb=ads_getargs(); RBList rbArgs=rb; if(rb && rb->restype==RTSTR) { XString xsTKFile, xsDefaultItem; BOOL bSelOnly=FALSE; if(rb->rbnext && rb->rbnext->restype==RTT) bSelOnly=TRUE; if(rb->rbnext && rb->rbnext->rbnext) { resbuf *rbItem=rb->rbnext->rbnext; if(rbItem->restype==RTSTR && rbItem->resval.rstring) { if(rbItem->restype==RTSTR && rbItem->resval.rstring) { SplitSlbName(rbItem->resval.rstring, xsTKFile, xsDefaultItem); } } } if(!!xsTKFile) xsTKFile << _T(".tk"); CTemporaryResourceOverride vTemp; CGJKWorkspace dlg((const TCHAR *)rb->resval.rstring, (const TCHAR *)xsTKFile, (const TCHAR *)xsDefaultItem, bSelOnly); if(dlg.DoModal()==IDOK) { ads_retstr(dlg.m_csRet); return RTNORM; } } ads_retnil(); return RTNORM; } int CallTKWnew() { resbuf *rb=ads_getargs(); RBList rbArgs=rb; if(rb && rb->restype==RTSTR) { XString xsTKFile, xsDefaultItem; BOOL bSelOnly=FALSE; if(rb->rbnext && rb->rbnext->restype==RTT) bSelOnly=TRUE; if(rb->rbnext && rb->rbnext->rbnext) { resbuf *rbItem=rb->rbnext->rbnext; if(rbItem->restype==RTSTR && rbItem->resval.rstring) { if(rbItem->restype==RTSTR && rbItem->resval.rstring) { SplitSlbName(rbItem->resval.rstring, xsTKFile, xsDefaultItem); } } } if(!!xsTKFile) xsTKFile << _T(".tk"); CTemporaryResourceOverride vTemp; CTKWorkspace dlg((const TCHAR *)rb->resval.rstring, (const TCHAR *)xsTKFile, (const TCHAR *)xsDefaultItem, !bSelOnly); if(dlg.DoModal()==IDOK) { TCHAR szDrive[_MAX_DRIVE]=_T(""), szDir[_MAX_DIR]=_T(""), szFile[_MAX_FNAME]=_T(""), szExt[_MAX_EXT]=_T(""); _tsplitpath(dlg.m_csLastTKName, szDrive, szDir, szFile, szExt); CString csTmp = dlg.m_csRet; if(csTmp != _T("")){ XString xsTKFile, xsDefaultItem; SplitSlbName(csTmp, xsTKFile, xsDefaultItem); csTmp.Format(_T("%s%s%s%s(%s)"), szDrive,szDir,xsTKFile,szExt,xsDefaultItem); } ads_retstr(csTmp); return RTNORM; } } ads_retnil(); return RTNORM; } //(IBlkman _T("e:\\tangent\\tarch5\\dwb\\rail.tk") T _T("rail(00000001)")) 单选不带入库 //(IBlkman _T("e:\\tangent\\tarch5\\dwb\\rail.tk") nil _T("rail(00000001)")) 带入库 // 用adsinvoke调用 int CallBlkMgr() { resbuf *rb=ads_getargs(); RBList rbArgs=rb; if(rb && rb->restype==RTSTR) { BOOL bSelOnly=FALSE; if(rb->rbnext && rb->rbnext->restype==RTT) bSelOnly=TRUE; XString sDefaultItem; if(rb->rbnext && rb->rbnext->rbnext) { resbuf *rbItem=rb->rbnext->rbnext; if(rbItem->restype==RTSTR && rbItem->resval.rstring) { SplitSlbName(rbItem->resval.rstring, XString(), sDefaultItem); } } CBlockManDlg dlg(rb->resval.rstring, bSelOnly? 2 : 1, sDefaultItem); if(dlg.m_bInitReady) { XString sBlockName; CTemporaryResourceOverride vTemp; if(dlg.DoModal()==IDOK && dlg.GetBlockName(sBlockName)) { ads_retstr(sBlockName); return RTNORM; } } } ads_retnil(); return RTNORM; } int ProcessBlockInsert(PickSet &ss) { PickSet ssInsert(SS_FREE); ssInsert += ss; ssInsert.BaseFilter(RBList(RTDXF0, _T("INSERT,AEC_BLOCK_INSERT,ATS_MVINSERT"), NULL)); if(ssInsert.Length()) { int nRetCode=DlgContainInsert(); if(nRetCode==0) return RTCAN; if(nRetCode==2) { long lCount=ssInsert.Length(); for(long idx=0L; idx