#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; }