277 lines
6.6 KiB
C++
277 lines
6.6 KiB
C++
// SpecJumpDlg.cpp : implementation file
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "Resource.h"
|
|
#include "SpecJumpDlg.h"
|
|
#include "EarThwormDef.h"
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CSpecJumpDlg dialog
|
|
|
|
|
|
CSpecJumpDlg::CSpecJumpDlg(CWnd* pParent /*=NULL*/)
|
|
: CDialog(CSpecJumpDlg::IDD, pParent)
|
|
{
|
|
//{{AFX_DATA_INIT(CSpecJumpDlg)
|
|
m_sSpecLeft = _T("");
|
|
m_sSpecRight = _T("");
|
|
//}}AFX_DATA_INIT
|
|
}
|
|
|
|
|
|
void CSpecJumpDlg::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CDialog::DoDataExchange(pDX);
|
|
//{{AFX_DATA_MAP(CSpecJumpDlg)
|
|
DDX_Control(pDX, IDC_SELECTST, m_CtlStart);
|
|
DDX_Control(pDX, IDC_SELECTEND, m_CtlEnd);
|
|
DDX_Text(pDX, IDC_SPECLEFT, m_sSpecLeft);
|
|
DDX_Text(pDX, IDC_SPECRIGHT, m_sSpecRight);
|
|
//}}AFX_DATA_MAP
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CSpecJumpDlg, CDialog)
|
|
//{{AFX_MSG_MAP(CSpecJumpDlg)
|
|
ON_BN_CLICKED(IDC_SELECTST, OnSelectst)
|
|
ON_BN_CLICKED(IDC_SELECTEND, OnSelectend)
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CSpecJumpDlg message handlers
|
|
|
|
void CSpecJumpDlg::OnOK()
|
|
{
|
|
// TODO: Add extra validation here
|
|
UpdateData(TRUE);
|
|
CDialog::OnOK();
|
|
}
|
|
|
|
void CSpecJumpDlg::OnSelectst()
|
|
{
|
|
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);
|
|
// 通过组ID获得物体中材料点的信息
|
|
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_LEVEL,sContent);
|
|
if(sContent != _T(""))
|
|
{
|
|
m_sSpecLeft = sContent;
|
|
}
|
|
}
|
|
pEnt->close();
|
|
}
|
|
}
|
|
}
|
|
|
|
this->ShowWindow(SW_SHOW);
|
|
this->EnableWindow(TRUE);
|
|
this->UpdateData(FALSE);
|
|
}
|
|
|
|
void CSpecJumpDlg::OnSelectend()
|
|
{
|
|
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);
|
|
// 通过组ID获得物体中材料点的信息
|
|
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_LEVEL,sContent);
|
|
if(sContent != _T(""))
|
|
{
|
|
m_sSpecRight = sContent;
|
|
}
|
|
}
|
|
pEnt->close();
|
|
}
|
|
}
|
|
}
|
|
|
|
this->ShowWindow(SW_SHOW);
|
|
this->EnableWindow(TRUE);
|
|
this->UpdateData(FALSE);
|
|
}
|
|
|
|
BOOL CSpecJumpDlg::OnInitDialog()
|
|
{
|
|
CDialog::OnInitDialog();
|
|
|
|
m_bmpBtn.LoadBitmap(IDB_SELECT);
|
|
m_CtlEnd.SetBitmap(m_bmpBtn);
|
|
m_CtlStart.SetBitmap(m_bmpBtn);
|
|
|
|
return TRUE; // return TRUE unless you set the focus to a control
|
|
// EXCEPTION: OCX Property Pages should return FALSE
|
|
}
|
|
|
|
|
|
AcDbObjectId CSpecJumpDlg::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;
|
|
} |