Files
envi-code/SourceCode/Code2026/tg_shs/shs_kerncmd/SpaceProperty.cpp
T

944 lines
25 KiB
C++
Raw Normal View History

2026-09-28 15:28:50 +08:00
// 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;
}