Files
envi-code/SourceCode/Code2026/tg_shs/shs_kernal/DbFloorRect.cpp
T
2026-09-28 15:28:50 +08:00

823 lines
19 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// DbFloorRect.cpp: implementation of the TDbFloorRect class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
extern TARCH_IMPEXP int g_nProductId;
#define STRU_FLOORRECT 0x01 // 结构专业的楼层框
ACRX_DXF_DEFINE_MEMBERS(ATSFloorRect, ATSEntity, AcDb::kDHL_CURRENT,
AcDb::kMReleaseCurrent, 1, ATS_FLOORRECT,
"ATS_FLOORRECT图形无法解析, 请下载上华软件|网址: www.shanghuasoft.com");
IMPLEMENT_TENTBASE(TDbFloorRect);
const Adesk::UInt8 TDbFloorRect::g_nVersion = 1;
TDbFloorRect::TDbFloorRect()
{
m_dLength = 0; // 长
m_dWidth = 0; // 宽
m_dFloorHeight = 3000; // 楼层高度
m_sFloorName = _T("1层");// 楼层名词
m_nFloorFrom = 1; // 楼层起始层
m_nFloorTo = 1; // 楼层终止层
// sg add 120106,默认不是结构专业的楼层框
SetStruFloorRect(FALSE);
}
void TDbFloorRect::CopyPropertiesFrom(AcDbEntity *pSrc,unsigned gMatchFlag)
{
assertWriteEnabled();
TDbEntity::CopyPropertiesFrom(pSrc, gMatchFlag);
}
Acad::ErrorStatus TDbFloorRect::subGetClassID(CLSID* pClsid) const
{
return Acad::eOk;
}
// 从DWG读入数据:
Acad::ErrorStatus TDbFloorRect::dwgInFields(AcDbDwgFiler* pFiler)
{
assertWriteEnabled();
Acad::ErrorStatus es = TDbEntity::dwgInFields(pFiler);
if (es != Acad::eOk)
{
return es;
}
Adesk::UInt8 nVer;
pFiler->readItem(&nVer);
ReadString(pFiler, m_sFloorName);
ReadString(pFiler, m_sSpare);
pFiler->readItem(&m_nFloorFrom);
pFiler->readItem(&m_nFloorTo);
pFiler->readItem(&m_dLength);
pFiler->readItem(&m_dWidth);
pFiler->readItem(&m_dFloorHeight);
pFiler->readItem(&m_bShow);
pFiler->readItem(&m_nSpare);
pFiler->readItem((AcGePoint3d *)&m_ptBase);
pFiler->readItem((AcGePoint3d *)&m_ptCenter);
return pFiler->filerStatus();
}
Acad::ErrorStatus TDbFloorRect::dwgOutFields(AcDbDwgFiler* pFiler) const
{
assertReadEnabled();
Acad::ErrorStatus es = TDbEntity::dwgOutFields(pFiler);
if (es != Acad::eOk)
{
return es;
}
pFiler->writeItem(g_nVersion);
pFiler->writeItem((const TCHAR *)m_sFloorName);
pFiler->writeItem((const TCHAR *)m_sSpare);
pFiler->writeItem(m_nFloorFrom);
pFiler->writeItem(m_nFloorTo);
pFiler->writeItem(m_dLength);
pFiler->writeItem(m_dWidth);
pFiler->writeItem(m_dFloorHeight);
pFiler->writeItem(m_bShow);
pFiler->writeItem(m_nSpare);
pFiler->writeItem((const AcGePoint3d &)m_ptBase);
pFiler->writeItem((const AcGePoint3d &)m_ptCenter);
return pFiler->filerStatus();
}
Acad::ErrorStatus TDbFloorRect::dxfInFields(AcDbDxfFiler* pFiler)
{
// change by hh 2012-12-24
// assertWriteEnabled();
// Acad::ErrorStatus es = Acad::eOk;
// es = TDbEntity::dxfInFields(pFiler);
// return es;
assertWriteEnabled();
Acad::ErrorStatus es = Acad::eOk;
if(Acad::eOk != (es = AcDbObject::dxfInFields(pFiler)))
{
return pFiler->filerStatus();
}
if(!pFiler->atSubclassData(this->desc()->name()))
{
return Acad::eMakeMeProxy;
}
struct resbuf rb;
// version
pFiler->readItem(&rb);
if(AcDb::kDxfInt16 != rb.restype)
{
return Acad::eBadDxfSequence;
}
Adesk::Int16 nVer = rb.resval.rint;
// Floor name
pFiler->readItem(&rb);
if(1 != rb.restype)
{
return Acad::eBadDxfSequence;
}
CString sFloorName = rb.resval.rstring;
// center point
pFiler->readItem(&rb);
if(1 != rb.restype)
{
return Acad::eBadDxfSequence;
}
CString sPtCent = rb.resval.rstring;
// base point
pFiler->readItem(&rb);
if(1 != rb.restype)
{
return Acad::eBadDxfSequence;
}
CString sPtBase = rb.resval.rstring;
return pFiler->filerStatus();
}
Acad::ErrorStatus TDbFloorRect::dxfOutFields(AcDbDxfFiler* pFiler) const
{
// change by hh 2012-12-24
// Acad::ErrorStatus es = Acad::eOk;
// es = TDbEntity::dxfOutFields(pFiler);
// return es;
assertReadEnabled();
Acad::ErrorStatus es = Acad::eOk;
if(Acad::eOk != (es = TDbEntity::dxfOutFields(pFiler)))
{
return es;
}
// class name
pFiler->writeItem(AcDb::kDxfSubclass, this->desc()->name());
// version
pFiler->writeInt16(AcDb::kDxfInt16, g_nVersion);
// Floor name
pFiler->writeItem(1, m_sFloorName);
// Key points
CString sPtCent, sPtBase;
sPtCent.Format(_T("%.f,%.f,%.f"), m_ptCenter.x, m_ptCenter.y, m_ptCenter.z);
sPtBase.Format(_T("%.f,%.f,%.f"), m_ptBase.x, m_ptBase.y, m_ptBase.z);
pFiler->writeItem(1, (LPCTSTR)sPtCent);
pFiler->writeItem(1, (LPCTSTR)sPtBase);
return pFiler->filerStatus();
}
// sg delete 100211,增加了数据库反映器,可处理楼层号重复的问题,因此可支持deepclone
// 禁止拷贝
/*
Acad::ErrorStatus TDbFloorRect::subDeepClone(AcDbObject* pOwner,
AcDbObject*& pClonedObject,
AcDbIdMapping& idMap,
Adesk::Boolean isPrimary) const
{
pClonedObject = NULL;
return Acad::eOk;
}
*/
Acad::ErrorStatus
TDbFloorRect::subGetOsnapPoints(AcDb::OsnapMode osnapMode,
INT_PTR gsSelectionMark,
const AcGePoint3d& ptPick,
const AcGePoint3d& lastPoint,
const AcGeMatrix3d& viewXform,
AcGePoint3dArray& snapPoints,
AcDbIntArray& geomIds) const
{
Acad::ErrorStatus es = Acad::eOk;
snapPoints.append(m_ptBase);
return es;
}
Acad::ErrorStatus TDbFloorRect::subGetGripPoints(AcGePoint3dArray& gripPoints,
AcDbIntArray& osnapModes,
AcDbIntArray& geomIds) const
{
gripPoints.append(m_ptBase);
gripPoints.append(m_ptCenter);
gripPoints.append(GetLowLeft());
gripPoints.append(GetLowRight());
gripPoints.append(GetUpRight());
gripPoints.append(GetUpLeft());
// sg add 100119,增加文字位置点为夹点
gripPoints.append(CalTextPt());
return Acad::eOk;
}
// sg add 100119,增加夹点说明
Acad::ErrorStatus TDbFloorRect::GetGripText(int idx, CString &cs) const
{
Acad::ErrorStatus es = Acad::eOk;
switch(idx)
{
case 0:
cs = _T("移动楼层基点");
break;
case 1:
cs = _T("移动楼层框位置");
break;
case 2:
cs = _T("对角拉伸");
break;
case 3:
cs = _T("对角拉伸");
break;
case 4:
cs = _T("对角拉伸");
break;
case 5:
cs = _T("对角拉伸");
break;
case 6:
cs = _T("移动文字位置");
break;
default:
break;
}
return es;
}
// 功能: 夹点操作
Acad::ErrorStatus TDbFloorRect::subMoveStretchPointsAt(
const AcDbIntArray& indices,
const AcGeVector3d& offset)
{
assertWriteEnabled();
if (indices.length())
{
XPoint &vtOffset = *(XPoint *)&offset;
// XVector3D vtEcs = Wcs2Ecs(vtOffset, m_vtNormal, TRUE);
m_ptCenter += vtOffset;
}
return Acad::eOk;
}
// 功能: 夹点操作
Acad::ErrorStatus TDbFloorRect::subMoveGripPointsAt(const AcDbIntArray& indices,
const AcGeVector3d& offset)
{
assertWriteEnabled();
XPoint &vtOffset = *(XPoint *)&offset;
AcGeMatrix3d mat;
mat.setToTranslation(offset);
int idx = 0;
for (int i = 0; i < indices.length(); i++)
{
idx = indices[i];
switch(idx)
{
case 0: // 移动楼层基点
{
m_ptBase.TransformBy(mat);
}
break; // stretch begin point
case 1: // 移动楼层框位置
{
m_ptCenter.TransformBy(mat);
}
break; // stretch begin point
case 2: // Move LowLeft
{
XPoint ptLowLeft = GetLowLeft();
XPoint ptUpRight = GetUpRight();
ptLowLeft += vtOffset;
ptLowLeft.z = ptUpRight.z;
XLine ln(ptUpRight, m_nLayoutRotation);
XPoint ptPrj;
ptLowLeft.Project(&ln, ptPrj);
m_dLength = ptPrj.Distance2d(ptUpRight);
m_dWidth = ptPrj.Distance2d(ptLowLeft);
Midpoint(ptUpRight, ptLowLeft, m_ptCenter);
}
break;
case 3: // Move LowRight
{
XPoint ptLowRight = GetLowRight();
XPoint ptUpLeft = GetUpLeft();
ptLowRight += vtOffset;
ptLowRight.z = ptUpLeft.z;
XLine ln(ptUpLeft, m_nLayoutRotation);
XPoint ptPrj;
ptLowRight.Project(&ln, ptPrj);
m_dLength = ptPrj.Distance2d(ptUpLeft);
m_dWidth = ptPrj.Distance2d(ptLowRight);
Midpoint(ptLowRight, ptUpLeft, m_ptCenter);
}
break;
case 4: // Move UpRight
{
XPoint ptUpRight = GetUpRight();
XPoint ptLowLeft = GetLowLeft();
ptUpRight += vtOffset;
ptUpRight.z = ptLowLeft.z;
XLine ln(ptLowLeft, m_nLayoutRotation);
XPoint ptPrj;
ptUpRight.Project(&ln, ptPrj);
m_dLength = ptPrj.Distance2d(ptLowLeft);
m_dWidth = ptPrj.Distance2d(ptUpRight);
Midpoint(ptUpRight, ptLowLeft, m_ptCenter);
}
break;
case 5: // Move UpLeft
{
XPoint ptUpLeft = GetUpLeft();
XPoint ptLowRight = GetLowRight();
ptUpLeft += vtOffset;
ptUpLeft.z = ptUpLeft.z;
XLine ln(ptLowRight, m_nLayoutRotation);
XPoint ptPrj;
ptUpLeft.Project(&ln, ptPrj);
m_dLength = ptPrj.Distance2d(ptLowRight);
m_dWidth = ptPrj.Distance2d(ptUpLeft);
Midpoint(ptLowRight, ptUpLeft, m_ptCenter);
}
break;
// sg add 100119,增加文字位置点
case 6:
{
XPoint ptText = CalTextPt(); // 获取真实文字位置点
ptText.TransformBy(mat);
XPoint ptLowLeft = GetLowLeft(), // 左下角点
ptLowRight = GetLowRight(), // 右下角点
ptUpLeft = GetUpLeft(); // 左上角点
AcDbLine xAxisLine(ptLowLeft.AsAcGePoint3d(), ptLowRight.AsAcGePoint3d()),
yAxisLine(ptLowLeft.AsAcGePoint3d(), ptUpLeft.AsAcGePoint3d());
AcGePoint3d ptPrj1, ptPrj2; // 投影点
xAxisLine.getClosestPointTo(ptText.AsAcGePoint3d(), ptPrj1, Adesk::kTrue);
yAxisLine.getClosestPointTo(ptText.AsAcGePoint3d(), ptPrj2, Adesk::kTrue);
double dX(0.0), dY(0.0); // 新文字位置点距离左下角点距离
xAxisLine.getDistAtPoint(ptPrj1, dX);
yAxisLine.getDistAtPoint(ptPrj2, dY);
SetTextPt(XPoint(dX, dY, 0), false);
}
break;
default:
break;
}
}
return Acad::eOk;
}
Acad::ErrorStatus TDbFloorRect::subTransformBy(const AcGeMatrix3d& xform)
{
assertWriteEnabled();
TDbEntity::subTransformBy(xform);
m_ptBase.TransformBy(xform);
m_ptCenter.TransformBy(xform);
return Acad::eOk;
}
// 取得四个角点
XPoint TDbFloorRect::GetLowLeft() const
{
double nAng = atan(m_dWidth/m_dLength);
double nLen = sqrt(m_dWidth*m_dWidth + m_dLength*m_dLength);
XPoint ptLowLeft;
ads_polar(m_ptCenter, m_nLayoutRotation+PI+nAng, nLen/2.0, ptLowLeft);
return ptLowLeft;
}
XPoint TDbFloorRect::GetLowRight() const
{
double nAng = atan(m_dWidth/m_dLength);
double nLen = sqrt(m_dWidth*m_dWidth + m_dLength*m_dLength);
XPoint ptLowRight;
ads_polar(m_ptCenter, m_nLayoutRotation-nAng, nLen/2.0, ptLowRight);
return ptLowRight;
}
XPoint TDbFloorRect::GetUpRight() const
{
double nAng = atan(m_dWidth/m_dLength);
double nLen = sqrt(m_dWidth*m_dWidth + m_dLength*m_dLength);
XPoint ptUpRight;
ads_polar(m_ptCenter, m_nLayoutRotation+nAng, nLen/2.0, ptUpRight);
return ptUpRight;
}
XPoint TDbFloorRect::GetUpLeft() const
{
double nAng = atan(m_dWidth/m_dLength);
double nLen = sqrt(m_dWidth*m_dWidth + m_dLength*m_dLength);
XPoint ptUpLeft;
ads_polar(m_ptCenter, m_nLayoutRotation+PI-nAng, nLen/2.0, ptUpLeft);
return ptUpLeft;
}
// sg add 100119,根据传入的左下角点、以及文字位置点相对坐标,计算文字位置实际坐标
XPoint TDbFloorRect::CalTextPt() const
{
XPoint ptText = GetTextPt(false), // 获得考虑出图比例后的相对坐标
ptLowLeft = GetLowLeft(); // 获得左下角点坐标
double dAng = PI/2; // ptText相对ptLowLeft方向
if (fabs(ptText.x) < 1.0E-3) // X坐标为0
{
if (ptText.y < -1.0E-3) // Y坐标小于0
{
dAng = -PI/2;
}
}
else // X坐标不为0
{
dAng = atan(ptText.y/ptText.x); // 角度范围在(-PI/2, PI/2)之内
if (ptText.x < -1.0E-3) // 解决角度在(PI/2, 3*PI/2)之内的问题
{
dAng += PI;
}
}
double dLen = sqrt(ptText.x*ptText.x + ptText.y*ptText.y);
ads_polar(ptLowLeft, m_nLayoutRotation+dAng, dLen, ptText);
ptText.z = 0;
return ptText;
}
void TDbFloorRect::GetPolyline(AcDbPolyline &pline) const
{
pline.reset(Adesk::kFalse, 0);
pline.setElevation(0.0);
pline.addVertexAt(0, GetLowLeft().AsAcGePoint2d());
pline.addVertexAt(1, GetLowRight().AsAcGePoint2d());
pline.addVertexAt(2, GetUpRight().AsAcGePoint2d());
pline.addVertexAt(3, GetUpLeft().AsAcGePoint2d());
pline.setClosed(Adesk::kTrue);
}
Acad::ErrorStatus TDbFloorRect::ExplodeOrDraw2d(XExplodeDraw &dc) const
{
// 获得矩形框4个角点坐标
XPoint ptLowLeft = GetLowLeft(); // 左下
XPoint ptLowRight = GetLowRight();
XPoint ptUpRight = GetUpRight();
XPoint ptUpLeft = GetUpLeft();
// sg modify 100125,根据8.5需求,建筑专业:增加全局控制是否显示楼层框;水、电专业:根据对象内的变量控制
BOOL bShow = g_bShowFloorRect;
//LH 2013-3-25 根据2014年加密需要水关键字8--14 暖6--15 电3--16
//if (g_nProductId==8 || g_nProductId==3)
if (g_nProductId==kTWT || g_nProductId==kTELEC)
{
bShow = m_bShow;
}
// if (m_bShow)
if (bShow)
{
ptLowLeft.z = ptLowRight.z = ptUpRight.z = ptUpLeft.z = 0;
// 楼层框
XPoly2D poly2d(1);
poly2d.AppendNode(ptLowLeft);
poly2d.AppendNode(ptLowRight);
poly2d.AppendNode(ptUpRight);
poly2d.AppendNode(ptUpLeft);
dc << poly2d;
// 标注文字
TDbText text;
text.setPropertiesFrom(this);
// sg modify 100119,根据8.5新需求修改
/*
text.SetStyleId(InitTextStyle(TS_STANDARD));
text.SetText(m_sFloorName);
text.SetLocation(m_ptCenter);
text.SetHeight(20);
text.SetAlignment(XExplodeDraw::kMiddleCenter);
*/
text.SetStyleId(GetTextStyleId()); // 文字样式
text.SetHeight(GetTextHeight()); // 字高
text.SetLocation(CalTextPt()); // 文字位置点
text.setColorIndex(GetTextColor()); // 文字颜色
text.SetAlignment(XExplodeDraw::kBottomLeft); // 对齐方式:左下角点
CString csText; // 文字内容
if (IsStruFloorRect()) // 结构专业的楼层框,根据需求,希望显示的是标准层
{
csText.Format(_T("标准层号:%s"), m_sFloorName);
}
else // 其他专业显示层号和层高
{
if (fabs(m_dFloorHeight) <= 1e-15 )
{
csText.Format(_T("层号:%s"), m_sFloorName);
}
else
{
csText.Format(_T("层号:%s 层高:%.0f"), m_sFloorName, m_dFloorHeight);
}
}
text.SetText(csText);
TPushProperty vProp(&text, dc);
if (dc.IsFullExplode())
{
text.ExplodeOrDraw2d(dc);
}
else
{
dc.DrawEntity(text);
}
}
// sg add 100119,获取楼层基点表示方式
int nType = GetBaseType();
switch(nType)
{
case 1: // X型
{
// sg modify 100125,根据8.5需求,建筑专业:增加全局控制是否显示楼层框;TWT专业:根据对象内的变量控制
// if (m_bShow) // 受控显示
if (bShow)
{
XPoint pt1, pt2;
double dLen = GetCrossLen() * 0.5; // 叉线长度一半
ads_polar(m_ptBase, m_nLayoutRotation+PI/4, dLen, pt1);
ads_polar(m_ptBase, m_nLayoutRotation+PI*1.25, dLen, pt2);
dc << XLine(pt1, pt2);
ads_polar(m_ptBase, m_nLayoutRotation-PI/4, dLen, pt1);
ads_polar(m_ptBase, m_nLayoutRotation+PI*0.75, dLen, pt2);
dc << XLine(pt1, pt2);
}
}
break;
case 2: // 点,始终绘制,受点样式控制
{
AcDbPoint ptEnt;
ptEnt.setPosition(m_ptBase);
dc.DrawEntity(ptEnt);
}
break;
default:
break;
}
return Acad::eOk;
}
Acad::ErrorStatus TDbFloorRect::ExplodeOrDraw3d(XExplodeDraw &dc) const
{
return Acad::eOk;
}
void TDbFloorRect::GetTips(DList<TObjInfoUnit> &info) const
{
info.Append(new TObjInfoUnit(_T("对象类型"), _T("楼层框")));
// sg modify 100119,根据8.5新需求修改
// info.Append(new TObjInfoUnit(_T("楼层名称"), m_sFloorName));
info.Append(new TObjInfoUnit(_T("工程名称"), m_sSpare));
info.Append(new TObjInfoUnit(_T("层号"), m_sFloorName));
info.Append(new TObjInfoUnit(_T("层高"), Dist2Str(m_dFloorHeight)));
}
// sg add 100118,增加8.5新需求需要的动态数据
// 文字位置
XPoint TDbFloorRect::GetTextPt(bool bAsPaperUnit) const
{
assertReadEnabled();
AcGePoint3d ptText(5, 5, 0);
const TEntityFields &fd = GetFields();
fd.GFD(_T("文字相对位置"), ptText);
if (!bAsPaperUnit)
{
ptText *= GetPScale();
}
return XPoint(ptText);
}
void TDbFloorRect::SetTextPt(const XPoint &pt, bool bAsPaperUnit)
{
assertWriteEnabled();
AcGePoint3d ptText = pt.AsAcGePoint3d();
if (!bAsPaperUnit)
{
ptText /= GetPScale();
}
TEntityFields &fd = Fields();
fd.SFD(_T("文字相对位置"), ptText);
}
// 文字字高,修改备用数据m_nSpare
double TDbFloorRect::GetTextHeight(bool bAsPaperUnit) const
{
assertReadEnabled();
double dTextHeight = m_nSpare;
if (!bAsPaperUnit)
{
dTextHeight *= GetPScale();
}
return dTextHeight;
}
void TDbFloorRect::SetTextHeight(double dHeight, bool bAsPaperUnit)
{
assertWriteEnabled();
m_nSpare = dHeight;
if (!bAsPaperUnit)
{
m_nSpare /= GetPScale();
}
}
// 文字样式
AcDbObjectId TDbFloorRect::GetTextStyleId() const
{
assertReadEnabled();
AcDbSoftPointerId idTextStyle;
const TEntityFields &fd = GetFields();
fd.GFD(_T("文字样式"), idTextStyle);
return idTextStyle;
}
void TDbFloorRect::SetTextStyleId(AcDbObjectId id)
{
assertWriteEnabled();
AcDbSoftPointerId idTextStyle = id;
TEntityFields &fd = Fields();
fd.SFD(_T("文字样式"), idTextStyle);
}
// 基点显示样式,1为X,2为点
int TDbFloorRect::GetBaseType() const
{
assertReadEnabled();
int nVal = 1; // 其他专业默认为X
//LH 2013-3-25 根据2014年加密需要水关键字8--14 暖6--15 电3--16
//if (g_nProductId == 8)
if (g_nProductId == kTWT)
{
nVal = 2; // TWT专业默认为点
}
const TEntityFields &fd = GetFields();
fd.GFD(_T("基点显示样式"), nVal);
return nVal;
}
void TDbFloorRect::SetBaseType(int nType)
{
assertWriteEnabled();
TEntityFields &fd = Fields();
fd.SFD(_T("基点显示样式"), nType);
}
// X型中,叉线的长度,固定值,与出图比例无关
double TDbFloorRect::GetCrossLen() const
{
assertReadEnabled();
double dVal = 1000; // 默认值为1000
const TEntityFields &fd = GetFields();
fd.GFD(_T("叉线长度"), dVal);
return dVal;
}
void TDbFloorRect::SetCrossLen(double dCrossLen)
{
assertWriteEnabled();
TEntityFields &fd = Fields();
fd.SFD(_T("叉线长度"), dCrossLen);
}
// sg add 100119,增加文字颜色的动态数据
Adesk::UInt16 TDbFloorRect::GetTextColor() const
{
assertReadEnabled();
Adesk::UInt16 color = 7; // 默认值为7,白色
const TEntityFields &fd = GetFields();
fd.GFD(_T("文字颜色"), color);
return color;
}
void TDbFloorRect::SetTextColor(Adesk::UInt16 color)
{
assertWriteEnabled();
TEntityFields &fd = Fields();
fd.SFD(_T("文字颜色"), color);
}
// sg add 100401,增加楼层框对象对应楼层表中的行号
short TDbFloorRect::GetTableIndex() const
{
assertReadEnabled();
short nIndex = 0;
const TEntityFields &fd = GetFields();
fd.GFD(_T("楼层表行号"), nIndex);
return nIndex;
}
void TDbFloorRect::SetTableIndex(short nIndex)
{
assertWriteEnabled(false, false);
TEntityFields &fd = Fields();
fd.SFD(_T("楼层表行号"), nIndex);
}
// sg add 120106,为结构专业的楼层框对象使用,显示不同的样式
void TDbFloorRect::SetStruFloorRect(BOOL bStru)
{
int nVal = 0;
const TEntityFields &fd1 = GetFields();
fd1.GFD(_T("专业楼层框"), nVal);
if (bStru)
nVal |= STRU_FLOORRECT;
else
nVal &= ~STRU_FLOORRECT;
assertWriteEnabled();
TEntityFields &fd2 = Fields();
fd2.SFD(_T("专业楼层框"), nVal);
}
BOOL TDbFloorRect::IsStruFloorRect() const
{
assertReadEnabled();
int nVal = 0;
const TEntityFields &fd = GetFields();
fd.GFD(_T("专业楼层框"), nVal);
return ((nVal&STRU_FLOORRECT) != 0);
}
// sg add 100121,不支持在位编辑
TSubText* TDbFloorRect::HitTestText(XPoint pt) const
{
return NULL;
}
void IniTDbFloorRect(BOOL bTrue)
{
if (bTrue)
{
TDbFloorRect::rxInit();
TDbFloorRect::InitMatchProtocol(TRUE);
}
else
{
TDbFloorRect::InitMatchProtocol(FALSE);
deleteAcRxClass(TDbFloorRect::desc());
}
}