Files
envi-code/SourceCode/Code2026/AdsXRx/AecDbGripDim.cpp
T
2026-09-28 15:28:50 +08:00

171 lines
3.4 KiB
C++

//-------------------------------------------------------------------------------------------------------+
// Copyright (C), 1998-2007, SH Software Co. Ltd.
// = FileName : AecDbGripDim。cpp
// = Version : ver2.0
// = Author : zjq
// = CreateDate : 2002-09-09
// = Description: 夹点标注类的定义
// = Maintainers:
//
//-------------------------------------------------------------------------------------------------------+
#include "StdAfx.h"
#include "AecDbGripDim.h"
#if ARX > 17
#include "AecDbGrip.h"
#include "AEntityBase.h"
AecDbGripDim::AecDbGripDim(int flag,bool bHover)
: m_bHoverDim(bHover),m_pDimData(NULL),m_bitFlags(flag),
m_fElevation(0),m_vtNormal(0,0,1),m_fHorzRotation(0)
{
}
AecDbGripDim::~AecDbGripDim()
{
}
long AecDbGripDim::Index()const
{
return m_pGrip == NULL ? -1 : m_pGrip->FindDim((AecDbGripDim*)this);
}
bool AecDbGripDim::IsHoverDim()const
{
return m_bHoverDim;
}
const AecDbGrip* AecDbGripDim::Grip()const
{
return m_pGrip;
}
const AcGePoint3d AecDbGripDim::GripPoint()const
{
return Grip()->Position();
}
void AecDbGripDim::SetGrip(AecDbGrip*pGrip)
{
m_pGrip = pGrip;
}
void AecDbGripDim::SetElevation(double elev)
{
m_fElevation = elev;
}
void AecDbGripDim::SetHorzRotation(double nRot)
{
m_fHorzRotation = nRot;
}
bool AecDbGripDim::IsLocked()const
{
if (m_pDimData != NULL)
return m_pDimData->isConstrained();
return false;
}
void AecDbGripDim::Lock(double value)
{
m_fValueLock = value;
if (m_pDimData != NULL)
m_pDimData->setConstrain(true);
}
double AecDbGripDim::GetLockValue()const
{
return m_fValueLock;
}
void AecDbGripDim::ResetDimData()
{
m_pDimData = NULL;
}
AcDbDimension* AecDbGripDim::DimEnt()const
{
return m_pDimData != NULL ? m_pDimData->dimension() : NULL;
}
bool AecDbGripDim::operator>(const AecDbGripDim&)const
{
return false;
}
bool AecDbGripDim::operator<(const AecDbGripDim&)const
{
return false;
}
AcDbDimData* AecDbGripDim::CreateDimData(const AcDbObjectId &entId,double dimScale)
{
ResetDimData();
m_fDimScale = dimScale;
AcDbDimension*pDimEnt = CreateDimEnt();
pDimEnt->setDatabaseDefaults();
pDimEnt->setElevation(m_fElevation);
pDimEnt->setNormal(m_vtNormal);
pDimEnt->setHorizontalRotation(m_fHorzRotation);
AcDbDimStyleTableRecord Style, *pStyle = &Style;
AcDbDatabase* pDb = acdbCurDwg();
pDb->getDimstyleData(pStyle);
pStyle->setDimdec(max(pDb->luprec(),1));//长度精度
pStyle->setDimadec(max(pDb->auprec(),1));//角度精度
pDimEnt->setDimensionStyle(pDb->dimstyle());
pDimEnt->setDimstyleData(pStyle);
// extern double g_nAcadVer;
if(g_nAcadVer > 16.11)
{
acDocManager->lockDocument(curDoc());
AcDbObjectId idTxt = XPrivate::InitDynTextStyle();
if(!idTxt.isNull())
{
pDimEnt->setDimtxsty(idTxt);//否则使用STANDARD
}
acDocManager->unlockDocument(curDoc());
}
m_pDimData = new AcDbDimData(pDimEnt,AEntityBase::DimDataSetValue,m_bitFlags,this);
m_pDimData->setOwnerId(entId);
m_pDimData->setDimEditable(true);
return m_pDimData;
}
void AecDbGripDim::UpdateDimEnt()
{
if(g_nAcadVer < 16.11 && m_pDimData != NULL)
{
// extern BOOL g_bDynInput;
// extern int g_iMaxDynDimNum;
if(!g_bDynInput || Index() >= g_iMaxDynDimNum)
{
m_pDimData->setDimInvisible(true);
}
else
{
m_pDimData->setDimInvisible(false);
}
}
}
bool AecDbGripDim::CanLock()const
{
if (m_pDimData != NULL)
{
return m_pDimData->isDimRadius() ||
m_pDimData->isDimResultantLength() ||
m_pDimData->isDimResultantAngle();
}
return FALSE;
}
#endif