Files
envi-code/SourceCode/Code2026/tg_shs/shs_kernal/TLampDim.cpp
T

600 lines
16 KiB
C++
Raw Normal View History

2026-10-04 00:04:20 +08:00
// CLampDim.cpp: implementation of the CLampDim class.
2026-09-28 15:28:50 +08:00
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include <dbproxy.h>
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
ACRX_DXF_DEFINE_MEMBERS(CLampDim,AcDbEntity,
AcDb::kDHL_CURRENT, AcDb::kMReleaseCurrent,
2026-10-04 00:04:20 +08:00
AcDbProxyEntity::kEraseAllowed, ATS_EQUIPDIM, "ATS_EQUIPDIM,图形无法解析, 请下载上华软件|网址: www.shanghuasoft.com");
2026-09-28 15:28:50 +08:00
CLampDim::CLampDim()
{
m_nType = -1;
2026-10-04 00:04:20 +08:00
m_csX = _T("x"); // x X ×
2026-09-28 15:28:50 +08:00
m_bHasW = true;
m_nTextHeight = 350;
m_nWidthFactor = 0.8;
m_csTextStyle = _T("_TEL_DIM");
m_ptIns.x = 0;
m_ptIns.y = 0;
m_nDimLen = -1;
}
CLampDim::CLampDim( AcGePoint3d ptIns, bool bHasW, int nNum, CString csX,
CString csBulbNum, CString csSpec, CString csBulbPower,
CString csSetupHeight, CString csSetupMode, CString csLightType)
{
m_nType = 0;
m_nTextHeight = 350;
m_nWidthFactor = 0.8;
m_csTextStyle = _T("_TEL_DIM");
m_ptIns = ptIns;
m_bHasW = bHasW;
m_csX = csX;
m_nNum = nNum;
m_csBulbNum = csBulbNum;
m_csSpec = csSpec;
m_csBulbPower = csBulbPower;
m_csSetupHeight = csSetupHeight;
m_csSetupMode = csSetupMode;
m_csLightType = csLightType;
m_nDimLen = -1;
InitData();
}
CLampDim::CLampDim(AcGePoint3d ptIns, CString csBulbNum, CString csSetupHeight)
{
m_nType = 1;
m_nNum = 0;
m_nTextHeight = 350;
m_nWidthFactor = 0.8;
m_csTextStyle = _T("_TEL_DIM");
m_ptIns = ptIns;
m_csBulbNum = csBulbNum;
m_csSetupHeight = csSetupHeight;
m_nDimLen = -1;
InitData();
}
CLampDim::CLampDim(AcGePoint3d ptIns, CString csBulbNum)
{
m_nType = 2;
m_nNum = 0;
m_nTextHeight = 350;
m_nWidthFactor = 0.8;
m_csTextStyle = _T("_TEL_DIM");
m_ptIns = ptIns;
m_csSpec = csBulbNum;
m_nDimLen = -1;
InitData();
}
CLampDim::~CLampDim()
{
}
// ***************************************
// csTitle2
// csTitle1 ------------ csTitle4
// csTitle3
//****************************************
void CLampDim::InitData()
{
m_csTitle1.Format(_T("%d"), m_nNum);
if(m_csTitle1 != _T("") && m_csSpec != _T("") && m_nType == 0)
m_csTitle1 += _T("-");
else if(m_nType != 0)
m_csTitle1 = _T("");
m_csTitle1 += m_csSpec;
if(m_csBulbNum == _T(""))
m_csBulbNum = _T("1");
if(m_csBulbNum == _T("1"))
m_csTitle2 = _T("");
else
m_csTitle2 = m_csBulbNum;
if(m_csBulbNum != _T("1") && (m_csBulbPower != _T("") || m_csLightType!=_T("")))
m_csTitle2 += m_csX;
if(m_csBulbPower != _T("")){
m_csTitle2 += m_csBulbPower;
if(m_bHasW && m_csX == _T("x"))
m_csTitle2 += _T("w");
else if(m_bHasW && m_csX == _T("X"))
m_csTitle2 += _T("W");
if(m_csLightType!=_T(""))
m_csTitle2 += m_csX;
}
m_csTitle2 += m_csLightType;
m_csTitle3 = m_csSetupHeight;
if(m_csTitle3 == _T("") && m_nType == 0)
m_csTitle3 = _T("-");
m_csTitle4 = m_csSetupMode;
}
double CLampDim::GetDimLength()
{
double nLen4, nLenRet(0);
AcGePoint3d pMax, pMin;
AcDbObjectId id = GetTextStyleId(m_csTextStyle);
if(m_csTitle1 != _T("")){
AcDbText text1;
text1.setPosition(m_ptIns);
text1.setHeight(m_nTextHeight);//*DocGetPScale()
text1.setTextString(m_csTitle1);
text1.setTextStyle(id);
text1.setWidthFactor(m_nWidthFactor);
text1.setRotation(0);
AcDbExtents extents;
text1.getGeomExtents(extents);
pMax = extents.maxPoint();
pMin = extents.minPoint();
m_nLen = fabs(pMax[0] - pMin[0]) + m_nTextHeight;//*DocGetPScale()
nLenRet += m_nLen;
}
XPoint ptTmp, ptTmp2;
if(m_csTitle2 != _T("") || m_csTitle3 != _T("-")){
ptTmp.x = m_ptIns.x + m_nLen;
ptTmp.y = m_ptIns.y + m_nTextHeight;//*DocGetPScale()
AcDbText text2, text3;
text2.setPosition(m_ptIns);
text2.setHeight(m_nTextHeight);//*DocGetPScale()
text2.setTextString(m_csTitle2);
text2.setTextStyle(id);
text2.setWidthFactor(m_nWidthFactor);
text2.setRotation(0);
AcDbExtents extents1;
text2.getGeomExtents(extents1);
pMax = extents1.maxPoint();
pMin = extents1.minPoint();
m_nLen2 = fabs(pMax[0] - pMin[0]);
text3.setPosition(m_ptIns);
text3.setHeight(m_nTextHeight);//*DocGetPScale()
text3.setTextString(m_csTitle3);
text3.setTextStyle(id);
text3.setWidthFactor(m_nWidthFactor);
text3.setRotation(0);
AcDbExtents extents2;
text3.getGeomExtents(extents2);
pMax = extents2.maxPoint();
pMin = extents2.minPoint();
m_nLen3 = fabs(pMax[0] - pMin[0]);
if(m_nLen3 > m_nLen2)
nLenRet += (m_nLen3 + m_nTextHeight);//*DocGetPScale()
else
nLenRet += (m_nLen2 + m_nTextHeight);//*DocGetPScale()
}
if(m_csTitle4 != _T("")){
ptTmp.x = m_ptIns.x + m_nLen + m_nLen2 + m_nTextHeight;//*DocGetPScale()
ptTmp.y = m_ptIns.y;
AcDbText text4;
text4.setPosition(ptTmp);
text4.setHeight(m_nTextHeight);//*DocGetPScale()
text4.setTextString(m_csTitle4);
text4.setTextStyle(id);
text4.setWidthFactor(m_nWidthFactor);
text4.setRotation(0);
AcDbExtents extents4;
text4.getGeomExtents(extents4);
pMax = extents4.maxPoint();
pMin = extents4.minPoint();
nLen4 = fabs(pMax[0] - pMin[0]);
nLenRet += (nLen4 + m_nTextHeight);//*DocGetPScale()
}
m_nDimLen = nLenRet;
return nLenRet;
}
// ***********************************************************************
// BulbNum X Power X LightType
// LightNum - EquipType ------------------------------SetupMode
// SetupHeight
//************************************************************************
Adesk::Boolean CLampDim::subWorldDraw(AcGiWorldDraw *pWd)
{
if(m_ptIns.x == 0 && m_ptIns.y == 0)
return Adesk::kTrue;
XPoint ptTmp, ptTmp2, ptInsTmp;
AcGePoint3d pMax, pMin;
ptInsTmp = m_ptIns;
if(m_ptStart != AcGePoint3d(0,0,0)){
AcGePoint3d ptArray2[2] = {m_ptStart, m_ptIns,};
pWd->geometry().polyline(2, ptArray2);
double dimlen = GetDimLength();
ptInsTmp.y -= m_nTextHeight/2;//*DocGetPScale()
ptInsTmp.x += m_nTextHeight/2;//*DocGetPScale()
if(m_ptIns.x < m_ptStart.x)
ptInsTmp.x -= dimlen;
}
ptTmp = ptInsTmp;
double nLen(0), nLen2(0), nLen3(0);
AcDbObjectId id = GetTextStyleId(m_csTextStyle);
if(m_csTitle1 != _T("")){
AcDbText text1;
text1.setPosition(ptInsTmp);
text1.setHeight(m_nTextHeight);//*DocGetPScale()
text1.setTextString(m_csTitle1);
text1.setTextStyle(id);
text1.setWidthFactor(m_nWidthFactor);
text1.setRotation(0);
text1.worldDraw(pWd);
AcDbExtents extents;
text1.getGeomExtents(extents);
pMax = extents.maxPoint();
pMin = extents.minPoint();
nLen = fabs(pMax[0] - pMin[0]) + m_nTextHeight;//*DocGetPScale()
ptTmp.x = ptInsTmp.x + nLen;
}
if(m_csTitle2 == _T("") && m_csTitle3 == _T("") && m_csTitle4 == _T(""))
return Adesk::kTrue;
if(m_csTitle2 != _T("") || m_csTitle3 != _T("-")){
AcDbText text2, text3;
text2.setPosition(ptInsTmp);
text2.setHeight(m_nTextHeight);//*DocGetPScale()
text2.setTextString(m_csTitle2);
text2.setTextStyle(id);
text2.setWidthFactor(m_nWidthFactor);
text2.setRotation(0);
AcDbExtents extents1;
text2.getGeomExtents(extents1);
pMax = extents1.maxPoint();
pMin = extents1.minPoint();
nLen2 = fabs(pMax[0] - pMin[0]);
text3.setPosition(ptInsTmp);
text3.setHeight(m_nTextHeight);//*DocGetPScale()
text3.setTextString(m_csTitle3);
text3.setTextStyle(id);
text3.setWidthFactor(m_nWidthFactor);
text3.setRotation(0);
AcDbExtents extents2;
text3.getGeomExtents(extents2);
pMax = extents2.maxPoint();
pMin = extents2.minPoint();
nLen3 = fabs(pMax[0] - pMin[0]);
if(nLen3 > nLen2){
nLen2 = nLen3;
ptTmp.x = ptInsTmp.x + nLen;
ptTmp.y = ptInsTmp.y - m_nTextHeight;//*DocGetPScale()
text3.setPosition(ptTmp);
text3.worldDraw(pWd);
ptTmp.x = ptInsTmp.x + nLen + nLen2 / 2 - nLen3 / 2;
ptTmp.y = ptInsTmp.y + m_nTextHeight;//*DocGetPScale()
text2.setPosition(ptTmp);
text2.worldDraw(pWd);
}
else{
ptTmp.y = ptInsTmp.y + m_nTextHeight;//*DocGetPScale()
text2.setPosition(ptTmp);
text2.worldDraw(pWd);
ptTmp.x = ptInsTmp.x + nLen + nLen2 / 2 - nLen3 / 2;
ptTmp.y = ptInsTmp.y - m_nTextHeight;//*DocGetPScale()
text3.setPosition(ptTmp);
text3.worldDraw(pWd);
}
if(m_csTitle3 != _T("") || (m_ptStart != AcGePoint3d(0,0,0))){
ptTmp.x = ptInsTmp.x + nLen - m_nTextHeight/2;//*DocGetPScale()
ptTmp.y = ptInsTmp.y + m_nTextHeight/2; //*DocGetPScale()
ptTmp2.x = ptTmp.x + nLen2 + m_nTextHeight; //*DocGetPScale()
ptTmp2.y = ptTmp.y;
AcGePoint3d ptArray[2] = {ptTmp, ptTmp2,};
pWd->geometry().polyline(2, ptArray);
}
}
if(m_csTitle4 != _T("")){
ptTmp.x = ptInsTmp.x + nLen + nLen2 + m_nTextHeight;//*DocGetPScale()
ptTmp.y = ptInsTmp.y;
AcDbText text4;
text4.setPosition(ptTmp);
text4.setHeight(m_nTextHeight);//*DocGetPScale()
text4.setTextString(m_csTitle4);
text4.setTextStyle(id);
text4.setWidthFactor(m_nWidthFactor);
text4.setRotation(0);
text4.worldDraw(pWd);
}
return Adesk::kTrue;
}
Acad::ErrorStatus
CLampDim::subGetGripPoints(AcGePoint3dArray& gripPoints, AcDbIntArray& osnapModes, AcDbIntArray& geomIds) const
{
assertReadEnabled();
gripPoints.append(m_ptIns);
gripPoints.append(m_ptStart);
return Acad::eOk;
}
Acad::ErrorStatus
CLampDim::subMoveGripPointsAt(const AcDbIntArray& indices, const AcGeVector3d& offset)
{
if (indices.length()== 0 || offset.isZeroLength())
return Acad::eOk; //that's easy :-)
assertWriteEnabled();
if (indices.length() > 1){
return Acad::eOk;
}
if (indices[0] == 0) {
m_ptIns += offset;
return Acad::eOk;
}
else if (indices[0] == 1) {
m_ptStart += offset;
return Acad::eOk;
}
return Acad::eOk;
}
Acad::ErrorStatus
CLampDim::subTransformBy(const AcGeMatrix3d& xform)
{
assertWriteEnabled();
m_ptIns.transformBy(xform);
if(m_ptStart != AcGePoint3d(0,0,0))
m_ptStart.transformBy(xform);
return Acad::eOk;
}
Acad::ErrorStatus
CLampDim::dwgOutFields(AcDbDwgFiler* filer) const
{
assertReadEnabled();
Acad::ErrorStatus es;
if ((es = AcDbEntity::dwgOutFields(filer))
!= Acad::eOk)
{
return es;
}
Adesk::Int16 version = 1;
Adesk::Int16 val = m_nNum;
Adesk::Int16 type = m_nType;
filer->writeItem(version);
filer->writePoint3d(m_ptStart);
filer->writePoint3d(m_ptIns);
filer->writeBool(m_bHasW);
filer->writeDouble(m_nTextHeight);
filer->writeDouble(m_nWidthFactor);
filer->writeDouble(m_nDimLen);
filer->writeInt16(val);
filer->writeInt16(type);
filer->writeString((LPCTSTR)m_csTextStyle);
filer->writeString((LPCTSTR)m_csSpec);
filer->writeString((LPCTSTR)m_csBulbNum);
filer->writeString((LPCTSTR)m_csBulbPower);
filer->writeString((LPCTSTR)m_csSetupHeight);
filer->writeString((LPCTSTR)m_csSetupMode);
filer->writeString((LPCTSTR)m_csLightType);
filer->writeString((LPCTSTR)m_csX);
return filer->filerStatus();
}
Acad::ErrorStatus
CLampDim::dwgInFields(AcDbDwgFiler* filer)
{
assertWriteEnabled();
Acad::ErrorStatus es;
if ((es = AcDbEntity::dwgInFields(filer)) != Acad::eOk)
{
return es;
}
// Object Version - must always be the first item.
//
Adesk::Int16 version;
AcGePoint3d ptTmp;
Adesk::Int16 val;
filer->readItem(&version);
if (version > 1)
return Acad::eMakeMeProxy;
switch (version)
{
case 1:
{
filer->readPoint3d(&m_ptStart);
filer->readPoint3d(&m_ptIns);
filer->readBool(&m_bHasW);
filer->readDouble(&m_nTextHeight);
filer->readDouble(&m_nWidthFactor);
filer->readDouble(&m_nDimLen);
filer->readInt16(&val);
m_nNum = val;
filer->readInt16(&val);
m_nType = val;
XString xsContent;
ReadString(filer, xsContent);
m_csTextStyle = (const TCHAR*)xsContent;
ReadString(filer, xsContent);
m_csSpec = (const TCHAR*)xsContent;
ReadString(filer, xsContent);
m_csBulbNum = (const TCHAR*)xsContent;
ReadString(filer, xsContent);
m_csBulbPower = (const TCHAR*)xsContent;
ReadString(filer, xsContent);
m_csSetupHeight = (const TCHAR*)xsContent;
ReadString(filer, xsContent);
m_csSetupMode = (const TCHAR*)xsContent;
ReadString(filer, xsContent);
m_csLightType = (const TCHAR*)xsContent;
ReadString(filer, xsContent);
m_csX = (const TCHAR*)xsContent;
break;
}
default:
assert(false);
}
// if(m_nTextHeight > DocGetPScale())
// m_nTextHeight = m_nTextHeight/DocGetPScale();
if(m_nTextHeight < 10)
m_nTextHeight = m_nTextHeight * 100;
InitData();
return filer->filerStatus();
}
Acad::ErrorStatus
CLampDim::subExplode(AcDbVoidPtrArray& entitySet) const
{
assertReadEnabled();
if(m_ptIns == AcGePoint3d(0,0,0))
return Acad::eOk;
XPoint ptTmp, ptTmp2, ptInsTmp;
ptInsTmp = m_ptIns;
double nLen(0), nLen2(0), nLen3(0);
AcDbObjectId idLayer=layerId();
if(m_ptStart != AcGePoint3d(0,0,0)){
AcDbLine *Line = new AcDbLine;
Line->setLayer(idLayer);
Line->setStartPoint(m_ptStart);
Line->setEndPoint(m_ptIns);
entitySet.append(Line);
ptInsTmp.y -= m_nTextHeight/2;//*DocGetPScale()
ptInsTmp.x += m_nTextHeight/2;//*DocGetPScale()
if(m_ptIns.x < m_ptStart.x)
ptInsTmp.x -= m_nDimLen;
}
AcGePoint3d pMax, pMin;
AcDbObjectId id = GetTextStyleId(m_csTextStyle,database());
if(m_csTitle1 != ""){
AcDbText *text1 = new AcDbText;
text1->setPosition(ptInsTmp);
text1->setLayer(idLayer);
text1->setHeight(m_nTextHeight);//*DocGetPScale()
text1->setTextString(m_csTitle1);
text1->setTextStyle(id);
text1->setWidthFactor(m_nWidthFactor);
text1->setRotation(0);
entitySet.append(text1);
AcDbExtents extents;
text1->getGeomExtents(extents);
pMax = extents.maxPoint();
pMin = extents.minPoint();
nLen = fabs(pMax[0] - pMin[0]) + m_nTextHeight;//*DocGetPScale()
}
if(m_csTitle2 == "" && m_csTitle3 == "" && m_csTitle4 == "")
return Acad::eOk;
if(m_csTitle2 != "" || m_csTitle3 != "-"){
ptTmp.x = ptInsTmp.x + nLen;
AcDbText *text2 = new AcDbText;
AcDbText *text3 = new AcDbText;
text2->setPosition(ptInsTmp);
text2->setLayer(idLayer);
text2->setHeight(m_nTextHeight);//*DocGetPScale()
text2->setTextString(m_csTitle2);
text2->setTextStyle(id);
text2->setWidthFactor(m_nWidthFactor);
text2->setRotation(0);
AcDbExtents extents1;
text2->getGeomExtents(extents1);
pMax = extents1.maxPoint();
pMin = extents1.minPoint();
nLen2 = fabs(pMax[0] - pMin[0]);
text3->setPosition(ptInsTmp);
text3->setLayer(idLayer);
text3->setHeight(m_nTextHeight);//*DocGetPScale()
text3->setTextString(m_csTitle3);
text3->setTextStyle(id);
text3->setWidthFactor(m_nWidthFactor);
text3->setRotation(0);
AcDbExtents extents2;
text3->getGeomExtents(extents2);
pMax = extents2.maxPoint();
pMin = extents2.minPoint();
nLen3 = fabs(pMax[0] - pMin[0]);
if(nLen3 > nLen2){
nLen2 = nLen3;
ptTmp.x = ptInsTmp.x + nLen;
ptTmp.y = ptInsTmp.y - m_nTextHeight;//*DocGetPScale()
text3->setPosition(ptTmp);
entitySet.append(text3);
ptTmp.x = ptInsTmp.x + nLen + nLen2 / 2 - nLen3 / 2;
ptTmp.y = ptInsTmp.y + m_nTextHeight;//*DocGetPScale()
text2->setPosition(ptTmp);
entitySet.append(text2);
}
else{
ptTmp.y = ptInsTmp.y + m_nTextHeight;//*DocGetPScale()
text2->setPosition(ptTmp);
entitySet.append(text2);
ptTmp.x = ptInsTmp.x + nLen + nLen2 / 2 - nLen3 / 2;
ptTmp.y = ptInsTmp.y - m_nTextHeight;//*DocGetPScale()
text3->setPosition(ptTmp);
entitySet.append(text3);
}
if(m_csTitle3 != "" || (m_ptStart != AcGePoint3d(0,0,0))){
ptTmp.x = ptInsTmp.x + nLen - m_nTextHeight/2;//*DocGetPScale()
ptTmp.y = ptInsTmp.y + m_nTextHeight/2;//*DocGetPScale()
ptTmp2.x = ptTmp.x + nLen2 + m_nTextHeight;//*DocGetPScale()
ptTmp2.y = ptTmp.y;
AcDbLine *Line = new AcDbLine;
Line->setLayer(idLayer);
Line->setStartPoint(ptTmp);
Line->setEndPoint(ptTmp2);
entitySet.append(Line);
}
}
if(m_csTitle4 != ""){
ptTmp.x = ptInsTmp.x + nLen + nLen2 + m_nTextHeight;//*DocGetPScale()
ptTmp.y = ptInsTmp.y;
AcDbText *text4 = new AcDbText;
text4->setPosition(ptTmp);
text4->setLayer(idLayer);
text4->setHeight(m_nTextHeight);//*DocGetPScale()
text4->setTextString(m_csTitle4);
text4->setTextStyle(id);
text4->setWidthFactor(m_nWidthFactor);
text4->setRotation(0);
entitySet.append(text4);
}
return Acad::eOk;
}
void InitLampDim(BOOL bTrue)
{
if(bTrue) {
CLampDim::rxInit();
} else {
deleteAcRxClass(CLampDim::desc());
}
}