262 lines
6.4 KiB
C++
262 lines
6.4 KiB
C++
#include "StdAfx.h"
|
|
#include "Resource.h"
|
|
#include "ArrowDlg.h"
|
|
#include "EarThwormDef.h"
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
CArrowDlg::CArrowDlg(CWnd* pParent /*=NULL*/)
|
|
: CDialog(CArrowDlg::IDD, pParent)
|
|
{
|
|
//{{AFX_DATA_INIT(CArrowDlg)
|
|
m_iRadio = 0;
|
|
m_dScale = 6;
|
|
m_bScale = FALSE;
|
|
m_sDwgNo = _T("D01");
|
|
m_sPipeNo = _T("P-1001");
|
|
//}}AFX_DATA_INIT
|
|
}
|
|
|
|
void CArrowDlg::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CDialog::DoDataExchange(pDX);
|
|
//{{AFX_DATA_MAP(CArrowDlg)
|
|
DDX_Control(pDX, IDC_SELECTPIPE, m_CtlPipeNo);
|
|
DDX_Control(pDX, IDC_EDITSCALE, m_ControlScale);
|
|
DDX_Radio(pDX, IDC_ARR_RD1, m_iRadio);
|
|
DDX_Text(pDX, IDC_EDITSCALE, m_dScale);
|
|
DDX_Check(pDX, IDC_CHECKSCALE, m_bScale);
|
|
DDX_Text(pDX, IDC_EDITDWGNO, m_sDwgNo);
|
|
DDX_Text(pDX, IDC_EDITPIPENO, m_sPipeNo);
|
|
//}}AFX_DATA_MAP
|
|
}
|
|
|
|
BEGIN_MESSAGE_MAP(CArrowDlg, CDialog)
|
|
//{{AFX_MSG_MAP(CArrowDlg)
|
|
ON_BN_CLICKED(IDC_CHECKSCALE, OnCheckscale)
|
|
ON_BN_CLICKED(IDC_SELECTPIPE, OnSelectpipe)
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
BOOL CArrowDlg::OnInitDialog()
|
|
{
|
|
CDialog::OnInitDialog();
|
|
|
|
m_bmpBtn.LoadBitmap(IDB_SELECT);
|
|
m_CtlPipeNo.SetBitmap(m_bmpBtn);
|
|
|
|
m_ControlScale.EnableWindow(FALSE);
|
|
|
|
m_bmpBtn1.LoadBitmap(IDB_ARROW1);
|
|
CButton * pPicture = (CButton *)GetDlgItem(IDC_ARR_RD1);
|
|
pPicture->SetBitmap(m_bmpBtn1);
|
|
|
|
m_bmpBtn2.LoadBitmap(IDB_ARROW2);
|
|
pPicture = (CButton *)GetDlgItem(IDC_ARR_RD2);
|
|
pPicture->SetBitmap(m_bmpBtn2);
|
|
|
|
m_bmpBtn3.LoadBitmap(IDB_ARROW3);
|
|
pPicture = (CButton *)GetDlgItem(IDC_ARR_RD3);
|
|
pPicture->SetBitmap(m_bmpBtn3);
|
|
|
|
m_bmpBtn4.LoadBitmap(IDB_ARROW4);
|
|
pPicture = (CButton *)GetDlgItem(IDC_ARR_RD4);
|
|
pPicture->SetBitmap(m_bmpBtn4);
|
|
|
|
m_bmpBtn5.LoadBitmap(IDB_ARROW5);
|
|
pPicture = (CButton *)GetDlgItem(IDC_ARR_RD5);
|
|
pPicture->SetBitmap(m_bmpBtn5);
|
|
|
|
m_bmpBtn6.LoadBitmap(IDB_ARROW6);
|
|
pPicture = (CButton *)GetDlgItem(IDC_ARR_RD6);
|
|
pPicture->SetBitmap(m_bmpBtn6);
|
|
|
|
m_bmpBtn7.LoadBitmap(IDB_ARROW7);
|
|
pPicture = (CButton *)GetDlgItem(IDC_ARR_RD7);
|
|
pPicture->SetBitmap(m_bmpBtn7);
|
|
|
|
m_bmpBtn8.LoadBitmap(IDB_ARROW8);
|
|
pPicture = (CButton *)GetDlgItem(IDC_ARR_RD8);
|
|
pPicture->SetBitmap(m_bmpBtn8);
|
|
|
|
m_bmpBtn9.LoadBitmap(IDB_ARROW9);
|
|
pPicture = (CButton *)GetDlgItem(IDC_ARR_RD9);
|
|
pPicture->SetBitmap(m_bmpBtn9);
|
|
|
|
m_bmpBtn10.LoadBitmap(IDB_ARROW10);
|
|
pPicture = (CButton *)GetDlgItem(IDC_ARR_RD10);
|
|
pPicture->SetBitmap(m_bmpBtn10);
|
|
|
|
//获取初始化数据
|
|
AecDbObjXDataMap xDataMap;
|
|
PIDLineTools::ReSetPID(xDataMap);
|
|
if (!KTModelLayoutXData::ReadModelXData(KT_PIPEINIT, xDataMap))
|
|
{
|
|
acedAlert(_T("\n系统没有初始化!"));
|
|
return FALSE;
|
|
}
|
|
CString sContent = _T("100");
|
|
xDataMap.GetAt(DOC_CONSIGN, sContent);
|
|
m_dScale = _ttof(sContent);
|
|
|
|
UpdateData(FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
void CArrowDlg::OnOK()
|
|
{
|
|
// TODO: Add extra validation here
|
|
UpdateData(TRUE);
|
|
CDialog::OnOK();
|
|
}
|
|
|
|
void CArrowDlg::OnCheckscale()
|
|
{
|
|
UpdateData(TRUE);
|
|
if (m_bScale==FALSE)
|
|
{
|
|
m_ControlScale.EnableWindow(FALSE);
|
|
}
|
|
else
|
|
{
|
|
m_ControlScale.EnableWindow(TRUE);
|
|
}
|
|
}
|
|
|
|
void CArrowDlg::OnSelectpipe()
|
|
{
|
|
CWnd * pWnd = acedGetAcadFrame();
|
|
this->EnableWindow(FALSE);
|
|
pWnd->EnableWindow(TRUE);
|
|
this->ShowWindow(SW_HIDE);
|
|
//
|
|
//选择实体
|
|
AcGePoint3d pt;
|
|
ads_name en;
|
|
AcDbObjectId idSelected = NULL;
|
|
AcDbObjectId idGroup = NULL;
|
|
AcDbObjectId idTemp = NULL;
|
|
AcDbObjectId idTip = NULL;
|
|
AcDbEntity* pEnt =NULL;
|
|
CString sContent = _T("");
|
|
AecDbObjXDataMap objXData;
|
|
int nRes = acedEntSel(_T("\n请选择实体:"),en,asDblArray(pt));
|
|
if (nRes == RTNORM)
|
|
{
|
|
if (Acad::eOk == acdbGetObjectId(idSelected,en))
|
|
{
|
|
idGroup = GetGroupId(idSelected);
|
|
if (idGroup !=AcDbObjectId::kNull)
|
|
{
|
|
AcDbGroup* pGroup = NULL;
|
|
acdbOpenObject(pGroup,idGroup,AcDb::kForRead);
|
|
AcDbGroupIterator* pIter = pGroup->newIterator();
|
|
for(;!pIter->done();pIter->next())
|
|
{
|
|
idTemp = pIter->objectId();
|
|
if (objXData.Read(idTemp,PIDPIPE_APP))
|
|
{
|
|
sContent = _T("");
|
|
objXData.GetAt(PID_PIPE_LINENO,sContent);
|
|
if(sContent != _T(""))
|
|
{
|
|
idTip = idTemp;
|
|
break;
|
|
}
|
|
}
|
|
|
|
}
|
|
delete pIter;
|
|
pGroup->close();
|
|
}
|
|
else
|
|
{
|
|
idTip = idSelected;
|
|
}
|
|
|
|
if (Acad::eOk == acdbOpenAcDbEntity(pEnt, idTip, AcDb::kForRead))
|
|
{
|
|
//管子
|
|
if (objXData.Read(pEnt,PIDPIPE_APP))
|
|
{
|
|
sContent = _T("");
|
|
objXData.GetAt(PID_PIPE_LINENO,sContent);
|
|
if(sContent != _T(""))
|
|
{
|
|
m_sPipeNo = sContent;
|
|
}
|
|
}
|
|
pEnt->close();
|
|
}
|
|
}
|
|
}
|
|
|
|
this->ShowWindow(SW_SHOW);
|
|
this->EnableWindow(TRUE);
|
|
this->UpdateData(FALSE);
|
|
}
|
|
|
|
AcDbObjectId CArrowDlg::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;
|
|
}
|