1470 lines
31 KiB
C++
1470 lines
31 KiB
C++
#include "stdafx.h"
|
|
#include "shs_outdoor.h"
|
|
#include "SetDataSourceDlg.h"
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
CSetDataSourceDlg::CSetDataSourceDlg(CWnd* pParent /*=NULL*/)
|
|
: CDialog(CSetDataSourceDlg::IDD, pParent)
|
|
{
|
|
//{{AFX_DATA_INIT(CSetDataSourceDlg)
|
|
m_nDataSourceType = 0;
|
|
m_nLandForm = 0;
|
|
//}}AFX_DATA_INIT
|
|
|
|
m_sDataType1 = _T("文字数字");
|
|
m_sDataType2 = _T("点对象Z坐标");
|
|
m_sDataType3 = _T("圆对象Z坐标");
|
|
m_sDataType4 = _T("图块Z坐标");
|
|
m_sDataType5 = _T("图块属性值");
|
|
m_sDataType6 = _T("上华标高");
|
|
|
|
m_dMinVal = 0.0;
|
|
m_dMaxVal = 0.0;
|
|
m_bChange = false;
|
|
m_bExternalBlock = false; // cet 2011.12.2 add
|
|
}
|
|
|
|
|
|
void CSetDataSourceDlg::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CDialog::DoDataExchange(pDX);
|
|
//{{AFX_DATA_MAP(CSetDataSourceDlg)
|
|
DDX_Control(pDX, IDC_COMBODATASOURCETYPE, m_comDataSouceType);
|
|
DDX_CBIndex(pDX, IDC_COMBODATASOURCETYPE, m_nDataSourceType);
|
|
DDX_Radio(pDX, IDC_LANDFORMRADIO, m_nLandForm);
|
|
//}}AFX_DATA_MAP
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CSetDataSourceDlg, CDialog)
|
|
//{{AFX_MSG_MAP(CSetDataSourceDlg)
|
|
ON_BN_CLICKED(IDC_BTN_ADDDEL, OnBtnAddDelDataSource)
|
|
ON_CBN_SELCHANGE(IDC_COMBODATASOURCETYPE, OnSelchangeCombodatasourcetype)
|
|
ON_EN_CHANGE(IDC_EDT_MIN, OnChangeEdtMin)
|
|
ON_EN_CHANGE(IDC_EDT_MAX, OnChangeEdtMin)
|
|
ON_BN_CLICKED(IDC_BUTTON_DEL, OnButtonDel)
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
int CSetDataSourceDlg::GetDataSourceType()
|
|
{
|
|
CString sText = m_sDataTypeText;
|
|
|
|
int nSourceType = 0;
|
|
|
|
if (sText.CompareNoCase(m_sDataType1) == 0)
|
|
nSourceType = 0;
|
|
else if (sText.CompareNoCase(m_sDataType2) == 0)
|
|
nSourceType = 1;
|
|
else if (sText.CompareNoCase(m_sDataType3) == 0)
|
|
nSourceType = 2;
|
|
else if (sText.CompareNoCase(m_sDataType4) == 0)
|
|
nSourceType = 3;
|
|
else if (sText.CompareNoCase(m_sDataType5) == 0)
|
|
nSourceType = 4;
|
|
else if (sText.CompareNoCase(m_sDataType6) == 0)
|
|
nSourceType = 5;
|
|
|
|
return nSourceType;
|
|
}
|
|
|
|
void CSetDataSourceDlg::FiltrateDataSourceType(Entity ent)
|
|
{
|
|
if (ent.Is(_T("TEXT")) || ent.Is(_T("ATS_TEXT")))
|
|
{
|
|
m_nDataSourceType = 0;
|
|
m_bEnable = FALSE;
|
|
}
|
|
else if (ent.Is(_T("POINT")))
|
|
{
|
|
m_nDataSourceType = 1;
|
|
m_bEnable = FALSE;
|
|
}
|
|
else if (ent.Is(_T("CIRCLE")))
|
|
{
|
|
m_nDataSourceType = 2;
|
|
m_bEnable = FALSE;
|
|
}
|
|
else if (ent.Is(_T("INSERT")))
|
|
{
|
|
m_comDataSouceType.ResetContent();
|
|
|
|
m_comDataSouceType.AddString(m_sDataType4);
|
|
m_comDataSouceType.AddString(m_sDataType5);
|
|
m_bEnable = TRUE;
|
|
}
|
|
else if (ent.Is(_T("ATS_ELEVATION")))
|
|
{
|
|
m_nDataSourceType = 5;
|
|
m_bEnable = FALSE;
|
|
}
|
|
|
|
UpdateData(FALSE);
|
|
}
|
|
|
|
BOOL CSetDataSourceDlg::OnInitDialog()
|
|
{
|
|
CDialog::OnInitDialog();
|
|
|
|
//过滤掉不需要的数据源类型
|
|
FiltrateDataSourceType(m_ent);
|
|
|
|
if (GetDlgItem(IDC_COMBODATASOURCETYPE) != NULL)
|
|
GetDlgItem(IDC_COMBODATASOURCETYPE)->EnableWindow(m_bEnable);
|
|
|
|
// cet 200.4.14 add
|
|
m_comDataSouceType.GetWindowText(m_sDataTypeText);
|
|
GetPickSet();
|
|
// GetMinMaxVal(m_ssAllOrigin); // cet 2010.5.20 del
|
|
GetMinMaxVal(m_ssAllCur); // cet 2010.5.20 add
|
|
|
|
UpDateEdt();
|
|
// cet 2011.12.2 add 外部参照中选择实体时禁用增减数据源按钮
|
|
if (m_bExternalBlock)
|
|
{
|
|
CWnd *pWnd = GetDlgItem(IDC_BTN_ADDDEL);
|
|
if (pWnd != NULL)
|
|
{
|
|
pWnd->EnableWindow(FALSE);
|
|
}
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
void CSetDataSourceDlg::SetSelEntity(Entity ent)
|
|
{
|
|
m_ent = ent;
|
|
}
|
|
|
|
void CSetDataSourceDlg::OnOK()
|
|
{
|
|
UpdateData();
|
|
m_comDataSouceType.GetLBText(m_nDataSourceType,m_sDataTypeText);
|
|
CDialog::OnOK();
|
|
}
|
|
|
|
void CSetDataSourceDlg::OnBtnAddDelDataSource()
|
|
{
|
|
GetParent()->EnableWindow(TRUE);
|
|
GetParent()->SetFocus();
|
|
GetParent()->SetActiveWindow();
|
|
ShowWindow(SW_HIDE);
|
|
|
|
// 清除扩张数据"Del"为"1"的数据源
|
|
CleanDataSource(m_ssAllCur);
|
|
|
|
// 显示有效数据源
|
|
std::map<AcDbObjectId, Adesk::UInt16> mapColor;
|
|
Adesk::UInt16 nColor = 1;
|
|
for (long i = 0; i < m_ssAllCur.Length(); i++)
|
|
{
|
|
Entity s(m_ssAllCur[i]);
|
|
ChangeDataSoureColor(mapColor, s, nColor);
|
|
}
|
|
// cet 2012.2.13 modify 只增加数据源
|
|
// // 增减数据源
|
|
// TCHAR szKey[10];
|
|
// int nRet = 0;
|
|
// while (true)
|
|
// {
|
|
// INITGET_BEG(0, _T("A"));
|
|
// nRet = ads_getkword(_T("\n请选择标高数据源[增加标高(A)]<删除>:"), szKey);
|
|
// INITGET_END();
|
|
// RBList rbMask(RTDXF0, _T("INSERT,TEXT,POINT,CIRCLE,ATS_TEXT,ATS_ELEVATION"), NULL);
|
|
// Entity ent;
|
|
// if (nRet == RTNONE) // 删除数据源
|
|
// {
|
|
// while (SelectEntity(_T("\n请点取需要删除的标高数据源<退出>:"), ent, rbMask) == RTNORM)
|
|
// {
|
|
// if (m_ssAllCur.IsInclude(ent))
|
|
// {
|
|
// m_ssAllCur -= ent;
|
|
// WriteXdata(ent, _T("Del"), _T("1"));
|
|
// RecoverDataSoureColor(mapColor, ent);
|
|
// }
|
|
// }
|
|
// continue;
|
|
// }
|
|
// else if (nRet == RTNORM) // 增加数据源
|
|
// {
|
|
// if (szKey[0] == _T('A') || szKey[0] == _T('a'))
|
|
// {
|
|
// while (SelectEntity(_T("\n请点取需要增加的标高数据源<退出>:"), ent, rbMask) == RTNORM)
|
|
// {
|
|
// if (m_ssAllOrigin.IsInclude(ent))
|
|
// {
|
|
// m_ssAllCur += ent;
|
|
// WriteXdata(ent, _T("Del"), _T("0"));
|
|
// ChangeDataSoureColor(mapColor, ent, nColor);
|
|
// }
|
|
// }
|
|
// continue;
|
|
// }
|
|
// }
|
|
//
|
|
// break;
|
|
// }
|
|
|
|
RBList rbMask(RTDXF0, _T("INSERT,TEXT,POINT,CIRCLE,ATS_TEXT,ATS_ELEVATION"), NULL);
|
|
Entity ent;
|
|
while (SelectEntity(_T("\n请点取需要增加的标高数据源<退出>:"), ent, rbMask) == RTNORM)
|
|
{
|
|
if (m_ssAllOrigin.IsInclude(ent))
|
|
{
|
|
m_ssAllCur += ent;
|
|
WriteXdata(ent, _T("Del"), _T("0"));
|
|
ChangeDataSoureColor(mapColor, ent, nColor);
|
|
}
|
|
}
|
|
|
|
// 恢复数据源颜色
|
|
for (long j = 0; j < m_ssAllCur.Length(); j++)
|
|
{
|
|
|
|
Entity s(m_ssAllCur[i]);
|
|
RecoverDataSoureColor(mapColor, s);
|
|
}
|
|
|
|
//更新最大值最小值
|
|
long ii = m_ssAllCur.Length();
|
|
GetMinMaxVal(m_ssAllCur);
|
|
UpDateEdt();
|
|
|
|
GetParent()->EnableWindow(FALSE);
|
|
EnableWindow(TRUE);
|
|
SetActiveWindow();
|
|
ShowWindow(SW_SHOW);
|
|
}
|
|
|
|
void CSetDataSourceDlg::GetMinMaxVal(PickSet &ssAll)
|
|
{
|
|
double dEle = 0.0;
|
|
AcDbObjectId id = AcDbObjectId::kNull;
|
|
|
|
if (m_ent.Is(_T("ATS_TEXT")))
|
|
{
|
|
TDbText *pText = NULL;
|
|
for (long i = 0; i < ssAll.Length(); i++)
|
|
{
|
|
acdbGetObjectId(id, ssAll[i]);
|
|
acdbOpenObject(pText, id, AcDb::kForRead);
|
|
if (pText != NULL)
|
|
{
|
|
CString strText = pText->GetText();
|
|
pText->close();
|
|
dEle = _tstof(strText);
|
|
if (i == 0)
|
|
{
|
|
m_dMinVal = dEle;
|
|
m_dMaxVal = dEle;
|
|
}
|
|
else
|
|
{
|
|
if (m_dMaxVal < dEle)
|
|
{
|
|
m_dMaxVal = dEle;
|
|
}
|
|
|
|
if (m_dMinVal > dEle)
|
|
{
|
|
m_dMinVal = dEle;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else if (m_ent.Is(_T("TEXT")))
|
|
{
|
|
AcDbText *pText = NULL;
|
|
for (long i = 0; i < ssAll.Length(); i++)
|
|
{
|
|
acdbGetObjectId(id, ssAll[i]);
|
|
acdbOpenObject(pText, id, AcDb::kForRead);
|
|
if (pText != NULL)
|
|
{
|
|
CString strText = pText->textString();
|
|
pText->close();
|
|
|
|
dEle = _tstof(strText);
|
|
if (i == 0)
|
|
{
|
|
m_dMinVal = dEle;
|
|
m_dMaxVal = dEle;
|
|
}
|
|
else
|
|
{
|
|
if (m_dMaxVal < dEle)
|
|
{
|
|
m_dMaxVal = dEle;
|
|
}
|
|
|
|
if (m_dMinVal > dEle)
|
|
{
|
|
m_dMinVal = dEle;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else if (m_ent.Is(_T("POINT"))) // 点对象Z坐标
|
|
{
|
|
AcDbPoint *pPt = NULL;
|
|
XPoint ptVal;
|
|
for (long i = 0; i < ssAll.Length(); i++)
|
|
{
|
|
acdbGetObjectId(id, ssAll[i]);
|
|
acdbOpenObject(pPt, id, AcDb::kForRead);
|
|
if(pPt != NULL)
|
|
{
|
|
ptVal = pPt->position();
|
|
pPt->close();
|
|
// cet 2011.12.2 add 外部参照中的实体需要进行转换
|
|
if (m_bExternalBlock)
|
|
{
|
|
ptVal.TransformBy(m_mat);
|
|
}
|
|
|
|
dEle = ptVal.z;
|
|
if (i == 0)
|
|
{
|
|
m_dMinVal = dEle;
|
|
m_dMaxVal = dEle;
|
|
}
|
|
else
|
|
{
|
|
if (m_dMaxVal < dEle)
|
|
{
|
|
m_dMaxVal = dEle;
|
|
}
|
|
|
|
if (m_dMinVal > dEle)
|
|
{
|
|
m_dMinVal = dEle;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
else if (m_ent.Is(_T("CIRCLE"))) // 圆对象Z坐标
|
|
{
|
|
AcDbCircle *pCir = NULL;
|
|
XPoint ptVal;
|
|
for (long i = 0; i < ssAll.Length(); i++)
|
|
{
|
|
acdbGetObjectId(id, ssAll[i]);
|
|
acdbOpenObject(pCir, id, AcDb::kForRead);
|
|
if(pCir != NULL)
|
|
{
|
|
ptVal = pCir->center();
|
|
pCir->close();
|
|
// cet 2011.12.2 add 外部参照中的实体需要进行转换
|
|
if (m_bExternalBlock)
|
|
{
|
|
ptVal.TransformBy(m_mat);
|
|
}
|
|
|
|
dEle = ptVal.z;
|
|
if (i == 0)
|
|
{
|
|
m_dMinVal = dEle;
|
|
m_dMaxVal = dEle;
|
|
}
|
|
else
|
|
{
|
|
if (m_dMaxVal < dEle)
|
|
{
|
|
m_dMaxVal = dEle;
|
|
}
|
|
|
|
if (m_dMinVal > dEle)
|
|
{
|
|
m_dMinVal = dEle;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else if (m_ent.Is(_T("INSERT")))
|
|
{
|
|
if (m_nDataSourceType == 0) // 图块Z坐标
|
|
{
|
|
AcDbBlockReference *pRef = NULL;
|
|
AcGePoint3d ptLoc;
|
|
for (long i = 0; i < ssAll.Length(); i++)
|
|
{
|
|
acdbGetObjectId(id, ssAll[i]);
|
|
acdbOpenObject(pRef, id, AcDb::kForRead);
|
|
if (pRef != NULL)
|
|
{
|
|
ptLoc = pRef->position();
|
|
pRef->close();
|
|
// cet 2011.12.2 add 外部参照中的实体需要进行转换
|
|
if (m_bExternalBlock)
|
|
{
|
|
ptLoc.transformBy(m_mat);
|
|
}
|
|
|
|
dEle = ptLoc.z;
|
|
if (i == 0)
|
|
{
|
|
m_dMinVal = dEle;
|
|
m_dMaxVal = dEle;
|
|
}
|
|
else
|
|
{
|
|
if (m_dMaxVal < dEle)
|
|
{
|
|
m_dMaxVal = dEle;
|
|
}
|
|
|
|
if (m_dMinVal > dEle)
|
|
{
|
|
m_dMinVal = dEle;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else if (m_nDataSourceType == 1) // 图块属性值
|
|
{
|
|
AcDbBlockReference *pRef = NULL;
|
|
AcGePoint3d ptLoc;
|
|
CString strText;
|
|
int nAttCount = 0;
|
|
for (long i = 0; i < ssAll.Length(); i++)
|
|
{
|
|
acdbGetObjectId(id, ssAll[i]);
|
|
acdbOpenObject(pRef, id, AcDb::kForRead);
|
|
if (pRef != NULL)
|
|
{
|
|
AcDbObjectIterator *pIterator = NULL;
|
|
pIterator = pRef->attributeIterator();
|
|
for (pIterator->start(); !pIterator->done(); pIterator->step())
|
|
{
|
|
//遍历块中实体
|
|
AcDbEntity *pEnt = NULL;
|
|
AcDbAttribute *pAtt = NULL;
|
|
AcDbObjectId att_id;
|
|
att_id = pIterator -> objectId();
|
|
acdbOpenAcDbEntity(pEnt, att_id, AcDb::kForRead);
|
|
pAtt = AcDbAttribute::cast(pEnt);
|
|
if(pAtt != NULL)
|
|
{
|
|
strText = pAtt->textString();
|
|
nAttCount++;
|
|
}
|
|
pEnt->close();
|
|
}
|
|
delete pIterator;
|
|
pRef->close();
|
|
|
|
dEle = _tstof(strText);
|
|
if (i == 0)
|
|
{
|
|
m_dMinVal = dEle;
|
|
m_dMaxVal = dEle;
|
|
}
|
|
else
|
|
{
|
|
if (m_dMaxVal < dEle)
|
|
{
|
|
m_dMaxVal = dEle;
|
|
}
|
|
|
|
if (m_dMinVal > dEle)
|
|
{
|
|
m_dMinVal = dEle;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else if (m_ent.Is(_T("ATS_ELEVATION"))) // 上华标高
|
|
{
|
|
CString strText;
|
|
TDbSymbElevation *pEle = NULL;
|
|
for (long i = 0; i < ssAll.Length(); i++)
|
|
{
|
|
acdbGetObjectId(id, ssAll[i]);
|
|
acdbOpenObject(pEle, id, AcDb::kForRead);
|
|
if (pEle != NULL)
|
|
{
|
|
strText = pEle->GetText();
|
|
pEle->close();
|
|
|
|
dEle = _tstof(strText);
|
|
if (i == 0)
|
|
{
|
|
m_dMinVal = dEle;
|
|
m_dMaxVal = dEle;
|
|
}
|
|
else
|
|
{
|
|
if (m_dMaxVal < dEle)
|
|
{
|
|
m_dMaxVal = dEle;
|
|
}
|
|
|
|
if (m_dMinVal > dEle)
|
|
{
|
|
m_dMinVal = dEle;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void CSetDataSourceDlg::GetPickSet()
|
|
{
|
|
resbuf *rb = NULL;
|
|
TCHAR szLayerName[256];
|
|
m_ent.GetData(8,szLayerName);
|
|
PickSet ssAll(SS_FREE);
|
|
// 外部参照 cet 2011.12.2 add
|
|
if (m_bExternalBlock)
|
|
{
|
|
GetEntFromExternalBlk(ssAll);
|
|
int nType = GetDataSourceType();
|
|
FiltrateDataSource(ssAll, nType);
|
|
m_ssAllCur += ssAll;
|
|
CleanDataSource(m_ssAllCur);
|
|
m_ssAllOrigin += ssAll;
|
|
return;
|
|
}
|
|
|
|
if (m_ent.Is(_T("TEXT")) || m_ent.Is(_T("ATS_TEXT")))
|
|
{
|
|
rb = ads_buildlist(RTDXF0, _T("TEXT,ATS_TEXT"),8,szLayerName, NULL);
|
|
ssAll.Get(_T("X"), NULL, NULL, rb);
|
|
}
|
|
else if (m_ent.Is(_T("POINT")))
|
|
{
|
|
rb = ads_buildlist(RTDXF0, _T("POINT"), 8,szLayerName,NULL);
|
|
ssAll.Get(_T("X"), NULL, NULL, rb);
|
|
}
|
|
else if (m_ent.Is(_T("CIRCLE")))
|
|
{
|
|
rb = ads_buildlist(RTDXF0, _T("CIRCLE"),8,szLayerName, NULL);
|
|
ssAll.Get(_T("X"), NULL, NULL, rb);
|
|
}
|
|
else if (m_ent.Is(_T("ATS_ELEVATION")))
|
|
{
|
|
rb = ads_buildlist(RTDXF0, _T("ATS_ELEVATION"),8,szLayerName, NULL);
|
|
ssAll.Get(_T("X"), NULL, NULL, rb);
|
|
}
|
|
else if (m_ent.Is(_T("INSERT")))
|
|
{
|
|
TCHAR szBlkName[256];
|
|
m_ent.GetData(2,szBlkName);
|
|
rb = ads_buildlist(RTDXF0, _T("INSERT"),8,szLayerName, 2,szBlkName, NULL);
|
|
ssAll.Get(_T("X"), NULL, NULL, rb);
|
|
}
|
|
|
|
int nType = GetDataSourceType();
|
|
FiltrateDataSource(ssAll, nType);
|
|
m_ssAllCur += ssAll;
|
|
CleanDataSource(m_ssAllCur); // cet 2010.5.20 add
|
|
m_ssAllOrigin += ssAll;
|
|
}
|
|
|
|
void CSetDataSourceDlg::FiltrateDataSource(PickSet &ssAll, int nType, bool bCompare)
|
|
{
|
|
PickSet ssDel(SS_FREE);
|
|
double dEle = 0.0;
|
|
AcDbObjectId id = AcDbObjectId::kNull;
|
|
Adesk::UInt16 nColor = 0;
|
|
|
|
if (nType == 0) //文字数字
|
|
{
|
|
if (m_ent.Is(_T("ATS_TEXT")))
|
|
{
|
|
TDbText *pText = NULL;
|
|
for (long i = 0; i < ssAll.Length(); i++)
|
|
{
|
|
acdbGetObjectId(id, ssAll[i]);
|
|
acdbOpenObject(pText, id, AcDb::kForRead);
|
|
if (pText != NULL)
|
|
{
|
|
CString strText = pText->GetText();
|
|
nColor = pText->colorIndex();
|
|
pText->close();
|
|
|
|
if (!IsValidNumber(strText))
|
|
{
|
|
ssDel += ssAll[i];
|
|
}
|
|
else
|
|
{
|
|
if (bCompare)
|
|
{
|
|
dEle = _tstof(strText);
|
|
if (!IsValidNumber(dEle))
|
|
{
|
|
ssDel += ssAll[i];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else if (m_ent.Is(_T("TEXT")))
|
|
{
|
|
AcDbText *pText = NULL;
|
|
for (long i = 0; i < ssAll.Length(); i++)
|
|
{
|
|
acdbGetObjectId(id, ssAll[i]);
|
|
acdbOpenObject(pText, id, AcDb::kForRead);
|
|
if (pText != NULL)
|
|
{
|
|
CString strText = pText->textString();
|
|
nColor = pText->colorIndex();
|
|
pText->close();
|
|
|
|
if (!IsValidNumber(strText))
|
|
{
|
|
ssDel += ssAll[i];
|
|
}
|
|
else
|
|
{
|
|
if (bCompare)
|
|
{
|
|
dEle = _tstof(strText);
|
|
if (!IsValidNumber(dEle))
|
|
{
|
|
ssDel += ssAll[i];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else if (nType == 1) // 点对象Z坐标
|
|
{
|
|
AcDbPoint *pPt = NULL;
|
|
XPoint ptVal;
|
|
for (long i = 0; i < ssAll.Length(); i++)
|
|
{
|
|
acdbGetObjectId(id, ssAll[i]);
|
|
acdbOpenObject(pPt, id, AcDb::kForRead);
|
|
if(pPt != NULL)
|
|
{
|
|
ptVal = pPt->position();
|
|
nColor = pPt->colorIndex();
|
|
pPt->close();
|
|
|
|
if (bCompare)
|
|
{
|
|
// cet 2011.12.2 add 外部参照中的实体需要进行转换
|
|
if (m_bExternalBlock)
|
|
{
|
|
ptVal.TransformBy(m_mat);
|
|
}
|
|
|
|
dEle = ptVal.z;
|
|
if (!IsValidNumber(dEle))
|
|
{
|
|
ssDel += ssAll[i];
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
else if (nType == 2) // 圆对象Z坐标
|
|
{
|
|
AcDbCircle *pCir = NULL;
|
|
XPoint ptVal;
|
|
for (long i = 0; i < ssAll.Length(); i++)
|
|
{
|
|
acdbGetObjectId(id, ssAll[i]);
|
|
acdbOpenObject(pCir, id, AcDb::kForRead);
|
|
if(pCir != NULL)
|
|
{
|
|
ptVal = pCir->center();
|
|
nColor = pCir->colorIndex();
|
|
pCir->close();
|
|
|
|
if (bCompare)
|
|
{
|
|
// cet 2011.12.2 add 外部参照中的实体需要进行转换
|
|
if (m_bExternalBlock)
|
|
{
|
|
ptVal.TransformBy(m_mat);
|
|
}
|
|
|
|
dEle = ptVal.z;
|
|
if (!IsValidNumber(dEle))
|
|
{
|
|
ssDel += ssAll[i];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else if (nType == 3) // 图块Z坐标
|
|
{
|
|
AcDbBlockReference *pRef = NULL;
|
|
AcGePoint3d ptLoc;
|
|
for (long i = 0; i < ssAll.Length(); i++)
|
|
{
|
|
acdbGetObjectId(id, ssAll[i]);
|
|
acdbOpenObject(pRef, id, AcDb::kForRead);
|
|
if (pRef != NULL)
|
|
{
|
|
ptLoc = pRef->position();
|
|
nColor = pRef->colorIndex();
|
|
pRef->close();
|
|
|
|
if (bCompare)
|
|
{
|
|
// cet 2011.12.2 add 外部参照中的实体需要进行转换
|
|
if (m_bExternalBlock)
|
|
{
|
|
ptLoc.transformBy(m_mat);
|
|
}
|
|
|
|
dEle = ptLoc.z;
|
|
if (!IsValidNumber(dEle))
|
|
{
|
|
ssDel += ssAll[i];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else if (nType == 4) // 图块属性值
|
|
{
|
|
AcDbBlockReference *pRef = NULL;
|
|
AcGePoint3d ptLoc;
|
|
CString strText;
|
|
int nAttCount = 0;
|
|
for (long i = 0; i < ssAll.Length(); i++)
|
|
{
|
|
nAttCount = 0;
|
|
acdbGetObjectId(id, ssAll[i]);
|
|
acdbOpenObject(pRef, id, AcDb::kForRead);
|
|
if (pRef != NULL)
|
|
{
|
|
AcDbObjectIterator *pIterator = NULL;
|
|
pIterator = pRef->attributeIterator();
|
|
for (pIterator->start(); !pIterator->done(); pIterator->step())
|
|
{
|
|
//遍历块中实体
|
|
AcDbEntity *pEnt = NULL;
|
|
AcDbAttribute *pAtt = NULL;
|
|
AcDbObjectId att_id;
|
|
att_id = pIterator -> objectId();
|
|
acdbOpenAcDbEntity(pEnt, att_id, AcDb::kForRead);
|
|
pAtt = AcDbAttribute::cast(pEnt);
|
|
if(pAtt != NULL)
|
|
{
|
|
strText = pAtt->textString();
|
|
nColor = pAtt->colorIndex();
|
|
nAttCount++;
|
|
}
|
|
pEnt->close();
|
|
}
|
|
delete pIterator;
|
|
pRef->close();
|
|
|
|
if (nAttCount == 1) // 块包含一个属性字
|
|
{
|
|
if (!IsValidNumber(strText))
|
|
{
|
|
ssDel += ssAll[i];
|
|
}
|
|
else
|
|
{
|
|
if (bCompare)
|
|
{
|
|
dEle = _tstof(strText);
|
|
if (!IsValidNumber(dEle))
|
|
{
|
|
ssDel += ssAll[i];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else // 块包含多个或零个属性字
|
|
{
|
|
ssDel += ssAll[i];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else if (nType == 5) // 上华标高
|
|
{
|
|
CString strText;
|
|
TDbSymbElevation *pEle = NULL;
|
|
for (long i = 0; i < ssAll.Length(); i++)
|
|
{
|
|
acdbGetObjectId(id, ssAll[i]);
|
|
acdbOpenObject(pEle, id, AcDb::kForRead);
|
|
if (pEle != NULL)
|
|
{
|
|
strText = pEle->GetText();
|
|
nColor = pEle->colorIndex();
|
|
pEle->close();
|
|
|
|
if (!IsValidNumber(strText))
|
|
{
|
|
ssDel += ssAll[i];
|
|
}
|
|
else
|
|
{
|
|
if (bCompare)
|
|
{
|
|
dEle = _tstof(strText);
|
|
if (!IsValidNumber(dEle))
|
|
{
|
|
ssDel += ssAll[i];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
ssAll -= ssDel;
|
|
}
|
|
|
|
void CSetDataSourceDlg::FiltrateDataSource(int nType)
|
|
{
|
|
PickSet ssDel(SS_FREE);
|
|
double dEle = 0.0;
|
|
AcDbObjectId id = AcDbObjectId::kNull;
|
|
PickSet ssAll(SS_FREE);
|
|
ssAll += m_ssAllOrigin;
|
|
|
|
if (nType == 0) //文字数字
|
|
{
|
|
if (m_ent.Is(_T("ATS_TEXT")))
|
|
{
|
|
TDbText *pText = NULL;
|
|
for (long i = 0; i < ssAll.Length(); i++)
|
|
{
|
|
acdbGetObjectId(id, ssAll[i]);
|
|
acdbOpenObject(pText, id, AcDb::kForRead);
|
|
if (pText != NULL)
|
|
{
|
|
CString strText = pText->GetText();
|
|
pText->close();
|
|
if (!IsValidNumber(strText))
|
|
{
|
|
ssDel += ssAll[i];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else if (m_ent.Is(_T("TEXT")))
|
|
{
|
|
AcDbText *pText = NULL;
|
|
for (long i = 0; i < ssAll.Length(); i++)
|
|
{
|
|
acdbGetObjectId(id, ssAll[i]);
|
|
acdbOpenObject(pText, id, AcDb::kForRead);
|
|
if (pText != NULL)
|
|
{
|
|
CString strText = pText->textString();
|
|
pText->close();
|
|
if (!IsValidNumber(strText))
|
|
{
|
|
ssDel += ssAll[i];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else if (nType == 4) // 图块属性值
|
|
{
|
|
AcDbBlockReference *pRef = NULL;
|
|
AcGePoint3d ptLoc;
|
|
CString strText;
|
|
int nAttCount = 0;
|
|
for (long i = 0; i < ssAll.Length(); i++)
|
|
{
|
|
acdbGetObjectId(id, ssAll[i]);
|
|
acdbOpenObject(pRef, id, AcDb::kForRead);
|
|
if (pRef != NULL)
|
|
{
|
|
AcDbObjectIterator *pIterator = NULL;
|
|
pIterator = pRef->attributeIterator();
|
|
for (pIterator->start(); !pIterator->done(); pIterator->step())
|
|
{
|
|
//遍历块中实体
|
|
AcDbEntity *pEnt = NULL;
|
|
AcDbAttribute *pAtt = NULL;
|
|
AcDbObjectId att_id;
|
|
att_id = pIterator -> objectId();
|
|
acdbOpenAcDbEntity(pEnt, att_id, AcDb::kForRead);
|
|
pAtt = AcDbAttribute::cast(pEnt);
|
|
if(pAtt != NULL)
|
|
{
|
|
strText = pAtt->textString();
|
|
nAttCount++;
|
|
}
|
|
pEnt->close();
|
|
}
|
|
delete pIterator;
|
|
pRef->close();
|
|
|
|
if (nAttCount == 1) // 块包含一个属性字
|
|
{
|
|
if (!IsValidNumber(strText))
|
|
{
|
|
ssDel += ssAll[i];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else if (nType == 5) // 上华标高
|
|
{
|
|
CString strText;
|
|
TDbSymbElevation *pEle = NULL;
|
|
for (long i = 0; i < ssAll.Length(); i++)
|
|
{
|
|
acdbGetObjectId(id, ssAll[i]);
|
|
acdbOpenObject(pEle, id, AcDb::kForRead);
|
|
if (pEle != NULL)
|
|
{
|
|
strText = pEle->GetText();
|
|
pEle->close();
|
|
if (!IsValidNumber(strText))
|
|
{
|
|
ssDel += ssAll[i];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
m_ssAllOrigin -= ssDel;
|
|
}
|
|
|
|
bool CSetDataSourceDlg::IsValidNumber(const CString strText)
|
|
{
|
|
if (strText.IsEmpty())
|
|
{
|
|
return false;
|
|
}
|
|
|
|
bool bRet = true;
|
|
TCHAR ch;
|
|
for (int j = 0; j < strText.GetLength(); j++)
|
|
{
|
|
ch = strText.GetAt(j);
|
|
if ((ch < _T('0') || ch > _T('9')) &&
|
|
ch != _T('.') && ch != _T('-') && ch != _T('+'))
|
|
{
|
|
bRet = false;
|
|
break;
|
|
}
|
|
}
|
|
|
|
return bRet;
|
|
}
|
|
|
|
bool CSetDataSourceDlg::IsValidNumber(double dVal)
|
|
{
|
|
if (dVal >= m_dMinVal && dVal <= m_dMaxVal)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
void CSetDataSourceDlg::GetPickSet(PickSet &ssAll)
|
|
{
|
|
ssAll += m_ssAllCur;
|
|
}
|
|
|
|
void CSetDataSourceDlg::OnSelchangeCombodatasourcetype()
|
|
{
|
|
UpdateData(TRUE);
|
|
GetMinMaxVal(m_ssAllOrigin);
|
|
UpDateEdt();
|
|
}
|
|
|
|
void CSetDataSourceDlg::OnChangeEdtMin()
|
|
{
|
|
if (m_bChange)
|
|
{
|
|
UpdateData(TRUE);
|
|
|
|
m_dMinVal = 0.0;
|
|
m_dMaxVal = 0.0;
|
|
|
|
CWnd *pWnd = NULL;
|
|
CString strTmp;
|
|
pWnd = GetDlgItem(IDC_EDT_MAX);
|
|
if (pWnd != NULL)
|
|
{
|
|
|
|
pWnd->GetWindowText(strTmp);
|
|
m_dMaxVal = _tstof(strTmp);
|
|
}
|
|
|
|
pWnd = GetDlgItem(IDC_EDT_MIN);
|
|
if (pWnd != NULL)
|
|
{
|
|
pWnd->GetWindowText(strTmp);
|
|
m_dMinVal = _tstof(strTmp);
|
|
}
|
|
|
|
if (m_dMaxVal > m_dMinVal)
|
|
{
|
|
m_comDataSouceType.GetWindowText(m_sDataTypeText);
|
|
int nType = GetDataSourceType();
|
|
PickSet ssAll(SS_FREE);
|
|
ssAll += m_ssAllOrigin;
|
|
FiltrateDataSource(ssAll, nType, true);
|
|
m_ssAllCur.Free();
|
|
m_ssAllCur += ssAll;
|
|
}
|
|
}
|
|
}
|
|
|
|
void CSetDataSourceDlg::ChangeDataSoureColor(std::map<AcDbObjectId,Adesk::UInt16> &mapOriginColor, Entity &ent, Adesk::UInt16 nColor)
|
|
{
|
|
Adesk::UInt16 nOriginColor = 0;
|
|
AcDbObjectId id = AcDbObjectId::kNull;
|
|
acdbGetObjectId(id, ent);
|
|
if (ent.Is(_T("ATS_TEXT")))
|
|
{
|
|
TDbText *pText = NULL;
|
|
acdbOpenObject(pText, id, AcDb::kForWrite);
|
|
if (pText != NULL)
|
|
{
|
|
nOriginColor = pText->colorIndex();
|
|
pText->setColorIndex(nColor);
|
|
pText->close();
|
|
}
|
|
}
|
|
else if (ent.Is(_T("TEXT")))
|
|
{
|
|
AcDbText *pText = NULL;
|
|
acdbOpenObject(pText, id, AcDb::kForWrite);
|
|
if (pText != NULL)
|
|
{
|
|
nOriginColor = pText->colorIndex();
|
|
pText->setColorIndex(nColor);
|
|
pText->close();
|
|
}
|
|
}
|
|
else if (ent.Is(_T("POINT"))) // 点对象Z坐标
|
|
{
|
|
AcDbPoint *pPt = NULL;
|
|
acdbOpenObject(pPt, id, AcDb::kForWrite);
|
|
if(pPt != NULL)
|
|
{
|
|
nOriginColor = pPt->colorIndex();
|
|
pPt->setColorIndex(nColor);
|
|
pPt->close();
|
|
}
|
|
}
|
|
else if (ent.Is(_T("CIRCLE"))) // 圆对象Z坐标
|
|
{
|
|
AcDbCircle *pCir = NULL;
|
|
acdbOpenObject(pCir, id, AcDb::kForWrite);
|
|
if(pCir != NULL)
|
|
{
|
|
nOriginColor = pCir->colorIndex();
|
|
pCir->setColorIndex(nColor);
|
|
pCir->close();
|
|
}
|
|
}
|
|
else if (ent.Is(_T("INSERT")))
|
|
{
|
|
if (m_nDataSourceType == 0) // 图块Z坐标
|
|
{
|
|
AcDbBlockReference *pRef = NULL;
|
|
acdbOpenObject(pRef, id, AcDb::kForWrite);
|
|
if (pRef != NULL)
|
|
{
|
|
nOriginColor = pRef->colorIndex();
|
|
pRef->setColorIndex(nColor);
|
|
AcDbObjectId idRec = pRef->blockTableRecord();
|
|
AcDbBlockTableRecord *pBlkTblRec = NULL;
|
|
acdbOpenObject(pBlkTblRec, idRec, AcDb::kForWrite);
|
|
if (pBlkTblRec != NULL)
|
|
{
|
|
AcDbBlockTableRecordIterator *pIter = NULL;
|
|
pBlkTblRec->newIterator(pIter);
|
|
AcDbEntity *pEnt = NULL;
|
|
for (pIter->start(); !pIter->done(); pIter->step())
|
|
{
|
|
Acad::ErrorStatus es = pIter->getEntity(pEnt, AcDb::kForWrite);
|
|
if (pEnt != NULL && es == Acad::eOk)
|
|
{
|
|
pEnt->setColorIndex(nColor);
|
|
pEnt->close();
|
|
}
|
|
}
|
|
delete pIter;
|
|
pIter = NULL;
|
|
|
|
pBlkTblRec->close();
|
|
}
|
|
pRef->close();
|
|
}
|
|
}
|
|
else if (m_nDataSourceType == 1) // 图块属性值
|
|
{
|
|
AcDbBlockReference *pRef = NULL;
|
|
Acad::ErrorStatus st = acdbOpenObject(pRef, id, AcDb::kForWrite);
|
|
if (pRef != NULL)
|
|
{
|
|
AcDbObjectIterator *pIterator = NULL;
|
|
pIterator = pRef->attributeIterator();
|
|
for (pIterator->start(); !pIterator->done(); pIterator->step())
|
|
{
|
|
//遍历块中实体
|
|
AcDbEntity *pEnt = NULL;
|
|
AcDbAttribute *pAtt = NULL;
|
|
AcDbObjectId att_id;
|
|
att_id = pIterator -> objectId();
|
|
acdbOpenAcDbEntity(pEnt, att_id, AcDb::kForWrite);
|
|
pAtt = AcDbAttribute::cast(pEnt);
|
|
if(pAtt != NULL)
|
|
{
|
|
nOriginColor = pAtt->colorIndex();
|
|
pAtt->setColorIndex(nColor);
|
|
}
|
|
pEnt->close();
|
|
}
|
|
delete pIterator;
|
|
pRef->close();
|
|
|
|
}
|
|
}
|
|
}
|
|
else if (ent.Is(_T("ATS_ELEVATION"))) // 上华标高
|
|
{
|
|
CString strText;
|
|
TDbSymbElevation *pEle = NULL;
|
|
Acad::ErrorStatus st = acdbOpenObject(pEle, id, AcDb::kForWrite);
|
|
if (pEle != NULL)
|
|
{
|
|
CString test = pEle->GetText();
|
|
nOriginColor = pEle->colorIndex();
|
|
pEle->setColorIndex(nColor);
|
|
pEle->close();
|
|
}
|
|
}
|
|
|
|
mapOriginColor.insert(std::make_pair(id, nOriginColor));
|
|
}
|
|
|
|
void CSetDataSourceDlg::RecoverDataSoureColor(std::map<AcDbObjectId, Adesk::UInt16> &mapOriginColor, Entity &ent)
|
|
{
|
|
Adesk::UInt16 nColor = 0;
|
|
AcDbObjectId id = AcDbObjectId::kNull;
|
|
acdbGetObjectId(id, ent);
|
|
std::map<AcDbObjectId, Adesk::UInt16>::iterator it;
|
|
for (it = mapOriginColor.begin(); it != mapOriginColor.end(); it++)
|
|
{
|
|
if ((*it).first == id)
|
|
{
|
|
nColor = (*it).second;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (it == mapOriginColor.end())
|
|
{
|
|
return;
|
|
}
|
|
|
|
if (ent.Is(_T("ATS_TEXT")))
|
|
{
|
|
TDbText *pText = NULL;
|
|
acdbOpenObject(pText, id, AcDb::kForWrite);
|
|
if (pText != NULL)
|
|
{
|
|
pText->setColorIndex(nColor);
|
|
pText->close();
|
|
}
|
|
}
|
|
else if (ent.Is(_T("TEXT")))
|
|
{
|
|
AcDbText *pText = NULL;
|
|
acdbOpenObject(pText, id, AcDb::kForWrite);
|
|
if (pText != NULL)
|
|
{
|
|
pText->setColorIndex(nColor);
|
|
pText->close();
|
|
}
|
|
}
|
|
else if (ent.Is(_T("POINT"))) // 点对象Z坐标
|
|
{
|
|
AcDbPoint *pPt = NULL;
|
|
acdbOpenObject(pPt, id, AcDb::kForWrite);
|
|
if(pPt != NULL)
|
|
{
|
|
pPt->setColorIndex(nColor);
|
|
pPt->close();
|
|
}
|
|
}
|
|
else if (ent.Is(_T("CIRCLE"))) // 圆对象Z坐标
|
|
{
|
|
AcDbCircle *pCir = NULL;
|
|
acdbOpenObject(pCir, id, AcDb::kForWrite);
|
|
if(pCir != NULL)
|
|
{
|
|
pCir->setColorIndex(nColor);
|
|
pCir->close();
|
|
}
|
|
}
|
|
else if (ent.Is(_T("INSERT")))
|
|
{
|
|
if (m_nDataSourceType == 0) // 图块Z坐标
|
|
{
|
|
AcDbBlockReference *pRef = NULL;
|
|
acdbOpenObject(pRef, id, AcDb::kForWrite);
|
|
if (pRef != NULL)
|
|
{ AcDbObjectId idRec = pRef->blockTableRecord();
|
|
pRef->setColorIndex(nColor);
|
|
AcDbBlockTableRecord *pBlkTblRec = NULL;
|
|
acdbOpenObject(pBlkTblRec, idRec, AcDb::kForWrite);
|
|
if (pBlkTblRec != NULL)
|
|
{
|
|
AcDbBlockTableRecordIterator *pIter = NULL;
|
|
pBlkTblRec->newIterator(pIter);
|
|
AcDbEntity *pEnt = NULL;
|
|
for (pIter->start(); !pIter->done(); pIter->step())
|
|
{
|
|
Acad::ErrorStatus es = pIter->getEntity(pEnt, AcDb::kForWrite);
|
|
if (pEnt != NULL && es == Acad::eOk)
|
|
{
|
|
pEnt->setColorIndex(nColor);
|
|
pEnt->close();
|
|
}
|
|
}
|
|
delete pIter;
|
|
pIter = NULL;
|
|
|
|
pBlkTblRec->close();
|
|
}
|
|
pRef->close();
|
|
}
|
|
}
|
|
else if (m_nDataSourceType == 1) // 图块属性值
|
|
{
|
|
AcDbBlockReference *pRef = NULL;
|
|
acdbOpenObject(pRef, id, AcDb::kForWrite);
|
|
if (pRef != NULL)
|
|
{
|
|
AcDbObjectIterator *pIterator = NULL;
|
|
pIterator = pRef->attributeIterator();
|
|
for (pIterator->start(); !pIterator->done(); pIterator->step())
|
|
{
|
|
//遍历块中实体
|
|
AcDbEntity *pEnt = NULL;
|
|
AcDbAttribute *pAtt = NULL;
|
|
AcDbObjectId att_id;
|
|
att_id = pIterator -> objectId();
|
|
acdbOpenAcDbEntity(pEnt, att_id, AcDb::kForWrite);
|
|
pAtt = AcDbAttribute::cast(pEnt);
|
|
if(pAtt != NULL)
|
|
{
|
|
pAtt->setColorIndex(nColor);
|
|
}
|
|
pEnt->close();
|
|
}
|
|
delete pIterator;
|
|
pRef->close();
|
|
|
|
}
|
|
}
|
|
}
|
|
else if (ent.Is(_T("ATS_ELEVATION"))) // 上华标高
|
|
{
|
|
CString strText;
|
|
TDbSymbElevation *pEle = NULL;
|
|
acdbOpenObject(pEle, id, AcDb::kForWrite);
|
|
if (pEle != NULL)
|
|
{
|
|
pEle->setColorIndex(nColor);
|
|
pEle->close();
|
|
}
|
|
}
|
|
}
|
|
|
|
void CSetDataSourceDlg::UpDateEdt()
|
|
{
|
|
m_bChange = false;
|
|
CString strTmp;
|
|
CWnd *pWnd = NULL;
|
|
pWnd = GetDlgItem(IDC_EDT_MIN);
|
|
if (pWnd != NULL)
|
|
{
|
|
strTmp.Format(_T("%.3f"), m_dMinVal);
|
|
strTmp.TrimRight(_T("0"));
|
|
strTmp.TrimRight(_T("."));
|
|
pWnd->SetWindowText(strTmp);
|
|
}
|
|
|
|
pWnd = GetDlgItem(IDC_EDT_MAX);
|
|
if (pWnd != NULL)
|
|
{
|
|
strTmp.Format(_T("%.3f"), m_dMaxVal);
|
|
strTmp.TrimRight(_T("0"));
|
|
strTmp.TrimRight(_T("."));
|
|
pWnd->SetWindowText(strTmp);
|
|
}
|
|
m_bChange = true;
|
|
|
|
UpdateData(FALSE);
|
|
}
|
|
|
|
void CSetDataSourceDlg::CleanDataSource(PickSet &ssAll)
|
|
{
|
|
CString strText;
|
|
PickSet ssDel(SS_FREE);
|
|
for (long i = 0; i < ssAll.Length(); i++)
|
|
{
|
|
strText = _T("");
|
|
strText = ReadXdata(ssAll[i], _T("Del"));
|
|
if (strText.Compare(_T("1")) == 0)
|
|
{
|
|
ssDel += ssAll[i];
|
|
}
|
|
}
|
|
|
|
ssAll -= ssDel;
|
|
}
|
|
|
|
void CSetDataSourceDlg::SetExternalBlk(Entity &ent)
|
|
{
|
|
m_entExternalBlk = ent;
|
|
}
|
|
|
|
void CSetDataSourceDlg::SetExternalBlk(bool bExternalBlk)
|
|
{
|
|
m_bExternalBlock = bExternalBlk;
|
|
}
|
|
|
|
void CSetDataSourceDlg::SetExnternalBlkMat(const AcGeMatrix3d &mat)
|
|
{
|
|
m_mat = mat;
|
|
}
|
|
|
|
void CSetDataSourceDlg::GetEntFromExternalBlk(PickSet &ss)
|
|
{
|
|
// 根据数据类型获取外部参照中的实体
|
|
AcDbObjectId idRef;
|
|
acdbGetObjectId(idRef, m_entExternalBlk);
|
|
AcDbBlockReference *pRef = NULL;
|
|
acdbOpenObject(pRef, idRef, AcDb::kForRead);
|
|
|
|
if (pRef)
|
|
{
|
|
AcDbObjectId idRec = pRef->blockTableRecord();
|
|
|
|
AcDbBlockTableRecord *pRec = NULL;
|
|
acdbOpenObject(pRec, idRec, AcDb::kForRead);
|
|
if (pRec)
|
|
{
|
|
AcDbBlockTableRecordIterator *pItr = NULL;
|
|
pRec->newIterator(pItr);
|
|
AcDbObjectId idEnt;
|
|
for (pItr->start(); !pItr->done(); pItr->step())
|
|
{
|
|
pItr->getEntityId(idEnt);
|
|
|
|
ads_name sname;
|
|
acdbGetAdsName(sname,idEnt);
|
|
Entity ent = sname;
|
|
|
|
if (m_ent.Is(_T("ATS_TEXT")) && ent.Is(_T("ATS_TEXT")))
|
|
{
|
|
ss += ent;
|
|
}
|
|
else if (m_ent.Is(_T("TEXT")) && ent.Is(_T("TEXT")))
|
|
{
|
|
ss += ent;
|
|
}
|
|
else if (m_ent.Is(_T("POINT")) && ent.Is(_T("POINT"))) // 点对象Z坐标
|
|
{
|
|
ss += ent;
|
|
}
|
|
else if (m_ent.Is(_T("CIRCLE")) && ent.Is(_T("CIRCLE"))) // 圆对象Z坐标
|
|
{
|
|
ss += ent;
|
|
}
|
|
else if (m_ent.Is(_T("INSERT")) && ent.Is(_T("INSERT")))
|
|
{
|
|
ss += ent;
|
|
}
|
|
else if (m_ent.Is(_T("ATS_ELEVATION")) && ent.Is(_T("ATS_ELEVATION"))) // 上华标高
|
|
{
|
|
ss += ent;
|
|
}
|
|
}
|
|
delete pItr;
|
|
pItr = NULL;
|
|
pRec->close();
|
|
}
|
|
pRef->close();
|
|
}
|
|
}
|
|
|
|
void CSetDataSourceDlg::OnButtonDel()
|
|
{
|
|
GetParent()->EnableWindow(TRUE);
|
|
GetParent()->SetFocus();
|
|
GetParent()->SetActiveWindow();
|
|
ShowWindow(SW_HIDE);
|
|
|
|
// 清除扩张数据"Del"为"1"的数据源
|
|
CleanDataSource(m_ssAllCur);
|
|
|
|
// 显示有效数据源
|
|
std::map<AcDbObjectId, Adesk::UInt16> mapColor;
|
|
Adesk::UInt16 nColor = 1;
|
|
for (long i = 0; i < m_ssAllCur.Length(); i++)
|
|
{
|
|
Entity s(m_ssAllCur[i]);
|
|
ChangeDataSoureColor(mapColor, s, nColor);
|
|
}
|
|
|
|
RBList rbMask(RTDXF0, _T("INSERT,TEXT,POINT,CIRCLE,ATS_TEXT,ATS_ELEVATION"), NULL);
|
|
Entity ent;
|
|
while (SelectEntity(_T("\n请点取需要删除的标高数据源<退出>:"), ent, rbMask) == RTNORM)
|
|
{
|
|
if (m_ssAllCur.IsInclude(ent))
|
|
{
|
|
m_ssAllCur -= ent;
|
|
WriteXdata(ent, _T("Del"), _T("1"));
|
|
RecoverDataSoureColor(mapColor, ent);
|
|
}
|
|
}
|
|
|
|
// 恢复数据源颜色
|
|
for (long j = 0; j < m_ssAllCur.Length(); j++)
|
|
{
|
|
Entity s(m_ssAllCur[i]);
|
|
RecoverDataSoureColor(mapColor, s);
|
|
}
|
|
|
|
//更新最大值最小值
|
|
long ii = m_ssAllCur.Length();
|
|
GetMinMaxVal(m_ssAllCur);
|
|
UpDateEdt();
|
|
|
|
GetParent()->EnableWindow(FALSE);
|
|
EnableWindow(TRUE);
|
|
SetActiveWindow();
|
|
ShowWindow(SW_SHOW);
|
|
}
|