Files
envi-code/SourceCode/Code2026/PIDLineCmd/pid_equ.cpp
T
gjm 164968b62e chore
把非utf8-bom编码的cpp/h文件改为 utf8 bom 编码, msvc识别utf8编码时,如果不是bom格式的,会使用当前cp_oem来解码.
2026-10-04 00:04:20 +08:00

2521 lines
61 KiB
C++

#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;i<lsslength;i++)
{
acedSSName(adsSS,i,adsobjName);
acdbGetObjectId(objectID,adsobjName);
IdArray.append(objectID);
}
acedSSFree(adsSS);
acedSSFree(adsobjName);
objectID=CKTCadUtility::CreateAcDbGroup(IdArray);
CreateDimText(CDlg.m_sTag,CDlg.m_sName,CDlg.m_sType,CDlg.m_sDes);
}
return;
}
//设备标注
void PL_KTPIDEquDim()
{
//选择
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);
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;i<nSize;i++)
{
id = arIDs.at(i);
if (objXData.Read(id,PIDPIPE_APP))
{
objXData.SetAt(PID_PIPE_DN,_ttoi(sDnEnd));
objXData.Write(id,PIDPIPE_APP);
}
if (objXData.Read(id,KTPARAMPART))
{
objXData.SetAt(_T("公称直径"),_ttoi(sDnEnd));
objXData.Write(id,KTPARAMPART);
}
}
}
}
return;
}
void PL_KTPIDINS()
{
//将数据传入生成图形模块
CMapStringToString mapVarToValue;
CString sValue=_T("");
CString sType=_T("PIDINS");
double dNozzleScale=1;
double dNozzleRotate=0;
AcGePoint3d ptBase;
double dAngle = 0;
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;
KTPIDUtility::BreakPIDPipe(id,ptInsert,dNozzleScale);
}
return;
}
void PL_KTPIDLINENOMO()
{
CUIISQLiteServer sqlDb;
CString dbPath = FilePath::GetSysDir();
dbPath += _T("\\Plumbing.db");
if (!sqlDb.InitADOServer(dbPath))
{
acutPrintf(_T("\n系统数据库环境没有初始化!"));
return;
}
CAcModuleResourceOverride myResource;
KTPipeLineNoDlg dlg;
dlg.m_pADOServer = &sqlDb;
int nRes = dlg.DoModal();
if(nRes == IDOK)
{
CString sLineNo = dlg.m_sPipeLineNo;
CString sMedia = dlg.m_sMedia;
CString sFullLineNo = _T("");
sFullLineNo.Format(_T("%s-%s"),sMedia,sLineNo);
//1.选择实体
ads_name ss;
ads_name ent;
int nFoundAt = -1;
Adesk::Int32 lLen = 0l;
AcDbObjectId id;
AcDbObjectIdArray arIDs;
struct resbuf* pRb = NULL;
pRb = acutBuildList(RTDXF0,_T("LINE,ARC,LWPOLYLINE,POINT"),NULL);
while(TRUE)
{
nRes = acedSSGet(_T("_:S"), NULL, NULL, pRb, ss);
if (nRes == RTNORM)
{
acedSSLength(ss,&lLen);
for (int i = 0;i < lLen;i++)
{
acedSSName(ss,i,ent);
if ( Acad::eOk == acdbGetObjectId(id,ent))
{
if (!arIDs.find(id,nFoundAt))
{
arIDs.append(id);
}
}
}
acedSSFree(ss);
}
else
{
break;
}
}
if (arIDs.length() == 0) return;
//2.更改管号
CString sOldLineNo;
AcDbEntity* pEnt = NULL;
for (int i = 0;i < arIDs.length();i++)
{
if (Acad::eOk == acdbOpenAcDbEntity(pEnt,arIDs.at(i),AcDb::kForWrite))
{
AecDbObjXDataMap xDataMap;
if (xDataMap.Read(pEnt,PIDPIPE_APP)) //是管线
{
if (xDataMap.GetAt(PIPE_LINENO,sOldLineNo))
{
//1.更改顺序号,介质,管号,spec
xDataMap.SetAt(PID_PIPE_NO,sLineNo);
xDataMap.SetAt(PID_PIPE_LINENO,sFullLineNo);
xDataMap.SetAt(PID_PIPE_MEDIA,sMedia);
xDataMap.Write(pEnt,PIDPIPE_APP);
}
}
else if (xDataMap.Read(pEnt,KTPARAMPART))//材料点
{
if (xDataMap.GetAt(PID_LINENO,sOldLineNo))
{
//1.更改顺序号,介质,管号,spec
xDataMap.SetAt(PID_LINENO,sFullLineNo);
xDataMap.Write(pEnt,KTPARAMPART);
}
}
pEnt->close();
}
}
}
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);
}