945 lines
26 KiB
C++
945 lines
26 KiB
C++
// SpaceProperty.cpp : implementation file
|
||
//
|
||
|
||
#include "stdafx.h"
|
||
#include "resource.h"
|
||
#include "SpaceProperty.h"
|
||
#include "SpaceNameDlg.h"
|
||
#include "rxregsvc.h"
|
||
#include "SpaceNameClassDlg.h"
|
||
|
||
static const TCHAR *sMsgPrompt[]={
|
||
#include "SpaceProperty.hpp"
|
||
};
|
||
|
||
|
||
#ifdef _DEBUG
|
||
#define new DEBUG_NEW
|
||
#undef THIS_FILE
|
||
static char THIS_FILE[] = __FILE__;
|
||
#endif
|
||
|
||
|
||
//----------------------------start----------------------------
|
||
// sg add 081119,房间对象填充使用
|
||
CHatchPreviewCtrl::CHatchPreviewCtrl()
|
||
: CGsPreviewCtrl(0), m_dbPreview(true, true)
|
||
{
|
||
m_xSize = _AS_SYS_UNIT(800); //modifide by fxj090514 支持米单位
|
||
m_ySize = _AS_SYS_UNIT(600);//modifide by fxj090514 支持米单位
|
||
m_nScale = DocGetPScale();
|
||
m_nColorPattern = 7;
|
||
m_nColorFrame = 1;
|
||
m_nLineWeight = 0.0;
|
||
m_dAngle = 0; // sg add 090122
|
||
}
|
||
|
||
void CHatchPreviewCtrl::UpdateView()
|
||
{
|
||
int nCount = m_idArray.length();
|
||
for (int n=0; n<nCount; n++)
|
||
{
|
||
AcDbObjectId id = m_idArray[n];
|
||
OPENOBJ_BEGIN(id, AcDb::kForWrite, AcDbEntity, pEnt);
|
||
if (pEnt != NULL)
|
||
pEnt->erase();
|
||
OPENOBJ_END();
|
||
}
|
||
|
||
while (m_idArray.length())
|
||
m_idArray.removeLast();
|
||
|
||
AcDbBlockTable *pBlockTab = NULL;
|
||
VERIFY(m_dbPreview.getSymbolTable(pBlockTab, AcDb::kForRead)==Acad::eOk);
|
||
AcDbBlockTableRecord *pMspace = NULL;
|
||
VERIFY(pBlockTab->getAt(ACDB_MODEL_SPACE, pMspace, AcDb::kForWrite)==Acad::eOk);
|
||
pBlockTab->close();
|
||
|
||
XRectAngle rect(XPoint(), m_xSize, m_ySize);
|
||
XPoly2D polyRect(1);
|
||
rect.AsPoly2D(polyRect);
|
||
if (!m_sPattern)
|
||
{
|
||
}
|
||
else
|
||
{
|
||
// sg modify 090122,调用带旋转角度的同名函数
|
||
double dAngle = m_dAngle * PI / 180;
|
||
// AcDbHatch *pHatch = NewHatchFromPoly2D(polyRect, m_sPattern, m_nScale);
|
||
AcDbHatch *pHatch = NewHatchFromPoly2D(polyRect, m_sPattern, m_nScale, dAngle);
|
||
if (pHatch != NULL)
|
||
{
|
||
// modify by xly on 100908
|
||
//pHatch->setColorIndex(m_nColorPattern);
|
||
pHatch->setColor(m_cColor);
|
||
AcDbObjectId idNew;
|
||
if (pMspace->appendAcDbEntity(idNew, pHatch) == Acad::eOk)
|
||
{
|
||
m_idArray.append(idNew);
|
||
pHatch->close();
|
||
}
|
||
else
|
||
delete pHatch;
|
||
}
|
||
}
|
||
|
||
AcDbPolyline *pline = new AcDbPolyline;
|
||
PolyConvert(polyRect, *pline);
|
||
pline->setColorIndex(m_nColorFrame);
|
||
pline->setConstantWidth(m_nLineWeight);
|
||
AcDbObjectId idNew;
|
||
if (pMspace->appendAcDbEntity(idNew, pline) == Acad::eOk)
|
||
{
|
||
m_idArray.append(idNew);
|
||
pline->close();
|
||
}
|
||
else
|
||
delete pline;
|
||
clearAll();
|
||
init(true);
|
||
|
||
XPoint ptTar(0, 0, 0);
|
||
XPoint position(0, 0, _AS_SYS_UNIT(1000));//modifide by fxj090514 支持米单位
|
||
AcGsView* pView = view();
|
||
pView->setView(position, ptTar, AcGeVector3d(0.0, 1.0, 0.0), // upvector
|
||
m_xSize*1.2, m_ySize*1.2);
|
||
|
||
AcGsModel *pModel = model();
|
||
pView->add(pMspace, pModel);
|
||
pMspace->close();
|
||
Invalidate();
|
||
}
|
||
//----------------------------end----------------------------
|
||
|
||
|
||
|
||
/////////////////////////////////////////////////////////////////////////////
|
||
// CSpaceProperty dialog
|
||
// lgh modify 101119,spacenam.txt文件格式进行了调整,使用新的机制,原先的代码无法使用
|
||
/*
|
||
BOOL GetSpaceNames(XStringList &lstSpaceNames)
|
||
{
|
||
XString sFile(256);
|
||
if (FindFile(_T("spacenam.txt"), sFile)) {
|
||
#if (ADS>15)
|
||
std::
|
||
#endif
|
||
ifstream in(sFile);
|
||
lstSpaceNames.Reset();
|
||
while(!!in) {
|
||
XAString sName(1024);
|
||
in >> (char *)sName;
|
||
if (!!sName) lstSpaceNames.Append(tstrnew(TString(sName)));
|
||
}
|
||
return TRUE;
|
||
}
|
||
return FALSE;
|
||
}
|
||
*/
|
||
BOOL GetSpaceNames(XStringList &lstSpaceNames)
|
||
{
|
||
lstSpaceNames.Reset();
|
||
XString sFile(256);
|
||
if (FindFile(_T("spacenam.txt"), sFile))
|
||
{
|
||
CSpaceFileOperator *pFileBase = new CSpaceFileOperator(sFile);
|
||
|
||
CSpaceDataTable dataTable;
|
||
CSpaceDataTable::InitKeyWords();
|
||
if (pFileBase->ReadFile(dataTable))
|
||
{
|
||
for (int i = 0; i < CSpaceDataTable::eNum; i++)
|
||
{
|
||
CStringArray arNames;
|
||
if (dataTable.GetNameAry(CSpaceDataTable::EKeyWord(i), arNames) > 0)
|
||
{
|
||
for (int j = 0; j < arNames.GetSize(); j++)
|
||
{
|
||
// XString xs(arNames[i]);
|
||
// 该字符串的声明周期交给lst管理
|
||
lstSpaceNames.Append(tstrnew(TString(arNames[j])));
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
delete pFileBase;
|
||
pFileBase = NULL;
|
||
}
|
||
|
||
return FALSE;
|
||
}
|
||
|
||
|
||
|
||
CSpaceProperty::CSpaceProperty(BOOL bHouse,CWnd* pParent /*=NULL*/)
|
||
: GlwCAcUiDialog(CSpaceProperty::IDD, pParent), m_bShowCodeList(TRUE)
|
||
{
|
||
//{{AFX_DATA_INIT(CSpaceProperty)
|
||
m_bHouse=bHouse;
|
||
m_csCode = _T("");
|
||
if (!m_bHouse)
|
||
{
|
||
m_csStaticCode=_T("编号:");
|
||
m_csStaticName=_T("名称:");
|
||
}
|
||
else
|
||
{
|
||
m_csStaticCode=_T("户号:");
|
||
m_csStaticName=_T("套型编号:");
|
||
}
|
||
|
||
m_csName = _T("");
|
||
// m_csHeight = _T("");//del by fxj 090602
|
||
m_csFloorThick = _T("120");
|
||
m_bMask = FALSE;
|
||
m_bHas3D = FALSE;
|
||
|
||
// add by xly 100907 粉刷层的变量
|
||
m_csPaintLayerWid = _T("0");
|
||
|
||
//}}AFX_DATA_INIT
|
||
GetSpaceNames(m_lstSpaceNames);
|
||
|
||
// delete by xly on 101111根据8.5需求修改该房间对象,支持房间名和面积都不标注
|
||
// int nSpFlag = DocGetSpaceDispMode();
|
||
//// if ((nSpFlag&SPF_CODE) != 0)
|
||
//// m_bShowCode = TRUE;
|
||
//// else
|
||
//// m_bShowCode = FALSE;
|
||
// if ((nSpFlag&SPF_NAME_AND_CODE) != 0) // sg modify 081119
|
||
// {
|
||
// m_bSpaceCode = TRUE;
|
||
// m_bSpaceName = TRUE;
|
||
// }
|
||
// else if ((nSpFlag&SPF_CODE) != 0)
|
||
// {
|
||
// m_bSpaceCode = TRUE;
|
||
// m_bSpaceName = FALSE;
|
||
// }
|
||
// else
|
||
// {
|
||
// m_bSpaceCode = FALSE;
|
||
// m_bSpaceName = TRUE;
|
||
// }
|
||
//
|
||
// if ((nSpFlag&SPF_UNIT) != 0)
|
||
// m_bShowUnit = TRUE;
|
||
// else
|
||
// m_bShowUnit = FALSE;
|
||
//
|
||
// if ((nSpFlag&SPF_AREA) != 0)
|
||
// m_bShowArea = TRUE;
|
||
// else
|
||
// m_bShowArea = FALSE;
|
||
|
||
m_bShowHatch = FALSE; // sg add 081124
|
||
m_csHatch = _T("SOLID");
|
||
m_dHatchScale = 100;
|
||
|
||
// delete by xly on 10909 支持真彩色
|
||
// m_nColor = 256; // 默认Bylayer
|
||
}
|
||
|
||
void CSpaceProperty::DoDataExchange(CDataExchange* pDX)
|
||
{
|
||
CDialog::DoDataExchange(pDX);
|
||
//{{AFX_DATA_MAP(CSpaceProperty)
|
||
DDX_Control(pDX, IDC_TEXTLIST, m_listTexts);
|
||
DDX_Text(pDX, IDC_CODE, m_csCode);
|
||
DDX_Text(pDX, IDC_NAME, m_csName);
|
||
DDX_Check(pDX, IDC_SPACE_MASK, m_bMask);
|
||
DDX_Check(pDX, IDC_HAS3D, m_bHas3D);
|
||
//del by fxj 090602
|
||
// DDX_Text(pDX, IDC_HEIGHT, m_csHeight);
|
||
// if (pDX->m_bSaveAndValidate && _tstof(m_csHeight)<_DIST_SNAP)
|
||
// pDX->Fail();
|
||
DDX_Text(pDX, IDC_FLOOR_THICK, m_csFloorThick);
|
||
// if (pDX->m_bSaveAndValidate && _tstof(m_csFloorThick)<_DIST_SNAP)//del by fxj 090521
|
||
// pDX->Fail();
|
||
// DDX_Radio(pDX,IDC_RADIO_NAME,m_bShowCode);
|
||
DDX_Check(pDX,IDC_CHECK_DIMAREA,m_bShowArea);
|
||
DDX_Check(pDX,IDC_CHECK_AREAUNIT,m_bShowUnit);
|
||
|
||
//--------add by fxj 080623---------
|
||
DDX_CBIndex(pDX, IDC_AREATYPE, m_nType);
|
||
DDX_Check(pDX, IDC_SHOW_OUTLINE, m_bShowOutline);
|
||
DDX_Check(pDX, IDC_HALAREA,m_bHalArea);
|
||
DDX_Text(pDX, IDC_STATIC_CODE, m_csStaticCode);
|
||
DDX_Text(pDX, IDC_STATIC_NAME, m_csStaticName);
|
||
|
||
//----------------------------------
|
||
GetDlgItem(IDC_TEXTLIST)->EnableWindow(m_nType==0); // add by fxj 080703
|
||
|
||
DDX_Check(pDX, IDC_CHECK_SPACECODE, m_bSpaceCode); // sg add 081119
|
||
DDX_Check(pDX, IDC_CHECK_SPACENAME, m_bSpaceName);
|
||
DDX_Check(pDX, IDC_CHECK_HATCH, m_bShowHatch); // sg add 081124
|
||
DDX_Control(pDX, IDC_STATIC_STYLE, m_wndHatch);
|
||
DDX_Control(pDX, IDC_COMBO_HATCHCOLOR, m_ctlColor);
|
||
DDX_Text(pDX, IDC_EDIT_SCALE , m_dHatchScale);
|
||
DDX_Text(pDX, IDC_EDIT_SPACEANGLE, m_nHatchAngle);
|
||
|
||
// sg add 090122
|
||
DDX_Control(pDX, IDC_SPIN_SPACEANGLE, m_angleSpin);
|
||
|
||
// add by xly 100907 粉刷层后控件的关联
|
||
DDX_Text(pDX, IDC_EDIT_LAYERWID, m_csPaintLayerWid);
|
||
//}}AFX_DATA_MAP
|
||
}
|
||
|
||
BEGIN_MESSAGE_MAP(CSpaceProperty, GlwCAcUiDialog)
|
||
//{{AFX_MSG_MAP(CSpaceProperty)
|
||
ON_EN_SETFOCUS(IDC_CODE, OnSetfocusCode)
|
||
ON_EN_SETFOCUS(IDC_NAME, OnSetfocusName)
|
||
ON_LBN_SELCHANGE(IDC_TEXTLIST, OnSelchangeTextlist)
|
||
ON_BN_CLICKED(IDC_EDITNAME, OnEditname)
|
||
ON_BN_CLICKED(IDC_HAS3D, OnHas3D)
|
||
ON_CBN_SELCHANGE(IDC_AREATYPE, OnSelchangeType)
|
||
ON_BN_CLICKED(IDC_CHECK_SPACECODE, OnBnClickedCheckSpaceCode) // sg add 081119
|
||
ON_BN_CLICKED(IDC_CHECK_SPACENAME, OnBnClickedCheckSpaceName)
|
||
ON_BN_CLICKED(IDC_CHECK_HATCH, OnClickHatch) // sg add 081124
|
||
ON_BN_CLICKED(IDC_STATIC_STYLE, OnStaticStyle)
|
||
ON_CBN_SELCHANGE(IDC_COMBO_HATCHCOLOR, OnSelchangeComboColor)
|
||
ON_WM_SETCURSOR() // sg add 081202
|
||
ON_EN_CHANGE(IDC_EDIT_SPACEANGLE, OnChangeEditSpaceAngle) // sg add 090218
|
||
ON_EN_KILLFOCUS(IDC_EDIT_SCALE, OnKillFocusScale)//add by fxj 090426
|
||
ON_BN_CLICKED(IDC_CHECK_DIMAREA, OnClickArea)//add by fxj 090514
|
||
ON_EN_KILLFOCUS(IDC_FLOOR_THICK, OnKillFocusThick)//add by fxj 090521
|
||
ON_EN_KILLFOCUS(IDC_EDIT_LAYERWID, OnKillFocusLayerWid)// add by xly on 100913
|
||
//}}AFX_MSG_MAP
|
||
END_MESSAGE_MAP()
|
||
|
||
|
||
/////////////////////////////////////////////////////////////////////////////
|
||
// CSpaceProperty message handlers
|
||
BOOL CSpaceProperty::OnInitDialog()
|
||
{
|
||
CDialog::OnInitDialog();
|
||
// sg add 090122
|
||
m_angleSpin.SetRange(0, 360);
|
||
|
||
GetDlgItem(IDC_FLOOR_THICK)->EnableWindow(m_bHas3D);
|
||
OnClickHatch(); // sg add 081124,设置“填充”部分是否可用
|
||
m_nHatchAngle = m_dSpareAngle;
|
||
XString sAngle = Angle2Str(m_dSpareAngle); // sg add 081215,角度精确度受控制
|
||
GetDlgItem(IDC_EDIT_SPACEANGLE)->SetWindowText(sAngle);
|
||
|
||
// 问题描述:选择颜色时只支持索引颜色一种,希望可以像CAD一样增加对真彩色和配色系统的支持。(TT10)
|
||
// 解决方法:把CAcUiColorComboBox换成CAcUiTrueColorComboBox,并替换相应的函数
|
||
// 修改人,修改时间:Zyu modify on 100322
|
||
// Begin
|
||
#if (ADS < 16)
|
||
// modify by xly 真彩色的兼容,兼容为一个变量
|
||
// sg add 081124,设置“填充颜色”
|
||
//int nItem = m_ctlColor.FindItemByColorIndex(m_nColor);
|
||
int nTempColor = m_cColor.colorIndex();
|
||
int nItem = m_ctlColor.FindItemByColorIndex(nTempColor);
|
||
#else
|
||
// modyfy by xly on 100908 真彩色的使用
|
||
//AcCmColor clrTemp;
|
||
//clrTemp.setColorIndex(m_nColor);
|
||
//int nItem = m_ctlColor.FindItemByColor(clrTemp);
|
||
int nItem = m_ctlColor.FindItemByColor(m_cColor);
|
||
#endif
|
||
|
||
if (nItem < 0)
|
||
{
|
||
#if (ADS < 16)
|
||
// modify by xly 真彩色的兼容,兼容为一个变量
|
||
/*m_ctlColor.AddColorToMRU(m_nColor);
|
||
nItem = m_ctlColor.FindItemByColorIndex(m_nColor);*/
|
||
m_ctlColor.AddColorToMRU(nTempColor);
|
||
nItem = m_ctlColor.FindItemByColorIndex(nTempColor);
|
||
#else
|
||
// modify by xly on 100908 真彩色的使用
|
||
/*m_ctlColor.AddColorToMRU(clrTemp);
|
||
nItem = m_ctlColor.FindItemByColor(clrTemp);*/
|
||
m_ctlColor.AddColorToMRU(m_cColor);
|
||
nItem = m_ctlColor.FindItemByColor(m_cColor);
|
||
#endif
|
||
}
|
||
// End
|
||
|
||
if (nItem >= 0)
|
||
{
|
||
m_ctlColor.SetCurSel(nItem);
|
||
}
|
||
GetDlgItem(IDC_CHECK_AREAUNIT)->EnableWindow(m_bShowArea);//add by fxj 090514
|
||
UpdatePreview(); // sg add 081124,获取“填充样式”
|
||
// [2010-3-25 wubo] C006-04 按照类型进行相应的操作
|
||
OnSelchangeType();
|
||
|
||
// add by xly on 101125 根据8.5对房间对象的修改调整对话框的显示情况
|
||
GetDlgItem(IDC_NAME)->EnableWindow(m_bSpaceName);
|
||
GetDlgItem(IDC_CODE)->EnableWindow(m_bSpaceCode);
|
||
if (m_nType == TDbSpace::kTotalArea)
|
||
{
|
||
GetDlgItem(IDC_CODE)->EnableWindow(FALSE);
|
||
}
|
||
|
||
return TRUE; // return TRUE unless you set the focus to a control
|
||
// EXCEPTION: OCX Property Pages should return FALSE
|
||
}
|
||
|
||
//////////////////////////////////////////////////////////////
|
||
// 关标移到房间编号时, 初始化编号列表, 并把_T("编辑...")按钮无效
|
||
void CSpaceProperty::OnSetfocusCode()
|
||
{
|
||
CWnd *pWnd = GetDlgItem(IDC_EDITNAME);
|
||
ASSERT(pWnd);
|
||
pWnd->EnableWindow(FALSE);
|
||
if (m_nType == 0)
|
||
{
|
||
GetDlgItem(IDC_TEXTLIST)->EnableWindow(TRUE);
|
||
m_bShowCodeList = TRUE;
|
||
m_listTexts.ShowWindow(SW_SHOW);
|
||
m_listTexts.ResetContent();
|
||
for (int i=0; i<m_lstSpaceCodes.Length(); i++)
|
||
m_listTexts.AddString(m_lstSpaceCodes[i]);
|
||
}
|
||
else
|
||
GetDlgItem(IDC_TEXTLIST)->EnableWindow(FALSE);
|
||
}
|
||
|
||
//////////////////////////////////////////////////////////////
|
||
// 关标移到房间名称时, 初始化名称列表, 并把_T("编辑...")按钮有效
|
||
void CSpaceProperty::OnSetfocusName()
|
||
{
|
||
CWnd *pWnd = GetDlgItem(IDC_EDITNAME);
|
||
ASSERT(pWnd);
|
||
// pWnd->EnableWindow(TRUE); // sg modify 081127
|
||
if (m_nType == 0)
|
||
{
|
||
pWnd->EnableWindow(TRUE);
|
||
GetDlgItem(IDC_TEXTLIST)->EnableWindow(TRUE);
|
||
m_bShowCodeList = FALSE;
|
||
m_listTexts.ShowWindow(SW_SHOW);
|
||
m_listTexts.ResetContent();
|
||
for (int i=0; i<m_lstSpaceNames.Length(); i++)
|
||
m_listTexts.AddString(m_lstSpaceNames[i]);
|
||
}
|
||
else
|
||
{
|
||
pWnd->EnableWindow(FALSE);
|
||
GetDlgItem(IDC_TEXTLIST)->EnableWindow(FALSE);
|
||
}
|
||
}
|
||
|
||
/////////////////////////////////////////////
|
||
// 假如为名字列表的话,改变当前行时,填入名称
|
||
void CSpaceProperty::OnSelchangeTextlist()
|
||
{
|
||
if (!m_bShowCodeList)
|
||
{
|
||
int nCurSel = m_listTexts.GetCurSel();
|
||
if (nCurSel>=0 && nCurSel!=LB_ERR)
|
||
{
|
||
CString csText;
|
||
m_listTexts.GetText(nCurSel, csText);
|
||
CWnd *pWnd = GetDlgItem(IDC_NAME);
|
||
ASSERT(pWnd);
|
||
pWnd->SetWindowText(csText);
|
||
}
|
||
}
|
||
}
|
||
|
||
void CSpaceProperty::OnSelchangeType()
|
||
{
|
||
UpdateData(TRUE);
|
||
CString csStyle;
|
||
CWnd *pWnd = GetDlgItem(IDC_AREATYPE);
|
||
pWnd->GetWindowText(csStyle);
|
||
if (csStyle == _T("套内面积"))
|
||
{
|
||
m_csStaticCode = _T("户号:");
|
||
m_csStaticName = _T("套型编号:");
|
||
|
||
// add by xly 编辑套内面积对象时修改控件的显示文字
|
||
SetCtrlText(true);
|
||
}
|
||
else
|
||
{
|
||
m_csStaticCode = _T("编号:");
|
||
m_csStaticName = _T("名称:");
|
||
|
||
// add by xly 编辑套内面积对象时修改控件的显示文字
|
||
SetCtrlText(false);
|
||
}
|
||
if (csStyle==_T("洞口面积"))//add by fxj 090724
|
||
{
|
||
m_bHas3D=FALSE;
|
||
}
|
||
|
||
// [2010-3-25 wubo] C006-04 当类型为建筑轮廓面积时,“编号”、“显示房间编号”
|
||
// 和“显示房间名称”这几项均灰显,且将“显示房间名称”置为选中状态,
|
||
// “显示房间编号”置于非选中状态。
|
||
if (m_nType == TDbSpace::kTotalArea)
|
||
{
|
||
// delete by xly 101125 根据8.5对房间对象的修改名称可以不显示
|
||
/*m_bSpaceCode = FALSE;
|
||
m_bSpaceName = TRUE;*/
|
||
|
||
GetDlgItem(IDC_CODE)->EnableWindow(FALSE); // 编号
|
||
GetDlgItem(IDC_CHECK_SPACECODE)->EnableWindow(FALSE); // 【显示房间编号】控件
|
||
|
||
// delete by xly on 101125 根据8.5对房间对象的修改调整对话框的显示情况
|
||
//GetDlgItem(IDC_CHECK_SPACENAME)->EnableWindow(FALSE); // 【显示房间名称】控件
|
||
}
|
||
else
|
||
{
|
||
GetDlgItem(IDC_CODE)->EnableWindow(TRUE); // 编号
|
||
GetDlgItem(IDC_CHECK_SPACECODE)->EnableWindow(TRUE); // 【显示房间编号】控件
|
||
GetDlgItem(IDC_CHECK_SPACENAME)->EnableWindow(TRUE); // 【显示房间名称】控件
|
||
}
|
||
|
||
// add by xly on100907 粉刷层厚,套内阳台支持粉刷层设置
|
||
if (csStyle==_T("套内阳台面积") || csStyle == _T("套内面积"))
|
||
{
|
||
GetDlgItem(IDC_EDIT_LAYERWID)->EnableWindow(FALSE);
|
||
GetDlgItem(IDC_STC_PAINLAYER)->EnableWindow(FALSE);
|
||
}
|
||
else
|
||
{
|
||
GetDlgItem(IDC_EDIT_LAYERWID)->EnableWindow(TRUE);
|
||
GetDlgItem(IDC_STC_PAINLAYER)->EnableWindow(TRUE);
|
||
}
|
||
|
||
UpdateData(FALSE);
|
||
}
|
||
|
||
/////////////////////////////////////////////////////
|
||
// 用全屏编辑器编辑房间名称列表
|
||
void CSpaceProperty::OnEditname()
|
||
{
|
||
CAcModuleResourceOverride vTemp;
|
||
CSpaceNameDlg dlg(this);
|
||
if (dlg.DoModal() == IDOK)
|
||
{
|
||
GetSpaceNames(m_lstSpaceNames);
|
||
CWnd *pWnd = GetDlgItem(IDC_NAME);
|
||
pWnd->SetFocus();
|
||
}
|
||
}
|
||
|
||
void CSpaceProperty::OnHas3D()
|
||
{
|
||
m_bHas3D = !m_bHas3D;
|
||
GetDlgItem(IDC_FLOOR_THICK)->EnableWindow(m_bHas3D);
|
||
}
|
||
|
||
void CSpaceProperty::OnBnClickedCheckSpaceCode() // sg add 081124
|
||
{
|
||
UpdateData(TRUE);
|
||
// delete by xly on 101111 8.5需求支持房间对象名称和编号都不显示
|
||
/*if (!m_bSpaceCode)
|
||
{
|
||
m_bSpaceName = TRUE;
|
||
}*/
|
||
|
||
// add by xly on 101125 根据8.5对房间对象的修改调整对话框的显示情况
|
||
GetDlgItem(IDC_CODE)->EnableWindow(m_bSpaceCode);
|
||
UpdateData(FALSE);
|
||
}
|
||
|
||
void CSpaceProperty::OnBnClickedCheckSpaceName() // sg add 081124
|
||
{
|
||
UpdateData(TRUE);
|
||
// delete by xly on 101111 8.5需求支持房间对象名称和编号都不显示
|
||
/*if (!m_bSpaceName)
|
||
{
|
||
m_bSpaceCode = TRUE;
|
||
}*/
|
||
|
||
// add by xly on 101125 根据8.5对房间对象的修改调整对话框的显示情况
|
||
GetDlgItem(IDC_NAME)->EnableWindow(m_bSpaceName);
|
||
UpdateData(FALSE);
|
||
}
|
||
|
||
void CSpaceProperty::OnClickHatch() // sg add 081124,sg add 090122,控制填充部分是否可编辑
|
||
{
|
||
UpdateData(TRUE);
|
||
GetDlgItem(IDC_STATIC_STYLE)->EnableWindow(m_bShowHatch);
|
||
GetDlgItem(IDC_COMBO_HATCHCOLOR)->EnableWindow(m_bShowHatch);
|
||
GetDlgItem(IDC_EDIT_SCALE)->EnableWindow(m_bShowHatch);
|
||
GetDlgItem(IDC_EDIT_SPACEANGLE)->EnableWindow(m_bShowHatch);
|
||
GetDlgItem(IDC_SPIN_SPACEANGLE)->EnableWindow(m_bShowHatch);
|
||
UpdateData(FALSE);
|
||
}
|
||
void CSpaceProperty::OnClickArea()//add by fxj 090514
|
||
{
|
||
m_bShowArea=!m_bShowArea;
|
||
GetDlgItem(IDC_CHECK_AREAUNIT)->EnableWindow(m_bShowArea);
|
||
}
|
||
void CSpaceProperty::OnKillFocusThick()//add by fxj 090521
|
||
{
|
||
CDataExchange dx0(this, TRUE);
|
||
CString szText;
|
||
DDX_Text(&dx0, IDC_FLOOR_THICK, szText);
|
||
|
||
double dThick = _tstof(szText);
|
||
if (szText== _T("")||dThick<-1E-6)
|
||
{
|
||
}
|
||
else
|
||
m_csFloorThick = szText;
|
||
|
||
CDataExchange dx1(this, FALSE);
|
||
DDX_Text(&dx1, IDC_FLOOR_THICK, m_csFloorThick);
|
||
}
|
||
void CSpaceProperty::OnStaticStyle() // sg add 081124,选择填充效果
|
||
{
|
||
if (!AT_loaded(_T("tch_blklib")))
|
||
{
|
||
int nRet = acrxLoadModule(_T("tch_blklib.arx"), Adesk::kTrue, true);
|
||
if (!nRet)
|
||
{
|
||
return;
|
||
}
|
||
}
|
||
|
||
RBList rbCmd = ads_buildlist(RTSTR, _T("ITUAN"), RTSTR,
|
||
(const TCHAR*)(m_csHatch), NULL);
|
||
resbuf *rbRes = NULL;
|
||
if (ads_invoke(rbCmd, &rbRes)==RTNORM && rbRes)
|
||
{
|
||
if (rbRes && rbRes->restype==RTSTR)
|
||
{
|
||
m_csHatch = rbRes->resval.rstring;
|
||
}
|
||
ads_relrb(rbRes);
|
||
}
|
||
UpdatePreview();
|
||
|
||
SetFocus(); // sg add 081211,需要强制设置CAD不可用,而使焦点留在当前对话框
|
||
GetParent()->EnableWindow(false);
|
||
EnableWindow(true);
|
||
}
|
||
|
||
void CSpaceProperty::UpdatePreview() // sg add 081124,填充效果预览
|
||
{
|
||
if (m_csHatch.IsEmpty())
|
||
{
|
||
m_csHatch = _T("SOLID");
|
||
}
|
||
m_wndHatch.SetPattern(m_csHatch);
|
||
|
||
// modify by xly on 100908 真彩色的使用
|
||
m_wndHatch.SetColorPattern1(m_cColor);
|
||
|
||
m_wndHatch.SetAngle(m_nHatchAngle);
|
||
m_wndHatch.UpdateView();
|
||
}
|
||
|
||
BOOL CSpaceProperty::DestroyWindow()
|
||
{
|
||
m_wndHatch.clearAll();
|
||
return CDialog::DestroyWindow();
|
||
}
|
||
|
||
void CSpaceProperty::PostNcDestroy()
|
||
{
|
||
m_wndHatch.clearAll();
|
||
CDialog::PostNcDestroy();
|
||
}
|
||
|
||
void CSpaceProperty::OnSelchangeComboColor() // sg add 081124,获取最新填充颜色,刷新m_nColor
|
||
{
|
||
UpdateData(TRUE);
|
||
// Zyu modify on 100322
|
||
// 把CAcUiColorComboBox换成CAcUiTrueColorComboBox后替换相应的函数
|
||
// Begin
|
||
#if ( ADS < 16 )
|
||
|
||
// modify by xly on 100909 真彩色的使用兼容到一个变量m_cColor
|
||
int nIndex = m_ctlColor.GetCurrentItemColorIndex();
|
||
m_cColor.setColorIndex(nIndex);
|
||
#else
|
||
// modify by xly on 100908 真彩色的使用
|
||
//AcCmColor clrTemp;
|
||
//m_ctlColor.GetCurrentItemColor(clrTemp);
|
||
//int nIndex = clrTemp.colorIndex();
|
||
m_ctlColor.GetCurrentItemColor(m_cColor);
|
||
#endif
|
||
// End
|
||
|
||
// modify by xly on 100908 真彩色的使用,提前到 (ADS < 16)分支使用
|
||
// GetCurrentItemColor不支持返回值,不做判断,都更新显示
|
||
//if (nIndex >= 0)
|
||
//{
|
||
/*m_nColor = nIndex;
|
||
m_wndHatch.SetColorPattern(m_nColor);*/
|
||
m_wndHatch.SetColorPattern1(m_cColor);
|
||
m_wndHatch.UpdateView();
|
||
//}
|
||
}
|
||
|
||
BOOL CSpaceProperty::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
|
||
{
|
||
if (pWnd && (pWnd->m_hWnd == m_wndHatch.m_hWnd))
|
||
{
|
||
CAcModuleResourceOverride vTemp;
|
||
HCURSOR hIcon = AfxGetApp()->LoadCursor(IDC_CUR_PICK);
|
||
SetCursor( hIcon );
|
||
return TRUE;
|
||
}
|
||
return CDialog::OnSetCursor(pWnd, nHitTest, message);
|
||
}
|
||
|
||
void CSpaceProperty::OnChangeEditSpaceAngle()
|
||
{
|
||
CString csTemp;
|
||
GetDlgItem(IDC_EDIT_SPACEANGLE)->GetWindowText(csTemp);
|
||
m_nHatchAngle = _tstof(csTemp);
|
||
UpdateData(FALSE);
|
||
UpdatePreview();
|
||
}
|
||
void CSpaceProperty::OnKillFocusScale()//add by fxj 090426
|
||
{
|
||
UpdateData(TRUE);
|
||
}
|
||
|
||
// add by xly on 100913 判断csStr中是否含有字母
|
||
bool IsAllDigital(CString csStr)
|
||
{
|
||
int nLen = csStr.GetLength(),
|
||
nTemp(0);
|
||
for (int i=0; i<nLen; i++)
|
||
{
|
||
nTemp = (int)csStr.GetAt(i);
|
||
if ((nTemp<='z' && nTemp>='a') || (nTemp<='Z' && nTemp>='A'))
|
||
{
|
||
return false;
|
||
}
|
||
}
|
||
return true;
|
||
}
|
||
|
||
// add by xly on 100913 粉刷层厚,支持输入大于等于0的数字
|
||
void CSpaceProperty::OnKillFocusLayerWid()
|
||
{
|
||
CDataExchange dx0(this, TRUE);
|
||
CString szText;
|
||
DDX_Text(&dx0, IDC_EDIT_LAYERWID, szText);
|
||
|
||
double dThick = _tstof(szText);
|
||
if (szText== _T("")||dThick<-1E-6||!IsAllDigital(szText))
|
||
{
|
||
}
|
||
else
|
||
{
|
||
m_csPaintLayerWid.Format(_T("%g"),dThick);
|
||
}
|
||
|
||
CDataExchange dx1(this, FALSE);
|
||
DDX_Text(&dx1, IDC_EDIT_LAYERWID, m_csPaintLayerWid);
|
||
}
|
||
|
||
|
||
// add by xly 编辑套内面积对象时修改控件的显示文字
|
||
void CSpaceProperty::SetCtrlText(bool bIsTaoNei)
|
||
{
|
||
if (bIsTaoNei)// 套内面积对象
|
||
{
|
||
GetDlgItem(IDC_CHECK_SPACECODE)->SetWindowText(_T("显示户号"));
|
||
GetDlgItem(IDC_CHECK_SPACENAME)->SetWindowText(_T("显示套型编号"));
|
||
}
|
||
else // 非套内面积对象
|
||
{
|
||
GetDlgItem(IDC_CHECK_SPACECODE)->SetWindowText(_T("显示房间编号"));
|
||
GetDlgItem(IDC_CHECK_SPACENAME)->SetWindowText(_T("显示房间名称"));
|
||
}
|
||
}
|
||
|
||
////////////////////////////////
|
||
// 对象编辑: 房间
|
||
int EditSpace(AcDbObjectId id) //modified by fxj 090416 类型取代图层作判断依据,增加阳台类型。
|
||
{
|
||
/*
|
||
int cmddia;
|
||
xg_getvar(_T("CMDDIA"), &cmddia);
|
||
if (!cmddia)
|
||
return EditSpace0(id);
|
||
*/
|
||
OPENOBJ_BEGIN(id, AcDb::kForRead, TDbSpace, pSpace);
|
||
DList<TSpaceData> lstSpaces;
|
||
TSpaceData::GetAllSpaces(lstSpaces);
|
||
|
||
BOOL bHouse = FALSE;
|
||
CString layerOld = pSpace->layer();
|
||
int nSpaceType = pSpace->GetType(); // sg add 081226,房间类型
|
||
if (nSpaceType==TDbSpace::kHouseArea)//modified by fxj
|
||
bHouse = TRUE;
|
||
|
||
CSpaceProperty dlg(bHouse,acedGetAcadFrame());
|
||
dlg.m_csCode = pSpace->m_sCode;
|
||
dlg.m_csName = pSpace->m_sName;
|
||
dlg.m_bMask = pSpace->IsMask();
|
||
dlg.m_bHas3D = pSpace->Has3D();
|
||
// dlg.m_csHeight.Format(_T("%g"), pSpace->m_nHeight);//del by fxj 090602
|
||
dlg.m_csFloorThick.Format(_T("%g"), pSpace->GetFloorThick());
|
||
|
||
dlg.m_bShowHatch = pSpace->HasHatch(); // sg add 081124
|
||
dlg.m_csHatch = pSpace->GetHatchStyle();
|
||
|
||
// modify by xly on 10908 真彩色的使用
|
||
//dlg.m_nColor = pSpace->GetHatchColor();
|
||
#if ( ADS <16 )
|
||
dlg.m_cColor.setColorIndex(pSpace->GetHatchColor());
|
||
#else
|
||
dlg.m_cColor = pSpace->GetHatchTrueColor();
|
||
#endif
|
||
|
||
dlg.m_dHatchScale = pSpace->GetHatchScale();
|
||
dlg.m_dSpareAngle = pSpace->GetHatchAngle()*180/PI;
|
||
dlg.m_nType = nSpaceType;
|
||
|
||
// int nTypeOld = nSpaceType; // add by fxj 080702
|
||
dlg.m_bHalArea = pSpace->IsHalfArea();
|
||
dlg.m_bShowOutline = pSpace->IsShowOutline();
|
||
|
||
//--------------------
|
||
// setup space code list
|
||
dlg.m_lstSpaceCodes.Reset();
|
||
|
||
for (int i=0L; i<lstSpaces.Length(); i++)
|
||
{
|
||
TSpaceData *pSpace = lstSpaces[i];
|
||
if (!!pSpace->m_sCode)
|
||
dlg.m_lstSpaceCodes.Append(tstrnew(pSpace->m_sCode));
|
||
}
|
||
dlg.m_lstSpaceCodes.QuickSort(_tcscmp);
|
||
|
||
// add xly on 100908 粉刷层厚度设置
|
||
dlg.m_csPaintLayerWid.Format(_T("%g"),pSpace->GetStuccoThickness());
|
||
|
||
// add by xly on 101111 设置房间编辑对话框的标注情况
|
||
dlg.m_bSpaceName = pSpace->IsDimName();
|
||
dlg.m_bSpaceCode = pSpace->IsDimCode();
|
||
dlg.m_bShowArea = pSpace->IsDimArea();
|
||
dlg.m_bShowUnit = pSpace->IsDimUnit();
|
||
|
||
CAcModuleResourceOverride vTemp;
|
||
if (dlg.DoModal() == IDOK)
|
||
{
|
||
if (pSpace->upgradeOpen() != Acad::eOk)
|
||
return RTERROR;
|
||
pSpace->assertWriteEnabled();
|
||
|
||
// Modify data member
|
||
pSpace->m_sCode = dlg.m_csCode;
|
||
pSpace->m_sName = dlg.m_csName;
|
||
pSpace->SetMask(dlg.m_bMask);
|
||
pSpace->SetHas3D(dlg.m_bHas3D);
|
||
pSpace->SetFloorThick(_tstof(dlg.m_csFloorThick));
|
||
pSpace->SetHatchStyle(dlg.m_csHatch); // sg add 081124
|
||
|
||
// modify by xly on 100908 真彩色的使用
|
||
//pSpace->SetHatchColor(dlg.m_nColor);
|
||
pSpace->SetHatchTrueColor(dlg.m_cColor);
|
||
pSpace->SetHasHatch(dlg.m_bShowHatch);
|
||
pSpace->SetHatchScale(dlg.m_dHatchScale);
|
||
pSpace->SetHatchAngle(dlg.m_nHatchAngle*PI/180);
|
||
|
||
// delete by xly on 110304 对象编辑时不影响填充的图层
|
||
//AcDbObjectId idHatch = InitLayer(LAY_SPACE_HATCH);//modified by fxj 090609
|
||
//pSpace->SetHatchLayer(idHatch);
|
||
|
||
// modify by xly on 101111根据8.5需求修改该房间对象,支持房间名和面积都不标注
|
||
// int nSpFlag = DocGetSpaceDispMode();
|
||
// int nSpFlag0 = nSpFlag;
|
||
// if (dlg.m_bShowArea)
|
||
// nSpFlag |= SPF_AREA;
|
||
// else
|
||
// nSpFlag &= ~SPF_AREA;
|
||
//
|
||
// if (dlg.m_bShowUnit)
|
||
// nSpFlag |= SPF_UNIT;
|
||
// else
|
||
// nSpFlag &= ~SPF_UNIT;
|
||
//
|
||
//// if (dlg.m_bShowCode) // sg modify 081119
|
||
//// nSpFlag |= SPF_CODE;
|
||
//// else
|
||
//// nSpFlag &= ~SPF_CODE;
|
||
// if (dlg.m_bSpaceCode && dlg.m_bSpaceName) // 同时标注
|
||
// {
|
||
// nSpFlag &= ~SPF_CODE;
|
||
// nSpFlag |= SPF_NAME_AND_CODE;
|
||
// }
|
||
// else
|
||
// {
|
||
// nSpFlag &= ~SPF_NAME_AND_CODE;
|
||
// if (dlg.m_bSpaceCode) // 标编号
|
||
// nSpFlag |= SPF_CODE;
|
||
// else // 标名称
|
||
// nSpFlag &= ~SPF_CODE;
|
||
// }
|
||
pSpace->SetDimNameAndCode(dlg.m_bSpaceName, dlg.m_bSpaceCode);
|
||
pSpace->SetDimArea(dlg.m_bShowArea);
|
||
pSpace->SetDimUnit(dlg.m_bShowUnit);
|
||
|
||
//del by fxj 090602
|
||
// double h = _tstof(dlg.m_csHeight);
|
||
// if (h > 1.0E-6)
|
||
// pSpace->m_nHeight = h;
|
||
|
||
//----------add by fxj 080623--------
|
||
nSpaceType = dlg.m_nType;
|
||
CString layer;
|
||
switch(nSpaceType)
|
||
{
|
||
case 0:layer=LAY_SPACE; break;
|
||
case 1:layer=LAY_HOUSE_SPACE; break;
|
||
case 2:layer=LAY_BUILDING_SPACE; break;
|
||
case 3:layer=LAY_HOLE_SPACE; break;
|
||
case 4:layer=LAY_SHARE_SPACE; break;
|
||
case 5:layer=LAY_BALCONY_SPACE; break;
|
||
//del by fxj 090602
|
||
//case 6:
|
||
// {
|
||
// // modified by fxj 090426
|
||
// nSpaceType=nTypeOld;
|
||
// layer=layerOld;
|
||
// break;
|
||
//
|
||
// }
|
||
}
|
||
pSpace->setLayer(InitLayer(layer));//modified by fxj 090223
|
||
|
||
pSpace->SetType((TDbSpace::AreaType)nSpaceType);
|
||
if (nSpaceType==3)//add by fxj 090724
|
||
pSpace->SetName(_T("洞口"));
|
||
|
||
pSpace->SetHalfArea(dlg.m_bHalArea);
|
||
XPoly2D polyPath;
|
||
AcGeVector3d normal;
|
||
pSpace->GetPathPoly(polyPath,normal);
|
||
pSpace->SetShowOutline(dlg.m_bShowOutline);
|
||
// -------------------------------------
|
||
|
||
// add xly on 100908 粉刷层厚度设置,套内面积和套内阳台面积不设置粉刷层
|
||
if (dlg.m_nType != 1 || dlg.m_nType != 5)
|
||
{
|
||
double dWid = _tstof(dlg.m_csPaintLayerWid);
|
||
pSpace->SetStuccoThickness(dWid);
|
||
}
|
||
|
||
pSpace->downgradeOpen();
|
||
|
||
// modify xly on 101211 根据8.5需求房间对象的修改,更新显示
|
||
/*if (nSpFlag != nSpFlag0)
|
||
{
|
||
DocSetSpaceDispMode(nSpFlag);
|
||
PickSet ss(SS_FREE);
|
||
ss.Get(_T("X"), NULL, NULL, RBList(RTDXF0, _T("TCH_SPACE"), NULL));
|
||
UpdateGraphic(ss);
|
||
}*/
|
||
PickSet ss(SS_FREE);
|
||
ss.Get(_T("X"), NULL, NULL, RBList(RTDXF0, _T("TCH_SPACE"), NULL));
|
||
UpdateGraphic(ss);
|
||
|
||
}
|
||
OPENOBJ_END();
|
||
return RTNORM;
|
||
}
|