#include "stdafx.h" #include "KTFitting.h" #include "Resource.h" #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW #endif KTFitting::KTFitting() { m_pPipeParam = NULL;//管子参数 m_pInitXData = NULL;//初始化数据 m_bPipeParamCreated = FALSE; } KTFitting::~KTFitting() { if (m_bPipeParamCreated && m_pPipeParam != NULL) { delete m_pPipeParam; } } void KTFitting::SetPipeParam(WPipe::PipeParam* pPipePar,BOOL bCopyFrom) { if (bCopyFrom) { m_pPipeParam = new WPipe::PipeParam; memset(m_pPipeParam,0,sizeof(WPipe::PipeParam)); *m_pPipeParam = *pPipePar; } else { m_pPipeParam = pPipePar; } m_bPipeParamCreated = bCopyFrom; } WPipe::PipeParam* KTFitting::GetPipeParam() { return m_pPipeParam; } void KTFitting::SetInitXData(AecDbObjXDataMap* pInitXData) { m_pInitXData = pInitXData; } AecDbObjXDataMap* KTFitting::GetInitXData() { return m_pInitXData; } void KTFitting::GetName(CString& sName) { Fitting eType = KindOf(); switch(eType) { case KTFitting::kPipe: { sName = _T("直管"); break; } case KTFitting::kElbow: { sName = _T("弯头"); break; } case KTFitting::kReducer: { sName = _T("变径"); break; } case KTFitting::kCap: { sName = _T("封头"); break; } case KTFitting::kTee: { sName = _T("三通"); break; } case KTFitting::kCross: { sName = _T("四通"); break; } case KTFitting::kLateral: { sName = _T("三通"); break; } case KTFitting::kWye: { sName = _T("三通"); break; } default: break; } } void KTFitting::SetNormal(const AcGeVector3d& vtNormal) { } AcDbCurve* KTFitting::CreateCurve(AcDbEntity* pEnt,AcRxClass* pRxClass) { if (pRxClass == NULL) return NULL; if (pEnt == NULL) { pEnt = (AcDbEntity*)pRxClass->create(); } else { if (pEnt->isA() != pRxClass) { delete pEnt; pEnt = (AcDbEntity*)pRxClass->create(); } } return AcDbCurve::cast(pEnt); } BOOL KTFitting::FormatDot(AcGePoint3d& ptGeCen, double dPlotWidth,AcDbPolyline* pDot,AcGePlane& plane,const AcGeVector3d& vtNorm) { if (pDot == NULL) return FALSE; double dDotRadius = dPlotWidth * 0.5; AcGePoint2d ptGeCenDot = ptGeCen.convert2d(plane); AcGePoint2d ptGe[4]; double dBulge = tan(PI / 8.0); ptGe[0] = ptGeCenDot + dDotRadius * AcGeVector2d::kYAxis; ptGe[1] = ptGeCenDot + dDotRadius * AcGeVector2d::kXAxis; ptGe[2] = ptGeCenDot - dDotRadius * AcGeVector2d::kYAxis; ptGe[3] = ptGeCenDot - dDotRadius * AcGeVector2d::kXAxis; if (4 == pDot->numVerts()) { pDot->setPointAt(0,ptGe[0]); pDot->setBulgeAt(0,-dBulge); pDot->setPointAt(1,ptGe[1]); pDot->setBulgeAt(1,-dBulge); pDot->setPointAt(2,ptGe[2]); pDot->setBulgeAt(2,-dBulge); pDot->setPointAt(3,ptGe[3]); pDot->setBulgeAt(3,-dBulge); pDot->setConstantWidth(dPlotWidth); pDot->setClosed(Adesk::kTrue); pDot->setNormal(vtNorm); } else { pDot->reset(Adesk::kFalse,0); pDot->addVertexAt(0,ptGe[0],-dBulge); pDot->addVertexAt(1,ptGe[1],-dBulge); pDot->addVertexAt(2,ptGe[2],-dBulge); pDot->addVertexAt(3,ptGe[3],-dBulge); pDot->setConstantWidth(dPlotWidth); pDot->setClosed(Adesk::kTrue); pDot->setNormal(vtNorm); } return TRUE; } BOOL KTFitting::FormatArc(AcDbArc* pArc,const AcGePoint3d& ptGe1,AcGePoint3d& ptGeMid, const AcGePoint3d& ptGe2,AcGeVector3d& vtNormalOut) { AcGeCircArc3d circArc; circArc.set(ptGe1,ptGeMid,ptGe2); AcGeVector3d vtNormal = circArc.normal(); if (vtNormal.isParallelTo(AcGeVector3d::kZAxis)) { if (!vtNormal.isCodirectionalTo(AcGeVector3d::kZAxis)) { vtNormal.negate();//相反 } } AcGePoint3d ptGeCen = circArc.center(); double dStartAngle = circArc.startAng(); double dEndAngle = circArc.endAng(); double dRadius = circArc.radius(); AcGeCircArc3d cir(ptGeCen,vtNormal,dRadius); AcGePoint3d ptGeX; ptGeX = cir.startPoint(); AcGeVector3d vtX = ptGeX - ptGeCen; AcGeVector3d vt1 = ptGe1 - ptGeCen; AcGeVector3d vt3 = ptGe2 - ptGeCen; vtNormalOut = vtNormal; double dAng1 = vtX.angleTo(vt1,vtNormal); double dAng3 = vtX.angleTo(vt3,vtNormal); if (pArc != NULL) { pArc->setStartAngle(dAng1); pArc->setEndAngle(dAng3); pArc->setCenter(ptGeCen); pArc->setRadius(dRadius); pArc->setNormal(vtNormalOut); AcGePoint3d ptGeOn; pArc->getClosestPointTo(ptGeMid,ptGeOn); double dDis = ptGeOn.distanceTo(ptGeMid); if (dDis > 1.e-3) { pArc->setStartAngle(dAng3); pArc->setEndAngle(dAng1); } return TRUE; } return FALSE; } BOOL KTFitting::CreateCirBreakArc(AcDbCurve* pCurve,AcGePoint3d& ptGe3d, AcGeVector3d& vtDir,double dBreakSpace,double dRadius,double dPlW) { if (dBreakSpace < 1.e-10) //圆 { ((AcDbCircle*)pCurve)->setCenter(ptGe3d); ((AcDbCircle*)pCurve)->setRadius(dRadius); } else { vtDir.normalize(); double dAng = PI / 6.0; //弯头的豁口为60 AcGeVector3d vtDir1 = vtDir; vtDir1.rotateBy(dAng,AcGeVector3d::kZAxis); AcGePoint3d ptGe1 = ptGe3d + dRadius * vtDir1; vtDir1.rotateBy(-2.0 * dAng,AcGeVector3d::kZAxis); AcGePoint3d ptGe3 = ptGe3d + dRadius * vtDir1; AcGePoint3d ptGe2 = ptGe3d - dRadius * vtDir; vtDir1 = AcGeVector3d::kZAxis; KTFitting::FormatArc((AcDbArc*)pCurve,ptGe1,ptGe2,ptGe3,vtDir1); } return TRUE; } void KTFitting::WriteXData(AcDbEntity* pEnt) { AecDbObjXDataMap objXData; objXData.SetAt(PIPE_D,m_pPipeParam->m_dD); objXData.SetAt(PIPE_DSEL,(int)m_pPipeParam->m_eD); objXData.SetAt(PIPE_DN,m_pPipeParam->m_dDN); objXData.SetAt(PIPE_OD,m_pPipeParam->m_dOD); objXData.SetAt(PIPE_INTERFACED,m_pPipeParam->m_dInterfaceD); objXData.SetAt(PIPE_THICK,m_pPipeParam->m_dThick); objXData.SetAt(PIPE_EL,m_pPipeParam->m_dEl); objXData.SetAt(PIPE_RATIO,m_pPipeParam->m_dRRatio); objXData.SetAt(PIPE_INTERFACEL,m_pPipeParam->m_dInterfaceL); objXData.SetAt(PIPE_INTERFACED2,m_pPipeParam->m_dInterfaceD2); objXData.SetAt(PIPE_INTERFACEL2,m_pPipeParam->m_dInterfaceL2); //objXData.SetAt(PIPE_ZONE,m_pPipeParam->m_pszZone); //objXData.SetAt(PIPE_EAPP,(int)m_pPipeParam->m_eAPP); //objXData.SetAt(PIPE_MEDIA,m_pPipeParam->m_pszMedia); //objXData.SetAt(PIPE_LEVEL,m_pPipeParam->m_pszLevel); //objXData.SetAt(PIPE_NO,m_pPipeParam->m_pszNo); //objXData.SetAt(PIPE_DESCR,m_pPipeParam->m_pszDesc); //objXData.SetAt(PIPE_SPEC,m_pPipeParam->m_pszSpec); //objXData.SetAt(PIPE_LINENO,m_pPipeParam->m_pszLineNo); objXData.SetAt(PIPE_ELBASE,(int)m_pPipeParam->m_eElBase); objXData.SetAt(PIPE_REDUCER,(int)m_pPipeParam->m_eRed); objXData.SetAt(PIPE_REDECEN,AcGePoint3d(m_pPipeParam->m_vtECCen.x,m_pPipeParam->m_vtECCen.y,m_pPipeParam->m_vtECCen.z)); //objXData.SetAt(PIPE_CAP,(int)m_pPipeParam->m_eCAP); //objXData.SetAt(PIPE_FITTYPE,m_pPipeParam->m_pszFitType); //objXData.SetAt(PIPE_INSTHICK,m_pPipeParam->m_dInsThick); //objXData.SetAt(PIPE_INSTAG,m_pPipeParam->m_pszInsTag); //objXData.SetAt(DOC_INSTRATAG,m_pPipeParam->m_nInsAndHead); //objXData.SetAt(DOC_INSDIM,m_pPipeParam->m_pszInsDim); //objXData.SetAt(DOC_INSMATER,m_pPipeParam->m_pszInsMateral); //objXData.SetAt(DOC_INSSPEC,m_pPipeParam->m_pszInsSpec); //objXData.SetAt(DOC_TRAMTOINF,m_pPipeParam->m_pszTraMtoInfo); //objXData.SetAt(DOC_TRADESCR,m_pPipeParam->m_pszTraDescr); //objXData.SetAt(DOC_PIPECOLOR,m_pPipeParam->m_nPipeColor); //objXData.SetAt(DOC_2DPIPE,m_pPipeParam->m_bIs2D); AcGeVector3d vt = GetInterfaceVector(KTFitting::kEnd); vt.normalize(); objXData.SetAt(PIPE_DIR,vt); //objXData.SetAt(PIPE_MTOALL,m_pPipeParam->m_pszMtoInfo); objXData.SetAt(PIPE_FITTING,(int)KindOf()); //写Interface; KTInterface interF; CString sIntF = _T("KTInterface"),sIndex,sKey; for (int i = 0;i < m_arInterfaces.length();i++) { interF = m_arInterfaces.at(i); sKey.Format(_T("%s_%d_D"),sIntF,i + 1); objXData.SetAt(sKey,interF.m_dD); sKey.Format(_T("%s_%d_P"),sIntF,i + 1); objXData.SetAt(sKey,interF.m_ptGe); sKey.Format(_T("%s_%d_E"),sIntF,i + 1); objXData.SetAt(sKey,interF.m_dEl); sKey.Format(_T("%s_%d_V"),sIntF,i + 1); objXData.SetAt(sKey,interF.m_vtDir); } objXData.SetAt(_T("标志"),_T("1")); objXData.Write(pEnt,PIDPIPE_APP); } void KTFitting::WriteXData(AcDbEntity* pEnt,WPipe::PipeParam* pPipePar,AcGeVector3d vtDir,KTFitting::Fitting eType) { AecDbObjXDataMap objXData; objXData.SetAt(PIPE_D,pPipePar->m_dD); objXData.SetAt(PIPE_DSEL,(int)pPipePar->m_eD); objXData.SetAt(PIPE_DN,pPipePar->m_dDN); objXData.SetAt(PIPE_OD,pPipePar->m_dOD); objXData.SetAt(PIPE_INTERFACED,pPipePar->m_dInterfaceD); objXData.SetAt(PIPE_INTERFACEL,pPipePar->m_dInterfaceL); objXData.SetAt(PIPE_INTERFACED2,pPipePar->m_dInterfaceD2); objXData.SetAt(PIPE_INTERFACEL2,pPipePar->m_dInterfaceL2); objXData.SetAt(PIPE_THICK,pPipePar->m_dThick); objXData.SetAt(PIPE_EL,pPipePar->m_dEl); objXData.SetAt(PIPE_RATIO,pPipePar->m_dRRatio); objXData.SetAt(PIPE_ZONE,pPipePar->szZone); objXData.SetAt(PIPE_EAPP,pPipePar->m_nConnectType); objXData.SetAt(PIPE_MEDIA,pPipePar->szMedia); objXData.SetAt(PIPE_LEVEL,pPipePar->szLevel); objXData.SetAt(PIPE_NO,pPipePar->szNo); objXData.SetAt(PIPE_DESCR,pPipePar->szDescr); objXData.SetAt(PIPE_SPEC,pPipePar->szSpec); objXData.SetAt(PIPE_LINENO,pPipePar->szLineNo); objXData.SetAt(PIPE_ELBASE,(int)pPipePar->m_eElBase); objXData.SetAt(PIPE_INSTHICK,pPipePar->m_dInsThk); objXData.SetAt(PIPE_INSTAG,pPipePar->szInsTag); objXData.SetAt(DOC_INSTRATAG,pPipePar->m_nInsAndHead); objXData.SetAt(DOC_INSDIM,pPipePar->szInsDim); objXData.SetAt(DOC_INSMATER,pPipePar->szInsMateral); objXData.SetAt(DOC_INSSPEC,pPipePar->szInsSpec); objXData.SetAt(DOC_TRAMTOINF,pPipePar->szTraMtoInfo); objXData.SetAt(DOC_TRADESCR,pPipePar->szTraDescr); objXData.SetAt(DOC_PIPECOLOR,pPipePar->m_nPipeColor); objXData.SetAt(PIPE_FITTYPE,pPipePar->szFitType); objXData.SetAt(PIPE_MTOALL,pPipePar->szMtoInfo); objXData.SetAt(DOC_2DPIPE,pPipePar->m_bIs2D); objXData.SetAt(PIPE_TEEMAINDIR,pPipePar->m_bIsMain); vtDir.normalize(); objXData.SetAt(PIPE_DIR,vtDir); objXData.SetAt(PIPE_FITTING,eType); CString sInfo; GetFitMtoInfoAll(pPipePar,sInfo); objXData.SetAt(PIPE_MTOALL,sInfo); objXData.SetAt(PIPE_DESCR,pPipePar->szDescr); //写Interface; objXData.SetAt(_T("KTInterfaceN"),m_arInterfaces.length()); KTInterface interF; CString sIntF = _T("KTInterface"),sIndex,sKey; for (int i = 0;i < m_arInterfaces.length();i++) { interF = m_arInterfaces.at(i); sKey.Format(_T("%s_%d_D"),sIntF,i + 1); objXData.SetAt(sKey,interF.m_dD); sKey.Format(_T("%s_%d_P"),sIntF,i + 1); objXData.SetAt(sKey,interF.m_ptGe); sKey.Format(_T("%s_%d_E"),sIntF,i + 1); objXData.SetAt(sKey,interF.m_dEl); sKey.Format(_T("%s_%d_V"),sIntF,i + 1); objXData.SetAt(sKey,interF.m_vtDir); } objXData.SetAt(_T("标志"),_T("1")); objXData.Write(pEnt,PIDPIPE_APP); } BOOL KTFitting::PipeParam2XData(WPipe::PipeParam* pPipePar,AecDbObjXDataMap& objXData,KTFitting* pFitting) { objXData.SetAt(PIPE_D,pPipePar->m_dD); objXData.SetAt(PIPE_DSEL,(int)pPipePar->m_eD); objXData.SetAt(PIPE_DN,pPipePar->m_dDN); objXData.SetAt(PIPE_OD,pPipePar->m_dOD); objXData.SetAt(PIPE_THICK,pPipePar->m_dThick); objXData.SetAt(PIPE_EL,pPipePar->m_dEl); objXData.SetAt(PIPE_RATIO,pPipePar->m_dRRatio); objXData.SetAt(PIPE_ZONE,pPipePar->szZone); objXData.SetAt(PIPE_EAPP,pPipePar->m_nConnectType); objXData.SetAt(PIPE_MEDIA,pPipePar->szMedia); objXData.SetAt(PIPE_LEVEL,pPipePar->szLevel); objXData.SetAt(PIPE_NO,pPipePar->szNo); objXData.SetAt(PIPE_DESCR,pPipePar->szDescr); objXData.SetAt(PIPE_SPEC,pPipePar->szSpec); objXData.SetAt(PIPE_LINENO,pPipePar->szLineNo); objXData.SetAt(PIPE_ELBASE,(int)pPipePar->m_eElBase); objXData.SetAt(PIPE_INTERFACED,pPipePar->m_dInterfaceD); objXData.SetAt(PIPE_INTERFACEL,pPipePar->m_dInterfaceL); objXData.SetAt(PIPE_INTERFACED2,pPipePar->m_dInterfaceD2); objXData.SetAt(PIPE_INTERFACEL2,pPipePar->m_dInterfaceL2); objXData.SetAt(PIPE_INSTHICK,pPipePar->m_dInsThk); objXData.SetAt(PIPE_INSTAG,pPipePar->szInsTag); objXData.SetAt(DOC_INSTRATAG,pPipePar->m_nInsAndHead); objXData.SetAt(DOC_INSDIM,pPipePar->szInsDim); objXData.SetAt(DOC_INSMATER,pPipePar->szInsMateral); objXData.SetAt(DOC_INSSPEC,pPipePar->szInsSpec); objXData.SetAt(DOC_TRAMTOINF,pPipePar->szTraMtoInfo); objXData.SetAt(DOC_TRADESCR,pPipePar->szTraDescr); objXData.SetAt(DOC_PIPECOLOR,pPipePar->m_nPipeColor); objXData.SetAt(PIPE_FITTYPE,pPipePar->szFitType); objXData.SetAt(PIPE_MTOALL,pPipePar->szMtoInfo); objXData.SetAt(DOC_2DPIPE,pPipePar->m_bIs2D); AcGeVector3d vtDir = pPipePar->m_vtDir; vtDir.normalize(); objXData.SetAt(PIPE_DIR,vtDir); if (pFitting != NULL) { objXData.SetAt(PIPE_FITTING,pFitting->KindOf()); //写Interface; objXData.SetAt(_T("KTInterfaceN"),pFitting->m_arInterfaces.length()); KTInterface interF; CString sIntF = _T("KTInterface"),sIndex,sKey; for (int i = 0;i < pFitting->m_arInterfaces.length();i++) { interF = pFitting->m_arInterfaces.at(i); sKey.Format(_T("%s_%d_D"),sIntF,i + 1); objXData.SetAt(sKey,interF.m_dD); sKey.Format(_T("%s_%d_P"),sIntF,i + 1); objXData.SetAt(sKey,interF.m_ptGe); sKey.Format(_T("%s_%d_E"),sIntF,i + 1); objXData.SetAt(sKey,interF.m_dEl); sKey.Format(_T("%s_%d_V"),sIntF,i + 1); objXData.SetAt(sKey,interF.m_vtDir); } } return TRUE; } BOOL KTFitting::XData2PipeParam(WPipe::PipeParam* pParamL,AecDbObjXDataMap* pObjXData,KTFitting* pFitting) { if (pParamL != NULL && pObjXData != NULL) { CString sText = _T(""); pObjXData->GetAt(PIPE_D,pParamL->m_dD); pObjXData->GetAt(PIPE_DSEL,(int&)pParamL->m_eD); pObjXData->GetAt(PIPE_DN,pParamL->m_dDN); pObjXData->GetAt(PIPE_OD,pParamL->m_dOD); pObjXData->GetAt(PIPE_INTERFACED,pParamL->m_dInterfaceD); pObjXData->GetAt(PIPE_INTERFACED2,pParamL->m_dInterfaceD2); pObjXData->GetAt(PIPE_THICK,pParamL->m_dThick); pObjXData->GetAt(PIPE_EL,pParamL->m_dEl); pObjXData->GetAt(PIPE_RATIO,pParamL->m_dRRatio); pObjXData->GetAt(PIPE_INSTHICK,pParamL->m_dInsThk); pObjXData->GetAt(PIPE_INTERFACEL,pParamL->m_dInterfaceL); pObjXData->GetAt(PIPE_INTERFACEL2,pParamL->m_dInterfaceL2); pObjXData->GetAt(PIPE_EAPP,pParamL->m_nConnectType); sText = _T(""); pObjXData->GetAt(PIPE_MEDIA,sText); if (!sText.IsEmpty()) _tcscpy(pParamL->szMedia,sText); sText = _T(""); pObjXData->GetAt(PIPE_ZONE,sText); if (!sText.IsEmpty()) _tcscpy(pParamL->szZone,sText); sText = _T(""); pObjXData->GetAt(PIPE_LEVEL,sText); if (!sText.IsEmpty()) _tcscpy(pParamL->szLevel,sText); sText = _T(""); pObjXData->GetAt(PIPE_INSTAG,sText); if (!sText.IsEmpty()) _tcscpy(pParamL->szInsTag,sText); sText = _T(""); pObjXData->GetAt(PIPE_NO,sText); if (!sText.IsEmpty()) _tcscpy(pParamL->szNo,sText); sText = _T(""); pObjXData->GetAt(PIPE_DESCR,sText); if (!sText.IsEmpty()) _tcscpy(pParamL->szDescr,sText); sText = _T(""); pObjXData->GetAt(PIPE_SPEC,sText); if (!sText.IsEmpty()) _tcscpy(pParamL->szSpec,sText); pObjXData->GetAt(PIPE_LINENO,sText); if (!sText.IsEmpty()) _tcscpy(pParamL->szLineNo,sText); pObjXData->GetAt(PIPE_ELBASE,(int&)pParamL->m_eElBase); pObjXData->GetAt(PIPE_REDUCER,(int&)pParamL->m_eRed); AcGePoint3d ptGe; pObjXData->GetAt(PIPE_REDECEN,pParamL->m_vtECCen); pObjXData->GetAt(PIPE_CAP,pParamL->m_nConnectType); pObjXData->GetAt(DOC_INSTRATAG,pParamL->m_nInsAndHead); sText = _T(""); pObjXData->GetAt(DOC_INSDIM,sText); if (!sText.IsEmpty()) _tcscpy(pParamL->szInsDim,sText); sText = _T(""); pObjXData->GetAt(DOC_INSMATER,sText); if (!sText.IsEmpty()) _tcscpy(pParamL->szInsMateral,sText); sText = _T(""); pObjXData->GetAt(DOC_INSSPEC,sText); if (!sText.IsEmpty()) _tcscpy(pParamL->szInsSpec,sText); sText = _T(""); pObjXData->GetAt(PIPE_MTOALL,sText); if (!sText.IsEmpty()) _tcscpy(pParamL->szMtoInfo,sText); sText = _T(""); pObjXData->GetAt(PIPE_FITTYPE,sText); if (!sText.IsEmpty()) _tcscpy(pParamL->szFitType,sText); sText = _T(""); pObjXData->GetAt(DOC_TRAMTOINF,sText); if (!sText.IsEmpty()) _tcscpy(pParamL->szTraMtoInfo,sText); sText = _T(""); pObjXData->GetAt(DOC_TRADESCR,sText); if (!sText.IsEmpty()) _tcscpy(pParamL->szTraDescr,sText); pObjXData->GetAt(DOC_PIPECOLOR,pParamL->m_nPipeColor); pObjXData->GetAt(DOC_2DPIPE,pParamL->m_bIs2D); pObjXData->GetAt(PIPE_TEEMAINDIR,pParamL->m_bIsMain); AcGeVector3d vtDirT; pObjXData->GetAt(PIPE_DIR,vtDirT); pParamL->m_vtDir = vtDirT; //读接口 int nInterFs = 0; pObjXData->GetAt(_T("KTInterfaceN"),nInterFs); if (pFitting != NULL) { KTInterface interF; CString sIntF = _T("KTInterface"),sIndex,sKey; for (int i = 0;i < nInterFs;i++) { sKey.Format(_T("%s_%d_D"),sIntF,i + 1); pObjXData->GetAt(sKey,interF.m_dD); sKey.Format(_T("%s_%d_P"),sIntF,i + 1); pObjXData->GetAt(sKey,interF.m_ptGe); sKey.Format(_T("%s_%d_E"),sIntF,i + 1); pObjXData->GetAt(sKey,interF.m_dEl); sKey.Format(_T("%s_%d_V"),sIntF,i + 1); pObjXData->GetAt(sKey,interF.m_vtDir); pFitting->m_arInterfaces.append(interF); } } return TRUE; } return FALSE; } void KTFitting::DesignEnterCap(WPipe::PipeParam* pParam,AcGePoint3d& ptGeFr,AcGeVector3d& vtDir2Out, AcGeVector3d& vt2D,AcDbEntity** pSubEnt,int& nFr,BOOL bEndLine/* = NULL*/) { if (pSubEnt == NULL) return; if (pParam == NULL) return; vtDir2Out.normalize(); vt2D.normalize(); /* 3 --| 2 |____ | 0 --| 1 */ AcGePoint3d ptGe[6]; ptGe[1] = ptGeFr + vt2D * pParam->m_dInterfaceD * 0.5; ptGe[0] = ptGe[1] + vtDir2Out * pParam->m_dInterfaceL; ptGe[2] = ptGeFr - vt2D * pParam->m_dInterfaceD * 0.5; ptGe[3] = ptGe[2] + vtDir2Out * pParam->m_dInterfaceL; AcGePoint3d ptGe1,ptGe2; ptGe1 = ptGeFr; ptGe2 = ptGeFr + vtDir2Out * pParam->m_dInterfaceL; if (pParam->m_nConnectType == WPipe::eSanitary) { if (pSubEnt[nFr] == NULL) pSubEnt[nFr] = new AcDbLine; ((AcDbLine*)pSubEnt[nFr])->setStartPoint(ptGe[0]); ((AcDbLine*)pSubEnt[nFr])->setEndPoint(ptGe[1]); nFr++; } if (pSubEnt[nFr] == NULL) pSubEnt[nFr] = new AcDbLine; ((AcDbLine*)pSubEnt[nFr])->setStartPoint(ptGe[1]); ((AcDbLine*)pSubEnt[nFr])->setEndPoint(ptGe[2]); nFr++; if (pParam->m_nConnectType == WPipe::eSanitary) { if (pSubEnt[nFr] == NULL) pSubEnt[nFr] = new AcDbLine; ((AcDbLine*)pSubEnt[nFr])->setStartPoint(ptGe[2]); ((AcDbLine*)pSubEnt[nFr])->setEndPoint(ptGe[3]); nFr++; } AcGeVector3d vtCr = vtDir2Out.crossProduct(vt2D); if ( vtCr.isParallelTo(AcGeVector3d::kZAxis)) //XY面画 { if (bEndLine) { nFr++; if (pSubEnt[nFr] == NULL) pSubEnt[nFr] = new AcDbLine; ((AcDbLine*)pSubEnt[nFr])->setStartPoint(ptGe[0]); ((AcDbLine*)pSubEnt[nFr])->setEndPoint(ptGe[3]); nFr++; } } else //空间,画圆 { /*nFr++; if (pSubEnt[nFr] == NULL) pSubEnt[nFr] = new AcDbCircle; ((AcDbCircle*)pSubEnt[nFr])->setCenter(ptGeFr); ((AcDbCircle*)pSubEnt[nFr])->setRadius(pParam->m_dInterfaceD * 0.5); ((AcDbCircle*)pSubEnt[nFr])->setNormal(vtDir2Out);*/ if (pSubEnt[nFr] == NULL) pSubEnt[nFr] = new AcDbCircle; ((AcDbCircle*)pSubEnt[nFr])->setCenter(ptGe2); ((AcDbCircle*)pSubEnt[nFr])->setRadius(pParam->m_dInterfaceD * 0.5); ((AcDbCircle*)pSubEnt[nFr])->setNormal(vtDir2Out); nFr++; } } BOOL KTFitting::GetInterface(int nIndex,KTFitting::KTInterface* pInterface) { if (pInterface == NULL) return FALSE; int nCount = m_arInterfaces.length(); if (nIndex > -1 && nIndex < nCount ) { memcpy(pInterface,&m_arInterfaces.at(nIndex),sizeof(KTInterface)); return TRUE; } return FALSE; } AcGePoint3d KTFitting::GetInteracePoint(int nIndex) { int nSize = m_arInterfaces.length(); if (nIndex > -1 && nIndex < nSize) { return m_arInterfaces.at(nIndex).m_ptGe; } return AcGePoint3d::kOrigin; } double KTFitting::GetInterfaceElevation(int nIndex) { int nSize = m_arInterfaces.length(); if (nIndex > -1 && nIndex < nSize) { return m_arInterfaces.at(nIndex).m_dEl; } return 0.0; } AcGeVector3d KTFitting::GetInterfaceVector(int nIndex) { int nSize = m_arInterfaces.length(); if (nIndex > -1 && nIndex < nSize) { return m_arInterfaces.at(nIndex).m_vtDir; } return AcGeVector3d::kXAxis; } int KTFitting::GetInterfaceCount() { return m_arInterfaces.length(); } void KTFitting::AddDimPoint(AcGePoint3d& ptGe,LPCTSTR pszType,AcDbObjectIdArray& arIDs) { AcDbObjectId idDPt = KTSetting::InitLayer(_T("LAY_DPoint")); //标注点, AcDbPoint* pP1 = new AcDbPoint; pP1->setPosition(ptGe); pP1->setLayer(idDPt); AecDbObjXDataMap xDataMap; xDataMap.SetAt(_T("点类型"),_T("标注点")); xDataMap.SetAt(_T("名称"),_T("管件")); xDataMap.Write(pP1,_T("KTParampart")); AcDbObjectId idT; CKTCadUtility::AddToBlockTableRecord(idT,pP1); arIDs.append(idT); pP1->close(); } void KTFitting::AddMetPoint(WPipe::PipeParam* pParam,AecDbObjXDataMap& xDataMap,AcGePoint3d& ptGe, LPCTSTR pszType,AcDbObjectIdArray& arIDs,KTFitting* pFitting) { //材料点 AcDbObjectId idMPt = KTSetting::InitLayer(_T("LAY_MPoint")); AcGePoint3d ptGeMid = ptGe; AcDbPoint* pP1 = new AcDbPoint; pP1->setPosition(ptGeMid); pP1->setLayer(idMPt); KTFitting::PipeParam2XData(pParam,xDataMap,pFitting); xDataMap.SetAt(_T("点类型"),_T("材料点")); xDataMap.SetAt(_T("名称"),pszType); xDataMap.SetAt(_T("标志"),_T("1")); CString sInfo; GetFitMtoInfoAll(pParam,sInfo); xDataMap.SetAt(PIPE_MTOALL,sInfo); xDataMap.Write(pP1,_T("KTParampart")); AcDbObjectId idT; CKTCadUtility::AddToBlockTableRecord(idT,pP1); arIDs.append(idT); pP1->close(); } BOOL KTFitting::GetFitMtoInfoAll(WPipe::PipeParam* pPipePar,CString& sInfo,WPipe::PipeParam* pPipePar2) { CString dbPath = FilePath::GetSysDir(); dbPath += _T("\\Plumbing.db"); CUIISQLiteServer sqlDb; if (!sqlDb.InitADOServer(dbPath)) { AfxMessageBox(IDS_LOADADOSERVERFAILED); return FALSE; } CString sSQL,sProj,sLevel,sName; m_pInitXData->GetAt(DOC_PROJECT,sProj); //sLevel = pPipePar->szLevel; Fitting eType = KindOf(); if (eType != KTFitting::kPipe) { GetName(sName); sSQL.Format(_T("select * from AecSpecFit where [项目名称]='%s' and") _T(" [等级名称]='%s' and [类别]='管件' and [类型]='%s'") _T(" and [公称直径]=%d"),sProj,sLevel,sName,(int)pPipePar->m_dDN); CStringArray arValues; sqlDb.GetSelData(sSQL,arValues); if (arValues.GetSize() >= 11 ) { for (int i = 1;i <= 9;i++)//最后一个为描述 { if (i == 1) { sInfo = arValues.GetAt(i); } else { sInfo += _T("^") + arValues.GetAt(i); } } _tcscpy(pPipePar->szDescr,arValues.GetAt(10)); return TRUE; } } else { sSQL.Format(_T("select * from AecSpecPipe where [项目名称]='%s' and") _T(" [等级名称]='%s' and [公称直径]=%d"),sProj,sLevel,(int)pPipePar->m_dDN); CStringArray arValues; sqlDb.GetSelData(sSQL,arValues); if (arValues.GetSize() >= 13 ) { for (int i = 1;i <= 11;i++)//最后一个为描述 { if (i == 1) { sInfo = arValues.GetAt(i); } else { sInfo += _T("^") + arValues.GetAt(i); } } pPipePar->m_dOD = _ttof(arValues.GetAt(9)); //外径 _tcscpy(pPipePar->szDescr,arValues.GetAt(12)); return TRUE; } } return FALSE; }