213 lines
3.5 KiB
C++
213 lines
3.5 KiB
C++
#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;
|
|
}
|