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

465 lines
12 KiB
C++

// EquipmentEditDlg.cpp : implementation file
//
#include "stdafx.h"
#include <DbEquipment.h>
#include "EquipmentEditDlg.h"
#include "SelectBlkDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
//***************************************************************************************************
// 编辑附件
//***************************************************************************************************
extern int EditSprinkler(AcDbObjectId id);
extern int EditHydrant(AcDbObjectId id);
extern int EditWaterBucket(AcDbObjectId id);
int EditEquipment(AcDbObjectId id)
{
if(!id)
return RTERROR;
if(IsSprinkler(id)){ //如果是喷头
return EditSprinkler(id);
}
if(IsHydrant(id)){
return EditHydrant(id);
}
//cet 2010.10.26 add 编辑雨水斗
ads_name name;
acdbGetAdsName(name, id);
CString str = ReadXdata(name, _T("WaterBucket"));
if (str == _T("1"))
{
return EditWaterBucket(id);
}
CString csSysBlk;
double nElevation(0), nScale(1), nRotate(0), nPipeLen(0), nNg(0), nBigQ(0);
BOOL bIsHidePipe(TRUE), bIsMirrorByX(FALSE), bIsMirrorByY(FALSE);
OPENOBJ_BEGIN(id, AcDb::kForRead, TDbEquipment, pEquip);
if(pEquip){
nScale = pEquip->GetScale();
nRotate = pEquip->GetAngle();
nElevation = pEquip->GetLocation().z;
bIsHidePipe = pEquip->IsHidePipe();
nPipeLen = pEquip->GetPipeLength();
bIsMirrorByX = pEquip->IsMirrorByX();
bIsMirrorByY = pEquip->IsMirrorByY();
nBigQ = pEquip->GetSpare();
if(nBigQ < 0.0001)
nBigQ = 0;
nNg = pEquip->GetDang();
csSysBlk = pEquip->GetSysBlock();
}
OPENOBJ_END();
CTemporaryResourceOverride vTemp;
CEquipmentEditDlg dlg;
dlg.m_bElevation = TRUE;
dlg.m_bHidePipe = TRUE;
dlg.m_bMirror = TRUE;
dlg.m_bNg = TRUE;
dlg.m_bPipeLen = TRUE;
dlg.m_bRotate = TRUE;
dlg.m_bScale = TRUE;
dlg.m_bBigQ = TRUE;
dlg.m_bIsHide = bIsHidePipe;
dlg.m_bMirrorX = bIsMirrorByX;
dlg.m_bMirrorY = bIsMirrorByY;
dlg.m_nRotate = Radian2Angle(nRotate);
dlg.m_nElevation = nElevation/1000;
dlg.m_nPipeLen = nPipeLen;
dlg.m_nScale = nScale;
dlg.m_nNg = nNg;
dlg.m_nQ = nBigQ;
dlg.m_csSysBlk = csSysBlk;
if(dlg.DoModal() != IDOK)
return 1;
OPENOBJ_BEGIN(id, AcDb::kForWrite, TDbEquipment, pEquip);
if(pEquip){
XPoint ptTmp = pEquip->GetLocation();
XPoint ptTmp4 = pEquip->GetInsert();
if(dlg.m_bElevation){
ptTmp4.z = dlg.m_nElevation*1000;
pEquip->SetInsert(ptTmp4);
ptTmp.z = dlg.m_nElevation*1000;
pEquip->SetLocation(ptTmp);
}
if(dlg.m_bHidePipe)
pEquip->SetHidePipe(dlg.m_bIsHide);
if(dlg.m_bNg)
pEquip->SetDang(dlg.m_nNg);
if(dlg.m_bBigQ)
pEquip->SetSpare(dlg.m_nQ);
if(dlg.m_bMirror){
pEquip->MirrorByX(dlg.m_bMirrorX);
pEquip->MirrorByY(dlg.m_bMirrorY);
}
if(dlg.m_bPipeLen)
pEquip->SetPipeLength(dlg.m_nPipeLen);
if(dlg.m_bRotate)
pEquip->SetAngle(dlg.m_nRotate / 180 * PI);
if(dlg.m_bSysBlk)
pEquip->SetSysBlock(dlg.m_csSysBlk);
if(dlg.m_bScale){
pEquip->SetScale(dlg.m_nScale);
pEquip->SetYScale(dlg.m_nScale);
// if(ptTmp != ptTmp4){//如果插入点不是接线点,要调整插入点。 sr remove 2007-11-29 系统消火栓接线点,插入点不是同一点
// AcDbExtents extents;
// pEquip->getGeomExtents(extents);
// AcGePoint3d pMax = extents.maxPoint();
// AcGePoint3d pMin = extents.minPoint();
// XPoint ptCen;
// ptCen[0] = (pMax[0] + pMin[0]) / 2;
// ptCen[1] = (pMax[1] + pMin[1]) / 2;
// ptCen[2] = 0;
// AcGeMatrix3d mat;
// mat.setToTranslation(AcGeVector3d(ptTmp[0] - ptCen[0], ptTmp[1] - ptCen[1], 0));
// ptTmp4.TransformBy(mat);
//
// pEquip->SetInsert(ptTmp4);
// }
}
}
OPENOBJ_END();
return 1;
}
//***************************************************************************************************
// 修改附件
//***************************************************************************************************
void EditEquipCmd()
{
RBList rbMask(RTDXF0, _T("ATS_EQUIPMENT"), 8, _T("*"), NULL);
PickSet ss(SS_FREE);
if(SelectEntities(_T("\n请选择要修改的给水附件或排水附件<退出>"), ss, rbMask) != RTNORM)
return;
long len = ss.Length();
if(len < 1)
return;
CString csSysBlk;
double nElevation(0), nScale(1), nRotate(0), nPipeLen(0), nNg(0), nBigQ(0);
BOOL bIsHidePipe(TRUE), bIsMirrorByX(FALSE), bIsMirrorByY(FALSE);
Entity ent = ss[0L];
OPENOBJ_BEGIN(ent, AcDb::kForRead, TDbEquipment, pEquip);
if(pEquip){
nScale = pEquip->GetScale();
nRotate = pEquip->GetAngle();
nElevation = pEquip->GetLocation().z;
bIsHidePipe = pEquip->IsHidePipe();
nPipeLen = pEquip->GetPipeLength();
bIsMirrorByX = pEquip->IsMirrorByX();
bIsMirrorByY = pEquip->IsMirrorByY();
nNg = pEquip->GetDang();
nBigQ = pEquip->GetSpare();
if(nBigQ < 0.00001)
nBigQ = 0;
csSysBlk = pEquip->GetSysBlock();
}
OPENOBJ_END();
CTemporaryResourceOverride vTemp;
CEquipmentEditDlg dlg;
dlg.m_bIsHide = bIsHidePipe;
dlg.m_bMirrorX = bIsMirrorByX;
dlg.m_bMirrorY = bIsMirrorByY;
dlg.m_nRotate = Radian2Angle(nRotate);
dlg.m_nElevation = nElevation/1000;
dlg.m_nPipeLen = nPipeLen;
dlg.m_nScale = nScale;
dlg.m_nNg = nNg;
dlg.m_nQ = nBigQ;
dlg.m_csSysBlk = csSysBlk;
if(dlg.DoModal() != IDOK)
return;
for(long i=0;i<len;i++){
Entity entTmp = ss[i];
OPENOBJ_BEGIN(entTmp, AcDb::kForWrite, TDbEquipment, pEquip);
if(pEquip){
if(dlg.m_bElevation){
XPoint ptTmp4 = pEquip->GetInsert();
ptTmp4.z = dlg.m_nElevation*1000;
pEquip->SetInsert(ptTmp4);
XPoint ptTmp = pEquip->GetLocation();
ptTmp.z = dlg.m_nElevation*1000;
pEquip->SetLocation(ptTmp);
}
if(dlg.m_bHidePipe)
pEquip->SetHidePipe(dlg.m_bIsHide);
if(dlg.m_bNg)
pEquip->SetDang(dlg.m_nNg);
if(dlg.m_bBigQ)
pEquip->SetSpare(dlg.m_nQ);
if(dlg.m_bMirror){
pEquip->MirrorByX(dlg.m_bMirrorX);
pEquip->MirrorByY(dlg.m_bMirrorY);
}
if(dlg.m_bPipeLen)
pEquip->SetPipeLength(dlg.m_nPipeLen);
if(dlg.m_bRotate)
pEquip->SetAngle(dlg.m_nRotate / 180 * PI);
if(dlg.m_bScale){
pEquip->SetScale(dlg.m_nScale);
pEquip->SetYScale(dlg.m_nScale);
}
if(dlg.m_bSysBlk)
pEquip->SetSysBlock(dlg.m_csSysBlk);
}
OPENOBJ_END();
}
}
/////////////////////////////////////////////////////////////////////////////
// CEquipmentEditDlg dialog
CEquipmentEditDlg::CEquipmentEditDlg(CWnd* pParent /*=NULL*/)
: CDialog(CEquipmentEditDlg::IDD, pParent), m_spinPipe(50)
{
//{{AFX_DATA_INIT(CEquipmentEditDlg)
m_bElevation = FALSE;
m_bHidePipe = FALSE;
m_bIsHide = FALSE;
m_bMirror = FALSE;
m_bPipeLen = FALSE;
m_bRotate = FALSE;
m_bScale = FALSE;
m_bMirrorX = FALSE;
m_bMirrorY = FALSE;
m_nElevation = 0.0;
m_nPipeLen = 0.0;
m_nRotate = 0.0;
m_nScale = 0.0;
m_bNg = FALSE;
m_nNg = 0.0;
m_bBigQ = FALSE;
m_nQ = 0.0;
m_bSysBlk = FALSE;
//}}AFX_DATA_INIT
}
void CEquipmentEditDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CEquipmentEditDlg)
DDX_Control(pDX, IDC_SPIN_PIPELEN, m_spinPipe);
DDX_Check(pDX, IDC_CHECK_ELEVATION2, m_bElevation);
DDX_Check(pDX, IDC_CHECK_HIDEPIPE, m_bHidePipe);
DDX_Check(pDX, IDC_CHECK_ISHIDE, m_bIsHide);
DDX_Check(pDX, IDC_CHECK_MIRROR, m_bMirror);
DDX_Check(pDX, IDC_CHECK_PIPELEN2, m_bPipeLen);
DDX_Check(pDX, IDC_CHECK_ROTATE, m_bRotate);
DDX_Check(pDX, IDC_CHECK_SCALE, m_bScale);
DDX_Check(pDX, IDC_CHECK_X, m_bMirrorX);
DDX_Check(pDX, IDC_CHECK_Y, m_bMirrorY);
DDX_Text(pDX, IDC_EDIT_ELEVATION, m_nElevation);
DDX_Text(pDX, IDC_EDIT_PIPELEN, m_nPipeLen);
DDX_Text(pDX, IDC_EDIT_ROTATE, m_nRotate);
DDX_Text(pDX, IDC_EDIT_SCALE, m_nScale);
DDX_Check(pDX, IDC_CHECK_NG, m_bNg);
DDX_Text(pDX, IDC_EDIT_NG, m_nNg);
DDX_Check(pDX, IDC_CHECK_BIGQ, m_bBigQ);
DDX_Text(pDX, IDC_EDIT_Q, m_nQ);
DDX_Check(pDX, IDC_CHECK_SYSBLK, m_bSysBlk);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CEquipmentEditDlg, CDialog)
//{{AFX_MSG_MAP(CEquipmentEditDlg)
ON_BN_CLICKED(IDC_CHECK_SCALE, OnCheckScale)
ON_BN_CLICKED(IDC_CHECK_ROTATE, OnCheckRotate)
ON_BN_CLICKED(IDC_CHECK_ELEVATION2, OnCheckElevation2)
ON_BN_CLICKED(IDC_CHECK_PIPELEN2, OnCheckPipelen2)
ON_BN_CLICKED(IDC_CHECK_HIDEPIPE, OnCheckHidepipe)
ON_BN_CLICKED(IDC_CHECK_MIRROR, OnCheckMirror)
ON_BN_CLICKED(IDC_CHECK_NG, OnCheckNg)
ON_BN_CLICKED(IDC_CHECK_BIGQ, OnCheckBigq)
ON_BN_CLICKED(IDC_PREVIEW, OnPreview)
ON_WM_PAINT()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CEquipmentEditDlg message handlers
BOOL CEquipmentEditDlg::OnInitDialog()
{
CDialog::OnInitDialog();
m_spinPipe.SetRange(0, 10000);
UpdateData(FALSE);
SetEnable();
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CEquipmentEditDlg::OnCheckScale()
{
SetEnable();
}
void CEquipmentEditDlg::OnCheckRotate()
{
SetEnable();
}
void CEquipmentEditDlg::OnCheckElevation2()
{
SetEnable();
}
void CEquipmentEditDlg::OnCheckPipelen2()
{
SetEnable();
}
void CEquipmentEditDlg::OnCheckHidepipe()
{
SetEnable();
}
void CEquipmentEditDlg::OnCheckMirror()
{
SetEnable();
}
void CEquipmentEditDlg::OnCheckNg()
{
SetEnable();
}
void CEquipmentEditDlg::OnCheckBigq()
{
SetEnable();
}
void CEquipmentEditDlg::SetEnable()
{
UpdateData(TRUE);
CWnd *pWnd1 = GetDlgItem(IDC_EDIT_SCALE);
CWnd *pWnd2 = GetDlgItem(IDC_EDIT_ROTATE);
CWnd *pWnd3 = GetDlgItem(IDC_EDIT_ELEVATION);
CWnd *pWnd4 = GetDlgItem(IDC_EDIT_PIPELEN);
CWnd *pWnd5 = GetDlgItem(IDC_SPIN_PIPELEN);
CWnd *pWnd6 = GetDlgItem(IDC_CHECK_ISHIDE);
CWnd *pWnd7 = GetDlgItem(IDC_CHECK_Y);
CWnd *pWnd8 = GetDlgItem(IDC_CHECK_X);
CWnd *pWnd9 = GetDlgItem(IDC_EDIT_NG);
CWnd *pWnd10 = GetDlgItem(IDC_EDIT_Q);
if(m_bBigQ)
pWnd10->EnableWindow(TRUE);
else
pWnd10->EnableWindow(FALSE);
if(m_bNg)
pWnd9->EnableWindow(TRUE);
else
pWnd9->EnableWindow(FALSE);
if(m_bElevation)
pWnd3->EnableWindow(TRUE);
else
pWnd3->EnableWindow(FALSE);
if(m_bHidePipe)
pWnd6->EnableWindow(TRUE);
else
pWnd6->EnableWindow(FALSE);
if(m_bScale)
pWnd1->EnableWindow(TRUE);
else
pWnd1->EnableWindow(FALSE);
if(m_bRotate)
pWnd2->EnableWindow(TRUE);
else
pWnd2->EnableWindow(FALSE);
if(m_bMirror){
pWnd7->EnableWindow(TRUE);
pWnd8->EnableWindow(TRUE);
}
else{
pWnd7->EnableWindow(FALSE);
pWnd8->EnableWindow(FALSE);
}
if(m_bPipeLen){
pWnd4->EnableWindow(TRUE);
pWnd5->EnableWindow(TRUE);
}
else{
pWnd4->EnableWindow(FALSE);
pWnd5->EnableWindow(FALSE);
}
}
void CEquipmentEditDlg::OnPreview()
{
UpdateData(TRUE);
if(!m_bSysBlk || m_csSysBlk == _T(""))
return;
XString xsTKName, xsRocord;
SplitSlbName((const TCHAR*)m_csSysBlk, xsTKName, xsRocord);
CString csSldName;
csSldName.Format(_T("$TWTSYS$%s"), xsRocord);
CString csType = GetTgBlkTypeInTk(csSldName);
if(csType.Find(_T("\\")) < 0)
return;
CTemporaryResourceOverride vTemp;
CSelectBlkDlg dlg;
dlg.m_csTkName = _T("TWTSYS");
dlg.m_csType = csType;
CWnd *pWnd = GetDlgItem(IDC_PREVIEW);
CRect rect;
dlg.m_staticSlide.m_csCurRecord = csSldName;
pWnd->GetWindowRect(&rect);
dlg.m_ptBase = rect.TopLeft();
if(dlg.DoModal() == IDOK){
CString csRet = dlg.m_staticSlide.m_csCurRecord;
XString xsTKName, xsRocord, xsTmp;
SplitSlbName(csRet, xsTKName, xsRocord);
m_csSysBlk.Format(_T("TWTSYS(%s)"), xsRocord);
OpenSlide();
}
}
void CEquipmentEditDlg::OpenSlide()
{
UpdateData(TRUE);
CWnd *pImageBox1 = GetDlgItem(IDC_PREVIEW);
DrawSlide((const TCHAR*)m_csSysBlk, pImageBox1);
}
void CEquipmentEditDlg::OnPaint()
{
CPaintDC dc(this); // device context for painting
OpenSlide();
}