304 lines
6.8 KiB
C++
304 lines
6.8 KiB
C++
#include "stdafx.h"
|
|
#include "AecInfCmdGrip.h"
|
|
#include "dbgrip.h"
|
|
#include "AecGripCback.h"
|
|
#include "MFCDbDwgFiler.h"
|
|
|
|
extern double PixelToWcs(int nPixel);
|
|
extern void PushGripMessage(GripMessage&);
|
|
|
|
Adesk::UInt32 AecInfCmdGrip::kCurrentVersionNumber = 1;
|
|
|
|
static const Adesk::UInt16 kMagenta = 6;
|
|
static const Adesk::UInt16 kWhite = 7;
|
|
static const Adesk::UInt16 kColorByLayer = 256;
|
|
|
|
ACRX_DXF_DEFINE_MEMBERS (AecInfCmdGrip, AecDbEntityBase,
|
|
AcDb::kDHL_CURRENT, AcDb::kMReleaseCurrent,
|
|
AcDbProxyEntity::kNoOperation | AcDbProxyEntity::kDisableProxyWarning,
|
|
AEC_INF,
|
|
"AecInfCmdGrip"
|
|
"|Product Desc: shanghua earthworm app obj"
|
|
"|Company: shanghua inc"
|
|
"|WEB Address: www.shanghuasoft.com")
|
|
|
|
|
|
AecInfCmdGrip::AecInfCmdGrip(void)
|
|
{
|
|
m_inf.idOwner.setNull();
|
|
m_inf.ptPos.set(0,0,0);
|
|
m_inf.vtDir.set(0,0,0);
|
|
m_inf.dSize1 = 0;m_inf.dSize2 = 0;
|
|
m_inf.nType = 0;
|
|
m_pGripAppData = new AecGripData;
|
|
}
|
|
|
|
AecInfCmdGrip::~AecInfCmdGrip(void)
|
|
{
|
|
delete m_pGripAppData;
|
|
}
|
|
|
|
void AecInfCmdGrip::SetInf(const AecInterface& inf)
|
|
{
|
|
assertWriteEnabled();
|
|
m_inf = inf;
|
|
}
|
|
|
|
bool AecInfCmdGrip::GetInf(AecInterface& inf) const
|
|
{
|
|
assertReadEnabled();
|
|
inf = m_inf;
|
|
return true;
|
|
}
|
|
|
|
void AecInfCmdGrip::SetBuddy(const AcDbObjectId& id)
|
|
{
|
|
assertWriteEnabled();
|
|
m_idBuddy = id;
|
|
}
|
|
|
|
AcDbObjectId AecInfCmdGrip::GetBuddy() const
|
|
{
|
|
assertReadEnabled();
|
|
return m_idBuddy;
|
|
}
|
|
|
|
void AecInfCmdGrip::SetCommand(LPCTSTR pszCmd)
|
|
{
|
|
assertWriteEnabled();
|
|
|
|
if (pszCmd != NULL)
|
|
_tcscpy(m_szCmd,pszCmd);
|
|
}
|
|
|
|
Acad::ErrorStatus AecInfCmdGrip::copyFrom(const AcRxObject* pSrc)
|
|
{
|
|
assertWriteEnabled();
|
|
|
|
AecInfCmdGrip* pSrcGrp = AecInfCmdGrip::cast(pSrc);
|
|
if (pSrcGrp != NULL)
|
|
{
|
|
m_inf = pSrcGrp->m_inf;
|
|
m_idBuddy = pSrcGrp->m_idBuddy;
|
|
_tcscpy(m_szCmd,pSrcGrp->m_szCmd);
|
|
}
|
|
return Acad::eOk;
|
|
}
|
|
|
|
Acad::ErrorStatus AecInfCmdGrip::subGetTransformedCopy(const AcGeMatrix3d& xform,AcDbEntity*& pEnt) const
|
|
{
|
|
assertReadEnabled();
|
|
|
|
pEnt = new AecInfCmdGrip;
|
|
((AecInfCmdGrip*)pEnt)->m_inf = m_inf;
|
|
((AecInfCmdGrip*)pEnt)->m_inf.ptPos.transformBy(xform);
|
|
((AecInfCmdGrip*)pEnt)->m_inf.vtDir.transformBy(xform);
|
|
((AecInfCmdGrip*)pEnt)->m_idBuddy = m_idBuddy;
|
|
|
|
return Acad::eOk;
|
|
}
|
|
|
|
Acad::ErrorStatus AecInfCmdGrip::subGetGripPoints( AcDbGripDataPtrArray& grips,
|
|
const double curViewUnitSize,
|
|
const int gripSize,
|
|
const AcGeVector3d& curViewDir,
|
|
const int bitflags) const
|
|
{
|
|
assertReadEnabled();
|
|
|
|
memset(m_pGripAppData,0,sizeof(AecGripData));
|
|
m_pGripAppData->ptGrip = m_inf.ptPos;
|
|
m_pGripAppData->nPos = eCommand0;
|
|
m_pGripAppData->nIndex = 0;
|
|
_tcscpy(m_pGripAppData->szTip,_T("½Ó¿ÚÀÉì"));
|
|
m_pGripAppData->pOwner = (AcDbEntity*)this;
|
|
m_pGripAppData->idHost = objectId();
|
|
|
|
AcDbGripData* pGripData = new AcDbGripData;
|
|
pGripData->setGripPoint( m_inf.ptPos );
|
|
pGripData->setAppData((void*)m_pGripAppData);
|
|
pGripData->setWorldDraw(AecGripCback::WorldDrawfunc);
|
|
pGripData->setToolTipFunc(AecGripCback::GripToolTipFunc);
|
|
grips.append(pGripData);
|
|
|
|
return Acad::eOk;
|
|
}
|
|
|
|
Acad::ErrorStatus AecInfCmdGrip::subMoveGripPointsAt(const AcDbVoidPtrArray& appData, const AcGeVector3d& vtOffset, const int bitflags)
|
|
{
|
|
assertWriteEnabled();
|
|
|
|
AecGripData* pAppData = NULL;
|
|
AcDbIntArray arIndex;
|
|
|
|
if ( !appData.isEmpty() )
|
|
{
|
|
pAppData = (AecGripData*)appData.first();
|
|
arIndex.append(pAppData->nIndex);
|
|
}
|
|
else
|
|
{
|
|
return Acad::eOk;
|
|
}
|
|
|
|
int nGripIndex = arIndex.first();
|
|
|
|
GripMessage msg;
|
|
memset(&msg,0,sizeof(GripMessage));
|
|
//reset
|
|
msg.nSegindex = -1;
|
|
msg.nType = -1;
|
|
msg.idHost.setNull();
|
|
msg.pParam = 0;
|
|
msg.nData = -1;
|
|
_tcscpy(msg.szLockId, _T("0"));//Ëø¶¨id,Èç¹ûÓÐ
|
|
msg.fData = 0;
|
|
msg.nSegindex = 0;
|
|
msg.nSubSegIndex = 0;
|
|
msg.vtOffset.set(0,0,0);
|
|
msg.ptGrip.set(0,0,0);
|
|
|
|
msg.nType = eCommand0;
|
|
msg.nData = 0;
|
|
|
|
msg.ptGrip = m_inf.ptPos;
|
|
msg.idHost = pAppData->idHost;
|
|
msg.vtOffset = vtOffset;
|
|
|
|
PushGripMessage(msg);
|
|
|
|
CString sCmd = m_szCmd;
|
|
if (!sCmd.IsEmpty())
|
|
{
|
|
acedPostCommand(_T("\x03"));
|
|
sCmd += _T("\n");
|
|
acedPostCommand(sCmd);
|
|
}
|
|
return Acad::eOk;
|
|
}
|
|
|
|
Acad::ErrorStatus AecInfCmdGrip::Draw2d(AcGiDraw &dc) const
|
|
{
|
|
assertReadEnabled();
|
|
|
|
if (Has2DBuffer())
|
|
{
|
|
AcDbEntity* pEnt = NULL;
|
|
const AcDbVoidPtrArray &ar2D = Get2DBuffer();
|
|
for (int i = 0;i < ar2D.length();i++)
|
|
{
|
|
pEnt = (AcDbEntity*)ar2D.at(i);
|
|
dc.DrawEntity(*pEnt);
|
|
}
|
|
return Acad::eOk;
|
|
}
|
|
|
|
AcDbPoint* pPt = new AcDbPoint;
|
|
pPt->setPosition(m_inf.ptPos);
|
|
pPt->setLayer(layerId());
|
|
|
|
dc.DrawEntity(*pPt);
|
|
Add2DBuffer(pPt);
|
|
|
|
return Acad::eOk;
|
|
}
|
|
|
|
Acad::ErrorStatus AecInfCmdGrip::Draw3d(AcGiDraw &dc) const
|
|
{
|
|
assertReadEnabled();
|
|
|
|
Draw2d(dc);
|
|
|
|
return Acad::eOk;
|
|
}
|
|
|
|
Acad::ErrorStatus AecInfCmdGrip::dwgInFields (AcDbDwgFiler* pFiler)
|
|
{
|
|
AssertWriteEnabled();
|
|
|
|
//----- Read parent class information first.
|
|
Acad::ErrorStatus es = Acad::eOk;
|
|
if ( !pFiler->isKindOf(CMFCDbDwgFiler::desc()))
|
|
{
|
|
es = AecDbEntityBase::dwgInFields (pFiler) ;
|
|
if ( es != Acad::eOk )
|
|
return (es) ;
|
|
}
|
|
|
|
//----- Object version number needs to be read first
|
|
Adesk::UInt32 version =0 ;
|
|
if ( (es =pFiler->readUInt32 (&version)) != Acad::eOk )
|
|
return (es) ;
|
|
|
|
if ( version > AecInfCmdGrip::kCurrentVersionNumber )
|
|
return (Acad::eMakeMeProxy);
|
|
|
|
pFiler->readPoint3d(&m_inf.ptPos);
|
|
pFiler->readVector3d(&m_inf.vtDir);
|
|
pFiler->readDouble(&m_inf.dSize1);
|
|
pFiler->readDouble(&m_inf.dSize2);
|
|
pFiler->readSoftPointerId((AcDbSoftPointerId *)&m_inf.idOwner);
|
|
pFiler->readSoftPointerId(&m_idBuddy);
|
|
pFiler->readInt16(&m_inf.nType);
|
|
|
|
TCHAR* pszTxt = NULL;
|
|
pFiler->readString(&pszTxt);
|
|
if (pszTxt != NULL)
|
|
{
|
|
_tcscpy(m_szCmd,pszTxt);
|
|
acutDelString(pszTxt);
|
|
pszTxt = NULL;
|
|
}
|
|
return pFiler->filerStatus();
|
|
}
|
|
|
|
Acad::ErrorStatus AecInfCmdGrip::dwgOutFields(AcDbDwgFiler* pFiler) const
|
|
{
|
|
assertReadEnabled();
|
|
|
|
//----- Save parent class information first.
|
|
Acad::ErrorStatus es = Acad::eOk;
|
|
if ( !pFiler->isKindOf(CMFCDbDwgFiler::desc()))
|
|
{
|
|
es = AecDbEntityBase::dwgOutFields (pFiler) ;
|
|
if ( es != Acad::eOk )
|
|
return (es) ;
|
|
}
|
|
|
|
//----- Object version number needs to be saved first
|
|
if ( (es =pFiler->writeUInt32 (AecInfCmdGrip::kCurrentVersionNumber)) != Acad::eOk )
|
|
return (es) ;
|
|
|
|
pFiler->writePoint3d(m_inf.ptPos);
|
|
pFiler->writeVector3d(m_inf.vtDir);
|
|
pFiler->writeDouble(m_inf.dSize1);
|
|
pFiler->writeDouble(m_inf.dSize2);
|
|
pFiler->writeSoftPointerId(m_inf.idOwner);
|
|
pFiler->writeSoftPointerId(m_idBuddy);
|
|
pFiler->writeInt16(m_inf.nType);
|
|
|
|
const TCHAR* pszTxt = m_szCmd;
|
|
pFiler->writeString(pszTxt);
|
|
|
|
return (pFiler->filerStatus ());
|
|
}
|
|
|
|
Acad::ErrorStatus AecInfCmdGrip::dxfInFields (AcDbDxfFiler* pFiler)
|
|
{
|
|
return Acad::eOk;
|
|
}
|
|
|
|
Acad::ErrorStatus AecInfCmdGrip::dxfOutFields(AcDbDxfFiler* pFiler) const
|
|
{
|
|
return Acad::eOk;
|
|
}
|
|
|
|
AecDbObjXDataMap* AecInfCmdGrip::GetSpecialtyData(AcDb::OpenMode bMode/* = AcDb::kForWrite*/)
|
|
{
|
|
return NULL;
|
|
}
|
|
|
|
const AecDbObjXDataMap* AecInfCmdGrip::GetSpecialtyData() const
|
|
{
|
|
return NULL;
|
|
} |