Files
envi-code/SourceCode/Code2026/ThunderProof/FoldPinJig.cpp
T
2026-09-28 15:28:50 +08:00

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