274 lines
7.4 KiB
C++
274 lines
7.4 KiB
C++
#include "stdafx.h"
|
|
#include "AcDbObjectPtr.h"
|
|
#include "globalFunc.h"
|
|
#include "DbWell.h"
|
|
#include "Dbpipe.h"
|
|
#include "TBlockEdJig.h"
|
|
#include "InsHydrantDlg.h"
|
|
#include "layerdef.h"
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
extern AcDbObjectId InitLayer(const TCHAR *szLayer, BOOL bApplyChange = TRUE);
|
|
|
|
//***************************************************************************************************
|
|
// 室外消火栓
|
|
//***************************************************************************************************
|
|
|
|
void InsOutHydrant()
|
|
{
|
|
CString csDwb = g_csDwbPath + _T("TwtSys");
|
|
XString xsTmp, xsTmp2;
|
|
if (GlobalFunc::LoadDwbBlock(csDwb, _T("00000385"), xsTmp) != RTNORM)
|
|
return;
|
|
if (GlobalFunc::LoadDwbBlock(csDwb, _T("00000483"), xsTmp2) != RTNORM)
|
|
return;
|
|
g_Option::instance().g_csInsBlkName = (const TCHAR*)xsTmp;
|
|
|
|
CInsHydrantDlg dlg(acedGetAcadFrame());
|
|
{
|
|
CTemporaryResourceOverride vTemp;
|
|
dlg.Create(IDD_HYDRANT, acedGetAcadFrame());
|
|
}
|
|
|
|
dlg.ShowWindow(SW_SHOW);
|
|
acedGetAcadDwgView()->SetFocus();
|
|
|
|
|
|
XPoint ptIns;
|
|
InitLayer(LAY_EQUIP_HYDRANT);
|
|
xg_getvar(_T("VIEWCTR"), ptIns);
|
|
ptIns = GlobalFunc::Ucs2Wcs(ptIns);
|
|
|
|
BOOL bRotate(FALSE), bMirror(FALSE);
|
|
int nOsMode = 0;
|
|
double nScale = 1;
|
|
// if(g_bEquipByScale)
|
|
// nScale = 1;
|
|
nOsMode |= OS_INT | OS_NEA | OS_MID;
|
|
XPushVar<int> vOsMode(_T("OSMODE"), nOsMode);
|
|
while (1) {
|
|
dlg.UpdateData(TRUE);
|
|
if (dlg.m_iType == 0)
|
|
g_Option::instance().g_csInsBlkName = (const TCHAR*)xsTmp;
|
|
else
|
|
g_Option::instance().g_csInsBlkName = (const TCHAR*)xsTmp2;
|
|
TBlockEdJig jig(g_Option::instance().g_csInsBlkName, ptIns, 1);
|
|
|
|
jig.m_nSacle = nScale * (GlobalFunc::DocGetPScale() / 100);
|
|
jig.m_nSacleY = nScale * (GlobalFunc::DocGetPScale() / 100);
|
|
jig.m_bReversal = bMirror;
|
|
CString csPrompt, csRotate;
|
|
if (bRotate)
|
|
csRotate = _T("不旋转");
|
|
else
|
|
csRotate = _T("旋转");
|
|
csPrompt.Format(_T("\n请点取消火栓插入点{放大[E]/缩小[D]/左右翻转[F]/%s[R]}<完成>:"), csRotate);
|
|
jig.SetPrompt(csPrompt);
|
|
jig.SetKeyword(_T("E D F R W"));
|
|
int nKeyIndex = 0;
|
|
int ret = jig.DoIt(&nKeyIndex);
|
|
if (ret == RTKWORD) {
|
|
if (nKeyIndex == 0)
|
|
nScale += 0.5;
|
|
else if (nKeyIndex == 1 && nScale > 0.5)
|
|
nScale -= 0.5;
|
|
else if (nKeyIndex == 2)
|
|
bMirror = !bMirror;
|
|
else if (nKeyIndex == 3)
|
|
bRotate = !bRotate;
|
|
continue;
|
|
}
|
|
else if (ret != RTNORM)
|
|
break;
|
|
|
|
ptIns = jig.GetPickPoint();
|
|
|
|
double nElevation(0);
|
|
int iPipeIdx(0);
|
|
Entity entWire = GlobalFunc::GetPipeByPt(ptIns, nElevation, iPipeIdx);
|
|
if (!!entWire) {
|
|
XPoint ptPipe = GlobalFunc::Wcs2Ucs(ptIns);
|
|
XPoint ptPipe2;
|
|
while (1) {
|
|
if (ads_getpoint(ptPipe, _T("\n请点取管线下一点<直接布置>:"), ptPipe2) != RTNORM) {
|
|
ptIns = GlobalFunc::Ucs2Wcs(ptPipe);
|
|
break;
|
|
}
|
|
OPENOBJ_BEGIN(entWire, AcDb::kForRead, CDbPipe, pPipe);
|
|
if (pPipe) {
|
|
CDbPipe *pNewPipe = (CDbPipe *)pPipe->clone();
|
|
dlg.UpdateData(TRUE);
|
|
if (dlg.m_nDimNewPipe == 1 && pPipe->IsDrawLabel())
|
|
{
|
|
pNewPipe->EnableDrawLabel(FALSE);
|
|
}
|
|
pNewPipe->SetStartPoint(GlobalFunc::Ucs2Wcs(ptPipe));
|
|
pNewPipe->SetEndPoint(GlobalFunc::Ucs2Wcs(ptPipe2));
|
|
GlobalFunc::AddToCurrentSpace(pNewPipe, Adesk::kTrue);
|
|
}
|
|
OPENOBJ_END();
|
|
ptPipe = ptPipe2;
|
|
//TPipePerDocData *pData = GetCurPipeDocData();
|
|
//pData->ApplyUpdates();
|
|
|
|
}
|
|
if (!ptPipe2) {
|
|
XPoint ptS, ptE;
|
|
TPipeSys::SysType sysType;
|
|
OPENOBJ_BEGIN(entWire, AcDb::kForRead, CDbPipe, pPipe);
|
|
if (pPipe) {
|
|
sysType = pPipe->GetSysType();
|
|
ptS = pPipe->StartPoint();
|
|
ptE = pPipe->EndPoint();
|
|
}
|
|
OPENOBJ_END();
|
|
// XVector3D vectBase(ptE.x - ptS.x, ptE.y - ptS.y, 0);
|
|
// TDbPipeValve *pValve = new TDbPipeValve;
|
|
// pValve->SetBlock2d(\(g_Option::instance().g_csInsBlkName));
|
|
// pValve->SetLocation(ptIns);
|
|
// pValve->SetScale(nScale);
|
|
// pValve->SetYScale(nScale);
|
|
// pValve->setLayer(LAY_EQUIP_HYDRANT);
|
|
// pValve->setColor(AcCmColor()); //随层
|
|
// pValve->SetDirection(vectBase);
|
|
// pValve->SetQuadrant(1);
|
|
// pValve->SetSysType(sysType);
|
|
// GlobalFunc::AddToCurrentSpace(pValve, Adesk::kTrue);
|
|
double dAng = ads_angle(ptS, ptE);
|
|
CDbEquipment *pEquip = new CDbEquipment;
|
|
pEquip->SetBlock2d(GlobalFunc::GetBlkIdByName(g_Option::instance().g_csInsBlkName));
|
|
pEquip->SetHidePipe(TRUE);
|
|
pEquip->SetAngle(dAng);
|
|
pEquip->SetScale(nScale);
|
|
pEquip->MirrorByY(bMirror);
|
|
pEquip->setLayer(LAY_EQUIP_HYDRANT);
|
|
pEquip->setColor(AcCmColor()); //随层
|
|
pEquip->SetLocation(ptIns);
|
|
AcDbObjectId id = GlobalFunc::AddToCurrentSpace(pEquip, Adesk::kTrue);
|
|
|
|
continue;
|
|
}
|
|
}
|
|
|
|
CDbEquipment *pEquip = new CDbEquipment;
|
|
pEquip->SetBlock2d(GlobalFunc::GetBlkIdByName(g_Option::instance().g_csInsBlkName));
|
|
pEquip->SetHidePipe(TRUE);
|
|
pEquip->SetScale(nScale);
|
|
pEquip->MirrorByY(bMirror);
|
|
pEquip->setLayer(LAY_EQUIP_HYDRANT);
|
|
pEquip->setColor(AcCmColor()); //随层
|
|
pEquip->SetLocation(ptIns);
|
|
AcDbObjectId id = GlobalFunc::AddToCurrentSpace(pEquip, Adesk::kTrue);
|
|
if (bRotate) {
|
|
Entity entLast;
|
|
entLast.GetLast();
|
|
double nRotate(0);
|
|
entLast.Rotate(ptIns, &nRotate);
|
|
}
|
|
}
|
|
dlg.DestroyWindow();
|
|
}
|
|
|
|
|
|
|
|
|
|
int CInsHydrantDlg::m_iType = 0;
|
|
int CInsHydrantDlg::m_nDimNewPipe = 0;
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CInsHydrantDlg dialog
|
|
IMPLEMENT_DYNAMIC(CInsHydrantDlg, CModelessDialog)
|
|
|
|
|
|
CInsHydrantDlg::CInsHydrantDlg(CWnd* pParent /*=NULL*/)
|
|
: CModelessDialog(CInsHydrantDlg::IDD, pParent)
|
|
{
|
|
//{{AFX_DATA_INIT(CInsHydrantDlg)
|
|
//}}AFX_DATA_INIT
|
|
}
|
|
|
|
|
|
void CInsHydrantDlg::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CModelessDialog::DoDataExchange(pDX);
|
|
//{{AFX_DATA_MAP(CInsHydrantDlg)
|
|
DDX_Radio(pDX, IDC_RADIO_TYPE1, m_iType);
|
|
//}}AFX_DATA_MAP
|
|
DDX_Radio(pDX, IDC_RADIO_DIM, m_nDimNewPipe);
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CInsHydrantDlg, CModelessDialog)
|
|
//{{AFX_MSG_MAP(CInsHydrantDlg)
|
|
ON_WM_CLOSE()
|
|
ON_WM_PAINT()
|
|
ON_BN_CLICKED(IDC_RADIO_TYPE1, OnRadioType1)
|
|
ON_BN_CLICKED(IDC_RADIO_TYPE2, OnRadioType2)
|
|
//}}AFX_MSG_MAP
|
|
ON_BN_CLICKED(IDC_RADIO_DIM, &CInsHydrantDlg::OnBnClickedRadioDim)
|
|
ON_BN_CLICKED(IDC_RADIO_NODIM, &CInsHydrantDlg::OnBnClickedRadioNodim)
|
|
END_MESSAGE_MAP()
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CInsHydrantDlg message handlers
|
|
|
|
BOOL CInsHydrantDlg::OnInitDialog()
|
|
{
|
|
CModelessDialog::OnInitDialog();
|
|
|
|
return TRUE; // return TRUE unless you set the focus to a control
|
|
// EXCEPTION: OCX Property Pages should return FALSE
|
|
}
|
|
|
|
void CInsHydrantDlg::OnClose()
|
|
{
|
|
CModelessDialog::OnClose();
|
|
acedPostCommand(_T("\33\33"));
|
|
}
|
|
|
|
void CInsHydrantDlg::OnPaint()
|
|
{
|
|
CPaintDC dc(this); // device context for painting
|
|
OpenSlide();
|
|
}
|
|
|
|
void CInsHydrantDlg::OpenSlide()
|
|
{
|
|
UpdateData();
|
|
CWnd *pWnd = GetDlgItem(IDC_PREVIEW1);
|
|
CString csTmp;
|
|
if (m_iType == 0)
|
|
csTmp.Format(_T("TWTSYS(00000385)"));
|
|
else
|
|
csTmp.Format(_T("TWTSYS(00000483)"));
|
|
GlobalFunc::DrawSlide(csTmp, pWnd);
|
|
}
|
|
|
|
|
|
void CInsHydrantDlg::OnRadioType1()
|
|
{
|
|
OpenSlide();
|
|
GlobalFunc::PostCommand(_T("W "), false);
|
|
}
|
|
|
|
void CInsHydrantDlg::OnRadioType2()
|
|
{
|
|
OpenSlide();
|
|
GlobalFunc::PostCommand(_T("W "), false);
|
|
}
|
|
|
|
void CInsHydrantDlg::OnBnClickedRadioDim()
|
|
{
|
|
acedGetAcadDwgView()->SetFocus();
|
|
}
|
|
|
|
void CInsHydrantDlg::OnBnClickedRadioNodim()
|
|
{
|
|
acedGetAcadDwgView()->SetFocus();
|
|
}
|