260 lines
6.4 KiB
C++
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();
|
|
}
|