607 lines
15 KiB
C++
607 lines
15 KiB
C++
#include "stdafx.h"
|
|
#include "YMJCDlg.h"
|
|
#include "AecDbSlab.h"
|
|
#include "KTSetting.h"
|
|
#include "CoreTools.h"
|
|
#include "AecDbEwEquipment.h"
|
|
#include <AecDbEarthWorm.h>
|
|
|
|
//https://max.book118.com/html/2021/0322/6111123240003123.shtm
|
|
//GB 50040-2020 动力机器基础设计标准
|
|
//https://max.book118.com/html/2020/1219/6113152234003035.shtm
|
|
//https://max.book118.com/html/2018/0928/7052013020001151.shtm
|
|
|
|
static const Adesk::UInt16 kColorByBlock = 0;
|
|
static const Adesk::UInt16 kRed = 1;
|
|
static const Adesk::UInt16 kYellow = 2;
|
|
static const Adesk::UInt16 kGreen = 3;
|
|
static const Adesk::UInt16 kCyan = 4;
|
|
static const Adesk::UInt16 kBlue = 5;
|
|
static const Adesk::UInt16 kMagenta = 6;
|
|
static const Adesk::UInt16 kWhite = 7;
|
|
static const Adesk::UInt16 kGrey = 8;
|
|
static const Adesk::UInt16 kSteel = 252;
|
|
static const Adesk::UInt16 kColorByLayer = 256;
|
|
|
|
IMPLEMENT_DYNAMIC(CYMJCDlg, CDialog)
|
|
int g_nJCNo = 0;
|
|
CYMJCDlg::CYMJCDlg(CWnd* pParent /*=NULL*/)
|
|
: CDialog(CYMJCDlg::IDD, pParent)
|
|
, m_dL(1800)
|
|
, m_dW(800)
|
|
, m_dt(300)
|
|
, m_sBMat(_T("混凝土"))
|
|
, m_dHZ(120)
|
|
, m_dHZ2(120)
|
|
, m_dGL(1100)
|
|
, m_dGW(700)
|
|
, m_dGt(20)
|
|
, m_dGd(0)
|
|
, m_sGMat(_T("普通碳钢Q235"))
|
|
, m_nRow(2)
|
|
, m_nCol(3)
|
|
, m_dYP(300)
|
|
, m_dXP(300)
|
|
, m_sDMat(_T("碳钢Q235"))
|
|
, m_sRem(_T(""))
|
|
, m_bHasSteelSlab(TRUE)
|
|
, m_bHasBolt(TRUE)
|
|
, m_dBomEl(0)
|
|
, m_sNo(_T("JC-01"))
|
|
, m_dSideSp(150)
|
|
, m_nMNumber(6)
|
|
, m_bBoltType(TRUE)
|
|
, m_bBoltPipe(TRUE)
|
|
{
|
|
g_nJCNo++;
|
|
m_sNo.Format(_T("JC-%d"),g_nJCNo);
|
|
m_nArray = 0;
|
|
m_nSteel = 0;
|
|
m_nNumber = 6;
|
|
m_dMR = 100.0;
|
|
m_sMMat = _T("碳钢Q235B");
|
|
m_sMRem = _T("地脚螺栓备注");
|
|
m_sMType = _T("弯钩锚栓");
|
|
m_sMSize = _T("16");
|
|
m_dMPOD = 23.0;
|
|
m_dMPt = 1.5;
|
|
m_sMPMat = _T("碳钢Q235B");
|
|
|
|
|
|
GET_CACHE(CYMJCDlg
|
|
, %f%f%f%s%f%f%f%f%f%f%s%d%d%f%f%s%s%d%d%d%d%f%s%d%d%d%f%s%s%s%s%s%f%f%d%f
|
|
, &m_dL
|
|
, &m_dW
|
|
, &m_dt
|
|
, &m_sBMat
|
|
, &m_dHZ
|
|
, &m_dHZ2
|
|
, &m_dGL
|
|
, &m_dGW
|
|
, &m_dGt
|
|
, &m_dGd
|
|
, &m_sGMat
|
|
, &m_nRow
|
|
, &m_nCol
|
|
, &m_dYP
|
|
, &m_dXP
|
|
, &m_sDMat
|
|
, &m_sRem
|
|
, &m_bHasSteelSlab
|
|
, &m_bHasBolt
|
|
, &m_bBoltType
|
|
, &m_bBoltPipe
|
|
, &m_dBomEl
|
|
, &m_sNo
|
|
, &m_nArray
|
|
, &m_nSteel
|
|
, &m_nMNumber
|
|
, &m_dMR
|
|
, &m_sMMat
|
|
, &m_sMRem
|
|
, &m_sMType
|
|
, &m_sMSize
|
|
, &m_sMPMat
|
|
, &m_dMPOD
|
|
, &m_dMPt
|
|
, &m_nNumber
|
|
, &m_dSideSp
|
|
);
|
|
|
|
}
|
|
|
|
CYMJCDlg::~CYMJCDlg()
|
|
{
|
|
}
|
|
|
|
void CYMJCDlg::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CDialog::DoDataExchange(pDX);
|
|
DDX_Text(pDX, IDC_EDIT1, m_dL);
|
|
DDX_Text(pDX, IDC_EDIT2, m_dW);
|
|
DDX_Text(pDX, IDC_EDIT3, m_dt);
|
|
DDX_Text(pDX, IDC_EDIT4, m_sBMat);
|
|
DDX_Text(pDX, IDC_EDIT5, m_dHZ);
|
|
DDX_Text(pDX, IDC_EDIT6, m_dHZ2);
|
|
DDX_Text(pDX, IDC_EDIT9, m_dGL);
|
|
DDX_Text(pDX, IDC_EDIT10, m_dGW);
|
|
DDX_Text(pDX, IDC_EDIT7, m_dGt);
|
|
DDX_Text(pDX, IDC_EDIT11, m_dGd);
|
|
DDX_Text(pDX, IDC_EDIT12, m_sGMat);
|
|
DDX_Text(pDX, IDC_EDIT8, m_nRow);
|
|
DDX_Text(pDX, IDC_EDIT13, m_nCol);
|
|
DDX_Text(pDX, IDC_EDIT14, m_dYP);
|
|
DDX_Text(pDX, IDC_EDIT15, m_dXP);
|
|
DDX_Text(pDX, IDC_EDIT16, m_sDMat);
|
|
DDX_Text(pDX, IDC_EDIT18, m_sRem);
|
|
DDX_Check(pDX, IDC_CHECK2, m_bHasSteelSlab);
|
|
DDX_Check(pDX, IDC_CHECK3, m_bHasBolt);
|
|
DDX_Check(pDX, IDC_CHECK5, m_bBoltPipe);
|
|
DDX_Check(pDX, IDC_CHECK6, m_bBoltType);
|
|
DDX_Text(pDX, IDC_EDIT17, m_dBomEl);
|
|
DDX_Text(pDX, IDC_EDIT19, m_sNo);
|
|
DDX_Radio(pDX, IDC_RADIO1, m_nArray);
|
|
DDX_Radio(pDX, IDC_RADIO4, m_nSteel);
|
|
DDX_Text(pDX, IDC_EDIT23, m_nMNumber);
|
|
DDX_Text(pDX, IDC_EDIT24, m_dMR);
|
|
DDX_Text(pDX, IDC_EDIT16, m_sMMat);
|
|
DDX_Text(pDX, IDC_EDIT18, m_sMRem);
|
|
DDX_CBString(pDX, IDC_COMBO1, m_sMSize);
|
|
DDX_CBString(pDX, IDC_COMBO2, m_sMType);
|
|
DDX_Text(pDX, IDC_EDIT20, m_dMPOD);
|
|
DDX_Text(pDX, IDC_EDIT21, m_dMPt);
|
|
DDX_Text(pDX, IDC_EDIT22, m_sMPMat);
|
|
|
|
DDX_Text(pDX, IDC_EDIT25, m_dSideSp);
|
|
}
|
|
|
|
BEGIN_MESSAGE_MAP(CYMJCDlg, CDialog)
|
|
ON_BN_CLICKED(IDOK, &CYMJCDlg::OnBnClickedOk)
|
|
END_MESSAGE_MAP()
|
|
|
|
BOOL CYMJCDlg::OnInitDialog()
|
|
{
|
|
CDialog::OnInitDialog();
|
|
|
|
UpdateData(FALSE);
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
void CYMJCDlg::OnBnClickedOk()
|
|
{
|
|
UpdateData();
|
|
|
|
SET_CACHE(CYMJCDlg
|
|
, %f%f%f%s%f%f%f%f%f%f%s%d%d%f%f%s%s%d%d%d%d%f%s%d%d%d%f%s%s%s%s%s%f%f%d%f
|
|
, m_dL
|
|
, m_dW
|
|
, m_dt
|
|
, m_sBMat
|
|
, m_dHZ
|
|
, m_dHZ2
|
|
, m_dGL
|
|
, m_dGW
|
|
, m_dGt
|
|
, m_dGd
|
|
, m_sGMat
|
|
, m_nRow
|
|
, m_nCol
|
|
, m_dYP
|
|
, m_dXP
|
|
, m_sDMat
|
|
, m_sRem
|
|
, m_bHasSteelSlab
|
|
, m_bHasBolt
|
|
, m_bBoltType
|
|
, m_bBoltPipe
|
|
, m_dBomEl
|
|
, m_sNo
|
|
, m_nArray
|
|
, m_nSteel
|
|
, m_nMNumber
|
|
, m_dMR
|
|
, m_sMMat
|
|
, m_sMRem
|
|
, m_sMType
|
|
, m_sMSize
|
|
, m_sMPMat
|
|
, m_dMPOD
|
|
, m_dMPt
|
|
, m_nNumber
|
|
, m_dSideSp);
|
|
|
|
CDialog::OnOK();
|
|
}
|
|
|
|
namespace
|
|
{
|
|
AcDbRegion* makeRectRegion(const AcGePoint3d& ptOrg
|
|
, const double& dL
|
|
, const double& dW
|
|
, const AcGeVector3d& vecL
|
|
, const AcGeVector3d& vecW
|
|
)
|
|
{
|
|
AcGePoint3d ptGe[5];
|
|
|
|
ptGe[0] = ptOrg + vecW * dW * .5;
|
|
ptGe[0] += vecL * dL * .5;
|
|
ptGe[1] = ptGe[0] - vecW * dW;
|
|
ptGe[2] = ptGe[1] - vecL * dL;
|
|
ptGe[3] = ptGe[2] + vecW * dW;
|
|
ptGe[4] = ptGe[0];
|
|
|
|
return AecDbEarthWorm::CreatePolygonRegionOnly(ptGe, 5);
|
|
}
|
|
|
|
AcDbRegion* makePolyReg(const AcGePoint3d& ptMid, const int& num, const double& dR)
|
|
{
|
|
AcGeVector3d X(AcGeVector3d::kXAxis), Y(AcGeVector3d::kYAxis), Z(AcGeVector3d::kZAxis);
|
|
AcGePoint3d ptO(AcGePoint3d::kOrigin);
|
|
|
|
AcGePoint3d ptGe[7];
|
|
|
|
double angle = 2 * PI / (double)num;
|
|
for (int i = 0; i <= num; i++)
|
|
{
|
|
ptGe[i] = ptMid + X * dR * cos(i * angle);
|
|
ptGe[i] += Y * dR * sin(i * angle);
|
|
}
|
|
|
|
return AecDbEarthWorm::CreatePolygonRegionOnly(ptGe, 7);
|
|
}
|
|
|
|
AcDbRegion* makeCirReg(const AcGePoint3d& ptMid, const AcGeVector3d& vtZ, const double& dR)
|
|
{
|
|
AcDbCircle* pCir(new AcDbCircle(ptMid, vtZ, dR));
|
|
if (!pCir) return NULL;
|
|
return CoreTools::createRegion(pCir);
|
|
}
|
|
|
|
template <typename T>
|
|
void setData(AecEqui::XPrimData* pXPData, void* pData)
|
|
{
|
|
pXPData->m_nID = ::_time32(NULL);
|
|
switch (pXPData->m_eType)
|
|
{
|
|
case AecEqui::kExtrude:
|
|
case AecEqui::kRevolve:
|
|
pXPData->m_nSize = ((AecEqui::XBuffer*)pData)->nSize;
|
|
if (pXPData->m_nSize > 0)
|
|
{
|
|
pXPData->m_pData = new byte[pXPData->m_nSize];
|
|
::memcpy(pXPData->m_pData, ((AecEqui::XBuffer*)pData)->pData, pXPData->m_nSize);
|
|
}
|
|
break;
|
|
default:
|
|
pXPData->m_pData = new T;
|
|
::memcpy(pXPData->m_pData, pData, sizeof(T));
|
|
pXPData->m_nSize = sizeof(T);
|
|
break;
|
|
}
|
|
}
|
|
|
|
void clearData(AecEqui::XPrimData& data)
|
|
{
|
|
data.releaseData();
|
|
}
|
|
|
|
}
|
|
|
|
AecDbEwEquipment* CYMJCDlg::GetBaseStruPart(AcGePoint3d& ptBomMid)
|
|
{
|
|
#ifdef _DEBUG
|
|
acutPrintf(_T("\n makeDJLS!"));
|
|
#endif
|
|
AcGeVector3d X(AcGeVector3d::kXAxis), Y(AcGeVector3d::kYAxis), Z(AcGeVector3d::kZAxis);
|
|
|
|
AecDbEwEquipment* pEqu = new AecDbEwEquipment;
|
|
|
|
pEqu->GetSpecialtyData()->SetAt(_T("_m_dL_"), m_dL);
|
|
pEqu->GetSpecialtyData()->SetAt(_T("_m_dW_"), m_dW);
|
|
pEqu->GetSpecialtyData()->SetAt(_T("_m_dt_"), m_dt);
|
|
pEqu->GetSpecialtyData()->SetAt(_T("_m_sBMat_"), m_sBMat);
|
|
pEqu->GetSpecialtyData()->SetAt(_T("_m_dHZ_"), m_dHZ);
|
|
pEqu->GetSpecialtyData()->SetAt(_T("_m_dHZ2_"), m_dHZ2);
|
|
pEqu->GetSpecialtyData()->SetAt(_T("_m_dGL_"), m_dGL);
|
|
pEqu->GetSpecialtyData()->SetAt(_T("_m_dGW_"), m_dGW);
|
|
pEqu->GetSpecialtyData()->SetAt(_T("_m_dGt_"), m_dGt);
|
|
pEqu->GetSpecialtyData()->SetAt(_T("_m_dGd_"), m_dGd);
|
|
pEqu->GetSpecialtyData()->SetAt(_T("_m_sGMat_"), m_sGMat);
|
|
pEqu->GetSpecialtyData()->SetAt(_T("_m_nRow_"), m_nRow);
|
|
pEqu->GetSpecialtyData()->SetAt(_T("_m_nCol_"), m_nCol);
|
|
pEqu->GetSpecialtyData()->SetAt(_T("_m_dYP_"), m_dYP);
|
|
pEqu->GetSpecialtyData()->SetAt(_T("_m_dXP_"), m_dXP);
|
|
pEqu->GetSpecialtyData()->SetAt(_T("_m_sDMat_"), m_sDMat);
|
|
pEqu->GetSpecialtyData()->SetAt(_T("_m_sRem_"), m_sRem);
|
|
pEqu->GetSpecialtyData()->SetAt(_T("_m_bHasSteelSlab_"), m_bHasSteelSlab);
|
|
pEqu->GetSpecialtyData()->SetAt(_T("_m_bHasBolt_"), m_bHasBolt);
|
|
pEqu->GetSpecialtyData()->SetAt(_T("_m_bBoltType_"), m_bBoltType);
|
|
pEqu->GetSpecialtyData()->SetAt(_T("_m_bBoltPipe_"), m_bBoltPipe);
|
|
pEqu->GetSpecialtyData()->SetAt(_T("_m_dBomEl_"), m_dBomEl);
|
|
pEqu->GetSpecialtyData()->SetAt(_T("_m_sNo_"), m_sNo);
|
|
pEqu->GetSpecialtyData()->SetAt(_T("_m_nArray_"), m_nArray);
|
|
pEqu->GetSpecialtyData()->SetAt(_T("_m_nSteel_"), m_nSteel);
|
|
pEqu->GetSpecialtyData()->SetAt(_T("_m_nMNumber_"), m_nMNumber);
|
|
pEqu->GetSpecialtyData()->SetAt(_T("_m_dMR_"), m_dMR);
|
|
pEqu->GetSpecialtyData()->SetAt(_T("_m_sMMat_"), m_sMMat);
|
|
pEqu->GetSpecialtyData()->SetAt(_T("_m_sMRem_"), m_sMRem);
|
|
pEqu->GetSpecialtyData()->SetAt(_T("_m_sMType_"), m_sMType);
|
|
pEqu->GetSpecialtyData()->SetAt(_T("_m_sMSize_"), m_sMSize);
|
|
pEqu->GetSpecialtyData()->SetAt(_T("_m_sMPMat_"), m_sMPMat);
|
|
pEqu->GetSpecialtyData()->SetAt(_T("_m_dMPOD_"), m_dMPOD);
|
|
pEqu->GetSpecialtyData()->SetAt(_T("_m_dMPt_"), m_dMPt);
|
|
pEqu->GetSpecialtyData()->SetAt(_T("_m_nNumber_"), m_nNumber);
|
|
pEqu->GetSpecialtyData()->SetAt(_T("_m_dSideSp_"), m_dSideSp);
|
|
|
|
// 基础
|
|
AcDbRegion* pReg = makeRectRegion(ptBomMid, m_dL, m_dW, X, Y);
|
|
if (!pReg) return NULL;
|
|
NewExtrude extrudeJC(true, pReg, m_dt);
|
|
DELETE_PTR(pReg);
|
|
AecEqui::XPrimData dataJC;
|
|
dataJC.m_eType = AecEqui::kNewExtrude;
|
|
dataJC.m_bBoolSubtract = false;
|
|
dataJC.m_iClr = 50;
|
|
dataJC.m_vtMove = Z * -m_dt;
|
|
extrudeJC.toData(dataJC.m_pData, dataJC.m_nSize);
|
|
pEqu->AddSubPrimObj(&dataJC);
|
|
clearData(dataJC);
|
|
|
|
double dThick = _ttof(m_sMSize);
|
|
double dR(dThick * 2);
|
|
|
|
AcGePoint3d ptS(ptBomMid);
|
|
double dL, dW;
|
|
if (m_bHasSteelSlab)
|
|
{
|
|
if (!m_nSteel)
|
|
{
|
|
// 整块钢板预埋
|
|
dL = m_dGL;
|
|
dW = m_dGW;
|
|
}
|
|
else
|
|
{
|
|
// 小块钢板螺栓处预预埋
|
|
dL = m_dGL - m_dSideSp * 2;
|
|
dW = m_dGW - m_dSideSp * 2;
|
|
}
|
|
|
|
pReg = makeRectRegion(ptBomMid, dL, dW, X, Y);
|
|
if (!pReg) return NULL;
|
|
NewExtrude extrudeGB(true, pReg, m_dGt);
|
|
DELETE_PTR(pReg);
|
|
AecEqui::XPrimData dataGB;
|
|
dataGB.m_eType = AecEqui::kNewExtrude;
|
|
dataGB.m_bBoolSubtract = false;
|
|
dataGB.m_iClr = 100;
|
|
dataGB.m_vtMove = Z * -(m_dGd + m_dGt);
|
|
extrudeGB.toData(dataGB.m_pData, dataGB.m_nSize);
|
|
pEqu->AddSubPrimObj(&dataGB);
|
|
clearData(dataGB);
|
|
|
|
ptS -= Z * m_dGd;
|
|
}
|
|
else
|
|
{
|
|
dL = m_dL;
|
|
dW = m_dW;
|
|
}
|
|
|
|
if (m_bHasBolt)
|
|
{
|
|
//地脚螺栓...
|
|
|
|
if ((m_dSideSp > (dL - (dR + 5) * 2 - m_dSideSp)) || (m_dSideSp > (dW - (dR + 5) * 2 - m_dSideSp)))
|
|
{
|
|
AfxMessageBox(_T("侧边距不能超过基础板的长度、宽度!"));
|
|
return NULL;
|
|
}
|
|
|
|
if (m_dXP > (dL - (dR + 5) * 2 - m_dSideSp) || m_dYP > (dW - (dR + 5) * 2 - m_dSideSp))
|
|
{
|
|
AfxMessageBox(_T("行、列间距不能超过基础板的长度、宽度!"));
|
|
return NULL;
|
|
}
|
|
|
|
if (m_dMR > min(dL * .5, dW * .5))
|
|
{
|
|
AfxMessageBox(_T("布置半径不能超过基础板的长度、宽度!"));
|
|
return NULL;
|
|
}
|
|
|
|
if (m_dGd > (m_dt - m_dGt))
|
|
{
|
|
AfxMessageBox(_T("预埋钢板深度不能超过基础板的高度!"));
|
|
return NULL;
|
|
}
|
|
|
|
if (m_nArray)
|
|
{
|
|
double dH(.0);
|
|
if (m_bHasSteelSlab)
|
|
{
|
|
dH = dThick * 4 + m_dGd;
|
|
}
|
|
else
|
|
{
|
|
dH = dThick * 4;
|
|
}
|
|
|
|
// circle
|
|
AcGePoint3d pt;
|
|
double angle = PI * 2 / m_nMNumber;
|
|
for (int i = 0; i < m_nMNumber; i++)
|
|
{
|
|
pt = ptS + X * m_dMR * cos(angle * i);
|
|
pt += Y * m_dMR * sin(angle * i);
|
|
|
|
// 垫圈
|
|
pReg = makeCirReg(pt, Z, dR + 5);
|
|
if (!pReg) return NULL;
|
|
NewExtrude extrudeDQ(true, pReg, 3);
|
|
DELETE_PTR(pReg);
|
|
AecEqui::XPrimData dataDQ;
|
|
dataDQ.m_eType = AecEqui::kNewExtrude;
|
|
dataDQ.m_bBoolSubtract = false;
|
|
dataDQ.m_iClr = 200;
|
|
extrudeDQ.toData(dataDQ.m_pData, dataDQ.m_nSize);
|
|
pEqu->AddSubPrimObj(&dataDQ);
|
|
clearData(dataDQ);
|
|
|
|
// 螺母
|
|
pReg = makeCirReg(pt, Z, dR);
|
|
if (!pReg) return NULL;
|
|
NewExtrude extrudeLM1(true, pReg, dThick);
|
|
DELETE_PTR(pReg);
|
|
AecEqui::XPrimData dataLM1;
|
|
dataLM1.m_eType = AecEqui::kNewExtrude;
|
|
dataLM1.m_bBoolSubtract = false;
|
|
dataLM1.m_iClr = 200;
|
|
dataLM1.m_vtMove = Z * 3;
|
|
extrudeLM1.toData(dataLM1.m_pData, dataLM1.m_nSize);
|
|
pEqu->AddSubPrimObj(&dataLM1);
|
|
clearData(dataLM1);
|
|
|
|
// 螺母
|
|
pReg = makeCirReg(pt, Z, dR);
|
|
if (!pReg) return NULL;
|
|
NewExtrude extrudeLM2(true, pReg, dThick);
|
|
DELETE_PTR(pReg);
|
|
AecEqui::XPrimData dataLM2;
|
|
dataLM2.m_eType = AecEqui::kNewExtrude;
|
|
dataLM2.m_bBoolSubtract = false;
|
|
dataLM2.m_iClr = 200;
|
|
dataLM2.m_vtMove = Z * (3 + dThick);
|
|
extrudeLM2.toData(dataLM2.m_pData, dataLM2.m_nSize);
|
|
pEqu->AddSubPrimObj(&dataLM2);
|
|
clearData(dataLM2);
|
|
|
|
// 螺栓
|
|
pReg = makeCirReg(pt, Z, dThick);
|
|
if (!pReg) return NULL;
|
|
NewExtrude extrudeLS(true, pReg, dH);
|
|
DELETE_PTR(pReg);
|
|
AecEqui::XPrimData dataLS;
|
|
dataLS.m_eType = AecEqui::kNewExtrude;
|
|
dataLS.m_bBoolSubtract = false;
|
|
dataLS.m_iClr = 200;
|
|
dataLS.m_vtMove = Z * (3 + dThick * 2);
|
|
extrudeLS.toData(dataLS.m_pData, dataLS.m_nSize);
|
|
pEqu->AddSubPrimObj(&dataLS);
|
|
clearData(dataLS);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// rect
|
|
AcGePoint3d pt, ptTemp;
|
|
double dDist(.0), dLen(.0), dH(.0);
|
|
if (m_bHasSteelSlab)
|
|
{
|
|
if (m_nSteel)
|
|
{
|
|
// 小块钢板螺栓处预预埋
|
|
ptS += X * (dL * .5 - (dR + 5));
|
|
ptS += Y * (dW * .5 - (dR + 5));
|
|
|
|
dLen = (dR + 5) * 2;
|
|
}
|
|
else
|
|
{
|
|
// 整块钢板预埋
|
|
ptS += X * (dL * .5 - ((dR + 5) + m_dSideSp));
|
|
ptS += Y * (dW * .5 - ((dR + 5) + m_dSideSp));
|
|
|
|
dLen = (dR + 5 + m_dSideSp) * 2;
|
|
}
|
|
|
|
dH = dThick * 4 + m_dGd;
|
|
}
|
|
else
|
|
{
|
|
ptS += X * (dL * .5 - ((dR + 5) + m_dSideSp));
|
|
ptS += Y * (dW * .5 - ((dR + 5) + m_dSideSp));
|
|
|
|
dLen = (dR + 5 + m_dSideSp) * 2;
|
|
dH = dThick * 4;
|
|
}
|
|
m_dXP = (dL - dLen) / (m_nCol - 1);
|
|
m_dYP = (dW - dLen) / (m_nRow - 1);
|
|
|
|
for (int i = 0; i < m_nRow; ++i)
|
|
{
|
|
pt = ptS - Y * m_dYP * i;
|
|
dDist = pt.distanceTo(ptS);
|
|
if (dDist > (dW - dLen)) continue;
|
|
|
|
for (int j = 0; j < m_nCol; ++j)
|
|
{
|
|
ptTemp = pt - X * m_dXP * j;
|
|
dDist = ptTemp.distanceTo(pt);
|
|
if (dDist > (dL - dLen)) continue;
|
|
|
|
// 垫圈
|
|
pReg = makeCirReg(ptTemp, Z, dR + 5);
|
|
if (!pReg) return NULL;
|
|
NewExtrude extrudeDQ(true, pReg, 3);
|
|
DELETE_PTR(pReg);
|
|
AecEqui::XPrimData dataDQ;
|
|
dataDQ.m_eType = AecEqui::kNewExtrude;
|
|
dataDQ.m_bBoolSubtract = NULL;
|
|
dataDQ.m_iClr = 200;
|
|
extrudeDQ.toData(dataDQ.m_pData, dataDQ.m_nSize);
|
|
pEqu->AddSubPrimObj(&dataDQ);
|
|
clearData(dataDQ);
|
|
|
|
// 螺母
|
|
pReg = makePolyReg(ptTemp, 6, dR);
|
|
if (!pReg) return NULL;
|
|
NewExtrude extrudeLM1(true, pReg, dThick);
|
|
DELETE_PTR(pReg);
|
|
AecEqui::XPrimData dataLM1;
|
|
dataLM1.m_eType = AecEqui::kNewExtrude;
|
|
dataLM1.m_bBoolSubtract = false;
|
|
dataLM1.m_iClr = 200;
|
|
dataLM1.m_vtMove = Z * 3;
|
|
extrudeLM1.toData(dataLM1.m_pData, dataLM1.m_nSize);
|
|
pEqu->AddSubPrimObj(&dataLM1);
|
|
clearData(dataLM1);
|
|
|
|
// 螺母
|
|
pReg = makePolyReg(ptTemp, 6, dR);
|
|
if (!pReg) return NULL;
|
|
NewExtrude extrudeLM2(true, pReg, dThick);
|
|
DELETE_PTR(pReg);
|
|
AecEqui::XPrimData dataLM2;
|
|
dataLM2.m_eType = AecEqui::kNewExtrude;
|
|
dataLM2.m_bBoolSubtract = false;
|
|
dataLM2.m_iClr = 200;
|
|
dataLM2.m_vtMove = Z * (3 + dThick);
|
|
extrudeLM2.toData(dataLM2.m_pData, dataLM2.m_nSize);
|
|
pEqu->AddSubPrimObj(&dataLM2);
|
|
clearData(dataLM2);
|
|
|
|
// 螺栓
|
|
pReg = makeCirReg(ptTemp, Z, dThick);
|
|
if (!pReg) return NULL;
|
|
NewExtrude extrudeLS(true, pReg, dH);
|
|
DELETE_PTR(pReg);
|
|
AecEqui::XPrimData dataLS;
|
|
dataLS.m_eType = AecEqui::kNewExtrude;
|
|
dataLS.m_bBoolSubtract = false;
|
|
dataLS.m_iClr = 200;
|
|
dataLS.m_vtMove = Z * (3 + dThick * 2);
|
|
extrudeLS.toData(dataLS.m_pData, dataLS.m_nSize);
|
|
pEqu->AddSubPrimObj(&dataLS);
|
|
clearData(dataLS);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return pEqu;
|
|
}
|