#include "stdafx.h" #include "DbEquipDimNew.h" #include "dbtext.h" #include "TSysCoordinateTool.h" EquipDimTextInfo g_TextInfo; const Adesk::UInt8 TDbEquipDimNew::g_nVersion = 1; ACRX_DXF_DEFINE_MEMBERS(ATSEquipDimNew, ATSSymbWithText, AcDb::kDHL_CURRENT, AcDb::kMReleaseCurrent, 1, ATS_EQUIPDIM2, "ATS_EQUIPDIM2图形无法解析, 请下载上华软件|网址: www.shanghuasoft.com"); IMPLEMENT_TENTBASE(TDbEquipDimNew); void InitDbEquipDimNew(BOOL bTrue) { if (bTrue) { TDbEquipDimNew::rxInit(); TDbEquipDimNew::InitMatchProtocol(TRUE); } else { TDbEquipDimNew::InitMatchProtocol(FALSE); deleteAcRxClass(TDbEquipDimNew::desc()); } } TDbEquipDimNew::TDbEquipDimNew() { m_nType = -1; m_nNum = 0; m_csX = _T("x"); // x X × m_bHasW = true; m_ptIns.x = 0; m_ptIns.y = 0; m_nDimLen = -1; } TDbEquipDimNew::TDbEquipDimNew( AcGePoint3d ptIns, bool bHasW, int nNum, CString csX, CString csBulbNum, CString csSpec, CString csBulbPower, CString csSetupHeight, CString csSetupMode, CString csLightType) { m_nType = 0; m_ptIns = ptIns; m_bHasW = bHasW; m_csX = csX; m_nNum = nNum; m_csBulbNum = csBulbNum; m_csSpec = csSpec; m_csBulbPower = csBulbPower; m_csSetupHeight = csSetupHeight; m_csSetupMode = csSetupMode; m_csLightType = csLightType; m_nDimLen = -1; InitData(); } TDbEquipDimNew::TDbEquipDimNew(AcGePoint3d ptIns, CString csBulbNum, CString csSetupHeight) { m_nType = 1; m_nNum = 0; m_ptIns = ptIns; m_csBulbNum = csBulbNum; m_csSetupHeight = csSetupHeight; m_nDimLen = -1; InitData(); } TDbEquipDimNew::TDbEquipDimNew(AcGePoint3d ptIns, CString csBulbNum) { m_nType = 2; m_nNum = 0; m_ptIns = ptIns; m_csSpec = csBulbNum; m_nDimLen = -1; InitData(); } TDbEquipDimNew::~TDbEquipDimNew() { } // *************************************** // csTitle2 // csTitle1 ------------ csTitle4 // csTitle3 //**************************************** void TDbEquipDimNew::InitData() { m_csTitle1.Format(_T("%d"), m_nNum); if(m_csTitle1 != _T("") && m_csSpec != _T("") && m_nType == 0) m_csTitle1 += _T("-"); else if(m_nType != 0) m_csTitle1 = _T(""); m_csTitle1 += m_csSpec; if(m_csBulbNum == _T("")) m_csBulbNum = _T("1"); if(m_csBulbNum == _T("1")) m_csTitle2 = _T(""); else m_csTitle2 = m_csBulbNum; if(m_csBulbNum != _T("1") && (m_csBulbPower != _T("") || m_csLightType!=_T(""))) m_csTitle2 += m_csX; if(m_csBulbPower != _T("")){ m_csTitle2 += m_csBulbPower; // if(m_bHasW && m_csX == _T("x")) // m_csTitle2 += _T("w"); // else if(m_bHasW && m_csX == _T("X")) //delete by wx 2015-1-14 if(m_bHasW) //add by wx m_csTitle2 += _T("W");//add end if(m_csLightType!=_T("")) m_csTitle2 += m_csX; } m_csTitle2 += m_csLightType; m_csTitle3 = m_csSetupHeight; if(m_csTitle3 == _T("") && m_nType == 0) m_csTitle3 = _T("-"); m_csTitle4 = m_csSetupMode; } double TDbEquipDimNew::GetDimLength() const { double nLen4(0), nLenRet(0); double nLen(0), nLen2(0), nLen3(0); AcGePoint3d pMax, pMin; AcDbObjectId id = GetTextStyleId(); if(m_csTitle1 != _T("")){ TDbText text1; text1.setPropertiesFrom(this); text1.SetLocation(m_ptIns); text1.SetHeight(GetTextHeight());//*GetPScale() text1.SetText(m_csTitle1); text1.SetStyleId(id); // text1.setWidthFactor(m_nWidthFactor); // text1.SetRotation(this->GetTextRotation()); AcDbExtents extents; text1.getGeomExtents(extents); pMax = extents.maxPoint(); pMin = extents.minPoint(); nLen = pMax.distanceTo(pMin) + GetTextHeight()*GetPScale();//*GetPScale() nLenRet += nLen; } XPoint ptTmp, ptTmp2; if(m_csTitle2 != _T("") || m_csTitle3 != _T("-")){ ptTmp.x = m_ptIns.x + nLen; ptTmp.y = m_ptIns.y + GetTextHeight()*GetPScale();//*GetPScale() TDbText text2, text3; text2.setPropertiesFrom(this); text2.SetLocation(m_ptIns); text2.SetHeight(GetTextHeight());//*GetPScale() text2.SetText(m_csTitle2); text2.SetStyleId(id); // text2.setWidthFactor(m_nWidthFactor); // text2.SetRotation(this->GetTextRotation()); AcDbExtents extents1; text2.getGeomExtents(extents1); pMax = extents1.maxPoint(); pMin = extents1.minPoint(); nLen2 = pMax.distanceTo(pMin); text3.SetLocation(m_ptIns); text3.setPropertiesFrom(this); text3.SetHeight(GetTextHeight());//*GetPScale() text3.SetText(m_csTitle3); text3.SetStyleId(id); // text3.setWidthFactor(m_nWidthFactor); // text3.SetRotation(this->GetTextRotation()); AcDbExtents extents2; text3.getGeomExtents(extents2); pMax = extents2.maxPoint(); pMin = extents2.minPoint(); nLen3 = pMax.distanceTo(pMin); if(nLen3 > nLen2) // nLenRet += (nLen3 + GetTextHeight()*GetPScale());//*GetPScale() nLenRet += (nLen3 + GetTextHeight()*GetPScale()/2);//bsl 2011.6.27 else //nLenRet += (nLen2 + GetTextHeight()*GetPScale());//*GetPScale() nLenRet += (nLen2 + GetTextHeight()*GetPScale()/2);//bsl 2011.6.27 } if(m_csTitle4 != _T("")){ ptTmp.x = m_ptIns.x + nLen + nLen2 + GetTextHeight()*GetPScale();//*GetPScale() ptTmp.y = m_ptIns.y; TDbText text4; text4.setPropertiesFrom(this); text4.SetLocation(ptTmp); text4.SetHeight(GetTextHeight());//*GetPScale() text4.SetText(m_csTitle4); text4.SetStyleId(id); // text4.setWidthFactor(m_nWidthFactor); // text4.SetRotation(this->GetTextRotation()); AcDbExtents extents4; text4.getGeomExtents(extents4); pMax = extents4.maxPoint(); pMin = extents4.minPoint(); nLen4 = pMax.distanceTo(pMin); nLenRet += (nLen4 + GetTextHeight()*GetPScale());//*GetPScale() } // m_nDimLen = nLenRet; return nLenRet; } // *********************************************************************** // BulbNum X Power X LightType // LightNum - EquipType ------------------------------SetupMode // SetupHeight //************************************************************************ Acad::ErrorStatus TDbEquipDimNew::subGetGripPoints(AcGePoint3dArray& gripPoints, AcDbIntArray& osnapModes, AcDbIntArray& geomIds) const { assertReadEnabled(); gripPoints.append(m_ptIns); gripPoints.append(m_ptStart); //添加夹点 axc add 2015-05-05 if (eLine == GetDimEquipType()) { AcGePoint3d ptThird(m_ptIns + GetLineDir() * GetBaseLineLen()); gripPoints.append(ptThird); } return Acad::eOk; } Acad::ErrorStatus TDbEquipDimNew::subMoveGripPointsAt(const AcDbIntArray& indices, const AcGeVector3d& offset) { if (indices.length()== 0 || offset.isZeroLength()) return Acad::eOk; //that's easy :-) assertWriteEnabled(); if (indices.length() > 1){ return Acad::eOk; } if (indices[0] == 0) { if (eLine == GetDimEquipType()) { //axc add 2015-05-05 AcGeVector3d vtDir = GetLineDir(); if (Wcs2Ucs(m_ptIns).x > Wcs2Ucs(m_ptStart).x) { if (Wcs2Ucs(m_ptIns + offset).x < Wcs2Ucs(m_ptStart).x) { vtDir *= -1; } } else { if (Wcs2Ucs(m_ptIns + offset).x > Wcs2Ucs(m_ptStart).x) { vtDir *= -1; } } SetLineDir(vtDir); } m_ptIns += offset; return Acad::eOk; } else if (indices[0] == 1) { m_ptStart += offset; return Acad::eOk; } else if (indices[0] == 2) { if (eLine == GetDimEquipType()) { //新增夹点操作 axc add 2015-05-05 AcGePoint3d ptE = m_ptIns + GetBaseLineLen() * GetLineDir(); AcDbLine line(m_ptIns,ptE); AcGeVector3d vtDir = Ucs2Wcs(AcGeVector3d::kXAxis); AcGePoint3d ptOnLine; ptE += offset; line.getClosestPointTo(ptE,ptOnLine,Adesk::kTrue); vtDir = ptOnLine - m_ptIns; double dBaseLine = vtDir.length(); vtDir.normalize(); SetLineDir(vtDir); SetBaseLineLen(dBaseLine); } } return Acad::eOk; } Acad::ErrorStatus TDbEquipDimNew::subTransformBy(const AcGeMatrix3d& xform) { assertWriteEnabled(); m_ptIns.transformBy(xform); // if(m_ptStart != AcGePoint3d(0,0,0)) m_ptStart.transformBy(xform); return Acad::eOk; } Acad::ErrorStatus TDbEquipDimNew::subGetClassID(CLSID* pClsid) const { return Acad::eOk; } Acad::ErrorStatus TDbEquipDimNew::dwgOutFields(AcDbDwgFiler* filer) const { assertReadEnabled(); Acad::ErrorStatus es = TDbSymbWithText::dwgOutFields(filer); if(es != Acad::eOk) return es; Adesk::Int16 val = m_nNum; Adesk::Int16 type = m_nType; filer->writeItem(g_nVersion); filer->writePoint3d(m_ptStart); filer->writePoint3d(m_ptIns); filer->writeBool(m_bHasW); // filer->writeDouble(m_nDimLen); filer->writeInt16(val); filer->writeInt16(type); filer->writeString((LPCTSTR)m_csSpec); filer->writeString((LPCTSTR)m_csBulbNum); filer->writeString((LPCTSTR)m_csBulbPower); filer->writeString((LPCTSTR)m_csSetupHeight); filer->writeString((LPCTSTR)m_csSetupMode); filer->writeString((LPCTSTR)m_csLightType); filer->writeString((LPCTSTR)m_csX); return filer->filerStatus(); } Acad::ErrorStatus TDbEquipDimNew::dwgInFields(AcDbDwgFiler* filer) { assertWriteEnabled(); Acad::ErrorStatus es = TDbSymbWithText::dwgInFields(filer); if(es != Acad::eOk) return es; // Object Version - must always be the first item. // Adesk::Int8 version; AcGePoint3d ptTmp; Adesk::Int16 val; filer->readItem(&version); if (version > g_nVersion) return Acad::eMakeMeProxy; switch (version) { case 1: { filer->readPoint3d(&m_ptStart); filer->readPoint3d(&m_ptIns); filer->readBool(&m_bHasW); // filer->readDouble(&m_nDimLen); filer->readInt16(&val); m_nNum = val; filer->readInt16(&val); m_nType = val; XString xsContent; ReadString(filer, xsContent); m_csSpec = (const TCHAR*)xsContent; ReadString(filer, xsContent); m_csBulbNum = (const TCHAR*)xsContent; ReadString(filer, xsContent); m_csBulbPower = (const TCHAR*)xsContent; ReadString(filer, xsContent); m_csSetupHeight = (const TCHAR*)xsContent; ReadString(filer, xsContent); m_csSetupMode = (const TCHAR*)xsContent; ReadString(filer, xsContent); m_csLightType = (const TCHAR*)xsContent; ReadString(filer, xsContent); m_csX = (const TCHAR*)xsContent; break; } default: assert(false); } // if(GetTextHeight()*GetPScale() > GetPScale()) // GetTextHeight()*GetPScale() = GetTextHeight()*GetPScale()/GetPScale(); // if(GetTextHeight()*GetPScale() < 10) // GetTextHeight()*GetPScale() = GetTextHeight()*GetPScale() * 100; InitData(); return filer->filerStatus(); } void TDbEquipDimNew::SetLineDir(const AcGeVector3d& vtDir) { assertWriteEnabled(); TEntityFields& fields = Fields(); fields.SFD(_T("EQUIPDIMLINEDIR"), vtDir); } AcGeVector3d TDbEquipDimNew::GetLineDir() const { assertReadEnabled(); AcGeVector3d vtDir = TSysCoordinateTool::GetCurrentViewWCSKXAxis(); const TEntityFields& fields = GetFields(); fields.GFD(_T("EQUIPDIMLINEDIR"), vtDir); return vtDir; } void TDbEquipDimNew::SetDimEquipType(const int type) { assertWriteEnabled(); TEntityFields& fields = Fields(); fields.SFD(_T("EQUIPDIMLINETYPE"), type); } int TDbEquipDimNew::GetDimEquipType() const { assertReadEnabled(); int nType = 0; const TEntityFields& fields = GetFields(); fields.GFD(_T("EQUIPDIMLINETYPE"), nType); return nType; } void TDbEquipDimNew::SetBaseLineLen(const double dBaseLineLen) { assertWriteEnabled(); TEntityFields& fields = Fields(); fields.SFD(_T("EQUIPBASELINELEN"), dBaseLineLen); } double TDbEquipDimNew::GetBaseLineLen() const { assertReadEnabled(); double dLen = 0.0; const TEntityFields& fields = GetFields(); fields.GFD(_T("EQUIPBASELINELEN"), dLen); return dLen; } Acad::ErrorStatus TDbEquipDimNew::ExplodeOrDraw2d(XExplodeDraw &dc) const { // cet 2016.10.17 add 图层关闭时,实体不显示,不进行绘制(打印时,也不会绘制) AcDbLayerTableRecordPointer player(this->layerId(), AcDb::kForRead); if (player.openStatus() == Acad::eOk && player->isOff()) { return Acad::eOk; } AcGeVector3d vtDirTT = Ucs2Wcs(AcGeVector3d::kXAxis); AcGeVector3d vtVerTT = Ucs2Wcs(AcGeVector3d::kYAxis); AcGeVector3d vtDirT = AcGeVector3d::kXAxis; AcGeVector3d vtVerT = AcGeVector3d::kYAxis; vtDirT.rotateBy(GetLayoutRotation(),AcGeVector3d::kZAxis); vtVerT.rotateBy(GetLayoutRotation(),AcGeVector3d::kZAxis); if(m_ptIns.x == 0 && m_ptIns.y == 0) return Acad::eOk; XPoint ptTmp, ptTmp2, ptInsTmp; AcGePoint3d pMax, pMin; ptInsTmp = m_ptIns; if(m_ptStart != AcGePoint3d(0,0,0)){ AcGePoint3d ptArray2[2] = {m_ptStart, m_ptIns,}; XLine line; line.SetPoints(m_ptStart,m_ptIns); dc.DrawLine(line); double dimlen = GetDimLength(); //axc add 2015-05-05 if (eLine == GetDimEquipType()) { double dScale = GetPScale(); ptInsTmp += GetTextHeight()*GetPScale()*vtVerT;//*GetPScale() ptInsTmp += GetTextHeight()*GetPScale()/2*vtDirT;//*GetPScale() line.SetPoints(m_ptIns,m_ptIns+GetLineDir()*GetBaseLineLen()); dc.DrawLine(line); } else { ptInsTmp -= GetTextHeight()*GetPScale()/2*vtVerT;//*GetPScale() ptInsTmp += GetTextHeight()*GetPScale()/2*vtDirT;//*GetPScale() } double dS = Wcs2Ucs(m_ptIns).x; double dT = Wcs2Ucs(m_ptStart).x; if(dS < dT) { if (m_nType == 2) ptInsTmp += GetTextHeight()*GetPScale()*vtDirT;//*GetPScale() ptInsTmp -= dimlen*vtDirT; } } ptTmp = ptInsTmp; TPushProperty* pVProp = NULL; double nLen(0), nLen2(0), nLen3(0); AcDbObjectId id = this->GetTextStyleId();; if(m_csTitle1 != _T("")){ TDbText text1; text1.setPropertiesFrom(this); text1.SetLocation(ptInsTmp); text1.SetHeight(GetTextHeight());//*GetPScale() text1.SetText(m_csTitle1); text1.SetStyleId(id); text1.SetAlignment(XExplodeDraw::kBottomLeft); text1.setColorIndex(GetTextColor()); g_TextInfo.ptTitle1 = ptInsTmp; // text1.setLayer(GetTextLayerId()); // text1.set(m_nWidthFactor); // text1.SetRotation(this->GetTextRotation()); pVProp = new TPushProperty(&text1, dc); if(dc.IsFullExplode()) text1.ExplodeOrDraw2d(dc); else dc.DrawEntity(text1); delete pVProp; pVProp = NULL; XPoint ptTempLen = text1.GetExtents(); AcDbExtents extents; text1.getGeomExtents(extents); pMax = extents.maxPoint(); pMin = extents.minPoint(); nLen = pMax.distanceTo(pMin) + GetTextHeight()*GetPScale()*0.9;//*GetPScale() nLen = ptTempLen.x + GetTextHeight()*GetPScale(); ptTmp = ptInsTmp + nLen*vtDirT; } if(m_csTitle2 == _T("") && m_csTitle3 == _T("") && m_csTitle4 == _T("")) return Acad::eOk; if(m_csTitle2 != _T("") || m_csTitle3 != _T("-")){ TDbText text2, text3; text2.setPropertiesFrom(this); text2.SetLocation(ptInsTmp); text2.SetHeight(GetTextHeight());//*GetPScale() text2.SetText(m_csTitle2); text2.SetStyleId(id); text2.SetAlignment(XExplodeDraw::kBottomLeft); text2.setColorIndex(GetTextColor()); g_TextInfo.ptTitle2 = ptInsTmp; // text2.setLayer(GetTextLayerId()); // text2.setWidthFactor(m_nWidthFactor); // text2.SetRotation(this->GetTextRotation()); AcDbExtents extents1; double dTextH = GetTextHeight(); text2.getGeomExtents(extents1); pMax = extents1.maxPoint(); pMin = extents1.minPoint(); nLen2 = pMax.distanceTo(pMin); text3.setPropertiesFrom(this); AcGeVector3d vtTemp = vtDirT; if (m_csTitle3.Find(_T("|")) > -1 || m_csTitle3.Find(_T("\\")) > -1|| m_csTitle3.Find(_T("/")) > -1) { vtTemp.rotateBy(PI/2,AcGeVector3d::kZAxis); vtTemp.normalize(); vtTemp *= 250; } else vtTemp *= 0; text3.SetHeight(dTextH);//*GetPScale() text3.SetText(m_csTitle3); text3.SetStyleId(id); text3.SetAlignment(XExplodeDraw::kBottomLeft); text3.setColorIndex(GetTextColor()); AcDbExtents extents2; text3.getGeomExtents(extents2); pMax = extents2.maxPoint(); pMin = extents2.minPoint(); nLen3 = pMax.distanceTo(pMin); if(nLen3 > nLen2) { ptTmp -= 0.7*GetTextHeight()*GetPScale()*vtVerT + vtTemp;//*GetPScale() text3.SetLocation(ptTmp); g_TextInfo.ptTitle3 = ptTmp; pVProp = new TPushProperty(&text3, dc); if(dc.IsFullExplode()) text3.ExplodeOrDraw2d(dc); else dc.DrawEntity(text3); delete pVProp; pVProp = NULL; //ptTmp = ptInsTmp + (nLen + nLen2 / 2 - nLen3 / 2)*vtDirT; ptTmp = ptInsTmp + (nLen + nLen3 / 2 - nLen2 / 2)*vtDirT; // bsl 2011.6.28 ptTmp += 0.7*(GetTextHeight()*GetPScale())*vtVerT;//*GetPScale() text2.SetLocation(ptTmp); g_TextInfo.ptTitle2 = ptTmp; pVProp = new TPushProperty(&text2, dc); if(dc.IsFullExplode()) text2.ExplodeOrDraw2d(dc); else dc.DrawEntity(text2); delete pVProp; pVProp = NULL; nLen2 = nLen3; // bsl 2011.6.28 } else{ ptTmp += 0.7*GetTextHeight()*GetPScale()*vtVerT;//*GetPScale() text2.SetLocation(ptTmp); g_TextInfo.ptTitle2 = ptTmp; pVProp = new TPushProperty(&text2, dc); if(dc.IsFullExplode()) text2.ExplodeOrDraw2d(dc); else dc.DrawEntity(text2); delete pVProp; pVProp = NULL; ptTmp = ptInsTmp + (nLen + nLen2 / 2 - nLen3 / 2)*vtDirT; ptTmp -= 0.7*GetTextHeight()*GetPScale()*vtVerT + vtTemp;//*GetPScale() text3.SetLocation(ptTmp); g_TextInfo.ptTitle3 = ptTmp; pVProp = new TPushProperty(&text3, dc); if(dc.IsFullExplode()) text3.ExplodeOrDraw2d(dc); else dc.DrawEntity(text3); delete pVProp; pVProp = NULL; } if(m_csTitle3 != _T("") || (m_ptStart != AcGePoint3d(0,0,0))){ ptTmp = ptInsTmp + (nLen - GetTextHeight()*GetPScale()/2)*vtDirT;//*GetPScale() ptTmp += GetTextHeight()*GetPScale()/2*vtVerT; //*GetPScale() double dimlen = GetDimLength(); if (m_nType == 0) ptTmp2 = ptTmp + (nLen2 + GetTextHeight()*GetPScale())*vtDirT; //*GetPScale() else ptTmp2 = ptTmp + dimlen*vtDirT; //*GetPScale() // ptTmp2.y = ptTmp.y; AcGePoint3d ptArray[2] = {ptTmp, ptTmp2,}; XLine line; line.SetPoints(ptTmp,ptTmp2); dc.DrawLine(line); } } if(m_csTitle4 != _T("")){ ptTmp = ptInsTmp + (nLen + nLen2 + GetTextHeight()*GetPScale())*vtDirT;//*GetPScale() // ptTmp.y = ptInsTmp.y; TDbText text4; text4.setPropertiesFrom(this); text4.SetLocation(ptTmp); g_TextInfo.ptTitle4 = ptTmp; text4.SetHeight(GetTextHeight());//*GetPScale() text4.SetText(m_csTitle4); text4.SetStyleId(id); // text4.setLayer(GetTextLayerId()); text4.SetAlignment(XExplodeDraw::kBottomLeft); text4.setColorIndex(GetTextColor()); // text4.setWidthFactor(m_nWidthFactor); // text4.SetRotation(this->GetTextRotation()); TPushProperty vProp(&text4, dc); if(dc.IsFullExplode()) text4.ExplodeOrDraw2d(dc); else dc.DrawEntity(text4); } return Acad::eOk; } //axc add 2015-05-15 设备标准支持查找替换命令 // 返回发现的位置,同时posStart往前移动(以便继续找下一个使用) TTextPosition TDbEquipDimNew::FindSubText(const TCHAR *sSubText, TTextPosition &posStart, TTextRange *pRange) const { TTextPosition pos; if (!sSubText || !sSubText[0]) return pos; TTextPosition posNext = posStart; while (1) { TTextPosition posFind; //查找到的文本位置 int nCookies = posNext.m_nCookies; TDbText text; //待查找的子文本内容 if (!GetText(nCookies, text)) break; posFind = text.FindSubText(sSubText, posNext, pRange); if (!posFind) { posNext.m_nCookies++; posNext.m_nTextPos = 0; } else { posStart = posNext; if (!posStart) { posStart.m_nCookies++; posStart.m_nTextPos = 0; } posFind.m_nCookies = posNext.m_nCookies; pos = posFind; break; } } return pos; } BOOL TDbEquipDimNew::GetText(Adesk::UInt32 cookies, TDbText &text) const { if ((UINT)cookies > 4) return FALSE; text.setPropertiesFrom(this); text.SetRotation(0); text.SetHeight(m_nTextHeight); text.SetStyleId(m_idTextStyle); XPoint ptLoc; switch (cookies) { case 0: { ptLoc = g_TextInfo.ptTitle1; text.SetText(m_csTitle1); } break; case 1: { ptLoc = g_TextInfo.ptTitle2; text.SetText(m_csTitle2); } break; case 2: { ptLoc = g_TextInfo.ptTitle3; text.SetText(m_csTitle3); } break; case 3: { ptLoc = g_TextInfo.ptTitle4; text.SetText(m_csTitle4); } break; default: break; } text.SetLocation(ptLoc); return TRUE; } TTextPosition TDbEquipDimNew::ReplaceSubText(const TTextPosition &posRep, const TCHAR *sRepText, TTextRange *pRange) { assertWriteEnabled(); TTextPosition posNext; int cookies = posRep.m_nCookies; if (cookies > 4) { posNext.m_nCookies = posRep.m_nCookies + 1; posNext.m_nTextPos = 0; return posNext; } TDbText text; //即将被替换内容的子文本内容 if (!sRepText || !GetText(cookies, text)) return posNext; posNext = text.ReplaceSubText(posRep, sRepText, pRange); switch (cookies) { case 0: m_csTitle1 = text.GetText(); break; case 1: m_csTitle2 = text.GetText(); break; case 2: m_csTitle3 = text.GetText(); break; case 3: m_csTitle4 = text.GetText(); break; default: break; } if (!posNext) { posNext.m_nCookies = posRep.m_nCookies+1; posNext.m_nTextPos = 0; } return posNext; } void TDbEquipDimNew::SetSubText(long i,CString sText) { switch (i) { case 0: m_csTitle1 = sText; break; case 1: m_csTitle2 = sText; break; case 2: m_csTitle3 = sText; break; case 3: m_csTitle4 = sText; break; default: break; } } //add end AcGePoint3d TDbEquipDimNew::GetStartPt() { return m_ptStart; } AcGePoint3d TDbEquipDimNew::GetTurnPt() { return m_ptIns; } void TDbEquipDimNew::SetStartPt(const AcGePoint3d& ptS) { m_ptStart = ptS; } void TDbEquipDimNew::SetTurnPt(const AcGePoint3d& ptT) { m_ptIns = ptT; }