#include "stdafx.h" #include "Resource.h" #include "KTParamService.h" #include "KTEntityDragMgr.h" #include "KTPIDUtility.h" #include "EquAttribDlg.h" #include "NozzleDlg.h" #include "ArrowDlg.h" #include "InstBubbleDlg.h" #include "LineNumDlg.h" #include "SpecJumpDlg.h" #include "ReduerDlg.h" #include "KTPipeLineNoDlg.h" #include "CKTDimUtility.h" #include "UIHistory.h" #include "coretools.h" #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW #endif #define LAYER_VESSEL _T("LAY_Vessel") // Vessel #define TSTYLE_VESSEL _T("Equment_Dim") // Vessel #define LAY_INSTRUMENT _T("LAY_INSTRUMENT") // INSTRUMENT #define PID_LINETYPE_FILE _T("KTPID.lin") #define LAYER_EQUDIM _T("LAY_EQUMENTDIM ") // EQUMENTDIM #define PID_LINENO _T("管线名称") //Xdata中的管线名称 #define PID_LINETYPE_DEF _T("AcadIso.lin") namespace { int KTCreateEntity(CMapStringToString & mapVarToValue, CString sType, BOOL bBlock, BOOL bGroup, BOOL bMove, BOOL bScale, BOOL bRotate) { // 取得参数化服务 KTParamService* pService = GetKTParamService(); if (NULL == pService) { acutPrintf(_T("\n参数化服务不存在, 请先加载参数化模块!")); return RTERROR; } GetKTParamService()->InitService(); // // 获得参数化设备对象图元 AcDbVoidPtrArray arpPart; if (!pService->CreateParamPart(arpPart, mapVarToValue, sType)) { acutPrintf(_T("参数化设备创建失败, 可能没有找到指定设备或者数据参数不足!")); return RTERROR; } // if (0 == arpPart.length()) { acutPrintf(_T("\n参数化设备不存在图形元素定义!")); return RTNONE; } // 拖放创建的参数化设备图元 CKTEntityDragMgr drag(AcGePoint3d::kOrigin, arpPart, TRUE); drag.EnableMove(bMove); drag.EnableScale(bScale); drag.EnableRotate(bRotate); if (drag.DoDrag()) { // 做块 if (bBlock) { AcDbObjectId id = CKTCadUtility::CreateBlockTableRecord(arpPart, drag.GetDragPoint()); AcDbBlockReference *pRef = new AcDbBlockReference(drag.GetDragPoint(), id); ASSERT(NULL != pRef); CKTCadUtility::AddToBlockTableRecord(pRef); pRef->close(); } // 做组 else if (bGroup) { AcDbObjectIdArray arid; drag.append(arid); CKTCadUtility::CreateAcDbGroup(arid); } // 打散 else { drag.append(); } } return RTNORM; } int KTCreateEntity(CMapStringToString & mapVarToValue, CString sType, double dScale, AcGePoint3d ptBase, BOOL bBlock, BOOL bGroup, BOOL bMove, BOOL bScale, BOOL bRotate) { // 取得参数化服务 KTParamService* pService = GetKTParamService(); if (NULL == pService) { acutPrintf(_T("\n参数化服务不存在, 请先加载参数化模块!")); return RTERROR; } GetKTParamService()->InitService(); // // 获得参数化设备对象图元 AcDbVoidPtrArray arpPart; if (!pService->CreateParamPart(arpPart, mapVarToValue, sType)) { acutPrintf(_T("参数化设备创建失败, 可能没有找到指定设备或者数据参数不足!")); return RTERROR; } // if (0 == arpPart.length()) { acutPrintf(_T("\n参数化设备不存在图形元素定义!")); return RTNONE; } //控制缩放比例///////////////////////////////////// AcGeMatrix3d mat1, mat2; mat1.setToScaling(dScale); mat2.setToTranslation(ptBase - AcGePoint3d::kOrigin); //mat2.setToRotation(dAngle, AcGeVector3d::kZAxis); AcDbEntity* pEnt; int iPos = arpPart.length(); while ((--iPos) >= 0) { pEnt = (AcDbEntity*)arpPart[iPos]; ASSERT(NULL != pEnt); pEnt->transformBy(mat1); pEnt->transformBy(mat2); } // 拖放创建的参数化设备图元 CKTEntityDragMgr drag(AcGePoint3d::kOrigin, arpPart, TRUE); drag.EnableMove(bMove); drag.EnableScale(bScale); drag.EnableRotate(bRotate); if (drag.DoDrag()) { // 做块 if (bBlock) { AcDbObjectId id = CKTCadUtility::CreateBlockTableRecord(arpPart, drag.GetDragPoint()); AcDbBlockReference *pRef = new AcDbBlockReference(drag.GetDragPoint(), id); ASSERT(NULL != pRef); CKTCadUtility::AddToBlockTableRecord(pRef); pRef->close(); } // 做组 else if (bGroup) { AcDbObjectIdArray arid; drag.append(arid); CKTCadUtility::CreateAcDbGroup(arid); } // 打散 else { drag.append(); } } return RTNORM; } int KTCreateEntity(CMapStringToString & mapVarToValue, CString sType, double dScale, BOOL bBlock, BOOL bGroup, BOOL bMove, BOOL bScale, BOOL bRotate) { // 取得参数化服务 KTParamService* pService = GetKTParamService(); if (NULL == pService) { acutPrintf(_T("\n参数化服务不存在, 请先加载参数化模块!")); return RTERROR; } GetKTParamService()->InitService(); // // 获得参数化设备对象图元 AcDbVoidPtrArray arpPart; if (!pService->CreateParamPart(arpPart, mapVarToValue, sType)) { acutPrintf(_T("参数化设备创建失败, 可能没有找到指定设备或者数据参数不足!")); return RTERROR; } // if (0 == arpPart.length()) { acutPrintf(_T("\n参数化设备不存在图形元素定义!")); return RTNONE; } //控制缩放比例///////////////////////////////////// AcGeMatrix3d mat, mat2; mat.setToScaling(dScale); //mat2.setToRotation(dAngle, AcGeVector3d::kZAxis); AcDbEntity* pEnt; int iPos = arpPart.length(); while ((--iPos) >= 0) { pEnt = (AcDbEntity*)arpPart[iPos]; ASSERT(NULL != pEnt); //pEnt->transformBy(mat*mat2); pEnt->transformBy(mat); } //////////////////////////////////////////////////// // 拖放创建的参数化设备图元 CKTEntityDragMgr drag(AcGePoint3d::kOrigin, arpPart, TRUE); drag.EnableMove(bMove); drag.EnableScale(bScale); drag.EnableRotate(bRotate); if (drag.DoDrag()) { // 做块 if (bBlock) { AcDbObjectId id = CKTCadUtility::CreateBlockTableRecord(arpPart, drag.GetDragPoint()); AcDbBlockReference *pRef = new AcDbBlockReference(drag.GetDragPoint(), id); ASSERT(NULL != pRef); CKTCadUtility::AddToBlockTableRecord(pRef); pRef->close(); } // 做组 else if (bGroup) { AcDbObjectIdArray arid; drag.append(arid); CKTCadUtility::CreateAcDbGroup(arid); } // 打散 else { drag.append(); } } return RTNORM; } int KTCreateEntity(CMapStringToString & mapVarToValue, CString sType, AcGePoint3d ptBase, AcGeVector3d& vt, double dScale, BOOL bBlock, BOOL bGroup, BOOL bMove, BOOL bScale, BOOL bRotate) { // 取得参数化服务 KTParamService* pService = GetKTParamService(); if (NULL == pService) { acutPrintf(_T("\n参数化服务不存在, 请先加载参数化模块!")); return RTERROR; } GetKTParamService()->InitService(); // // 获得参数化设备对象图元 AcDbVoidPtrArray arpPart; if (!pService->CreateParamPart(arpPart, mapVarToValue, sType)) { acutPrintf(_T("参数化设备创建失败, 可能没有找到指定设备或者数据参数不足!")); return RTERROR; } // if (0 == arpPart.length()) { acutPrintf(_T("\n参数化设备不存在图形元素定义!")); return RTNONE; } //控制缩放比例///////////////////////////////////// AcGeMatrix3d mat, mat2; mat.setToScaling(dScale); //mat2.setToRotation(dAngle, AcGeVector3d::kZAxis); AcDbEntity* pEnt; int iPos = arpPart.length(); while ((--iPos) >= 0) { pEnt = (AcDbEntity*)arpPart[iPos]; ASSERT(NULL != pEnt); //pEnt->transformBy(mat*mat2); pEnt->transformBy(mat); } //////////////////////////////////////////////////// // 拖放创建的参数化设备图元 CKTEntityDragMgr drag(AcGePoint3d::kOrigin, arpPart, TRUE); drag.SetDragPoint(ptBase, TRUE); drag.EnableMove(bMove); drag.EnableScale(bScale); drag.EnableRotate(bRotate); if (drag.DoDrag()) { // 做块 if (bBlock) { AcDbObjectId id = CKTCadUtility::CreateBlockTableRecord(arpPart, drag.GetDragPoint()); AcDbBlockReference *pRef = new AcDbBlockReference(drag.GetDragPoint(), id); ASSERT(NULL != pRef); CKTCadUtility::AddToBlockTableRecord(pRef); pRef->close(); } // 做组 else if (bGroup) { AcDbObjectIdArray arid; drag.append(arid); CKTCadUtility::CreateAcDbGroup(arid); } // 打散 else { drag.append(); } } double dDragValue = drag.GetDragValue(); vt = AcGeVector3d::kXAxis; vt.rotateBy(dDragValue, AcGeVector3d::kZAxis); vt.normalize(); return RTNORM; } int KTCreateEntity(CMapStringToString & mapVarToValue, CString sType, double dScale, AcGeVector3d& vt, AcGePoint3d& ptBase, BOOL bBlock, BOOL bGroup, BOOL bMove, BOOL bScale, BOOL bRotate) { // 取得参数化服务 KTParamService* pService = GetKTParamService(); if (NULL == pService) { acutPrintf(_T("\n参数化服务不存在, 请先加载参数化模块!")); return RTERROR; } GetKTParamService()->InitService(); // // 获得参数化设备对象图元 AcDbVoidPtrArray arpPart; if (!pService->CreateParamPart(arpPart, mapVarToValue, sType)) { acutPrintf(_T("参数化设备创建失败, 可能没有找到指定设备或者数据参数不足!")); return RTERROR; } // if (0 == arpPart.length()) { acutPrintf(_T("\n参数化设备不存在图形元素定义!")); return RTNONE; } //控制缩放比例///////////////////////////////////// AcGeMatrix3d mat, mat2; mat.setToScaling(dScale); //mat2.setToRotation(dAngle, AcGeVector3d::kZAxis); AcDbEntity* pEnt; int iPos = arpPart.length(); while ((--iPos) >= 0) { pEnt = (AcDbEntity*)arpPart[iPos]; ASSERT(NULL != pEnt); //pEnt->transformBy(mat*mat2); pEnt->transformBy(mat); } //////////////////////////////////////////////////// // 拖放创建的参数化设备图元 CKTEntityDragMgr drag(AcGePoint3d::kOrigin, arpPart, TRUE); drag.EnableMove(bMove); drag.EnableScale(bScale); drag.EnableRotate(bRotate); if (drag.DoDrag()) { // 做块 if (bBlock) { AcDbObjectId id = CKTCadUtility::CreateBlockTableRecord(arpPart, drag.GetDragPoint()); AcDbBlockReference *pRef = new AcDbBlockReference(drag.GetDragPoint(), id); ASSERT(NULL != pRef); CKTCadUtility::AddToBlockTableRecord(pRef); pRef->close(); } // 做组 else if (bGroup) { AcDbObjectIdArray arid; drag.append(arid); CKTCadUtility::CreateAcDbGroup(arid); } // 打散 else { drag.append(); } } double dDragValue = drag.GetDragValue(); vt = AcGeVector3d::kXAxis; vt.rotateBy(dDragValue, AcGeVector3d::kZAxis); vt.normalize(); ptBase = drag.GetDragPoint(); return RTNORM; } int KTCreateEntity(CMapStringToString & mapVarToValue, CString sType, AcGePoint3d& ptBase, double& dNozzleScale, double& dNozzleRotate, BOOL bBlock, BOOL bGroup, BOOL bMove, BOOL bScale, BOOL bRotate) { // 取得参数化服务 KTParamService* pService = GetKTParamService(); if (NULL == pService) { acutPrintf(_T("\n参数化服务不存在, 请先加载参数化模块!")); return RTERROR; } GetKTParamService()->InitService(); // // 获得参数化设备对象图元 AcDbVoidPtrArray arpPart; if (!pService->CreateParamPart(arpPart, mapVarToValue, sType)) { acutPrintf(_T("参数化设备创建失败, 可能没有找到指定设备或者数据参数不足!")); return RTERROR; } // if (0 == arpPart.length()) { acutPrintf(_T("\n参数化设备不存在图形元素定义!")); return RTNONE; } // 拖放创建的参数化设备图元 CKTEntityDragMgr drag(AcGePoint3d::kOrigin, arpPart, TRUE); drag.EnableMove(bMove); drag.EnableScale(bScale); drag.EnableRotate(FALSE); BOOL bOk = FALSE; bOk = drag.DoDrag(); dNozzleScale = drag.GetDragValue(); ptBase = drag.GetDragPoint(); drag.EnableMove(FALSE); drag.EnableScale(FALSE); drag.EnableRotate(bRotate); drag.SetDragPoint(ptBase, TRUE); bOk = drag.DoDrag(); dNozzleRotate = drag.GetDragValue(); if (bOk) { // 做块 if (bBlock) { AcDbObjectId id = CKTCadUtility::CreateBlockTableRecord(arpPart, drag.GetDragPoint()); AcDbBlockReference *pRef = new AcDbBlockReference(drag.GetDragPoint(), id); ASSERT(NULL != pRef); CKTCadUtility::AddToBlockTableRecord(pRef); pRef->close(); } // 做组 else if (bGroup) { AcDbObjectIdArray arid; drag.append(arid); CKTCadUtility::CreateAcDbGroup(arid); } // 打散 else { drag.append(); } } return RTNORM; } int KTCreateEntity(CMapStringToString & mapVarToValue, CString sType, double dScale, AcGeVector3d& vt, AcGePoint3d& ptBase, double dAngle, BOOL bBlock, BOOL bGroup, BOOL bMove, BOOL bScale, BOOL bRotate) { // 取得参数化服务 KTParamService* pService = GetKTParamService(); if (NULL == pService) { acutPrintf(_T("\n参数化服务不存在, 请先加载参数化模块!")); return RTERROR; } GetKTParamService()->InitService(); // // 获得参数化设备对象图元 AcDbVoidPtrArray arpPart; if (!pService->CreateParamPart(arpPart, mapVarToValue, sType)) { acutPrintf(_T("参数化设备创建失败, 可能没有找到指定设备或者数据参数不足!")); return RTERROR; } // if (0 == arpPart.length()) { acutPrintf(_T("\n参数化设备不存在图形元素定义!")); return RTNONE; } //控制缩放比例///////////////////////////////////// AcGeMatrix3d mat, mat2; mat.setToScaling(dScale); mat2.setToRotation(dAngle, AcGeVector3d::kZAxis); AcDbEntity* pEnt; int iPos = arpPart.length(); while ((--iPos) >= 0) { pEnt = (AcDbEntity*)arpPart[iPos]; ASSERT(NULL != pEnt); pEnt->transformBy(mat*mat2); //pEnt->transformBy(mat); } //////////////////////////////////////////////////// // 拖放创建的参数化设备图元 CKTEntityDragMgr drag(AcGePoint3d::kOrigin, arpPart, TRUE); drag.EnableMove(bMove); drag.EnableScale(bScale); drag.EnableRotate(bRotate, NULL, dAngle); if (drag.DoDrag()) { // 做块 if (bBlock) { AcDbObjectId id = CKTCadUtility::CreateBlockTableRecord(arpPart, drag.GetDragPoint()); AcDbBlockReference *pRef = new AcDbBlockReference(drag.GetDragPoint(), id); ASSERT(NULL != pRef); CKTCadUtility::AddToBlockTableRecord(pRef); pRef->close(); } // 做组 else if (bGroup) { AcDbObjectIdArray arid; drag.append(arid); CKTCadUtility::CreateAcDbGroup(arid); } // 打散 else { drag.append(); } } else { return RTERROR; } double dDragValue = drag.GetDragValue(); vt = AcGeVector3d::kXAxis; vt.rotateBy(dDragValue, AcGeVector3d::kZAxis); vt.normalize(); ptBase = drag.GetDragPoint(); return RTNORM; } int KTCreateEntity(CMapStringToString & mapVarToValue, CString sType, AcGePoint3d& ptBase, double& dNozzleScale, double& dNozzleRotate, double dAngle, BOOL bBlock, BOOL bGroup, BOOL bMove, BOOL bScale, BOOL bRotate) { // 取得参数化服务 KTParamService* pService = GetKTParamService(); if (NULL == pService) { acutPrintf(_T("\n参数化服务不存在, 请先加载参数化模块!")); return RTERROR; } GetKTParamService()->InitService(); // // 获得参数化设备对象图元 AcDbVoidPtrArray arpPart; if (!pService->CreateParamPart(arpPart, mapVarToValue, sType)) { acutPrintf(_T("参数化设备创建失败, 可能没有找到指定设备或者数据参数不足!")); return RTERROR; } // if (0 == arpPart.length()) { acutPrintf(_T("\n参数化设备不存在图形元素定义!")); return RTNONE; } // 拖放创建的参数化设备图元 CKTEntityDragMgr drag(AcGePoint3d::kOrigin, arpPart, TRUE); drag.EnableMove(bMove); drag.EnableScale(bScale); drag.EnableRotate(FALSE); BOOL bOk = FALSE; bOk = drag.DoDrag(); dNozzleScale = drag.GetDragValue(); ptBase = drag.GetDragPoint(); drag.EnableMove(FALSE); drag.EnableScale(FALSE); drag.EnableRotate(bRotate, NULL, dAngle); drag.SetDragPoint(ptBase, TRUE); bOk = drag.DoDrag(); dNozzleRotate = drag.GetDragValue(); if (bOk) { // 做块 if (bBlock) { AcDbObjectId id = CKTCadUtility::CreateBlockTableRecord(arpPart, drag.GetDragPoint()); AcDbBlockReference *pRef = new AcDbBlockReference(drag.GetDragPoint(), id); ASSERT(NULL != pRef); CKTCadUtility::AddToBlockTableRecord(pRef); pRef->close(); } // 做组 else if (bGroup) { AcDbObjectIdArray arid; drag.append(arid); CKTCadUtility::CreateAcDbGroup(arid); } // 打散 else { drag.append(); } } return RTNORM; } int CreateDimText(CString sTag, CString sName, CString sType, CString sDes) { CKTObjLifeMgr entMgr; AcDbVoidPtrArray arpEnts; AcDbObjectId idLayer = KTSetting::InitLayer(LAYER_EQUDIM); AcGePoint3d ptPos; AcDbObjectId idText = KTSetting::InitTextStyle(TSTYLE_VESSEL); double dTextSize = 0.0; AcDbTextStyleTableRecord* pTextStyleRec = NULL; acdbOpenObject(pTextStyleRec, idText, AcDb::kForRead); if (NULL != pTextStyleRec) { dTextSize = pTextStyleRec->textSize(); pTextStyleRec->close(); } else { CKTCadUtility::GetSystemVar(_T("TEXTSIZE"), dTextSize); } AcGeVector3d vtOffset(UcsYAxis * dTextSize); double dAngle = CKTCadUtility::GetAngle(UcsXAxis); //按设置 //字高默认2.5-->设备标注文字 //按全局标注比例 double dpipedn, dpipew, dtxtH, dtxtW; int nDimType = 0; AecDbObjXDataMap xInitDataMap; CKTDimUtility::Getinit(xInitDataMap, dpipew, dtxtH, dtxtW, nDimType); CKTEntityDragMgr drag; drag.SetDragPoint(ptPos); drag.EnableRotate(FALSE); drag.EnableScale(FALSE); AcDbText* pText = new AcDbText(ptPos, sTag, idText, 0, dAngle); ASSERT(NULL != pText); pText->setLayer(idLayer); pText->setHeight(dtxtH); pText->setWidthFactor(0.75); drag.Add(pText); ptPos -= vtOffset; pText = new AcDbText(ptPos, sName, idText, 0, dAngle); ASSERT(NULL != pText); pText->setHeight(dtxtH); pText->setWidthFactor(0.75); pText->setLayer(idLayer); drag.Add(pText); ptPos -= vtOffset; pText = new AcDbText(ptPos, sType, idText, 0, dAngle); ASSERT(NULL != pText); pText->setHeight(dtxtH); pText->setWidthFactor(0.75); pText->setLayer(idLayer); drag.Add(pText); ptPos -= vtOffset; pText = new AcDbText(ptPos, sDes, idText, 0, dAngle); ASSERT(NULL != pText); pText->setHeight(dtxtH); pText->setWidthFactor(0.75); pText->setLayer(idLayer); drag.Add(pText); if (drag.DoDrag()) { arpEnts.append(*drag.GetAll()); drag.Remove(); } entMgr.Add(arpEnts); entMgr.AddToBlockTableRecord(); return 0; } int CreateDimText(CString sTag) { CKTObjLifeMgr entMgr; AcDbVoidPtrArray arpEnts; AcDbObjectId idLayer = KTSetting::InitLayer(LAYER_EQUDIM); AcGePoint3d ptPos; AcDbObjectId idText = KTSetting::InitTextStyle(TSTYLE_VESSEL); double dTextSize = 0.0; AcDbTextStyleTableRecord* pTextStyleRec = NULL; acdbOpenObject(pTextStyleRec, idText, AcDb::kForRead); if (NULL != pTextStyleRec) { dTextSize = pTextStyleRec->textSize(); pTextStyleRec->close(); } else { CKTCadUtility::GetSystemVar(_T("TEXTSIZE"), dTextSize); } AcGeVector3d vtOffset(UcsYAxis * dTextSize); double dAngle = CKTCadUtility::GetAngle(UcsXAxis); //按设置 //字高默认2.5-->设备标注文字 //按全局标注比例 double dpipedn, dpipew, dtxtH, dtxtW; int nDimType = 0; AecDbObjXDataMap xInitDataMap; CKTDimUtility::Getinit(xInitDataMap, dpipew, dtxtH, dtxtW, nDimType); CKTEntityDragMgr drag; drag.SetDragPoint(ptPos); drag.EnableRotate(FALSE); drag.EnableScale(FALSE); AcDbText* pText = new AcDbText(ptPos, sTag, idText, 0, dAngle); ASSERT(NULL != pText); pText->setLayer(idLayer); pText->setHeight(dtxtH); pText->setWidthFactor(0.75); drag.Add(pText); if (drag.DoDrag()) { arpEnts.append(*drag.GetAll()); drag.Remove(); } entMgr.Add(arpEnts); entMgr.AddToBlockTableRecord(); return 0; } int CreatePIDEqument(CEquAttribDlg &CDlg, LPCTSTR sType, LPCTSTR sClass) { GetKTParamService()->InitService(); CAcModuleResourceOverride myResources; int nRes = CDlg.DoModal(); if (nRes == IDOK) { //将数据传入生成图形模块 CMapStringToString mapVarToValue; CString sValue = _T(""); sValue.Format(_T("%s"), CDlg.m_sTag); mapVarToValue.SetAt(_T("Tag"), sValue); sValue.Format(_T("%s"), CDlg.m_sName); mapVarToValue.SetAt(_T("Name"), sValue); sValue.Format(_T("%s"), CDlg.m_sType); mapVarToValue.SetAt(_T("Type"), sValue); sValue.Format(_T("%s"), CDlg.m_sDes); mapVarToValue.SetAt(_T("Des"), sValue); sValue.Format(_T("%s"), sType); mapVarToValue.SetAt(_T("Code"), sValue); sValue.Format(_T("%s"), sClass); mapVarToValue.SetAt(_T("Class"), sValue); int iResult = KTCreateEntity(mapVarToValue, sType, FALSE, TRUE, TRUE, TRUE, TRUE); //获取初始化数据 AecDbObjXDataMap xDataMap; PIDLineTools::ReSetPID(xDataMap); if (!KTModelLayoutXData::ReadModelXData(KT_PIPEINIT, xDataMap)) { acedAlert(_T("\n系统没有初始化!")); return FALSE; } int iContent = 0; xDataMap.GetAt(DOC_PIDEWITHDIM, iContent); if (iContent == 1) { CreateDimText(CDlg.m_sTag, CDlg.m_sName, CDlg.m_sType, CDlg.m_sDes); } } return 0; } AcDbObjectId GetGroupId(AcDbObjectId objId) { AcDbObjectId persObjId; AcDbObject *pEnt; if (Acad::eOk != acdbOpenObject(pEnt, objId, AcDb::kForRead)) { acutPrintf(_T("\n实体打开失败!")); return AcDbObjectId::kNull; } AcDbDictionary *pGroup; const AcDbVoidPtrArray *pReactors; pReactors = pEnt->reactors(); if (pReactors == NULL) { acutPrintf(_T("\n该实体未编组!")); pEnt->close(); return AcDbObjectId::kNull; } pEnt->close(); int length = pReactors->length(); void *pSomething; for (int i = 0; i < length; ++i) { pSomething = (AcDbObject*)pReactors->at(i); if (acdbIsPersistentReactor(pSomething)) { // Every group reactor is a persistent reactor. // Is this a reactor from a group? persObjId = acdbPersistentReactorObjectId(pSomething); AcDbObject *pReactor; if (Acad::eOk != acdbOpenObject(pReactor, persObjId, AcDb::kForRead)) { acutPrintf(_T("\n迭代器打开失败!")); continue; } if (pReactor->isKindOf(AcDbGroup::desc())) { // This is a group reactor. Get the group name. AcDbObjectId groupId = pReactor->ownerId(); if (Acad::eOk != acdbOpenObject(pGroup, groupId, AcDb::kForRead)) { acutPrintf(_T("\n组打开失败!")); pReactor->close(); continue; } LPTSTR groupName; if (Acad::eOk != (pGroup->nameAt(persObjId, groupName))) { acutPrintf(_T("\n获得组名失败!")); pReactor->close(); pGroup->close(); continue; } pGroup->close(); } pReactor->close(); } } return persObjId; } int CreateBubble(CInstBubbleDlg &CDlg, int iType) { int nType = -1; CString sType = _T(""); CString sTcontent = _T(""); CString sBcontent = _T(""); CString sLineType = _T(""); double dScale; AcGePoint3d ptInsert; AcGeVector3d vDir; AcDbObjectId idLineType, idLayer, idPolyline; idLineType = NULL; idLayer = NULL; idLayer = KTSetting::InitLayer(LAY_INSTRUMENT); //CInstBubbleDlg CDlg; CDlg.iType = iType; CAcModuleResourceOverride myResources; int nRes = CDlg.DoModal(); if (nRes == IDOK) { nType = CDlg.m_iRadio; sTcontent = CDlg.m_sTContent; sBcontent = CDlg.m_sBContent; sLineType.Format(_T("%s\\%s"), PID_LINETYPE_FILE, CDlg.m_sLineType); dScale = CDlg.m_dR; //设置线形 if (_T("") != sLineType) { // 分解"线型路径及文件\线型"格式 TCHAR szPathName[MAX_PATH]; LPCTSTR pszType = _tcsrchr(sLineType, _T('\\')); if (NULL == pszType) { _tcscpy(szPathName, PID_LINETYPE_DEF); pszType = sLineType; } else { int iRet = pszType - LPCTSTR(sLineType); _tcsncpy(szPathName, sLineType, iRet); szPathName[iRet] = 0; pszType++; } acedFindFile(szPathName, szPathName); acdbCurDwg()->loadLineTypeFile(pszType, szPathName); AcDbSymbolUtilities::getLinetypeId(idLineType, pszType, acdbCurDwg()); } switch (iType) { case 1: switch (nType) { case 0: sType = _T("PIDDisc-Local"); break; case 1: sType = _T("PIDDisc-PrimaryFront"); break; case 2: sType = _T("PIDDisc-PrimaryBack"); break; case 3: sType = _T("PIDDisc-AuxiliaryFront"); break; case 4: sType = _T("PIDDisc-AuxiliaryBack"); break; } break; case 2: switch (nType) { case 0: sType = _T("PIDShared-Local"); break; case 1: sType = _T("PIDShared-PrimaryFront"); break; case 2: sType = _T("PIDShared-PrimaryBack"); break; case 3: sType = _T("PIDShared-AuxiliaryFront"); break; case 4: sType = _T("PIDShared-AuxiliaryBack"); break; } break; case 3: switch (nType) { case 0: sType = _T("PIDComputer-Local"); break; case 1: sType = _T("PIDComputer-PrimaryFront"); break; case 2: sType = _T("PIDComputer-PrimaryBack"); break; case 3: sType = _T("PIDComputer-AuxiliaryFront"); break; case 4: sType = _T("PIDComputer-AuxiliaryBack"); break; } break; case 4: switch (nType) { case 0: sType = _T("PIDLogic-Local"); break; case 1: sType = _T("PIDLogic-PrimaryFront"); break; case 2: sType = _T("PIDLogic-PrimaryBack"); break; case 3: sType = _T("PIDLogic-AuxiliaryFront"); break; case 4: sType = _T("PIDLogic-AuxiliaryBack"); break; } break; case 5: switch (nType) { case 0: sType = _T("PIDPilot-Local"); break; case 1: sType = _T("PIDPilot-PrimaryFront"); break; case 2: sType = _T("PIDPilot-AuxiliaryFront"); break; case 3: sType = _T(""); break; case 4: sType = _T(""); break; } break; } } else { return 1; } int isuccess = KTPIDUtility::CreatePolyLineALL(idLineType, idLayer, ptInsert, vDir, idPolyline); if (isuccess == 0) { if (idPolyline != AcDbObjectId::kNull) { //将仪表线断开,断开距离为仪表泡的半径 vDir.normalize(); AcGePoint3d ptMid = ptInsert - vDir * dScale / 4; KTPIDUtility::BreakPIDPipe(idPolyline, ptMid, dScale / 2); } //将数据传入生成图形模块 CMapStringToString mapVarToValue; CString sValue = _T(""); sValue.Format(_T("%s"), sType); mapVarToValue.SetAt(_T("Code"), sValue); sValue.Format(_T("%s"), _T("仪表泡")); mapVarToValue.SetAt(_T("Class"), sValue); sValue.Format(_T("%s"), sTcontent); mapVarToValue.SetAt(_T("Tcontent"), sValue); sValue.Format(_T("%s"), sBcontent); mapVarToValue.SetAt(_T("Bcontent"), sValue); sValue.Format(_T("%s"), _T("0.25")); mapVarToValue.SetAt(_T("TxtH"), sValue); int iResult = KTCreateEntity(mapVarToValue, sType, dScale, ptInsert, FALSE, FALSE, FALSE, FALSE, FALSE); } else { return 1; } return 0; } } //命令代码区 //换热器 void PL_KTExchangeDouble() { CString sType=_T("PIDExc-DoubleEnd"); CString sClass =_T("换热器"); CEquAttribDlg dlg; GET_CACHE(%s%s%s%s, &dlg.m_sDes, &dlg.m_sName, &dlg.m_sTag, &dlg.m_sType); CreatePIDEqument(dlg, sType,sClass); SET_CACHE(%s%s%s%s, dlg.m_sDes, dlg.m_sName, dlg.m_sTag, dlg.m_sType); return; } void PL_KTExchangeDoubleEK() { CString sType=_T("PIDExc-DoubleEndKettle"); CString sClass =_T("换热器"); CEquAttribDlg dlg; GET_CACHE(%s%s%s%s, &dlg.m_sDes, &dlg.m_sName, &dlg.m_sTag, &dlg.m_sType); CreatePIDEqument(dlg, sType,sClass); return; } void PL_KTProcessFlow() { CString sType=_T("PIDExc-ProcessFlow"); CString sClass =_T("换热器"); CEquAttribDlg dlg; GET_CACHE(%s%s%s%s, &dlg.m_sDes, &dlg.m_sName, &dlg.m_sTag, &dlg.m_sType); CreatePIDEqument(dlg, sType,sClass); return; } void PL_KTSingleEnd() { CString sType=_T("PIDExc-SingleEnd"); CString sClass =_T("换热器"); CEquAttribDlg dlg; GET_CACHE(%s%s%s%s, &dlg.m_sDes, &dlg.m_sName, &dlg.m_sTag, &dlg.m_sType); CreatePIDEqument(dlg, sType,sClass); SET_CACHE(%s%s%s%s, dlg.m_sDes, dlg.m_sName, dlg.m_sTag, dlg.m_sType); return; } void PL_KTSingleEK() { CString sType=_T("PIDExc-SingleEndKettle"); CString sClass =_T("换热器"); CEquAttribDlg dlg; GET_CACHE(%s%s%s%s, &dlg.m_sDes, &dlg.m_sName, &dlg.m_sTag, &dlg.m_sType); CreatePIDEqument(dlg, sType,sClass); SET_CACHE(%s%s%s%s, dlg.m_sDes, dlg.m_sName, dlg.m_sTag, dlg.m_sType); return; } void PL_KTSuper() { CString sType=_T("PIDExc-Super"); CString sClass =_T("换热器"); CEquAttribDlg dlg; GET_CACHE(%s%s%s%s, &dlg.m_sDes, &dlg.m_sName, &dlg.m_sTag, &dlg.m_sType); CreatePIDEqument(dlg, sType,sClass); SET_CACHE(%s%s%s%s, dlg.m_sDes, dlg.m_sName, dlg.m_sTag, dlg.m_sType); return; } void PL_KTExcPipe() { CString sType=_T("PIDExc-Pipe"); CString sClass =_T("换热器"); CEquAttribDlg dlg; GET_CACHE(%s%s%s%s, &dlg.m_sDes, &dlg.m_sName, &dlg.m_sTag, &dlg.m_sType); CreatePIDEqument(dlg, sType,sClass); SET_CACHE(%s%s%s%s, dlg.m_sDes, dlg.m_sName, dlg.m_sTag, dlg.m_sType); return; } void PL_KTExcUPipe() { CString sType=_T("PIDExc-UPipe"); CString sClass =_T("换热器"); CEquAttribDlg dlg; GET_CACHE(%s%s%s%s, &dlg.m_sDes, &dlg.m_sName, &dlg.m_sTag, &dlg.m_sType); CreatePIDEqument(dlg, sType,sClass); SET_CACHE(%s%s%s%s, dlg.m_sDes, dlg.m_sName, dlg.m_sTag, dlg.m_sType); return; } //泵 void PL_KTCentrifuqal1() { CString sType=_T("PIDPump-Centrifuqal1"); CString sClass =_T("泵"); CEquAttribDlg dlg; GET_CACHE(%s%s%s%s, &dlg.m_sDes, &dlg.m_sName, &dlg.m_sTag, &dlg.m_sType); CreatePIDEqument(dlg, sType,sClass); SET_CACHE(%s%s%s%s, dlg.m_sDes, dlg.m_sName, dlg.m_sTag, dlg.m_sType); return; } void PL_KTCentrifuqal2() { CString sType=_T("PIDPump-Centrifuqal2"); CString sClass =_T("泵"); CEquAttribDlg dlg; GET_CACHE(%s%s%s%s, &dlg.m_sDes, &dlg.m_sName, &dlg.m_sTag, &dlg.m_sType); CreatePIDEqument(dlg, sType,sClass); SET_CACHE(%s%s%s%s, dlg.m_sDes, dlg.m_sName, dlg.m_sTag, dlg.m_sType); return; } void PL_KTDeep1() { CString sType=_T("PIDPump-Deep1"); CString sClass =_T("泵"); CEquAttribDlg dlg; GET_CACHE(%s%s%s%s, &dlg.m_sDes, &dlg.m_sName, &dlg.m_sTag, &dlg.m_sType); CreatePIDEqument(dlg, sType,sClass); SET_CACHE(%s%s%s%s, dlg.m_sDes, dlg.m_sName, dlg.m_sTag, dlg.m_sType); return; } void PL_KTDeep2() { CString sType=_T("PIDPump-Deep2"); CString sClass =_T("泵"); CEquAttribDlg dlg; GET_CACHE(%s%s%s%s, &dlg.m_sDes, &dlg.m_sName, &dlg.m_sTag, &dlg.m_sType); CreatePIDEqument(dlg, sType,sClass); SET_CACHE(%s%s%s%s, dlg.m_sDes, dlg.m_sName, dlg.m_sTag, dlg.m_sType); return; } void PL_KTDual() { CString sType=_T("PIDPump-Dual"); CString sClass =_T("泵"); CEquAttribDlg dlg; GET_CACHE(%s%s%s%s, &dlg.m_sDes, &dlg.m_sName, &dlg.m_sTag, &dlg.m_sType); CreatePIDEqument(dlg, sType,sClass); SET_CACHE(%s%s%s%s, dlg.m_sDes, dlg.m_sName, dlg.m_sTag, dlg.m_sType); return; } void PL_KTHoriz1() { CString sType=_T("PIDPump-Horiz1"); CString sClass =_T("泵"); CEquAttribDlg dlg; GET_CACHE(%s%s%s%s, &dlg.m_sDes, &dlg.m_sName, &dlg.m_sTag, &dlg.m_sType); CreatePIDEqument(dlg, sType,sClass); SET_CACHE(%s%s%s%s, dlg.m_sDes, dlg.m_sName, dlg.m_sTag, dlg.m_sType); return; } void PL_KTHoriz2() { CString sType=_T("PIDPump-Horiz2"); CString sClass =_T("泵"); CEquAttribDlg dlg; GET_CACHE(%s%s%s%s, &dlg.m_sDes, &dlg.m_sName, &dlg.m_sTag, &dlg.m_sType); CreatePIDEqument(dlg, sType,sClass); SET_CACHE(%s%s%s%s, dlg.m_sDes, dlg.m_sName, dlg.m_sTag, dlg.m_sType); return; } void PL_KTInline() { CString sType=_T("PIDPump-Inline"); CString sClass =_T("泵"); CEquAttribDlg dlg; GET_CACHE(%s%s%s%s, &dlg.m_sDes, &dlg.m_sName, &dlg.m_sTag, &dlg.m_sType); CreatePIDEqument(dlg, sType,sClass); SET_CACHE(%s%s%s%s, dlg.m_sDes, dlg.m_sName, dlg.m_sTag, dlg.m_sType); return; } void PL_KTRotary() { CString sType=_T("PIDPump-Rotary"); CString sClass =_T("泵"); CEquAttribDlg dlg; GET_CACHE(%s%s%s%s, &dlg.m_sDes, &dlg.m_sName, &dlg.m_sTag, &dlg.m_sType); CreatePIDEqument(dlg, sType,sClass); SET_CACHE(%s%s%s%s, dlg.m_sDes, dlg.m_sName, dlg.m_sTag, dlg.m_sType); return; } void PL_KTTurbine1() { CString sType=_T("PIDPump-Turbine1"); CString sClass =_T("泵"); CEquAttribDlg dlg; GET_CACHE(%s%s%s%s, &dlg.m_sDes, &dlg.m_sName, &dlg.m_sTag, &dlg.m_sType); CreatePIDEqument(dlg, sType,sClass); SET_CACHE(%s%s%s%s, dlg.m_sDes, dlg.m_sName, dlg.m_sTag, dlg.m_sType); return; } void PL_KTTurbine2() { CString sType=_T("PIDPump-Turbine2"); CString sClass =_T("泵"); CEquAttribDlg dlg; GET_CACHE(%s%s%s%s, &dlg.m_sDes, &dlg.m_sName, &dlg.m_sTag, &dlg.m_sType); CreatePIDEqument(dlg, sType,sClass); SET_CACHE(%s%s%s%s, dlg.m_sDes, dlg.m_sName, dlg.m_sTag, dlg.m_sType); return; } void PL_KTVacuum() { CString sType=_T("PIDPump-Vacuum"); CString sClass =_T("泵"); CEquAttribDlg dlg; GET_CACHE(%s%s%s%s, &dlg.m_sDes, &dlg.m_sName, &dlg.m_sTag, &dlg.m_sType); CreatePIDEqument(dlg, sType,sClass); SET_CACHE(%s%s%s%s, dlg.m_sDes, dlg.m_sName, dlg.m_sTag, dlg.m_sType); return; } void PL_KTPumpVert1() { CString sType=_T("PIDPump-Vert1"); CString sClass =_T("泵"); CEquAttribDlg dlg; GET_CACHE(%s%s%s%s, &dlg.m_sDes, &dlg.m_sName, &dlg.m_sTag, &dlg.m_sType); CreatePIDEqument(dlg, sType,sClass); SET_CACHE(%s%s%s%s, dlg.m_sDes, dlg.m_sName, dlg.m_sTag, dlg.m_sType); return; } void PL_KTPumpVert2() { CString sType=_T("PIDPump-Vert2"); CString sClass =_T("泵"); CEquAttribDlg dlg; GET_CACHE(%s%s%s%s, &dlg.m_sDes, &dlg.m_sName, &dlg.m_sTag, &dlg.m_sType); CreatePIDEqument(dlg, sType,sClass); SET_CACHE(%s%s%s%s, dlg.m_sDes, dlg.m_sName, dlg.m_sTag, dlg.m_sType); return; } //管嘴 void PL_KTPIDNozzle() { CString sType=_T(""); CString sClass =_T("管嘴"); CAcModuleResourceOverride myResources; CNozzleDlg CDlg; int nRes = CDlg.DoModal(); if(nRes == IDOK) { int nType =CDlg.m_iRadio; double dScale = CDlg.m_dScale; BOOL bScale = CDlg.m_bScale; switch(nType) { case 0: sType=_T("PIDNozzle1"); break; case 1: sType=_T("PIDNozzle2"); break; case 2: sType=_T("PIDNozzle3"); break; case 3: sType=_T("PIDNozzle4"); break; case 4: sType=_T("PIDNozzle5"); break; case 5: sType=_T("PIDNozzle6"); break; case 6: sType=_T("PIDNozzle7"); break; case 7: sType=_T("PIDNozzle8"); break; } //将数据传入生成图形模块 CMapStringToString mapVarToValue; CString sValue=_T(""); sValue.Format(_T("%s"),CDlg.m_sNozzleNO); mapVarToValue.SetAt(_T("Tag"), sValue); sValue.Format(_T("%s"),sType); mapVarToValue.SetAt(_T("Code"), sValue); sValue.Format(_T("%s"),sClass); mapVarToValue.SetAt(_T("Class"), sValue); if (bScale==TRUE) { AcGeVector3d vt; AcGePoint3d ptBase; int iResult = KTCreateEntity(mapVarToValue,sType,dScale,vt,ptBase,FALSE,TRUE,TRUE,FALSE,TRUE); AcDbObjectId id = NULL; BOOL nOK = KTPIDUtility::GetPipeID(ptBase,id); if (nOK == TRUE) { AcGePoint3d ptInsert = ptBase + vt*dScale/2; KTPIDUtility::BreakPIDPipe(id,ptInsert,dScale); } } else { double dNozzleScale=1; double dNozzleRotate=0; AcGePoint3d ptBase; int iResult = KTCreateEntity(mapVarToValue,sType,ptBase,dNozzleScale,dNozzleRotate,FALSE,TRUE,TRUE,TRUE,TRUE); AcDbObjectId id = NULL; BOOL nOK = KTPIDUtility::GetPipeID(ptBase,id); if (nOK == TRUE) { AcGeVector3d vt; vt = AcGeVector3d::kXAxis; vt.rotateBy(dNozzleRotate,AcGeVector3d::kZAxis); vt.normalize(); AcGePoint3d ptInsert = ptBase + vt*dNozzleScale/2; KTPIDUtility::BreakPIDPipe(id,ptInsert,dNozzleScale); } } } return; } //Stove void PL_KTPIDSTV1() { CString sType=_T("PIDSTV-1"); CString sClass =_T("工业炉"); CEquAttribDlg dlg; GET_CACHE(%s%s%s%s, &dlg.m_sDes, &dlg.m_sName, &dlg.m_sTag, &dlg.m_sType); CreatePIDEqument(dlg, sType,sClass); SET_CACHE(%s%s%s%s, dlg.m_sDes, dlg.m_sName, dlg.m_sTag, dlg.m_sType); return; } void PL_KTPIDSTV2() { CString sType=_T("PIDSTV-2"); CString sClass =_T("工业炉"); CEquAttribDlg dlg; GET_CACHE(%s%s%s%s, &dlg.m_sDes, &dlg.m_sName, &dlg.m_sTag, &dlg.m_sType); CreatePIDEqument(dlg, sType,sClass); SET_CACHE(%s%s%s%s, dlg.m_sDes, dlg.m_sName, dlg.m_sTag, dlg.m_sType); return; } //Rector void PL_KTOnPIDR1() { CString sType=_T("PIDR-1"); CString sClass =_T("反应釜"); CEquAttribDlg dlg; GET_CACHE(%s%s%s%s, &dlg.m_sDes, &dlg.m_sName, &dlg.m_sTag, &dlg.m_sType); CreatePIDEqument(dlg, sType,sClass); SET_CACHE(%s%s%s%s, dlg.m_sDes, dlg.m_sName, dlg.m_sTag, dlg.m_sType); return; } void PL_KTOnPIDR2() { CString sType=_T("PIDR-2"); CString sClass =_T("反应釜"); CEquAttribDlg dlg; GET_CACHE(%s%s%s%s, &dlg.m_sDes, &dlg.m_sName, &dlg.m_sTag, &dlg.m_sType); CreatePIDEqument(dlg, sType,sClass); SET_CACHE(%s%s%s%s, dlg.m_sDes, dlg.m_sName, dlg.m_sTag, dlg.m_sType); return; } void PL_KTOnPIDR3() { CString sType=_T("PIDR-3"); CString sClass =_T("反应釜"); CEquAttribDlg dlg; GET_CACHE(%s%s%s%s, &dlg.m_sDes, &dlg.m_sName, &dlg.m_sTag, &dlg.m_sType); CreatePIDEqument(dlg, sType,sClass); SET_CACHE(%s%s%s%s, dlg.m_sDes, dlg.m_sName, dlg.m_sTag, dlg.m_sType); return; } void PL_KTOnPIDR4() { CString sType=_T("PIDR-4"); CString sClass =_T("反应釜"); CEquAttribDlg dlg; GET_CACHE(%s%s%s%s, &dlg.m_sDes, &dlg.m_sName, &dlg.m_sTag, &dlg.m_sType); CreatePIDEqument(dlg, sType,sClass); SET_CACHE(%s%s%s%s, dlg.m_sDes, dlg.m_sName, dlg.m_sTag, dlg.m_sType); return; } //Compressor void PL_KTPIDCompressor1() { CString sType=_T("PIDCompressor-fan1"); CString sClass =_T("压缩机"); CEquAttribDlg dlg; GET_CACHE(%s%s%s%s, &dlg.m_sDes, &dlg.m_sName, &dlg.m_sTag, &dlg.m_sType); CreatePIDEqument(dlg, sType,sClass); SET_CACHE(%s%s%s%s, dlg.m_sDes, dlg.m_sName, dlg.m_sTag, dlg.m_sType); return; } void PL_KTPIDCompressor2() { CString sType=_T("PIDCompressor-fan2"); CString sClass =_T("压缩机"); CEquAttribDlg dlg; GET_CACHE(%s%s%s%s, &dlg.m_sDes, &dlg.m_sName, &dlg.m_sTag, &dlg.m_sType); CreatePIDEqument(dlg, sType,sClass); SET_CACHE(%s%s%s%s, dlg.m_sDes, dlg.m_sName, dlg.m_sTag, dlg.m_sType); return; } //Flow dirction arrow void PL_KTPIDFDA() { if (!CoreTools::hasCSSZ(true)) return; CString sType=_T(""); CString sClass =_T("流向箭头"); CAcModuleResourceOverride myResources; CArrowDlg CDlg; GET_CACHE(%d%f%d%s%s , &CDlg.m_iRadio , &CDlg.m_dScale , &CDlg.m_bScale , &CDlg.m_sDwgNo , &CDlg.m_sPipeNo); double dScale = 1; //获取初始化数据 AecDbObjXDataMap xDataMap; PIDLineTools::ReSetPID(xDataMap); if (!KTModelLayoutXData::ReadModelXData(KT_PIPEINIT, xDataMap)) { acutPrintf(_T("\n系统没有初始化!")); return; } xDataMap.GetAt(DOC_CONSIGN, dScale); //// if (!CDlg.m_bScale) CDlg.m_dScale = dScale; int nRes = CDlg.DoModal(); if(nRes == IDOK) { SET_CACHE(%d%f%d%s%s , CDlg.m_iRadio , CDlg.m_dScale , CDlg.m_bScale ? 1 : 0 , CDlg.m_sDwgNo , CDlg.m_sPipeNo); int nType = CDlg.m_iRadio; dScale = CDlg.m_dScale; BOOL bScale = CDlg.m_bScale; CString sPipeNo = CDlg.m_sPipeNo; CString sDwgNo = CDlg.m_sDwgNo; double dAngle = PI; switch(nType) { case 0: sType=_T("PIDArrow1"); dAngle = PI; break; case 1: sType=_T("PIDArrow2"); dAngle = 0; break; case 2: sType=_T("PIDArrow3"); dAngle = PI; break; case 3: sType=_T("PIDArrow4"); dAngle = 0; break; case 4: sType=_T("PIDArrow5"); dAngle = PI; break; case 5: sType=_T("PIDArrow6"); dAngle = 0; break; case 6: sType=_T("PIDArrow7"); dAngle = PI; break; case 7: sType=_T("PIDArrow8"); dAngle = 0; break; case 8: sType=_T("PIDArrow9"); dAngle = PI; break; case 9: sType=_T("PIDArrow10"); dAngle = 0; break; } //将数据传入生成图形模块 CMapStringToString mapVarToValue; CString sValue=_T(""); sValue.Format(_T("%s"),sType); mapVarToValue.SetAt(_T("Code"), sValue); sValue.Format(_T("%s"),sClass); mapVarToValue.SetAt(_T("Class"), sValue); sValue.Format(_T("%s"),sPipeNo); mapVarToValue.SetAt(_T("PipeNo"), sValue); sValue.Format(_T("%s"),sDwgNo); mapVarToValue.SetAt(_T("DwgNo"), sValue); if (bScale==TRUE) { AcGeVector3d vt; AcGePoint3d ptBase; int iResult = KTCreateEntity(mapVarToValue,sType,dScale,vt,ptBase,dAngle,FALSE,TRUE,TRUE,FALSE,TRUE); AcDbObjectId id = NULL; BOOL nOK = KTPIDUtility::GetPipeID(ptBase,id); if (nOK == TRUE) { AcGePoint3d ptInsert = ptBase + vt*dScale/2; KTPIDUtility::BreakPIDPipe(id,ptInsert,dScale); } } else { double dNozzleScale=1; double dNozzleRotate=0; AcGePoint3d ptBase; int iResult = KTCreateEntity(mapVarToValue,sType,ptBase,dNozzleScale,dNozzleRotate,dAngle,FALSE,TRUE,TRUE,TRUE,TRUE); AcDbObjectId id = NULL; BOOL nOK = KTPIDUtility::GetPipeID(ptBase,id); if (nOK == TRUE) { AcGeVector3d vt; vt = AcGeVector3d::kXAxis; vt.rotateBy(dNozzleRotate,AcGeVector3d::kZAxis); vt.normalize(); AcGePoint3d ptInsert = ptBase + vt*dNozzleScale/2; KTPIDUtility::BreakPIDPipe(id,ptInsert,dNozzleScale); } } } return; } //Instrument Bubble void PL_KTDiscBubble() { if (!CoreTools::hasCSSZ(true)) return; //获取初始化数据 AecDbObjXDataMap xDataMap; PIDLineTools::ReSetPID(xDataMap); if (!KTModelLayoutXData::ReadModelXData(KT_PIPEINIT, xDataMap)) { acutPrintf(_T("\n系统没有初始化!")); return; } CString sContent = _T("12"); xDataMap.GetAt(DOC_PIDINSRDN, sContent); CInstBubbleDlg dlg; dlg.m_dR = _ttof(sContent); GET_CACHE(%s%s%f%d%d, &dlg.m_sBContent, &dlg.m_sTContent, &dlg.m_dR, &dlg.m_iRadio, &dlg.m_nLineType); CreateBubble(dlg, 1); SET_CACHE(%s%s%f%d%d, dlg.m_sBContent, dlg.m_sTContent, dlg.m_dR, dlg.m_iRadio, dlg.m_nLineType); return; } //Shared void PL_KTSharedBubble() { if (!CoreTools::hasCSSZ(true)) return; //获取初始化数据 AecDbObjXDataMap xDataMap; PIDLineTools::ReSetPID(xDataMap); if (!KTModelLayoutXData::ReadModelXData(KT_PIPEINIT, xDataMap)) { acutPrintf(_T("\n系统没有初始化!")); return; } CString sContent = _T("12"); xDataMap.GetAt(DOC_PIDINSRDN, sContent); CInstBubbleDlg dlg; dlg.m_dR = _ttof(sContent); GET_CACHE(%s%s%f%d%d, &dlg.m_sBContent, &dlg.m_sTContent, &dlg.m_dR, &dlg.m_iRadio, &dlg.m_nLineType); CreateBubble(dlg, 2); SET_CACHE(%s%s%f%d%d, dlg.m_sBContent, dlg.m_sTContent, dlg.m_dR, dlg.m_iRadio, dlg.m_nLineType); return; } void PL_KTComputerBubble() { if (!CoreTools::hasCSSZ(true)) return; //获取初始化数据 AecDbObjXDataMap xDataMap; PIDLineTools::ReSetPID(xDataMap); if (!KTModelLayoutXData::ReadModelXData(KT_PIPEINIT, xDataMap)) { acutPrintf(_T("\n系统没有初始化!")); return; } CString sContent = _T("12"); xDataMap.GetAt(DOC_PIDINSRDN, sContent); CInstBubbleDlg dlg; dlg.m_dR = _ttof(sContent); GET_CACHE(%s%s%f%d%d, &dlg.m_sBContent, &dlg.m_sTContent, &dlg.m_dR, &dlg.m_iRadio, &dlg.m_nLineType); CreateBubble(dlg, 3); SET_CACHE(%s%s%f%d%d, dlg.m_sBContent, dlg.m_sTContent, dlg.m_dR, dlg.m_iRadio, dlg.m_nLineType); return; } void PL_KTLogicBubble() { if (!CoreTools::hasCSSZ(true)) return; //获取初始化数据 AecDbObjXDataMap xDataMap; PIDLineTools::ReSetPID(xDataMap); if (!KTModelLayoutXData::ReadModelXData(KT_PIPEINIT, xDataMap)) { acutPrintf(_T("\n系统没有初始化!")); return; } CString sContent = _T("12"); xDataMap.GetAt(DOC_PIDINSRDN, sContent); CInstBubbleDlg dlg; dlg.m_dR = _ttof(sContent); GET_CACHE(%s%s%f%d%d, &dlg.m_sBContent, &dlg.m_sTContent, &dlg.m_dR, &dlg.m_iRadio, &dlg.m_nLineType); CreateBubble(dlg, 4); SET_CACHE(%s%s%f%d%d, dlg.m_sBContent, dlg.m_sTContent, dlg.m_dR, dlg.m_iRadio, dlg.m_nLineType); return; } void PL_KTPilotBubble() { if (!CoreTools::hasCSSZ(true)) return; //获取初始化数据 AecDbObjXDataMap xDataMap; PIDLineTools::ReSetPID(xDataMap); if (!KTModelLayoutXData::ReadModelXData(KT_PIPEINIT, xDataMap)) { acutPrintf(_T("\n系统没有初始化!")); return; } CString sContent = _T("12"); xDataMap.GetAt(DOC_PIDINSRDN, sContent); CInstBubbleDlg dlg; dlg.m_dR = _ttof(sContent); GET_CACHE(%s%s%f%d%d, &dlg.m_sBContent, &dlg.m_sTContent, &dlg.m_dR, &dlg.m_iRadio, &dlg.m_nLineType); CreateBubble(dlg, 5); SET_CACHE(%s%s%f%d%d, dlg.m_sBContent, dlg.m_sTContent, dlg.m_dR, dlg.m_iRadio, dlg.m_nLineType); return; } //PID Arrow void PL_KTPIDSArrow() { if (!CoreTools::hasCSSZ(true)) return; //read init data arrow Lenght double dArrowLen = 2; //获取初始化数据 AecDbObjXDataMap xDataMap; PIDLineTools::ReSetPID(xDataMap); if (!KTModelLayoutXData::ReadModelXData(KT_PIPEINIT, xDataMap)) { acutPrintf(_T("\n系统没有初始化!")); return; } xDataMap.GetAt(DOC_PIDSARROW, dArrowLen); double dScale = 1.0; CString sScale; xDataMap.GetAt(DOC_SCALE, sScale); //出图比例 int nPos = sScale.Find(_T(':')); if (nPos != -1) { dScale = _ttof(sScale.Mid(nPos + 1)); } dArrowLen *= dScale; CMapStringToString mapVarToValue; CString sType=_T("PIDArrow"); int iResult = KTCreateEntity(mapVarToValue,sType,dArrowLen,FALSE,TRUE,TRUE,FALSE,TRUE); return; } void PL_KTPIDMArrow() { if (!CoreTools::hasCSSZ(true)) return; double dArrowLen = 3; //获取初始化数据 AecDbObjXDataMap xDataMap; PIDLineTools::ReSetPID(xDataMap); if (!KTModelLayoutXData::ReadModelXData(KT_PIPEINIT, xDataMap)) { acutPrintf(_T("\n系统没有初始化!")); return; } xDataMap.GetAt(DOC_PIDMARROW, dArrowLen); double dScale = 1.0; CString sScale; xDataMap.GetAt(DOC_SCALE, sScale); //出图比例 int nPos = sScale.Find(_T(':')); if (nPos != -1) { dScale = _ttof(sScale.Mid(nPos + 1)); } dArrowLen *= dScale; CMapStringToString mapVarToValue; CString sType=_T("PIDArrow"); int iResult = KTCreateEntity(mapVarToValue,sType,dArrowLen,FALSE,TRUE,TRUE,FALSE,TRUE); return; } void PL_KTPIDLArrow() { if (!CoreTools::hasCSSZ(true)) return; double dArrowLen = 5; //获取初始化数据 AecDbObjXDataMap xDataMap; PIDLineTools::ReSetPID(xDataMap); if (!KTModelLayoutXData::ReadModelXData(KT_PIPEINIT, xDataMap)) { acutPrintf(_T("\n系统没有初始化!")); return; } xDataMap.GetAt(DOC_PIDBARROW, dArrowLen); double dScale = 1.0; CString sScale; xDataMap.GetAt(DOC_SCALE, sScale); //出图比例 int nPos = sScale.Find(_T(':')); if (nPos != -1) { dScale = _ttof(sScale.Mid(nPos + 1)); } dArrowLen *= dScale; CMapStringToString mapVarToValue; CString sType=_T("PIDArrow"); int iResult = KTCreateEntity(mapVarToValue,sType,dArrowLen,FALSE,TRUE,TRUE,FALSE,TRUE); return; } void PL_KTPIDOUTArrow() { double dArrowLen = 5; CMapStringToString mapVarToValue; CString sType=_T("PIDArrow-out"); //获取初始化数据 /*AecDbObjXDataMap xDataMap; PIDLineTools::ReSetPID(xDataMap); if (!KTModelLayoutXData::ReadModelXData(KT_PIPEINIT, xDataMap)) { acutPrintf(_T("\n系统没有初始化!")); return; } double dScale = 1.0; CString sScale; xDataMap.GetAt(DOC_SCALE, sScale); //出图比例 int nPos = sScale.Find(_T(':')); if (nPos != -1) { dScale = _ttof(sScale.Mid(nPos + 1)); } dArrowLen *= dScale;*/ int iResult = KTCreateEntity(mapVarToValue,sType,dArrowLen,FALSE,TRUE,TRUE,TRUE,TRUE); return; } //自定义设备 void PL_KTPIDUserdefine() { CAcModuleResourceOverride myResources; CEquAttribDlg CDlg; int nRes = CDlg.DoModal(); if(nRes == IDOK)//如果点了确定按钮 { // CMapStringToString mapVarToValue; CString sValue=_T(""); CString sType=_T("PID-MaterialPoint"); sValue.Format(_T("%s"),CDlg.m_sTag); mapVarToValue.SetAt(_T("Tag"), sValue); sValue.Format(_T("%s"),CDlg.m_sName); mapVarToValue.SetAt(_T("Name"), sValue); sValue.Format(_T("%s"),CDlg.m_sType); mapVarToValue.SetAt(_T("Type"), sValue); sValue.Format(_T("%s"),CDlg.m_sDes); mapVarToValue.SetAt(_T("Des"), sValue); sValue.Format(_T("%s"),sType); mapVarToValue.SetAt(_T("Code"), sValue); sValue.Format(_T("%s"),_T("自定义设备")); mapVarToValue.SetAt(_T("Class"), sValue); int iResult = KTCreateEntity(mapVarToValue,sType,FALSE,FALSE,TRUE,FALSE,FALSE); //选择图形实体并编组 ads_name adsSS; ads_name adsobjName; Adesk::Int32 lsslength; AcDbObjectId objectID = AcDbObjectId::kNull; AcDbObjectIdArray IdArray; IdArray.setLogicalLength(0); //构建选择集 if(acedSSGet(NULL,NULL,NULL,NULL,adsSS)!=RTNORM) { return; } acedSSLength(adsSS,&lsslength); for (long i=0;inewIterator(); AecDbObjXDataMap objXData; for(;!pIter->done();pIter->next()) { idTemp = pIter->objectId(); if (objXData.Read(idTemp,_T("KTParamPart"))) { objXData.GetAt(_T("点类型"),sContent); if (sContent.CompareNoCase(_T("材料点"))==0) { objXData.GetAt(_T("名称"),sContent); if (sContent.CompareNoCase(_T("设备"))==0) { idTip = idTemp; break; } } } } delete pIter; pGroup->close(); } if (Acad::eOk == (es = acdbOpenAcDbEntity(pEnt, idTip, AcDb::kForRead))) { //验证扩展数据是管子中心线 AecDbObjXDataMap objXData; if (objXData.Read(pEnt,_T("KTParamPart"))) { objXData.GetAt(_T("设备位号"),sContent); CDlg.m_sTag = sContent; objXData.GetAt(_T("设备名称"),sContent); CDlg.m_sName = sContent; objXData.GetAt(_T("设备规格"),sContent); CDlg.m_sType = sContent; objXData.GetAt(_T("设备描述"),sContent); CDlg.m_sDes = sContent; } pEnt->close(); } nRes = CDlg.DoModal(); if(nRes == IDOK) { CreateDimText(CDlg.m_sTag,CDlg.m_sName,CDlg.m_sType,CDlg.m_sDes); } return; } //烟囱 void PL_KTPIDCHIMNEY() { CMapStringToString mapVarToValue; CString sValue=_T(""); CString sType=_T("PID-Chimney"); sValue.Format(_T("%s"),_T("烟囱")); mapVarToValue.SetAt(_T("Name"), sValue); sValue.Format(_T("%s"),sType); mapVarToValue.SetAt(_T("Code"), sValue); int iResult = KTCreateEntity(mapVarToValue,sType,FALSE,TRUE,TRUE,TRUE,FALSE); return; } //火炬 void PL_KTPIDTORCH() { CMapStringToString mapVarToValue; CString sValue=_T(""); CString sType=_T("PID-Torch"); sValue.Format(_T("%s"),_T("火炬")); mapVarToValue.SetAt(_T("Name"), sValue); sValue.Format(_T("%s"),sType); mapVarToValue.SetAt(_T("Code"), sValue); int iResult = KTCreateEntity(mapVarToValue,sType,FALSE,TRUE,TRUE,TRUE,FALSE); return; } //管嘴标注 void PL_KTPIDNozzleDim() { //选择 ads_name EntName; AcDbObjectId idEnt = AcDbObjectId::kNull; AcDbObjectId idGroup = AcDbObjectId::kNull; AcDbObjectId idTemp = AcDbObjectId::kNull; AcDbObjectId idTip = AcDbObjectId::kNull; Acad::ErrorStatus es; AcDbEntity* pEnt = NULL; CString sContent=_T(""); CAcModuleResourceOverride myResources; CEquAttribDlg CDlg; AcGePoint3d ptBase; int nRes=acedEntSel(_T("\n选择设备:"),EntName,asDblArray(ptBase)); if(nRes!=RTNORM) { return; } acdbGetObjectId(idEnt,EntName); if (idEnt == AcDbObjectId::kNull) { acedAlert(_T("\n选择设备")); return; } // 通过组ID获得物体中材料点的信息 idGroup = GetGroupId(idEnt); if (idGroup !=AcDbObjectId::kNull) { AcDbGroup* pGroup = NULL; acdbOpenObject(pGroup,idGroup,AcDb::kForRead); AcDbGroupIterator* pIter = pGroup->newIterator(); AecDbObjXDataMap objXData; for(;!pIter->done();pIter->next()) { idTemp = pIter->objectId(); if (objXData.Read(idTemp,_T("KTParamPart"))) { objXData.GetAt(_T("点类型"),sContent); if (sContent.CompareNoCase(_T("材料点"))==0) { objXData.GetAt(_T("名称"),sContent); if (sContent.CompareNoCase(_T("设备"))==0) { idTip = idTemp; break; } } } } delete pIter; pGroup->close(); } if (Acad::eOk == (es = acdbOpenAcDbEntity(pEnt, idTip, AcDb::kForRead))) { //验证扩展数据是管子中心线 AecDbObjXDataMap objXData; if (objXData.Read(pEnt,_T("KTParamPart"))) { objXData.GetAt(_T("设备位号"),sContent); } pEnt->close(); } if (sContent!=_T("")) { CreateDimText(sContent); } return; } void PL_KTPIDREPORT() { CAcModuleResourceOverride myResources; CLineNumDlg Dlg; CUIISQLiteServer sqlDb; CString dbPath = FilePath::GetSysDir(); dbPath += _T("\\Plumbing.db"); if (!sqlDb.InitADOServer(dbPath)) { acutPrintf(_T("\n系统数据库环境没有初始化!")); return; } Dlg.SetADOServer(&sqlDb); int nRet = Dlg.DoModal(); return; } void PL_KTPIDSPEC1() { GetKTParamService()->InitService(); CAcModuleResourceOverride myResources; CSpecJumpDlg CDlg; int nRes = CDlg.DoModal(); if(nRes == IDOK) { //将数据传入生成图形模块 CMapStringToString mapVarToValue; CString sValue=_T(""); CString sType=_T("PIDSpecJump1"); sValue.Format(_T("%s"),CDlg.m_sSpecLeft); mapVarToValue.SetAt(_T("SpecLeft"), sValue); sValue.Format(_T("%s"),CDlg.m_sSpecRight); mapVarToValue.SetAt(_T("SpecRight"), sValue); int iResult = KTCreateEntity(mapVarToValue,sType,FALSE,FALSE,TRUE,TRUE,TRUE); } return; } void PL_KTPIDSPEC2() { GetKTParamService()->InitService(); CAcModuleResourceOverride myResources; CSpecJumpDlg CDlg; int nRes = CDlg.DoModal(); if(nRes == IDOK) { //将数据传入生成图形模块 CMapStringToString mapVarToValue; CString sValue=_T(""); CString sType=_T("PIDSpecJump2"); sValue.Format(_T("%s"),CDlg.m_sSpecLeft); mapVarToValue.SetAt(_T("SpecLeft"), sValue); sValue.Format(_T("%s"),CDlg.m_sSpecRight); mapVarToValue.SetAt(_T("SpecRight"), sValue); int iResult = KTCreateEntity(mapVarToValue,sType,FALSE,FALSE,TRUE,TRUE,TRUE); } return; } //Center Reducer void PL_KTPIDCRD() { if (!CoreTools::hasCSSZ(true)) return; CUIISQLiteServer sqlDb; CString dbPath = FilePath::GetSysDir(); dbPath += _T("\\Plumbing.db"); if (!sqlDb.InitADOServer(dbPath)) { acutPrintf(_T("\n系统数据库环境没有初始化!")); return; } //获取初始化数据 AecDbObjXDataMap xDataMap; PIDLineTools::ReSetPID(xDataMap); if (!KTModelLayoutXData::ReadModelXData(KT_PIPEINIT, xDataMap)) { acutPrintf(_T("\n系统没有初始化!")); return; } CString sPro,sScale,sPipeW; xDataMap.GetAt(DOC_PIDPROJECT,sPro); xDataMap.GetAt(DOC_PIDMPIPE1W,sPipeW); xDataMap.GetAt(DOC_VALVESCALE,sScale); double dPipeW=_ttof(sPipeW); double dL=_ttof(sScale); int npipe=-1; AcDbObjectId id; AcGePoint3d ptGeOn1,pts,pte,ptEnd; CString sLineno=_T(""); CString sDn=_T(""); CString sSpec=_T(""); int nresult = acedGetPoint(NULL,_T("\n选择插入点:"),asDblArray(ptGeOn1)); if (nresult != RTNORM) return; BOOL nB = KTPIDUtility::FindPipeCen(ptGeOn1,id,npipe,dPipeW,pts,pte,sLineno,sDn,sSpec); //是管子dPipeW是线宽,npipe是单双线属性等 if (nB == FALSE) { acutPrintf(_T("未获得管道信息!")); return; } CAcModuleResourceOverride myResources; CReduerDlg dlg; dlg.m_nDn = _ttoi(sDn); dlg.m_sSpec = sSpec; dlg.m_sPipeNo = sLineno; dlg.m_dScale = _ttof(sScale); dlg.m_pADOServer = &sqlDb; int nRes = dlg.DoModal(); if(nRes == IDOK) { int nFlag = 0; nFlag = dlg.m_nFlag; CString sType =_T(""); CString sFittingType =_T(""); switch(dlg.m_nFlag) { case 0: sType=_T("PIDCRD"); sFittingType =_T("同心大小头"); break; case 1: sType=_T("PIDURD"); sFittingType =_T("底平偏心大小头"); break; case 2: sType=_T("PIDDRD"); sFittingType =_T("顶平偏心大小头"); break; case 3: sType=_T("PIDSRD"); sFittingType =_T("同心大小头"); break; } CString sDnStart = _T(""); CString sDnEnd = _T(""); sDnStart = dlg.sDnStart; sDnEnd = dlg.sDnEnd; double dScale = 1; dScale = dlg.m_dScale; //将数据传入生成图形模块 CMapStringToString mapVarToValue; mapVarToValue.SetAt(_T("Spec"), dlg.m_sSpec); mapVarToValue.SetAt(_T("Line"), dlg.m_sPipeNo); mapVarToValue.SetAt(_T("Tag"), _T("管件")); mapVarToValue.SetAt(_T("Type"),_T("异径管件")); mapVarToValue.SetAt(_T("Name"), sFittingType); mapVarToValue.SetAt(_T("DNS"),sDnStart); mapVarToValue.SetAt(_T("DNE"),sDnEnd); mapVarToValue.SetAt(_T("Scale"),sScale); AcGeVector3d vt; int iResult = KTCreateEntity(mapVarToValue,sType,ptGeOn1,vt,dScale,FALSE,TRUE,FALSE,FALSE,TRUE); AcGePoint3d ptInsert = ptGeOn1 + vt*dScale/2; KTPIDUtility::BreakPIDPipe(id,ptInsert,dScale); //修改后面的元件的公称直径 AcDbObjectIdArray arIDs; ads_name ent; ads_name ss; int nFount = -1; while(TRUE) { nRes = acedSSGet(NULL, NULL, NULL, NULL, ss); if (nRes == RTNONE ) { break; } if (nRes == RTCAN) { return; } if (nRes == RTNORM) { Adesk::Int32 lLen = 0; acedSSLength(ss,&lLen); for (int i = 0;i < lLen;i++) { acedSSName(ss,i,ent); if ( Acad::eOk == acdbGetObjectId(id,ent)) { if (!arIDs.find(id,nFount)) { arIDs.append(id); } } } acedSSFree(ss); } else { break; } } int nSize = 0; nSize = arIDs.length(); AecDbObjXDataMap objXData; if (nSize>0) { for (int i =0;iclose(); } } } return; } void PL_GYBBCmd() { CString sMtoexe, sMtoPath; sMtoPath = FilePath::GetSysDir(); sMtoexe = sMtoPath + _T("\\KTBOM.exe"); ::ShellExecute(acedGetAcadFrame()->m_hWnd, _T("open"), sMtoexe, NULL, sMtoPath, SW_SHOWNORMAL); }