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

260 lines
6.4 KiB
C++

#include "stdafx.h"
#include "PipeSettingFrameDlg.h"
#include "PipeWireMonitor.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////管线升降////////////////////////////////////////////////////
void CreatNewPipe(const TDbPipe *const &pPipe, const std::vector<AcGePoint3d> &vecPts)
{
std::vector<AcGePoint3d>::const_iterator it = vecPts.begin();
XPoint ptS = *it++, ptE;
for (; it != vecPts.end(); it++)
{
ptE = *it;
TDbPipe *pPipeNew = (TDbPipe *)pPipe->clone();
if (ptS.Distance2d(ptE) < 0.001)
{
pPipeNew->SetRadiusIn(0.0);
}
pPipeNew->SetStartPoint(ptS);
pPipeNew->SetEndPoint(ptE);
pPipeNew->ResetAllShip();
ptS = ptE;
AddToCurrentSpace(pPipeNew, Adesk::kTrue);
}
}
bool UpDownPipe(Entity entPipe, const AcGePoint3d pt1, const AcGePoint3d pt2)
{
double dDist = 0.0;
double dUnit = 1000;
if (DocGetMeterUnitDraw())
{
dUnit = 1.0;
}
OPENOBJ_BEGIN(entPipe, AcDb::kForWrite, TDbPipe, pPipe);
if(pPipe != NULL)
{
AcGePoint3d ptOnPipe1, ptOnPipe2, ptS, ptE;
ptS = pPipe->GetStartPoint();
ptE = pPipe->GetEndPoint();
pPipe->getClosestPointTo(pt1, ptOnPipe1);
pPipe->getClosestPointTo(pt2, ptOnPipe2);
double dElev = (ptOnPipe1.z + ptOnPipe2.z) / 2 / dUnit;
CString sText;
sText.Format(_T("\n请输入升降高差[当前管段管中心标高:%.3fm]:<退出>"), dElev);
while (true)
{
int nRet = ads_getreal(sText, &dDist);
if (nRet != RTNORM)
{
return false;
}
if (fabs(dDist) < 0.001)
{
ads_printf(_T("\n请正确输入升降高差!"));
}
else
{
break;
}
}
AcGePoint3d ptUp1 = ptOnPipe1;
ptUp1.z += (dDist * dUnit);
AcGePoint3d ptUp2 = ptOnPipe2;
ptUp2.z += (dDist * dUnit);
std::vector<AcGePoint3d> vecPts;
double d1 = ptS.distanceTo(ptOnPipe1);
double d2 = ptS.distanceTo(ptOnPipe2);
if (d1 - d2 > 0.0)
{
pPipe->SetEndPoint(ptOnPipe2);
vecPts.push_back(ptOnPipe2);
vecPts.push_back(ptUp2);
vecPts.push_back(ptUp1);
vecPts.push_back(ptOnPipe1);
}
else
{
pPipe->SetEndPoint(ptOnPipe1);
vecPts.push_back(ptOnPipe1);
vecPts.push_back(ptUp1);
vecPts.push_back(ptUp2);
vecPts.push_back(ptOnPipe2);
}
vecPts.push_back(ptE);
CreatNewPipe(pPipe, vecPts);
}
OPENOBJ_END();
return true;
}
void PipeWireUpDown()
{
RBList rbMask = ads_buildlist( -4, _T("<or"),
-4, _T("<and"), RTDXF0, _T("ATS_PIPE"), 8, _T("*"), -4, _T("and>"),
-4, _T("<and"), RTDXF0, _T("ATS_DOUBLELINEPIPE"), 8, _T("*"), -4, _T("and>"),
-4, _T("or>"), NULL);
Entity entSel, entSel2;
XPoint ptPick, ptPick2;
while(SelectEntity1(g_nCurPipeWidth*DocGetPScale(), _T("\n请选取水管上第一点<退出>:"), entSel, ptPick, rbMask) == RTNORM)
{
int nOsMode=0;
nOsMode |= OS_INT|OS_NEA;
XPushVar<int> vOsMode(_T("OSMODE"), nOsMode);
if(SelectEntity1(g_nCurPipeWidth*DocGetPScale(), _T("\n请选取该水管上第二点<退出>:"), entSel2, ptPick2, rbMask) != RTNORM)
return;
if (!(entSel == entSel2))
{
ads_printf(_T("\n两次点取的水管不一致,请重新点取!"));
continue;
}
ptPick = Ucs2Wcs(ptPick);
ptPick2 = Ucs2Wcs(ptPick2);
if (!UpDownPipe(entSel, ptPick, ptPick2))
{
return;
}
TPipePerDocData *pData = GetCurPipeDocData();
pData->ApplyUpdates();
}
}
/////////////////////////////////////////////////////end/////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL InvokeLineTypeMan()
{
RBList rbCmd=ads_buildlist(RTSTR, _T("ILineTypeMan"), NULL);
resbuf *rbRes=NULL;
if(ads_invoke(rbCmd, &rbRes)==RTNORM && rbRes) {
ads_relrb(rbRes);
return TRUE;
}
return FALSE;
}
extern TARCH_IMPEXP void InitLayers(BOOL bTrue);
CPipeSettingFrameDlg::CPipeSettingFrameDlg(CWnd* pParent /*=NULL*/)
: CDialog(CPipeSettingFrameDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CPipeSettingFrameDlg)
m_bCheckByLayer = FALSE;
m_bModify = FALSE;
//}}AFX_DATA_INIT
}
void CPipeSettingFrameDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CPipeSettingFrameDlg)
DDX_Control(pDX, IDC_TAB_PIPE_SET, m_tabPipeSet);
DDX_Check(pDX, IDC_CHECK_BYLAYER, m_bCheckByLayer);
DDX_Check(pDX, IDC_CHECK_MODIFY, m_bModify);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CPipeSettingFrameDlg, CDialog)
//{{AFX_MSG_MAP(CPipeSettingFrameDlg)
ON_NOTIFY(TCN_SELCHANGE, IDC_TAB_PIPE_SET, OnSelchangeTabPipeSet)
ON_BN_CLICKED(IDC_BUTTON_NEW, OnButtonNew)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
BOOL CPipeSettingFrameDlg::OnInitDialog()
{
CDialog::OnInitDialog();
//加载项目
m_tabPipeSet.InsertItem(0,_T("常用"));
m_tabPipeSet.InsertItem(1,_T("自定义"));
m_tabPipeSet.InsertItem(2,_T("中高区"));
m_normDlg.Create(IDD_PIPE_SET_CHILD1,&m_tabPipeSet);
m_defineDlg.Create(IDD_PIPE_SET_CHILD2,&m_tabPipeSet);
m_altDlg.Create(IDD_PIPE_SET_CHILD3,&m_tabPipeSet);
CRect rtTab;
m_tabPipeSet.GetClientRect(&rtTab);
rtTab.top += 20;
m_normDlg.MoveWindow(rtTab);
m_defineDlg.MoveWindow(rtTab);
m_altDlg.MoveWindow(rtTab);
m_normDlg.ShowWindow(SW_SHOW);
return TRUE;
}
void CPipeSettingFrameDlg::OnSelchangeTabPipeSet(NMHDR* pNMHDR, LRESULT* pResult)
{
int nCur = m_tabPipeSet.GetCurSel();
switch(nCur)
{
case 0:
m_normDlg.ShowWindow(SW_SHOW);
m_defineDlg.ShowWindow(SW_HIDE);
m_altDlg.ShowWindow(SW_HIDE);
break;
case 1:
m_normDlg.ShowWindow(SW_HIDE);
m_defineDlg.ShowWindow(SW_SHOW);
m_altDlg.ShowWindow(SW_HIDE);
break;
case 2:
m_normDlg.ShowWindow(SW_HIDE);
m_defineDlg.ShowWindow(SW_HIDE);
m_altDlg.ShowWindow(SW_SHOW);
break;
default:
break;
}
*pResult = 0;
}
void CPipeSettingFrameDlg::OnOK()
{
UpdateData();
m_normDlg.m_bModify = m_bModify;
m_defineDlg.m_bModify = m_bModify;
m_altDlg.m_bModify = m_bModify;
m_normDlg.m_bLineTypeByLayer = m_bCheckByLayer;
m_defineDlg.m_bLineTypeByLayer = m_bCheckByLayer;
m_altDlg.m_bLineTypeByLayer = m_bCheckByLayer;
m_normDlg.UpdateDlgData(FALSE);
m_defineDlg.UpdateDlgData(FALSE);
m_altDlg.UpdateDlgData(FALSE);
InitLayers(TRUE);
CDialog::OnOK();
}
void CPipeSettingFrameDlg::OnButtonNew()
{
InvokeLineTypeMan();
m_normDlg.ResetLineCombox();
m_defineDlg.ResetLineCombox();
m_altDlg.ResetLineCombox();
}