#include "stdafx.h" #include "droptarget.h" #include "acdb.h" #include "adslib.h" #include "rxregsvc.h" #include "dbents.h" #include "dbsymtb.h" #include "acdocman.h" #include"BlockDrag.h" #include"geassign.h " CMyOverrideDropTarget::CMyOverrideDropTarget(int nType,AcDbObjectId BlockId,int nColor,CString sPattern,double dScale,BOOL bExplode) { m_nType=nType; m_rad = 0; m_BlockId=BlockId; m_bDrag=FALSE; m_nColor=nColor; m_sPattern=sPattern; m_dScale=dScale; m_nIndex=0; m_bExplode=bExplode; } CMyOverrideDropTarget::~CMyOverrideDropTarget() { } void DrawBlockFun(); DROPEFFECT CMyOverrideDropTarget::OnDragEnter(CWnd* pWnd, COleDataObject* pDataObject,DWORD dwKeyState, CPoint point) { return OnDragOver(pWnd, pDataObject, dwKeyState, point); } DROPEFFECT CMyOverrideDropTarget::OnDragOver(CWnd* pWnd, COleDataObject* pDataObject,DWORD dwKeyState, CPoint point) { return DROPEFFECT_COPY; } void CMyOverrideDropTarget::OnDragLeave(CWnd* pWnd) { //acutPrintf(_T("dkdkdk")); } DROPEFFECT CMyOverrideDropTarget::OnDropEx(CWnd* pWnd, COleDataObject* pDataObject,DROPEFFECT dropDefault, DROPEFFECT dropList, CPoint point) { return -1; // calls OnDrop(); } void CMyOverrideDropTarget::ColorHatch(int nColor,ads_point pt) { CString sText; AcDbObjectIdArray ExtIds; AcDbObjectIdArray DftIds; AcDbObjectId ExtId; AcDbObjectId DftId; ads_name first; ads_name last; acedInitGet(0,_T("D S")); AcDbObjectId FirstId; AcDbObjectId LastId; acdbEntLast(first); acdbGetObjectId(FirstId,first); ExtIds.setLogicalLength(0); DftIds.setLogicalLength(0); sText.Format(_T("-boundary %0.2f,%0.2f "),pt[0],pt[1]); BaseFuncs::CAD_SendStringToExecute(sText,TRUE); BaseFuncs::ClearAcadCmdLine(); acdbEntLast(last); acdbGetObjectId(LastId,last); if(FirstId!=LastId) { ExtIds.append(LastId); acdbEntNext(first,first); acdbGetObjectId(FirstId,first); if(FirstId!=LastId) { DftIds.append(FirstId); } BaseFuncs::makeHatch3(_T("SOLID"),ExtIds,DftIds,nColor); BaseFuncs::DeleteEnt(LastId); if(DftIds.logicalLength()>0) BaseFuncs::DeleteEnt(FirstId); } } void CMyOverrideDropTarget::patternHatch(CString sPattern,ads_point pt) //填充 { CString sText; AcDbObjectIdArray ExtIds; AcDbObjectIdArray DftIds; AcDbObjectId ExtId; AcDbObjectId DftId; ads_name first; AcDbObjectId FirstId; AcDbObjectId LastId; acdbEntLast(first); acdbGetObjectId(FirstId,first); double dAngle=0.0; double dScale=20; CString sNew; acedInitGet(0,_T("S")); //绘边界(D)/ ExtIds.setLogicalLength(0); DftIds.setLogicalLength(0); sText=_T("-bhatch p ") +sPattern; sNew.Format(_T(" %0.2f %0.2f %0.2f,%0.2f "),dScale,dAngle,pt[0],pt[1]); sText=sText+sNew; BaseFuncs::CAD_SendStringToExecute(sText,TRUE); BaseFuncs::ClearAcadCmdLine(); } BOOL CMyOverrideDropTarget::OnDrop(CWnd* pWnd, COleDataObject* pDataObject,DROPEFFECT dropEffect, CPoint point) { if(acDocManagerPtr()->documentCount()<1) return TRUE ; //modify by hrp if(m_bDrag) return TRUE; m_bDrag=TRUE; BOOL fRet=TRUE; OnDragLeave(pWnd); CRect rSize; acedDwgPoint dwgPt; int windnum = acedGetWinNum(point.x, point.y); if (windnum == 0) return FALSE; AcDbObjectId BlfId; acedCoordFromPixelToWorld(windnum, point, dwgPt); AcDbDatabase *pDb = AcApGetDatabase((CView*)pWnd); acDocManager->lockDocument(acDocManager->document(pDb)); acedGetAcadDwgView()->SetFocus(); //设置CAD焦点 switch(m_nType) { case 0: BaseFuncs::InsertBlockRef1(m_BlockId,BlfId,asPnt3d(dwgPt),AcGeScale3d(m_dScale,m_dScale,m_dScale),0,TRUE); if(m_bExplode) { AcDbVoidPtrArray voidPtrArr; AcDbBlockReference *pBlf=NULL; if(acdbOpenObject(pBlf,BlfId,AcDb::kForWrite)==Acad::eOk) { pBlf->explode(voidPtrArr); pBlf->erase(); pBlf->close(); pBlf=NULL; AcDbObjectId EntId; for(int nLen=0;nLenSetActiveWindow(); acDocManager->unlockDocument(acDocManager->document(pDb)); return TRUE; }