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

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;
}