#include "stdafx.h" #include "FoldPinJig.h" #include "FoldLayPinDlg.h" TVirtualFoldPin::TVirtualFoldPin(void) { m_dH = 0.0; } TVirtualFoldPin::~TVirtualFoldPin() { } void TVirtualFoldPin::SetPostion(const XPoint& ptInsert) { m_ptInsert = ptInsert; } Acad::ErrorStatus TVirtualFoldPin::ExplodeOrDraw2d(XExplodeDraw& dc) const { //»æÖƱ£»¤Ô² double dRadius = 0.0; CFoldToolKit* pToolKit = CFoldToolKit::Instance(); for (int i = 0;i < m_arProHeight.length();++i) { if (pToolKit) { dRadius = pToolKit->CalcFoldRx(m_dH,m_arProHeight[i]); if (dRadius > 1e-6) { XCircle Circle(m_ptInsert,dRadius * 1000); dc.DrawCircle(Circle); } } } //»æÖÆÔ¤ÀÀ if (m_blkId.isValid()) { AcDbBlockReference Ref(m_ptInsert,m_blkId); AcGeScale3d Scale(m_dScale*10*DocGetPScale(),m_dScale*10*DocGetPScale(),m_dScale*10*DocGetPScale()); Ref.setScaleFactors(Scale); dc.DrawEntity(Ref); } return Acad::eOk; } void TVirtualFoldPin::SetDlgPtr() { } void TVirtualFoldPin::SetBlockId(const AcDbObjectId& oid) { m_blkId = oid; } void TVirtualFoldPin::SetProHeight(const AcGeDoubleArray& arProHs) { m_arProHeight = arProHs; } void TVirtualFoldPin::SetBlkScale(const double& dScale) { m_dScale = dScale; } void TVirtualFoldPin::SetThunderHeight(const double& dH) { m_dH = dH; } //================================================================= CFoldPinJig::CFoldPinJig(void) { CAcModuleResourceOverride myResources; m_pVirtualEnt = new TVirtualFoldPin; // m_pDlg = new CFoldLayPinDlg; // m_pDlg->DoModeless(); } CFoldPinJig::~CFoldPinJig(void) { if (m_pVirtualEnt) { delete m_pVirtualEnt; } if (m_pDlg) { if (IsWindow(m_pDlg->GetSafeHwnd())) { m_pDlg->DestroyWindow(); } delete m_pDlg; } } int CFoldPinJig::DoIt(int *keyIndex) { int nRet = 0; AcEdJig::DragStatus es = drag(); if (es == AcEdJig::kNormal) { return RTNORM; } else if(es == AcEdJig::kNull || es == AcEdJig::kCancel) { return RTNONE; } return nRet; } // AcEdJig::DragStatus CFoldPinJig::GetPoint(XPoint &pt) // { // AcEdJig::DragStatus ds; // // ds = acquirePoint(pt); // // if (ds != kNormal) // { // return ds; // } // // if(ads_distance(pt,m_ptResult) < 1e-3) // { // return AcEdJig::kNoChange; // } // // m_ptResult = pt; // // return ds; // } AcEdJig::DragStatus CFoldPinJig::sampler() { setUserInputControls((UserInputControls) ( kNullResponseAccepted | kAccept3dCoordinates | kDontUpdateLastPoint )); AcEdJig::DragStatus ds; AcGePoint3d pt; ds = acquirePoint(pt); if (ds != kNormal) { return ds; } if(pt.distanceTo(m_ptResult) < 1e-3) { return AcEdJig::kNoChange; } m_ptResult = pt; return ds; } Adesk::Boolean CFoldPinJig::update() { if (m_pVirtualEnt && m_pDlg) { AcGeDoubleArray arProH; double dH = 0.0,dScale = 1.0; m_pDlg->GetDlgProHT(arProH); dH = m_pDlg->GetThunderHeight(); dScale = m_pDlg->GetBlkScale(); m_pVirtualEnt->SetBlkScale(dScale); m_pVirtualEnt->SetProHeight(arProH); m_pVirtualEnt->SetThunderHeight(dH); m_pVirtualEnt->SetPostion(m_ptResult); } return Adesk::kTrue; } AcDbEntity* CFoldPinJig::entity() const { return m_pVirtualEnt; } void CFoldPinJig::SetProBlock(const AcDbObjectId& oid) { m_BlockId = oid; if (m_pVirtualEnt) { m_pVirtualEnt->SetBlockId(oid); } } void CFoldPinJig::SetBlockName(const CString& sBlkName) { m_sBlkName = sBlkName; if (m_pDlg) { m_pDlg->SetBlkName(sBlkName); } } void CFoldPinJig::SetDlgPtr(CFoldLayPinDlg* pDlg) { if (pDlg) { m_pDlg = pDlg; } } AcGePoint3d CFoldPinJig::GetLastPoint() { return m_ptResult; }