#include "StdAfx.h" #include "uiiado.h" #include "ktsetting.h" #include "AecDbEwEquipment.h" #include "makeValve.h" #include "KTCadUtility.h" #include "KTCADUtilityEx.h" #include #include "EarThwormDef.h" #include "EquInsDirJig.h" #include "AecDbEarthWorm.h" #include "CoreTools.h" #define LAY_PIPE_CENTER _T("PIPE_CEN") #define LAY_PIPE_OUTSIDE _T("PIPE_OUT") #define LAY_FITN_CENTER LAY_PIPE_CENTER #define LAY_FITN_DASH _T("FITN_DSH") DLLIMPEXP AcDbPolyline* FormatPolyline(AcGePoint3d* ppPts, int nCount); namespace MKValve { AcDbObjectId AecInitLayerEx(LPCTSTR pszLayer, LPCTSTR pszSys, int nColorIndex, LPCTSTR pszLineType, AcDbDatabase* pDb) { return CoreTools::AecInitLayerEx(pszLayer, pszSys, nColorIndex, pszLineType, pDb); } template void setData(AecEqui::XPrimData *pXPData, void *pData) { ::Sleep(30); pXPData->m_nID = ::GetTickCount(); 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(); } CString makeValveName(LPCTSTR valve, const double &dDN, LPCTSTR sPN) { if (!valve || !sPN) return _T(""); CString s(_T("")); s.Format(_T("%s(DN%d)(PN%s)"), valve, (int)dDN, sPN); return s; } AecDbEwEquipment* makeBaseEquiment(LPCTSTR name, bool bHvac = false) { if (!name) return NULL; AecDbEwEquipment* pWEquip = new AecDbEwEquipment; AecDbObjXDataMap* pXDataMap = pWEquip->GetSpecialtyData(); pXDataMap->SetAt(KEY_NAME, name); pXDataMap->SetAt(KEY_FITSRV, KEY_FITWPIPE); pXDataMap->SetAt(KEY_RUNTIME, eEquipment); //设置图层 CString sSys; pXDataMap->GetAt(PIPE_SYS, sSys); AcDbObjectId idLayer = AecInitLayerEx(LAY_PIPE_OUTSIDE, sSys, 7, _T("Continuous"), NULL); pWEquip->setLayer(idLayer); pWEquip->SetDashLayer(KTSetting::InitLayer(LAY_FITN_DASH)); pWEquip->SetCenterLayer(KTSetting::InitLayer(LAY_FITN_CENTER)); return pWEquip; } void getNozzInfo(const double &dDN, LPCTSTR sPN, double &dWD, double &dC, double &dYh, double &dN) { CUIISQLiteServer db; db.InitADOServer(FilePath::GetSysDir() + _T("\\plumbing.db")); double dPre(1.); if (sPN) dPre = _ttof(sPN); CoreTools::QueryFlangData(&db, dDN, dPre, dWD, dC, dYh, dN); } double getNozzRadius(const int &nFlangeType, const double &dDN, LPCTSTR sPN) { double dWD(.0), dC(.0), dYh(.0), dN(.0); getNozzInfo(dDN, sPN, dWD, dC, dYh, dN); if (!nFlangeType) return dDN * .5; return dWD * .5; } double getNozzLength(const int &nFlangeType, const double &dDN, LPCTSTR sPN) { double dWD(.0), dC(.0), dYh(.0), dN(.0); getNozzInfo(dDN, sPN, dWD, dC, dYh, dN); dYh = dC > dYh ? dYh : dC; return 2 * dYh * nFlangeType; } double getFlangeThick(const double &dDN, LPCTSTR sPN) { double dWD(.0), dC(.0), dYh(.0), dN(.0); getNozzInfo(dDN, sPN, dWD, dC, dYh, dN); return dYh; } void rotationSubPrimObj(AecDbEwEquipment *pEqu , const Adesk::Int32 &id , const double &angle , const int &axis) { AecEqui::XPrimData data; data.m_ptRotation = AcGePoint3d::kOrigin; data.m_ptRotation[axis] = CoreTools::A2R(angle); pEqu->ModifyPrimData(id, data, 3); } void moveSubPrimObj(AecDbEwEquipment *pEqu , const Adesk::Int32 &id , const double &dist , const int &axis) { AecEqui::XPrimData data; data.m_vtMove.set(0.0, 0.0, 0.0); data.m_vtMove[axis] = dist; pEqu->ModifyPrimData(id, data, 2); } void moveSubPrimObj(AecDbEwEquipment *pEqu , const Adesk::Int32 &id , const AcGePoint3d &pt1 , const AcGePoint3d &pt2) { AcGeVector3d vtMove = pt2 - pt1; moveSubPrimObj(pEqu, id, vtMove.x, 0); moveSubPrimObj(pEqu, id, vtMove.y, 1); moveSubPrimObj(pEqu, id, vtMove.z, 2); } void makeNozzData(double dDN, LPCTSTR sPN, const int &nFlangeType, AecEqui::XNozz &nozz) { // 构造管嘴 double nD = 0.0, nN = 0.0, nC = 0.0, dYMinh(.0); getNozzInfo(dDN, sPN, nD, nC, dYMinh, nN); // nFlangeType为0,说明阀门管嘴不需要法兰,默认为焊接管嘴 nozz.bTwoFlags = nFlangeType == 0 ? 2 : 0; //if (nFlangeType == 0) nozz.bTwoFlags = 2; //else if (nFlangeType == 1) nozz.bTwoFlags = 0; //else nozz.bTwoFlags = 1; nozz.nCmd = 0; nozz.nType = 0; nozz.dVal1 = 1.0 * dDN; nozz.dVal2 = 1.0 * nD; nozz.dVal3 = 1.0 * nN; nozz.dVal4 = 1.0 * (nC = nC > dYMinh ? dYMinh : nC); nozz.dVal5 = 2 * nozz.dVal4; //兼容之前的,放到szResvr中 sprintf(nozz.szResvr, "N=%d;P=%g;H=%d;", (int)nN, _ttof(sPN), (int)nozz.dVal5); } Adesk::Int32 addNozz(AecDbEwEquipment *pEqu , const Adesk::Int32 &id , double dDN , LPCTSTR sPN , const int &nFlangeType , const int &idxInter ) { AecEqui::XPrimData* pPrimData = pEqu->GetSUbPrimObjByID(id); if (!pPrimData) return -1; int count = pEqu->GetInfFaceCount(pPrimData); if (idxInter < 0 || idxInter >= count) return -1; AcGePoint3d ptGe(AcGePoint3d::kOrigin); AcGeVector3d vtDir(AcGeVector3d::kIdentity); // 设置活动接口 pPrimData->m_nActiveInf = idxInter; pEqu->GetInfFaceInf(pPrimData, vtDir, ptGe); if (vtDir.isZeroLength()) return -1; AecEqui::XNOZZ nozz; makeNozzData(dDN, sPN, nFlangeType, nozz); AecEqui::XPrimData data; data.m_eType = AecEqui::kNozz; setData(&data, &nozz); data.m_nActiveInf = 0; CoreTools::addNozzForEqu(pEqu, vtDir, ptGe, data); clearData(data); return data.m_nID; } template Adesk::Int32 addSubPrimObj(AecDbEwEquipment *pEqu, T &t, const AecEqui::Primitive &type) { AecEqui::XPrimData data; data.m_eType = type; setData(&data, &t); pEqu->AddSubPrimObj(&data); clearData(data); return data.m_nID; } AecDbEwEquipment *makeGuanDaoBuChangQi(const double &dDN , LPCTSTR pszPN , LPCTSTR pszMaterial , const double &dMaxL , const double &dMaxW , const double &dMaxH , const int &nFlangeType , std::map &bims) { if (!pszPN) return NULL; CString sName = makeValveName(_T("管道补偿器"), dDN, pszPN); if (sName.IsEmpty()) return NULL; AecDbEwEquipment *pEqu = makeBaseEquiment(sName); double dNozzL = getNozzLength(1, dDN, pszPN); double dFangleL = getFlangeThick(dDN, pszPN); double FR = getNozzRadius(1, dDN, pszPN); Adesk::Int32 itemID(0); double L(dMaxL), H(dMaxH), W(dMaxW), R(dDN * .5); if (DOWN_ZERO(L - (nFlangeType == 1 ? (2 * dNozzL) : 0.))) L = (nFlangeType == 1 ? (2 * dNozzL) : 0.) + 1; AecEqui::XCylinder cln; memset(&cln, 0, sizeof(AecEqui::XCylinder)); cln.dr = R; cln.dH = L - (nFlangeType == 1 ? (2 * dNozzL) : 0.); itemID = addSubPrimObj(pEqu, cln, AecEqui::kCylinder); rotationSubPrimObj(pEqu, itemID, 90, 1); moveSubPrimObj(pEqu, itemID, -cln.dH * .5, 0); Adesk::Int32 id0 = addNozz(pEqu, itemID, dDN, pszPN, nFlangeType, 0); Adesk::Int32 id1 = addNozz(pEqu, itemID, dDN, pszPN, nFlangeType, 1); pEqu->ModifyPrimData(0, AecEqui::XPrimData(), 10); cln.dr = R*.1; //cln.dH = L; double dist(cln.dr + FR); itemID = addSubPrimObj(pEqu, cln, AecEqui::kCylinder); rotationSubPrimObj(pEqu, itemID, 90, 1); moveSubPrimObj(pEqu, itemID, -cln.dH * .5, 0); moveSubPrimObj(pEqu, itemID, dist, 1); itemID = addSubPrimObj(pEqu, cln, AecEqui::kCylinder); rotationSubPrimObj(pEqu, itemID, 90, 1); moveSubPrimObj(pEqu, itemID, -cln.dH * .5, 0); moveSubPrimObj(pEqu, itemID, -dist, 1); itemID = addSubPrimObj(pEqu, cln, AecEqui::kCylinder); rotationSubPrimObj(pEqu, itemID, 90, 1); moveSubPrimObj(pEqu, itemID, -cln.dH * .5, 0); moveSubPrimObj(pEqu, itemID, dist, 2); itemID = addSubPrimObj(pEqu, cln, AecEqui::kCylinder); rotationSubPrimObj(pEqu, itemID, 90, 1); moveSubPrimObj(pEqu, itemID, -cln.dH * .5, 0); moveSubPrimObj(pEqu, itemID, -dist, 2); AecEqui::XBox box; box.dL = dNozzL; box.dW = 2 * R * .1; box.dH = 2 * FR + 2 * cln.dr; itemID = addSubPrimObj(pEqu, box, AecEqui::kBox); moveSubPrimObj(pEqu, itemID, -box.dH * .5, 2); dist = cln.dH * .5 - box.dL * .5; moveSubPrimObj(pEqu, itemID, dist, 0); itemID = addSubPrimObj(pEqu, box, AecEqui::kBox); moveSubPrimObj(pEqu, itemID, -box.dH * .5, 2); moveSubPrimObj(pEqu, itemID, -dist, 0); box.dL = dNozzL; box.dW = 2 * FR + 4 * cln.dr; box.dH = 2 * R * .1; itemID = addSubPrimObj(pEqu, box, AecEqui::kBox); moveSubPrimObj(pEqu, itemID, -box.dH * .5, 2); moveSubPrimObj(pEqu, itemID, dist, 0); itemID = addSubPrimObj(pEqu, box, AecEqui::kBox); moveSubPrimObj(pEqu, itemID, -box.dH * .5, 2); moveSubPrimObj(pEqu, itemID, -dist, 0); AecEqui::XCirtorus torus; torus.dInr = R; torus.dOutR = R * 1.2; torus.dStaAngle = .0; torus.dEndAngle = CoreTools::A2R(360 - 0.1); itemID = addSubPrimObj(pEqu, torus, AecEqui::kCirTorus); rotationSubPrimObj(pEqu, itemID, 90, 1); dist = (L - 2 * dNozzL) * .25 - (torus.dOutR - torus.dInr) * .5; itemID = addSubPrimObj(pEqu, torus, AecEqui::kCirTorus); rotationSubPrimObj(pEqu, itemID, 90, 1); moveSubPrimObj(pEqu, itemID, dist, 0); itemID = addSubPrimObj(pEqu, torus, AecEqui::kCirTorus); rotationSubPrimObj(pEqu, itemID, 90, 1); moveSubPrimObj(pEqu, itemID, 2 * dist, 0); itemID = addSubPrimObj(pEqu, torus, AecEqui::kCirTorus); rotationSubPrimObj(pEqu, itemID, 90, 1); moveSubPrimObj(pEqu, itemID, -dist, 0); itemID = addSubPrimObj(pEqu, torus, AecEqui::kCirTorus); rotationSubPrimObj(pEqu, itemID, 90, 1); moveSubPrimObj(pEqu, itemID, -2 * dist , 0); return pEqu; } AecDbEwEquipment* makeChuanLiJieTou(const double &dDN , LPCTSTR pszPN , LPCTSTR pszMaterial , const double &dMaxL , const double &dMaxW , const double &dMaxH , const int &nFlangeType , std::map &bims) { if (!pszPN) return NULL; CString sName = makeValveName(_T("传力接头"), dDN, pszPN); if (sName.IsEmpty()) return NULL; AecDbEwEquipment* pEqu = makeBaseEquiment(sName); double dNozzL = getNozzLength(1, dDN, pszPN); double dFangleL = getFlangeThick(dDN, pszPN); double FR = getNozzRadius(1, dDN, pszPN); Adesk::Int32 itemID(0); double L(dMaxL), H(dMaxH), W(dMaxW), R(dDN * .5); if (DOWN_ZERO(L - (nFlangeType == 1 ? (2 * dNozzL) : 0.))) L = (nFlangeType == 1 ? (2 * dNozzL) : 0.) + 1; AecEqui::XCylinder cln; memset(&cln, 0, sizeof(AecEqui::XCylinder)); cln.dr = R; cln.dH = L - (nFlangeType == 1 ? (2 * dNozzL) : 0.); itemID = addSubPrimObj(pEqu, cln, AecEqui::kCylinder); rotationSubPrimObj(pEqu, itemID, 90, 1); moveSubPrimObj(pEqu, itemID, -cln.dH * .5, 0); Adesk::Int32 id0 = addNozz(pEqu, itemID, dDN, pszPN, nFlangeType, 0); Adesk::Int32 id1 = addNozz(pEqu, itemID, dDN, pszPN, nFlangeType, 1); pEqu->ModifyPrimData(0, AecEqui::XPrimData(), 10); memset(&cln, 0, sizeof(AecEqui::XCylinder)); cln.dr = FR; cln.dH = dFangleL; itemID = addSubPrimObj(pEqu, cln, AecEqui::kCylinder); rotationSubPrimObj(pEqu, itemID, 90, 1); moveSubPrimObj(pEqu, itemID, -dFangleL * .5, 0); return pEqu; } AecDbEwEquipment* makeShenShuoJieTou(const double &dDN , LPCTSTR pszPN , LPCTSTR pszMaterial , const double &dMaxL , const double &dMaxW , const double &dMaxH , const int &nFlangeType , std::map &bims) { if (!pszPN) return NULL; CString sName = makeValveName(_T("伸缩接头"), dDN, pszPN); if (sName.IsEmpty()) return NULL; AecDbEwEquipment* pEqu = makeBaseEquiment(sName); double dNozzL = getNozzLength(1, dDN, pszPN); double dFangleL = getFlangeThick(dDN, pszPN); double FR = getNozzRadius(1, dDN, pszPN); Adesk::Int32 itemID(0); double L(dMaxL), H(dMaxH), W(dMaxW), R(dDN * .5); if (DOWN_ZERO(L - (nFlangeType == 1 ? (2 * dNozzL) : 0.))) L = (nFlangeType == 1 ? (2 * dNozzL) : 0.) + 1; AecEqui::XCylinder cln; memset(&cln, 0, sizeof(AecEqui::XCylinder)); cln.dr = R; cln.dH = L - (nFlangeType == 1 ? (2 * dNozzL) : 0.); itemID = addSubPrimObj(pEqu, cln, AecEqui::kCylinder); rotationSubPrimObj(pEqu, itemID, 90, 1); moveSubPrimObj(pEqu, itemID, -cln.dH * .5, 0); Adesk::Int32 id0 = addNozz(pEqu, itemID, dDN, pszPN, nFlangeType, 0); Adesk::Int32 id1 = addNozz(pEqu, itemID, dDN, pszPN, nFlangeType, 1); pEqu->ModifyPrimData(0, AecEqui::XPrimData(), 10); double dMainL(cln.dH); memset(&cln, 0, sizeof(AecEqui::XCylinder)); cln.dr = FR; cln.dH = dMainL * .5 * .618; double dl = dMainL * .25 - cln.dH * .5; itemID = addSubPrimObj(pEqu, cln, AecEqui::kCylinder); rotationSubPrimObj(pEqu, itemID, 90, 1); moveSubPrimObj(pEqu, itemID, dl, 0); itemID = addSubPrimObj(pEqu, cln, AecEqui::kCylinder); rotationSubPrimObj(pEqu, itemID, -90, 1); moveSubPrimObj(pEqu, itemID, -dl, 0); return pEqu; } AecDbEwEquipment* makeXiangJiaoJieTou(const double &dDN , LPCTSTR pszPN , LPCTSTR pszMaterial , const double &dMaxL , const double &dMaxW , const double &dMaxH , const int &nFlangeType , std::map &bims) { if (!pszPN) return NULL; CString sName = makeValveName(_T("橡胶接头"), dDN, pszPN); if (sName.IsEmpty()) return NULL; AecDbEwEquipment* pEqu = makeBaseEquiment(sName); double dNozzL = getNozzLength(1, dDN, pszPN); double dFangleL = getFlangeThick(dDN, pszPN); double FR = getNozzRadius(1, dDN, pszPN); Adesk::Int32 itemID(0); double L(dMaxL), H(dMaxH), W(dMaxW), R(dDN * .5); if (DOWN_ZERO(L - (nFlangeType == 1 ? (2 * dNozzL) : 0.))) L = (nFlangeType == 1 ? (2 * dNozzL) : 0.) + 1; AecEqui::XCylinder cln; memset(&cln, 0, sizeof(AecEqui::XCylinder)); cln.dr = R; cln.dH = L - (nFlangeType == 1 ? (2 * dNozzL) : 0.); itemID = addSubPrimObj(pEqu, cln, AecEqui::kCylinder); rotationSubPrimObj(pEqu, itemID, 90, 1); moveSubPrimObj(pEqu, itemID, -cln.dH * .5, 0); Adesk::Int32 id0 = addNozz(pEqu, itemID, dDN, pszPN, nFlangeType, 0); Adesk::Int32 id1 = addNozz(pEqu, itemID, dDN, pszPN, nFlangeType, 1); pEqu->ModifyPrimData(0, AecEqui::XPrimData(), 10); AecEqui::XCone cone; memset(&cone, 0, sizeof(AecEqui::XCone)); cone.dr = FR * .5; cone.dR = FR * .75; cone.dH = (L - 2 * dFangleL) / 3; cone.dXOffset = .0; itemID = addSubPrimObj(pEqu, cone, AecEqui::kCone); rotationSubPrimObj(pEqu, itemID, -90, 1); moveSubPrimObj(pEqu, itemID, -cone.dH * .5, 0); itemID = addSubPrimObj(pEqu, cone, AecEqui::kCone); rotationSubPrimObj(pEqu, itemID, 90, 1); moveSubPrimObj(pEqu, itemID, cone.dH * .5, 0); memset(&cln, 0, sizeof(AecEqui::XCylinder)); cln.dr = cone.dR; cln.dH = cone.dH; itemID = addSubPrimObj(pEqu, cln, AecEqui::kCylinder); rotationSubPrimObj(pEqu, itemID, 90, 1); moveSubPrimObj(pEqu, itemID, -cln.dH * .5, 0); return pEqu; } AecDbEwEquipment* makeDianCiFa(const double &dDN , LPCTSTR pszPN , LPCTSTR pszMaterial , const double &dMaxL , const double &dMaxW , const double &dMaxH , const int &nFlangeType , std::map &bims) { if (!pszPN) return NULL; CString sName = makeValveName(_T("电磁阀"), dDN, pszPN); if (sName.IsEmpty()) return NULL; AecDbEwEquipment* pEqu = makeBaseEquiment(sName); double dNozzL = getNozzLength(nFlangeType, dDN, pszPN); double dFangleL = getFlangeThick(dDN, pszPN); double FR = getNozzRadius(nFlangeType, dDN, pszPN); Adesk::Int32 itemID(0); double L(dMaxL), H(dMaxH), W(dMaxW), R(dDN * .5); if (DOWN_ZERO(L - 2 * dNozzL)) L = 2 * dNozzL + 1; AecEqui::XCylinder cln; memset(&cln, 0, sizeof(AecEqui::XCylinder)); cln.dr = R; cln.dH = L - 2 * dNozzL; itemID = addSubPrimObj(pEqu, cln, AecEqui::kCylinder); rotationSubPrimObj(pEqu, itemID, 90, 1); moveSubPrimObj(pEqu, itemID, -cln.dH * .5, 0); Adesk::Int32 id0 = addNozz(pEqu, itemID, dDN, pszPN, nFlangeType, 0); Adesk::Int32 id1 = addNozz(pEqu, itemID, dDN, pszPN, nFlangeType, 1); pEqu->ModifyPrimData(0, AecEqui::XPrimData(), 10); cln.dr = R * 1.5; cln.dH *= .75; itemID = addSubPrimObj(pEqu, cln, AecEqui::kCylinder); rotationSubPrimObj(pEqu, itemID, 90, 1); moveSubPrimObj(pEqu, itemID, -cln.dH * .5, 0); memset(&cln, 0, sizeof(AecEqui::XCylinder)); cln.dr = R; cln.dH = H - 2 * dFangleL; itemID = addSubPrimObj(pEqu, cln, AecEqui::kCylinder); memset(&cln, 0, sizeof(AecEqui::XCylinder)); cln.dr = R * 1.2; cln.dH = dFangleL; itemID = addSubPrimObj(pEqu, cln, AecEqui::kCylinder); moveSubPrimObj(pEqu, itemID, H - 2 * dFangleL, 2); itemID = addSubPrimObj(pEqu, cln, AecEqui::kCylinder); moveSubPrimObj(pEqu, itemID, H - 3 * dFangleL, 2); memset(&cln, 0, sizeof(AecEqui::XCylinder)); cln.dr = R * 1.2 * .25; cln.dH = H * 1.2; itemID = addSubPrimObj(pEqu, cln, AecEqui::kCylinder); return pEqu; } AecDbEwEquipment* makePaiNiFa(const double &dDN , LPCTSTR pszPN , LPCTSTR pszMaterial , const double &dMaxL , const double &dMaxW , const double &dMaxH , const int &nFlangeType , std::map &bims) { if (!pszPN) return NULL; CString sName = makeValveName(_T("排泥阀"), dDN, pszPN); if (sName.IsEmpty()) return NULL; AecDbEwEquipment* pEqu = makeBaseEquiment(sName); double dNozzL = getNozzLength(nFlangeType, dDN, pszPN); double dFangleL = getFlangeThick(dDN, pszPN); double FR = getNozzRadius(nFlangeType, dDN, pszPN); Adesk::Int32 itemID(0); double L(dMaxL), H(dMaxH), W(dMaxW), R(dDN * .5); if (DOWN_ZERO(L - 2 * dNozzL)) L = 2 * dNozzL + 1; H -= dNozzL; AecEqui::XCylinder cln; memset(&cln, 0, sizeof(AecEqui::XCylinder)); cln.dr = R * 1.2; cln.dH = H; itemID = addSubPrimObj(pEqu, cln, AecEqui::kCylinder); // 下面加一个管嘴 Adesk::Int32 id = addNozz(pEqu, itemID, dDN, pszPN, nFlangeType, 0); memset(&cln, 0, sizeof(AecEqui::XCylinder)); cln.dr = R * 1.2; cln.dH = L - R - dNozzL; itemID = addSubPrimObj(pEqu, cln, AecEqui::kCylinder); rotationSubPrimObj(pEqu, itemID, -90, 1); moveSubPrimObj(pEqu, itemID, (H + dNozzL) * .5, 2); id = addNozz(pEqu, itemID, dDN, pszPN, nFlangeType, 0); moveSubPrimObj(pEqu, id, -(L - R - dNozzL), 2); rotationSubPrimObj(pEqu, id, 180, 1); pEqu->ModifyPrimData(0, AecEqui::XPrimData(), 10); memset(&cln, 0, sizeof(AecEqui::XCylinder)); cln.dr = R * 1.2 * 1.2; cln.dH = dFangleL; itemID = addSubPrimObj(pEqu, cln, AecEqui::kCylinder); moveSubPrimObj(pEqu, itemID, H, 2); itemID = addSubPrimObj(pEqu, cln, AecEqui::kCylinder); moveSubPrimObj(pEqu, itemID, H + dFangleL, 2); cln.dr = R * 1.2 * 1.2 * .5; cln.dH = L * .25; itemID = addSubPrimObj(pEqu, cln, AecEqui::kCylinder); moveSubPrimObj(pEqu, itemID, H + 2 * dFangleL, 2); return pEqu; } AecDbEwEquipment* makeFuQiuFa(const double &dDN , LPCTSTR pszPN , LPCTSTR pszMaterial , const double &dMaxL , const double &dMaxW , const double &dMaxH , const int &nFlangeType , std::map &bims) { if (!pszPN) return NULL; CString sName = makeValveName(_T("浮球阀"), dDN, pszPN); if (sName.IsEmpty()) return NULL; AecDbEwEquipment* pEqu = makeBaseEquiment(sName); double dNozzL = getNozzLength(nFlangeType, dDN, pszPN); double dFangleL = getFlangeThick(dDN, pszPN); double FR = getNozzRadius(nFlangeType, dDN, pszPN); Adesk::Int32 itemID(0); double L(dMaxL), H(dMaxH), W(dMaxW), R(dDN * .5); if (DOWN_ZERO(L - 2 * dNozzL)) L = 2 * dNozzL + 1; //阀体 { AecEqui::XCylinder cln; memset(&cln, 0, sizeof(AecEqui::XCylinder)); cln.dr = R * 1.2; cln.dH = L - 2 * dNozzL; itemID = addSubPrimObj(pEqu, cln, AecEqui::kCylinder); rotationSubPrimObj(pEqu, itemID, 90, 1); moveSubPrimObj(pEqu, itemID, -cln.dH * .5, 0); Adesk::Int32 id0 = addNozz(pEqu, itemID, dDN, pszPN, nFlangeType, 0); Adesk::Int32 id1 = addNozz(pEqu, itemID, dDN, pszPN, nFlangeType, 1); pEqu->ModifyPrimData(0, AecEqui::XPrimData(), 10); } // 阀芯 { AecEqui::XCylinder cln; memset(&cln, 0, sizeof(AecEqui::XCylinder)); cln.dr = R * 1.2; cln.dH = H; itemID = addSubPrimObj(pEqu, cln, AecEqui::kCylinder); moveSubPrimObj(pEqu, itemID, -R * 1.5, 2); memset(&cln, 0, sizeof(AecEqui::XCylinder)); cln.dr = R * 1.2 * 1.2; cln.dH = dFangleL; itemID = addSubPrimObj(pEqu, cln, AecEqui::kCylinder); moveSubPrimObj(pEqu, itemID, -R * 1.5 - cln.dH, 2); AecEqui::XSphere sph; memset(&sph, 0, sizeof(AecEqui::XSphere)); sph.dr = R * 1.2; itemID = addSubPrimObj(pEqu, sph, AecEqui::kSphere); moveSubPrimObj(pEqu, itemID, H - R * 1.5, 2); memset(&cln, 0, sizeof(AecEqui::XCylinder)); cln.dr = R * .1; cln.dH = H; itemID = addSubPrimObj(pEqu, cln, AecEqui::kCylinder); memset(&cln, 0, sizeof(AecEqui::XCylinder)); cln.dr = R * .1; cln.dH = 150; itemID = addSubPrimObj(pEqu, cln, AecEqui::kCylinder); rotationSubPrimObj(pEqu, itemID, 90 + 20, 1); moveSubPrimObj(pEqu, itemID, H, 2); memset(&sph, 0, sizeof(AecEqui::XSphere)); sph.dr = 25; itemID = addSubPrimObj(pEqu, sph, AecEqui::kSphere); moveSubPrimObj(pEqu, itemID, H, 2); moveSubPrimObj(pEqu, itemID, 150, 0); moveSubPrimObj(pEqu, itemID, -150 * sin(CoreTools::A2R(10)), 2); } return pEqu; } AecDbEwEquipment* makeShuiLiKongZhiFa(const double &dDN , LPCTSTR pszPN , LPCTSTR pszMaterial , const double &dMaxL , const double &dMaxW , const double &dMaxH , const int &nFlangeType , std::map &bims) { if (!pszPN) return NULL; CString sName = makeValveName(_T("水力控制阀"), dDN, pszPN); if (sName.IsEmpty()) return NULL; AecDbEwEquipment* pEqu = makeBaseEquiment(sName); double dNozzL = getNozzLength(nFlangeType, dDN, pszPN); double dFangleL = getFlangeThick(dDN, pszPN); double FR = getNozzRadius(nFlangeType, dDN, pszPN); Adesk::Int32 itemID(0); double L(dMaxL), H(dMaxH), W(dMaxW), R(dDN * .5); if (DOWN_ZERO(L - 2 * dNozzL)) L = 2 * dNozzL + 1; //阀体 { AecEqui::XCylinder cln; memset(&cln, 0, sizeof(AecEqui::XCylinder)); cln.dr = R * 1.2; cln.dH = L - 2 * dNozzL; itemID = addSubPrimObj(pEqu, cln, AecEqui::kCylinder); rotationSubPrimObj(pEqu, itemID, 90, 1); moveSubPrimObj(pEqu, itemID, -cln.dH * .5, 0); Adesk::Int32 id0 = addNozz(pEqu, itemID, dDN, pszPN, nFlangeType, 0); Adesk::Int32 id1 = addNozz(pEqu, itemID, dDN, pszPN, nFlangeType, 1); pEqu->ModifyPrimData(0, AecEqui::XPrimData(), 10); } // 阀芯 { AecEqui::XCylinder cln; memset(&cln, 0, sizeof(AecEqui::XCylinder)); cln.dr = R * 1.2; cln.dH = H; itemID = addSubPrimObj(pEqu, cln, AecEqui::kCylinder); moveSubPrimObj(pEqu, itemID, -R * 1.5, 2); memset(&cln, 0, sizeof(AecEqui::XCylinder)); cln.dr = R * 1.2 * 1.2; cln.dH = dFangleL; itemID = addSubPrimObj(pEqu, cln, AecEqui::kCylinder); moveSubPrimObj(pEqu, itemID, -R * 1.5 - cln.dH, 2); itemID = addSubPrimObj(pEqu, cln, AecEqui::kCylinder); moveSubPrimObj(pEqu, itemID, H - R * 1.5, 2); } return pEqu; } AecDbEwEquipment* makeTiaoJieFa(const double &dDN , LPCTSTR pszPN , LPCTSTR pszMaterial , const double &dMaxL , const double &dMaxW , const double &dMaxH , const int &nFlangeType , std::map &bims) { if (!pszPN) return NULL; CString sName = makeValveName(_T("调节阀"), dDN, pszPN); if (sName.IsEmpty()) return NULL; AecDbEwEquipment* pEqu = makeBaseEquiment(sName); double dNozzL = getNozzLength(nFlangeType, dDN, pszPN); double dFangleL = getFlangeThick(dDN, pszPN); double FR = getNozzRadius(nFlangeType, dDN, pszPN); Adesk::Int32 itemID(0); double L(dMaxL), H(dMaxH), W(dMaxW), R(dDN * .5); if (DOWN_ZERO(L - 2 * dNozzL)) L = 2 * dNozzL + 1; //阀体 { AecEqui::XCylinder cln; memset(&cln, 0, sizeof(AecEqui::XCylinder)); cln.dr = R * 1.2; cln.dH = L - 2 * dNozzL; itemID = addSubPrimObj(pEqu, cln, AecEqui::kCylinder); rotationSubPrimObj(pEqu, itemID, 90, 1); moveSubPrimObj(pEqu, itemID, -cln.dH * .5, 0); Adesk::Int32 id0 = addNozz(pEqu, itemID, dDN, pszPN, nFlangeType, 0); Adesk::Int32 id1 = addNozz(pEqu, itemID, dDN, pszPN, nFlangeType, 1); pEqu->ModifyPrimData(0, AecEqui::XPrimData(), 10); } // 阀芯 { AecEqui::XSphere sph; memset(&sph, 0, sizeof(AecEqui::XSphere)); sph.dr = R * 1.2 * 2; if (2 * sph.dr > L) sph.dr = L * .5 * .75; itemID = addSubPrimObj(pEqu, sph, AecEqui::kSphere); AecEqui::XCylinder cln; memset(&cln, 0, sizeof(AecEqui::XCylinder)); cln.dr = R; cln.dH = 1.5 * sph.dr; itemID = addSubPrimObj(pEqu, cln, AecEqui::kCylinder); AecEqui::XBox box; box.dL = 2 * R * 1.2; box.dW = box.dL; box.dH = dFangleL; itemID = addSubPrimObj(pEqu, box, AecEqui::kBox); moveSubPrimObj(pEqu, itemID, cln.dH - box.dH, 2); itemID = addSubPrimObj(pEqu, box, AecEqui::kBox); moveSubPrimObj(pEqu, itemID, cln.dH - 2 * box.dH, 2); memset(&cln, 0, sizeof(AecEqui::XCylinder)); cln.dr = R * .1; cln.dH = H; itemID = addSubPrimObj(pEqu, cln, AecEqui::kCylinder); memset(&cln, 0, sizeof(AecEqui::XCylinder)); cln.dr = R; cln.dH = R; itemID = addSubPrimObj(pEqu, cln, AecEqui::kCylinder); moveSubPrimObj(pEqu, itemID, H - R, 2); } return pEqu; } AecDbEwEquipment* makeQiuFa(const double &dDN , LPCTSTR pszPN , LPCTSTR pszMaterial , const double &dMaxL , const double &dMaxW , const double &dMaxH , const int &nFlangeType , std::map &bims) { if (!pszPN) return NULL; CString sName = makeValveName(_T("球阀"), dDN, pszPN); if (sName.IsEmpty()) return NULL; AecDbEwEquipment* pEqu = makeBaseEquiment(sName); double dNozzL = getNozzLength(nFlangeType, dDN, pszPN); double dFangleL = getFlangeThick(dDN, pszPN); double FR = getNozzRadius(nFlangeType, dDN, pszPN); Adesk::Int32 itemID(0); double L(dMaxL), H(dMaxH), W(dMaxW), R(dDN * .5); if (DOWN_ZERO(L - 2 * dNozzL)) L = 2 * dNozzL + 1; //阀体 { AecEqui::XCylinder cln; memset(&cln, 0, sizeof(AecEqui::XCylinder)); cln.dr = R * 1.2; cln.dH = L - 2 * dNozzL; itemID = addSubPrimObj(pEqu, cln, AecEqui::kCylinder); rotationSubPrimObj(pEqu, itemID, 90, 1); moveSubPrimObj(pEqu, itemID, -cln.dH * .5, 0); Adesk::Int32 id0 = addNozz(pEqu, itemID, dDN, pszPN, nFlangeType, 0); Adesk::Int32 id1 = addNozz(pEqu, itemID, dDN, pszPN, nFlangeType, 1); pEqu->ModifyPrimData(0, AecEqui::XPrimData(), 10); } // 阀芯 { AecEqui::XSphere sph; memset(&sph, 0, sizeof(AecEqui::XSphere)); sph.dr = R * 1.2 * 2; if (2 * sph.dr > L) sph.dr = L * .5 * .75; itemID = addSubPrimObj(pEqu, sph, AecEqui::kSphere); AecEqui::XCylinder cln; memset(&cln, 0, sizeof(AecEqui::XCylinder)); cln.dr = R; cln.dH = H; itemID = addSubPrimObj(pEqu, cln, AecEqui::kCylinder); AecEqui::XBox box; box.dL = 2 * R * 1.2; box.dW = box.dL; box.dH = dMaxW; itemID = addSubPrimObj(pEqu, box, AecEqui::kBox); moveSubPrimObj(pEqu, itemID, cln.dH - box.dH, 2); // 手盘 AecEqui::XCirtorus cirtor; memset(&cirtor, 0, sizeof(AecEqui::XCirtorus)); cirtor.dOutR = dMaxW * .5; cirtor.dInr = cirtor.dOutR - R * .2; cirtor.dStaAngle = .0; cirtor.dEndAngle = CoreTools::A2R(360 - 0.1); itemID = addSubPrimObj(pEqu, cirtor, AecEqui::kCirTorus); rotationSubPrimObj(pEqu, itemID, 90, 0); moveSubPrimObj(pEqu, itemID, -(R * .5 * .5 + R * .2 + box.dW * .5), 1); moveSubPrimObj(pEqu, itemID, H - cirtor.dOutR, 2); memset(&cln, 0, sizeof(AecEqui::XCylinder)); cln.dr = R * .1 * .5; cln.dH = dMaxW - R * .1; itemID = addSubPrimObj(pEqu, cln, AecEqui::kCylinder); rotationSubPrimObj(pEqu, itemID, 90, 1); moveSubPrimObj(pEqu, itemID, -cln.dH * .5, 0); moveSubPrimObj(pEqu, itemID, -(R * .5 * .5 + R * .2 + box.dW * .5), 1); moveSubPrimObj(pEqu, itemID, H - cirtor.dOutR, 2); memset(&cln, 0, sizeof(AecEqui::XCylinder)); cln.dr = R * .1 * .5; cln.dH = dMaxW - R * .1; itemID = addSubPrimObj(pEqu, cln, AecEqui::kCylinder); moveSubPrimObj(pEqu, itemID, -(R * .5 * .5 + R * .2 + box.dW * .5), 1); moveSubPrimObj(pEqu, itemID, H - cirtor.dOutR - cln.dH * .5, 2); memset(&cln, 0, sizeof(AecEqui::XCylinder)); cln.dr = R * .1 * .5; cln.dH = R * .5 * .5 + R * .2 + box.dW * .5; itemID = addSubPrimObj(pEqu, cln, AecEqui::kCylinder); rotationSubPrimObj(pEqu, itemID, 90, 0); moveSubPrimObj(pEqu, itemID, H - cirtor.dOutR, 2); } return pEqu; } AecDbEwEquipment* makeZhuShaiFa(const double &dDN , LPCTSTR pszPN , LPCTSTR pszMaterial , const double &dMaxL , const double &dMaxW , const double &dMaxH , const int &nFlangeType , std::map &bims) { if (!pszPN) return NULL; CString sName = makeValveName(_T("柱塞阀"), dDN, pszPN); if (sName.IsEmpty()) return NULL; AecDbEwEquipment* pEqu = makeBaseEquiment(sName); double dNozzL = getNozzLength(nFlangeType, dDN, pszPN); double dFangleL = getFlangeThick(dDN, pszPN); double FR = getNozzRadius(nFlangeType, dDN, pszPN); Adesk::Int32 itemID(0); double L(dMaxL), H(dMaxH), W(dMaxW), R(dDN * .5); if (DOWN_ZERO(L - 2 * dNozzL)) L = 2 * dNozzL + 1; //阀体 { AecEqui::XCylinder cln; memset(&cln, 0, sizeof(AecEqui::XCylinder)); cln.dr = R * 1.2; cln.dH = L - 2 * dNozzL; itemID = addSubPrimObj(pEqu, cln, AecEqui::kCylinder); rotationSubPrimObj(pEqu, itemID, 90, 1); moveSubPrimObj(pEqu, itemID, -cln.dH * .5, 0); Adesk::Int32 id0 = addNozz(pEqu, itemID, dDN, pszPN, nFlangeType, 0); Adesk::Int32 id1 = addNozz(pEqu, itemID, dDN, pszPN, nFlangeType, 1); pEqu->ModifyPrimData(0, AecEqui::XPrimData(), 10); } // 阀芯 { AecEqui::XSphere sph; memset(&sph, 0, sizeof(AecEqui::XSphere)); sph.dr = R * 1.2 * 2; if (2 * sph.dr > L) sph.dr = L * .5 * .75; itemID = addSubPrimObj(pEqu, sph, AecEqui::kSphere); AecEqui::XCylinder cln; memset(&cln, 0, sizeof(AecEqui::XCylinder)); cln.dr = R; cln.dH = 1.5 * sph.dr; itemID = addSubPrimObj(pEqu, cln, AecEqui::kCylinder); AecEqui::XBox box; box.dL = 2 * R * 1.2; box.dW = box.dL; box.dH = dFangleL; itemID = addSubPrimObj(pEqu, box, AecEqui::kBox); moveSubPrimObj(pEqu, itemID, cln.dH - box.dH, 2); itemID = addSubPrimObj(pEqu, box, AecEqui::kBox); moveSubPrimObj(pEqu, itemID, cln.dH - 2 * box.dH, 2); memset(&cln, 0, sizeof(AecEqui::XCylinder)); cln.dr = R * .1; cln.dH = H; itemID = addSubPrimObj(pEqu, cln, AecEqui::kCylinder); // 手盘 AecEqui::XCirtorus cirtor; memset(&cirtor, 0, sizeof(AecEqui::XCirtorus)); cirtor.dOutR = dMaxW * .5; cirtor.dInr = cirtor.dOutR - R * .2; cirtor.dStaAngle = .0; cirtor.dEndAngle = CoreTools::A2R(360 - 0.1); itemID = addSubPrimObj(pEqu, cirtor, AecEqui::kCirTorus); moveSubPrimObj(pEqu, itemID, H, 2); memset(&cln, 0, sizeof(AecEqui::XCylinder)); cln.dr = R * .1 * .5; cln.dH = dMaxW - R * .1; itemID = addSubPrimObj(pEqu, cln, AecEqui::kCylinder); rotationSubPrimObj(pEqu, itemID, 90, 1); moveSubPrimObj(pEqu, itemID, -cln.dH * .5, 0); moveSubPrimObj(pEqu, itemID, H, 2); memset(&cln, 0, sizeof(AecEqui::XCylinder)); cln.dr = R * .1 * .5; cln.dH = dMaxW - R * .1; itemID = addSubPrimObj(pEqu, cln, AecEqui::kCylinder); rotationSubPrimObj(pEqu, itemID, 90, 0); moveSubPrimObj(pEqu, itemID, cln.dH * .5, 1); moveSubPrimObj(pEqu, itemID, H, 2); } return pEqu; } AecDbEwEquipment* makeJiangYeFa(const double &dDN , LPCTSTR pszPN , LPCTSTR pszMaterial , const double &dMaxL , const double &dMaxW , const double &dMaxH , const int &nFlangeType , std::map &bims) { if (!pszPN) return NULL; CString sName = makeValveName(_T("浆液阀"), dDN, pszPN); if (sName.IsEmpty()) return NULL; AecDbEwEquipment* pEqu = makeBaseEquiment(sName); double dNozzL = getNozzLength(nFlangeType, dDN, pszPN); double dFangleL = getFlangeThick(dDN, pszPN); double FR = getNozzRadius(nFlangeType, dDN, pszPN); Adesk::Int32 itemID(0); double L(dMaxL), H(dMaxH), W(dMaxW), R(dDN * .5); if (DOWN_ZERO(L - 2 * dNozzL)) L = 2 * dNozzL + 1; // 阀体 圆柱 { AecEqui::XCylinder cln; memset(&cln, 0, sizeof(AecEqui::XCylinder)); cln.dr = R * 1.2; cln.dH = L - 2 * dNozzL; itemID = addSubPrimObj(pEqu, cln, AecEqui::kCylinder); rotationSubPrimObj(pEqu, itemID, 90, 1); moveSubPrimObj(pEqu, itemID, -cln.dH * .5, 0); Adesk::Int32 id0 = addNozz(pEqu, itemID, dDN, pszPN, nFlangeType, 0); Adesk::Int32 id1 = addNozz(pEqu, itemID, dDN, pszPN, nFlangeType, 1); pEqu->ModifyPrimData(0, AecEqui::XPrimData(), 10); } // 阀芯 { AecEqui::XBox box; memset(&box, 0, sizeof(AecEqui::XBox)); box.dL = L * .25; box.dW = 2 * R * 1.5; box.dH = box.dW; itemID = addSubPrimObj(pEqu, box, AecEqui::kBox); moveSubPrimObj(pEqu, itemID, -box.dH * .5, 2); memset(&box, 0, sizeof(AecEqui::XBox)); box.dL = L * .25 * 1.5; box.dW = 2 * R * 1.5 * .5; box.dH = FR * .25; itemID = addSubPrimObj(pEqu, box, AecEqui::kBox); moveSubPrimObj(pEqu, itemID, 1.5 * R, 2); box.dL *= .5; box.dW *= .5; box.dH = H - 50; itemID = addSubPrimObj(pEqu, box, AecEqui::kBox); AecEqui::XCylinder cln; memset(&cln, 0, sizeof(AecEqui::XCylinder)); cln.dr = R * .1; cln.dH = H; itemID = addSubPrimObj(pEqu, cln, AecEqui::kCylinder); // 手盘 AecEqui::XCirtorus cirtor; memset(&cirtor, 0, sizeof(AecEqui::XCirtorus)); cirtor.dOutR = dMaxW * .5; cirtor.dInr = cirtor.dOutR - R * .2; cirtor.dStaAngle = .0; cirtor.dEndAngle = CoreTools::A2R(360 - 0.1); itemID = addSubPrimObj(pEqu, cirtor, AecEqui::kCirTorus); moveSubPrimObj(pEqu, itemID, H, 2); memset(&cln, 0, sizeof(AecEqui::XCylinder)); cln.dr = R * .1 * .5; cln.dH = dMaxW - R * .1; itemID = addSubPrimObj(pEqu, cln, AecEqui::kCylinder); rotationSubPrimObj(pEqu, itemID, 90, 1); moveSubPrimObj(pEqu, itemID, -cln.dH * .5, 0); moveSubPrimObj(pEqu, itemID, H, 2); memset(&cln, 0, sizeof(AecEqui::XCylinder)); cln.dr = R * .1 * .5; cln.dH = dMaxW - R * .1; itemID = addSubPrimObj(pEqu, cln, AecEqui::kCylinder); rotationSubPrimObj(pEqu, itemID, 90, 0); moveSubPrimObj(pEqu, itemID, cln.dH * .5, 1); moveSubPrimObj(pEqu, itemID, H, 2); } return pEqu; } AecDbEwEquipment* makePaiQiFa(const double &dDN , LPCTSTR pszPN , LPCTSTR pszMaterial , const double &dMaxL , const double &dMaxW , const double &dMaxH , const int &nFlangeType , std::map &bims) { if (!pszPN) return NULL; CString sName = makeValveName(_T("排气阀"), dDN, pszPN); if (sName.IsEmpty()) return NULL; AecDbEwEquipment* pEqu = makeBaseEquiment(sName); double dNozzL = getNozzLength(nFlangeType, dDN, pszPN); double dFangleL = getFlangeThick(dDN, pszPN); Adesk::Int32 itemID(0); double L(dMaxL), H(dMaxH), W(dMaxW), R(dDN * .5); H -= dNozzL; AecEqui::XCylinder cln; memset(&cln, 0, sizeof(AecEqui::XCylinder)); cln.dr = R; cln.dH = H; itemID = addSubPrimObj(pEqu, cln, AecEqui::kCylinder); // 下面加一个管嘴 Adesk::Int32 id = addNozz(pEqu, itemID, dDN, pszPN, nFlangeType, 0); // 上面加一个管嘴 id = addNozz(pEqu, itemID, dDN, pszPN, 0, 1); pEqu->ModifyPrimData(0, AecEqui::XPrimData(), 10); memset(&cln, 0, sizeof(AecEqui::XCylinder)); cln.dr = R * 1.5; cln.dH = dFangleL; itemID = addSubPrimObj(pEqu, cln, AecEqui::kCylinder); moveSubPrimObj(pEqu, itemID, H - dFangleL, 2); memset(&cln, 0, sizeof(AecEqui::XCylinder)); cln.dr = R * 1.5; cln.dH = dFangleL; itemID = addSubPrimObj(pEqu, cln, AecEqui::kCylinder); moveSubPrimObj(pEqu, itemID, H - 2 * dFangleL, 2); memset(&cln, 0, sizeof(AecEqui::XCylinder)); cln.dr = R * 1.2; cln.dH = H * .5; itemID = addSubPrimObj(pEqu, cln, AecEqui::kCylinder); moveSubPrimObj(pEqu, itemID, H * .5 - 2 * dFangleL, 2); return pEqu; } AecDbEwEquipment* makeZhaFa(const double &dDN , LPCTSTR pszPN , LPCTSTR pszMaterial , const double &dMaxL , const double &dMaxW , const double &dMaxH , const int &nFlangeType , std::map &bims) { if (!pszPN) return NULL; CString sName = makeValveName(_T("闸阀"), dDN, pszPN); if (sName.IsEmpty()) return NULL; AecDbEwEquipment* pEqu = makeBaseEquiment(sName); double dNozzL = getNozzLength(nFlangeType, dDN, pszPN); double dFangleL = getFlangeThick(dDN, pszPN); Adesk::Int32 itemID(0); double L(dMaxL), H(dMaxH), W(dMaxW), R(dDN * .5); if (DOWNEQUAL(H, L)) H = 1.5 * L; if (DOWN_ZERO(L - 2 * dNozzL)) L = 2 * dNozzL + 1; // 阀体 圆柱 { AecEqui::XCylinder cln; memset(&cln, 0, sizeof(AecEqui::XCylinder)); cln.dr = R * 1.2; cln.dH = L - 2 * dNozzL; AecEqui::XPrimData data; data.m_eType = AecEqui::kCylinder; setData(&data, &cln); pEqu->AddSubPrimObj(&data); itemID = data.m_nID; clearData(data); // 先绕Y转90 rotationSubPrimObj(pEqu, itemID, 90, 1); // 再沿X走 dH 的一半 moveSubPrimObj(pEqu, itemID, -cln.dH * .5, 0); // 圆柱有两个接口,分别建两个管嘴 Adesk::Int32 id0 = addNozz(pEqu, itemID, dDN, pszPN, nFlangeType, 0); Adesk::Int32 id1 = addNozz(pEqu, itemID, dDN, pszPN, nFlangeType, 1); // 关闭箭头 pEqu->ModifyPrimData(0, data, 10); } // 阀台,其高度等于阀长 { // 圆台 AecEqui::XCone cone; memset(&cone, 0, sizeof(AecEqui::XCone)); cone.dr = R * .5; cone.dR = R; cone.dH = L; cone.dXOffset = .0; AecEqui::XPrimData data; data.m_eType = AecEqui::kCone; setData(&data, &cone); pEqu->AddSubPrimObj(&data); itemID = data.m_nID; clearData(data); // 绕Y转180 rotationSubPrimObj(pEqu, itemID, 180, 1); // 沿Z移 dDN * .5 moveSubPrimObj(pEqu, itemID, cone.dH, 2); // 其上画两个法片 AecEqui::XCylinder cln; memset(&cln, 0, sizeof(AecEqui::XCylinder)); cln.dr = R * 1.2; cln.dH = dFangleL; data.m_eType = AecEqui::kCylinder; setData(&data, &cln); pEqu->AddSubPrimObj(&data); itemID = data.m_nID; clearData(data); // 沿Z移 动到圆台的顶部 moveSubPrimObj(pEqu, itemID, cone.dH, 2); memset(&cln, 0, sizeof(AecEqui::XCylinder)); cln.dr = R * 1.2; cln.dH = dFangleL; data.m_eType = AecEqui::kCylinder; setData(&data, &cln); pEqu->AddSubPrimObj(&data); itemID = data.m_nID; clearData(data); // 沿Z移 动到圆台的顶部 moveSubPrimObj(pEqu, itemID, cone.dH + dFangleL, 2); // 阀芯 memset(&cln, 0, sizeof(AecEqui::XCylinder)); cln.dr = .1 * R; cln.dH = H; data.m_eType = AecEqui::kCylinder; setData(&data, &cln); pEqu->AddSubPrimObj(&data); itemID = data.m_nID; clearData(data); // 手盘 AecEqui::XCirtorus cirtor; memset(&cirtor, 0, sizeof(AecEqui::XCirtorus)); cirtor.dOutR = dMaxW * .5; cirtor.dInr = cirtor.dOutR - R * .2; cirtor.dStaAngle = .0; cirtor.dEndAngle = CoreTools::A2R(360 - 0.1); data.m_eType = AecEqui::kCirTorus; setData(&data, &cirtor); pEqu->AddSubPrimObj(&data); itemID = data.m_nID; clearData(data); // 移动到阀芯顶部 moveSubPrimObj(pEqu, itemID, H, 2); memset(&cln, 0, sizeof(AecEqui::XCylinder)); cln.dr = R * .1 * .5; cln.dH = dMaxW - R * .1; data.m_eType = AecEqui::kCylinder; setData(&data, &cln); pEqu->AddSubPrimObj(&data); itemID = data.m_nID; clearData(data); rotationSubPrimObj(pEqu, itemID, 90, 1); moveSubPrimObj(pEqu, itemID, -cln.dH * .5, 0); moveSubPrimObj(pEqu, itemID, H, 2); memset(&cln, 0, sizeof(AecEqui::XCylinder)); cln.dr = R * .1 * .5; cln.dH = dMaxW - R * .1; data.m_eType = AecEqui::kCylinder; setData(&data, &cln); pEqu->AddSubPrimObj(&data); itemID = data.m_nID; clearData(data); rotationSubPrimObj(pEqu, itemID, 90, 0); moveSubPrimObj(pEqu, itemID, cln.dH * .5, 1); moveSubPrimObj(pEqu, itemID, H, 2); } return pEqu; } AecDbEwEquipment* makeDaoXingZhaFa(const double &dDN , LPCTSTR pszPN , LPCTSTR pszMaterial , const double &dMaxL , const double &dMaxW , const double &dMaxH , const int &nFlangeType , std::map &bims) { if (!pszPN) return NULL; CString sName = makeValveName(_T("刀型闸阀"), dDN, pszPN); if (sName.IsEmpty()) return NULL; AecDbEwEquipment* pEqu = makeBaseEquiment(sName); double dNozzL = getNozzLength(nFlangeType, dDN, pszPN); double dFangleL = getFlangeThick(dDN, pszPN); Adesk::Int32 itemID(0); double L(dMaxL), H(dMaxH), W(dMaxW), R(dDN * .5), FR = getNozzRadius(nFlangeType, dDN, pszPN); if (DOWNEQUAL(H, 5 * FR)) H = 5 * FR; if (DOWN_ZERO(L - 2 * dNozzL)) L = 2 * dNozzL + 1; // 阀体 { AecEqui::XCylinder cln; memset(&cln, 0, sizeof(AecEqui::XCylinder)); cln.dr = R * 1.2; cln.dH = L - 2 * dNozzL; AecEqui::XPrimData data; data.m_eType = AecEqui::kCylinder; setData(&data, &cln); pEqu->AddSubPrimObj(&data); itemID = data.m_nID; clearData(data); // 先绕Y转90 rotationSubPrimObj(pEqu, itemID, 90, 1); // 再沿X走 dH 的一半 moveSubPrimObj(pEqu, itemID, -cln.dH * .5, 0); // 圆柱有两个接口,分别建两个管嘴 Adesk::Int32 id0 = addNozz(pEqu, itemID, dDN, pszPN, nFlangeType, 0); Adesk::Int32 id1 = addNozz(pEqu, itemID, dDN, pszPN, nFlangeType, 1); // 关闭箭头 pEqu->ModifyPrimData(0, data, 10); } // 阀台 { AecEqui::XBox box; memset(&box, 0, sizeof(AecEqui::XBox)); box.dL = L; box.dW = 2 * R * .9; box.dH = FR * 1.5; AecEqui::XPrimData data; data.m_eType = AecEqui::kBox; setData(&data, &box); pEqu->AddSubPrimObj(&data); itemID = data.m_nID; clearData(data); // 两个法兰片 memset(&box, 0, sizeof(AecEqui::XBox)); box.dL = L * 1.1; box.dW = 2 * R * .9 * 1.1; box.dH = dFangleL; data.m_eType = AecEqui::kBox; setData(&data, &box); pEqu->AddSubPrimObj(&data); itemID = data.m_nID; clearData(data); moveSubPrimObj(pEqu, itemID, FR * 1.5, 2); memset(&box, 0, sizeof(AecEqui::XBox)); box.dL = L * 1.1; box.dW = 2 * R * .9 * 1.1; box.dH = dFangleL; data.m_eType = AecEqui::kBox; setData(&data, &box); pEqu->AddSubPrimObj(&data); itemID = data.m_nID; clearData(data); moveSubPrimObj(pEqu, itemID, FR * 1.5 + dFangleL, 2); // 方柱 memset(&box, 0, sizeof(AecEqui::XBox)); box.dL = L * .9; box.dW = 2 * R * .9 * .9; box.dH = H * .75; data.m_eType = AecEqui::kBox; setData(&data, &box); pEqu->AddSubPrimObj(&data); itemID = data.m_nID; clearData(data); // 圆柱 AecEqui::XCylinder cln; memset(&cln, 0, sizeof(AecEqui::XCylinder)); cln.dr = R * .1; cln.dH = H; data.m_eType = AecEqui::kCylinder; setData(&data, &cln); pEqu->AddSubPrimObj(&data); itemID = data.m_nID; clearData(data); // 手盘 AecEqui::XCirtorus cirtor; memset(&cirtor, 0, sizeof(AecEqui::XCirtorus)); cirtor.dOutR = dMaxW * .5; cirtor.dInr = cirtor.dOutR - R * .2; cirtor.dStaAngle = .0; cirtor.dEndAngle = CoreTools::A2R(360 - 0.1); data.m_eType = AecEqui::kCirTorus; setData(&data, &cirtor); pEqu->AddSubPrimObj(&data); itemID = data.m_nID; clearData(data); // 移动到阀芯顶部 moveSubPrimObj(pEqu, itemID, H, 2); memset(&cln, 0, sizeof(AecEqui::XCylinder)); cln.dr = R * .1 * .5; cln.dH = dMaxW - R * .1; data.m_eType = AecEqui::kCylinder; setData(&data, &cln); pEqu->AddSubPrimObj(&data); itemID = data.m_nID; clearData(data); rotationSubPrimObj(pEqu, itemID, 90, 1); moveSubPrimObj(pEqu, itemID, -cln.dH * .5, 0); moveSubPrimObj(pEqu, itemID, H, 2); memset(&cln, 0, sizeof(AecEqui::XCylinder)); cln.dr = R * .1 * .5; cln.dH = dMaxW - R * .1; data.m_eType = AecEqui::kCylinder; setData(&data, &cln); pEqu->AddSubPrimObj(&data); itemID = data.m_nID; clearData(data); rotationSubPrimObj(pEqu, itemID, 90, 0); moveSubPrimObj(pEqu, itemID, cln.dH * .5, 1); moveSubPrimObj(pEqu, itemID, H, 2); } return pEqu; } AecDbEwEquipment* makeJieZhiFa(const double &dDN , LPCTSTR pszPN , LPCTSTR pszMaterial , const double &dMaxL , const double &dMaxW , const double &dMaxH , const int &nFlangeType , std::map &bims) { if (!pszPN) return NULL; CString sName = makeValveName(_T("截止阀"), dDN, pszPN); if (sName.IsEmpty()) return NULL; AecDbEwEquipment* pEqu = makeBaseEquiment(sName); double L(dMaxL), H(dMaxH), W(dMaxW), R(dDN * .5); double FR = getNozzRadius(nFlangeType, dDN, pszPN); double dNozzL = getNozzLength(nFlangeType, dDN, pszPN); double dFangleL = getFlangeThick(dDN, pszPN); if (DOWNEQUAL(H, FR + dFangleL)) { H = FR + dFangleL + 50; } if (DOWN_ZERO(L - 2 * dNozzL)) L = 2 * dNozzL + 1; Adesk::Int32 itemID(0); // 阀体 { AecEqui::XCylinder cln; memset(&cln, 0, sizeof(AecEqui::XCylinder)); cln.dr = R * 1.2; cln.dH = L - 2 * dNozzL; AecEqui::XPrimData data; data.m_eType = AecEqui::kCylinder; setData(&data, &cln); pEqu->AddSubPrimObj(&data); itemID = data.m_nID; clearData(data); // 先绕Y转90 rotationSubPrimObj(pEqu, itemID, 90, 1); // 再沿X走 dH 的一半 moveSubPrimObj(pEqu, itemID, -cln.dH * .5, 0); // 圆柱有两个接口,分别建两个管嘴 Adesk::Int32 id0 = addNozz(pEqu, itemID, dDN, pszPN, nFlangeType, 0); Adesk::Int32 id1 = addNozz(pEqu, itemID, dDN, pszPN, nFlangeType, 1); // 关闭箭头 pEqu->ModifyPrimData(0, data, 10); } // 阀台 { AecEqui::XCylinder cln; memset(&cln, 0, sizeof(AecEqui::XCylinder)); cln.dr = L * .25; cln.dH = FR; AecEqui::XPrimData data; data.m_eType = AecEqui::kCylinder; setData(&data, &cln); pEqu->AddSubPrimObj(&data); itemID = data.m_nID; clearData(data); AecEqui::XSphere sph; sph.dr = L * .25; data.m_eType = AecEqui::kSphere; setData(&data, &cln); pEqu->AddSubPrimObj(&data); itemID = data.m_nID; clearData(data); memset(&cln, 0, sizeof(AecEqui::XCylinder)); cln.dr = L * .25; cln.dH = dFangleL; data.m_eType = AecEqui::kCylinder; setData(&data, &cln); pEqu->AddSubPrimObj(&data); itemID = data.m_nID; clearData(data); moveSubPrimObj(pEqu, itemID, FR, 2); memset(&cln, 0, sizeof(AecEqui::XCylinder)); cln.dr = L * .25 * .5; cln.dH = H - dFangleL - FR - 10; data.m_eType = AecEqui::kCylinder; setData(&data, &cln); pEqu->AddSubPrimObj(&data); itemID = data.m_nID; clearData(data); memset(&cln, 0, sizeof(AecEqui::XCylinder)); cln.dr = R * .1; cln.dH = H; data.m_eType = AecEqui::kCylinder; setData(&data, &cln); pEqu->AddSubPrimObj(&data); itemID = data.m_nID; clearData(data); // 手盘 AecEqui::XCirtorus cirtor; memset(&cirtor, 0, sizeof(AecEqui::XCirtorus)); cirtor.dOutR = dMaxW * .5; cirtor.dInr = cirtor.dOutR - R * .2; cirtor.dStaAngle = .0; cirtor.dEndAngle = CoreTools::A2R(360 - 0.1); data.m_eType = AecEqui::kCirTorus; setData(&data, &cirtor); pEqu->AddSubPrimObj(&data); itemID = data.m_nID; clearData(data); // 移动到阀芯顶部 moveSubPrimObj(pEqu, itemID, H, 2); memset(&cln, 0, sizeof(AecEqui::XCylinder)); cln.dr = R * .1 * .5; cln.dH = dMaxW - R * .1; data.m_eType = AecEqui::kCylinder; setData(&data, &cln); pEqu->AddSubPrimObj(&data); itemID = data.m_nID; clearData(data); rotationSubPrimObj(pEqu, itemID, 90, 1); moveSubPrimObj(pEqu, itemID, -cln.dH * .5, 0); moveSubPrimObj(pEqu, itemID, H, 2); memset(&cln, 0, sizeof(AecEqui::XCylinder)); cln.dr = R * .1 * .5; cln.dH = dMaxW - R * .1; data.m_eType = AecEqui::kCylinder; setData(&data, &cln); pEqu->AddSubPrimObj(&data); itemID = data.m_nID; clearData(data); rotationSubPrimObj(pEqu, itemID, 90, 0); moveSubPrimObj(pEqu, itemID, cln.dH * .5, 1); moveSubPrimObj(pEqu, itemID, H, 2); } return pEqu; } AecDbEwEquipment* makeDieFa(const double &dDN , LPCTSTR pszPN , LPCTSTR pszMaterial , const double &dMaxL , const double &dMaxW , const double &dMaxH , const int &nFlangeType , std::map &bims) { if (!pszPN) return NULL; CString sName = makeValveName(_T("蝶阀"), dDN, pszPN); if (sName.IsEmpty()) return NULL; AecDbEwEquipment* pEqu = makeBaseEquiment(sName); double L(dMaxL), H(dMaxH), W(dMaxW), R(dDN * .5); double FR = getNozzRadius(nFlangeType, dDN, pszPN); double dNozzL = getNozzLength(nFlangeType, dDN, pszPN); double dFangleL = getFlangeThick(dDN, pszPN); if (DOWN_ZERO(L - 2 * dNozzL)) L = 2 * dNozzL + 1; if (DOWNEQUAL(H, FR)) { H = 4 * L; } Adesk::Int32 itemID(0); // 阀体 { AecEqui::XCylinder cln; memset(&cln, 0, sizeof(AecEqui::XCylinder)); cln.dr = R * 1.2; cln.dH = L - 2 * dNozzL; AecEqui::XPrimData data; data.m_eType = AecEqui::kCylinder; setData(&data, &cln); pEqu->AddSubPrimObj(&data); itemID = data.m_nID; clearData(data); // 先绕Y转90 rotationSubPrimObj(pEqu, itemID, 90, 1); // 再沿X走 dH 的一半 moveSubPrimObj(pEqu, itemID, -cln.dH * .5, 0); // 圆柱有两个接口,分别建两个管嘴 Adesk::Int32 id0 = addNozz(pEqu, itemID, dDN, pszPN, nFlangeType, 0); Adesk::Int32 id1 = addNozz(pEqu, itemID, dDN, pszPN, nFlangeType, 1); // 关闭箭头 pEqu->ModifyPrimData(0, data, 10); } // { AecEqui::XBox box; memset(&box, 0, sizeof(AecEqui::XBox)); box.dL = (L + 2 * dNozzL) * .25; box.dW = R * .5; box.dH = H; AecEqui::XPrimData data; data.m_eType = AecEqui::kBox; setData(&data, &box); pEqu->AddSubPrimObj(&data); itemID = data.m_nID; clearData(data); // 手盘 AecEqui::XCirtorus cirtor; memset(&cirtor, 0, sizeof(AecEqui::XCirtorus)); cirtor.dOutR = dMaxW * .5; cirtor.dInr = cirtor.dOutR - R * .2; cirtor.dStaAngle = .0; cirtor.dEndAngle = CoreTools::A2R(360 - 0.1); data.m_eType = AecEqui::kCirTorus; setData(&data, &cirtor); pEqu->AddSubPrimObj(&data); itemID = data.m_nID; clearData(data); rotationSubPrimObj(pEqu, itemID, 90, 0); moveSubPrimObj(pEqu, itemID, -(R * .5 * .5 + R * .2 + 10), 1); moveSubPrimObj(pEqu, itemID, H - cirtor.dOutR, 2); AecEqui::XCylinder cln; memset(&cln, 0, sizeof(AecEqui::XCylinder)); cln.dr = R * .1 * .5; cln.dH = dMaxW - R * .1; data.m_eType = AecEqui::kCylinder; setData(&data, &cln); pEqu->AddSubPrimObj(&data); itemID = data.m_nID; clearData(data); rotationSubPrimObj(pEqu, itemID, 90, 1); moveSubPrimObj(pEqu, itemID, -cln.dH * .5, 0); moveSubPrimObj(pEqu, itemID, -(R * .5 * .5 + R * .2 + 10), 1); moveSubPrimObj(pEqu, itemID, H - cirtor.dOutR, 2); memset(&cln, 0, sizeof(AecEqui::XCylinder)); cln.dr = R * .1 * .5; cln.dH = dMaxW - R * .1; data.m_eType = AecEqui::kCylinder; setData(&data, &cln); pEqu->AddSubPrimObj(&data); itemID = data.m_nID; clearData(data); moveSubPrimObj(pEqu, itemID, -(R * .5 * .5 + R * .2 + 10), 1); moveSubPrimObj(pEqu, itemID, H - cirtor.dOutR - cln.dH * .5, 2); memset(&cln, 0, sizeof(AecEqui::XCylinder)); cln.dr = R * .1 * .5; cln.dH = R * .5 * .5 + R * .2 + 10; data.m_eType = AecEqui::kCylinder; setData(&data, &cln); pEqu->AddSubPrimObj(&data); itemID = data.m_nID; clearData(data); rotationSubPrimObj(pEqu, itemID, 90, 0); moveSubPrimObj(pEqu, itemID, H - cirtor.dOutR, 2); } return pEqu; } AecDbEwEquipment* makeZhiHuiFa(const double &dDN , LPCTSTR pszPN , LPCTSTR pszMaterial , const double &dMaxL , const double &dMaxW , const double &dMaxH , const int &nFlangeType , std::map &bims) { if (!pszPN) return NULL; CString sName = makeValveName(_T("止回阀"), dDN, pszPN); if (sName.IsEmpty()) return NULL; AecDbEwEquipment* pEqu = makeBaseEquiment(sName); double L(dMaxL), H(dMaxH), W(dMaxW), R(dDN * .5); double FR = getNozzRadius(nFlangeType, dDN, pszPN); double dNozzL = getNozzLength(nFlangeType, dDN, pszPN); double dFangleL = getFlangeThick(dDN, pszPN); if (DOWN_ZERO(L - 2 * dNozzL)) L = 2 * dNozzL + 1; Adesk::Int32 itemID(0); // 阀体 { AecEqui::XCylinder cln; memset(&cln, 0, sizeof(AecEqui::XCylinder)); cln.dr = R * 1.2; cln.dH = L - 2 * dNozzL; itemID = addSubPrimObj(pEqu, cln, AecEqui::kCylinder); // 先绕Y转90 rotationSubPrimObj(pEqu, itemID, 90, 1); // 再沿X走 dH 的一半 moveSubPrimObj(pEqu, itemID, -cln.dH * .5, 0); // 圆柱有两个接口,分别建两个管嘴 Adesk::Int32 id0 = addNozz(pEqu, itemID, dDN, pszPN, nFlangeType, 0); Adesk::Int32 id1 = addNozz(pEqu, itemID, dDN, pszPN, nFlangeType, 1); // 关闭箭头 pEqu->ModifyPrimData(0, AecEqui::XPrimData(), 10); } // 阀台 { AecEqui::XSphere sph; memset(&sph, 0, sizeof(AecEqui::XSphere)); sph.dr = 1.5 * R; itemID = addSubPrimObj(pEqu, sph, AecEqui::kSphere); AecEqui::XTydf tydf; memset(&tydf, 0, sizeof(AecEqui::XTydf)); tydf.dTR = sph.dr; tydf.dTL = 2 * sph.dr; tydf.dTW = tydf.dTL; tydf.dH = sph.dr; tydf.dXOffset = .0; itemID = addSubPrimObj(pEqu, tydf, AecEqui::kTydf); rotationSubPrimObj(pEqu, itemID, -90, 1); moveSubPrimObj(pEqu, itemID, tydf.dH, 0); AecEqui::XCylinder cln; memset(&cln, 0, sizeof(AecEqui::XCylinder)); cln.dr = R * .5; cln.dH = H; itemID = addSubPrimObj(pEqu, cln, AecEqui::kCylinder); memset(&cln, 0, sizeof(AecEqui::XCylinder)); cln.dr = R * .5 * 1.5; cln.dH = dFangleL; itemID = addSubPrimObj(pEqu, cln, AecEqui::kCylinder); moveSubPrimObj(pEqu, itemID, H - dFangleL, 2); memset(&cln, 0, sizeof(AecEqui::XCylinder)); cln.dr = R * .5 * 1.5; cln.dH = dFangleL; itemID = addSubPrimObj(pEqu, cln, AecEqui::kCylinder); moveSubPrimObj(pEqu, itemID, H - 2 * dFangleL, 2); } return pEqu; } } namespace MKHvacValve { namespace { AcDbRegion* makeRectRegion(const AcGePoint3d& ptOrg , const double& dL , const double& dW) { AcGePoint3d pt0(-dL * .5, dW * .5, .0) , pt1(dL * .5, dW * .5, .0) , pt2(dL * .5, -dW * .5, .0) , pt3(-dL * .5, -dW * .5, .0); AcDbVoidPtrArray ar; ar.append(new AcDbLine(pt0, pt1)); ar.append(new AcDbLine(pt1, pt2)); ar.append(new AcDbLine(pt2, pt3)); ar.append(new AcDbLine(pt3, pt0)); AcDbRegion* pReg = CoreTools::createRegion(ar); if (pReg) { AcGeMatrix3d mat; mat.setToTranslation(ptOrg.asVector()); pReg->transformBy(mat); } deleteArrayVoidPtrs< AcDbLine>(ar); return pReg; } 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); } AcDbPolyline* makeRectPoly(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 FormatPolyline(ptGe, 5); } AcDbRegion* makeCircleRegion(const AcGePoint3d& ptOrg , const AcGeVector3d& vtZ , const double& dR) { AcDbCircle* pCir(new AcDbCircle(ptOrg, vtZ, dR)); AcDbRegion* pReg = CoreTools::createRegion(pCir); DELETE_PTR(pCir); return pReg; } template 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; } } } Adesk::Int32 makeValveBody_Rect(AecDbEwEquipment* pEqu , const double& dW // 方管长 , const double& dH // 方管宽 , const double& dFL // 阀门长 , const double& dFlT // 法兰厚 , const double& dFlE // 法兰卷边 ) { AecEqui::XBox box; box.dL = dH; box.dW = dW; box.dH = dFL - 2 * dFlT; Adesk::Int32 itemID = MKValve::addSubPrimObj(pEqu, box, AecEqui::kBox); MKValve::rotationSubPrimObj(pEqu, itemID, 90, 1); MKValve::moveSubPrimObj(pEqu, itemID, -box.dH * .5, 0); CoreTools::addNozzForEqu_Rect(pEqu , AcGeVector3d::kXAxis , AcGePoint3d(box.dH * .5, 0, 0) , dH, dW, dFlT, dFlE, dFlT, 0, false, false); CoreTools::addNozzForEqu_Rect(pEqu , -AcGeVector3d::kXAxis , AcGePoint3d(-box.dH * .5, 0, 0) , dH, dW, dFlT, dFlE, dFlT, 0, false, false); return itemID; } Adesk::Int32 makeValveBody_Circle(AecDbEwEquipment* pEqu , const double& dDN // 圆管公称 , const double& dFL // 阀门长 , const double& dFlT // 法兰厚 , const double& dFlE // 法兰卷边 ) { AecEqui::XCylinder cln; memset(&cln, 0, sizeof(AecEqui::XCylinder)); cln.dr = dDN * .5; cln.dH = dFL - 2 * dFlT; Adesk::Int32 itemID = MKValve::addSubPrimObj(pEqu, cln, AecEqui::kCylinder); MKValve::rotationSubPrimObj(pEqu, itemID, 90, 1); MKValve::moveSubPrimObj(pEqu, itemID, -cln.dH * .5, 0); CoreTools::addNozzForEqu_Rect(pEqu , AcGeVector3d::kXAxis , AcGePoint3d(cln.dH * .5, 0, 0) , dDN, dDN + dFlE, dFlT, dFlT, dFlT, 0, true, false); CoreTools::addNozzForEqu_Rect(pEqu , -AcGeVector3d::kXAxis , AcGePoint3d(-cln.dH * .5, 0, 0) , dDN, dDN + dFlE, dFlT, dFlT, dFlT, 0, true, false); return itemID; } // 2d 绘制数据埋入 void setDrawData(AecDbEwEquipment* pEqu , const int& type , const bool bRect , const double& dDN // 圆管公称 , const double& dW // 方管长 , const double& dFL // 阀门长 , const double& dFlE // 法兰卷边 ) { pEqu->GetSpecialtyData()->SetAt(_T("_hvac_valve_shape"), bRect ? 0 : 1); pEqu->GetSpecialtyData()->SetAt(_T("_hvac_valve_w"), bRect ? dW : dDN); pEqu->GetSpecialtyData()->SetAt(_T("_hvac_valve_l"), dFL); pEqu->GetSpecialtyData()->SetAt(_T("_hvac_valve_fle"), dFlE); //类型 0调节阀 1止回阀 2防火阀 3闸板阀 4蝶阀 5定风量阀 6风口 pEqu->GetSpecialtyData()->SetAt(_T("_hvac_valve_type"), type); } void clearData(AecEqui::XPrimData& data) { // 再XPrimData类的析构函数中已经释放了m_pData return; switch (data.m_eType) { case AecEqui::kExtrude: case AecEqui::kRevolve: DELETE_ARR_(data.m_pData); break; default: DELETE_PTR(data.m_pData); break; } return; } void FunmakeFangZhiDingFa_Rect(AecDbEwEquipment* pEqu , const double& dW // 方管长 , const double& dH // 方管宽 , const double& dFL // 阀门长 , const double& dFlT // 法兰厚 , const double& dFlE // 法兰卷边 ) { AecEqui::XBox boxFront; memset(&boxFront, 0, sizeof(AecEqui::XBox)); boxFront.dL = 2 * dW / 15; boxFront.dW = dH / 15; boxFront.dH = 7 * dH / 18; AcGeVector3d vecFrontR(-dH / 5, -dW / 2 - dH / 30, dH / 4); AecEqui::XPrimData dataFront; dataFront.m_eType = AecEqui::kBox; dataFront.m_iClr = 256; dataFront.m_bBoolSubtract = FALSE; dataFront.m_vtMove = vecFrontR; dataFront.m_ptRotation.set(PI / 2.0, PI / 2.0, PI / 2.0); setData(&dataFront, &boxFront); pEqu->AddSubPrimObj(&dataFront); clearData(dataFront); AecEqui::XCylinder CylinderFrontC; memset(&CylinderFrontC, 0, sizeof(AecEqui::XCylinder)); CylinderFrontC.dr = dW / 30; CylinderFrontC.dH = dH / 15; AcGeVector3d vecFrontC(0, -dW / 2 - dH / 15, dH / 4); AecEqui::XPrimData dataFrontC; dataFrontC.m_eType = AecEqui::kCylinder; dataFrontC.m_iClr = 256; dataFrontC.m_bBoolSubtract = false; dataFrontC.m_vtMove = vecFrontC; dataFrontC.m_ptRotation.set(PI / 2, 0, 0); setData(&dataFrontC, &CylinderFrontC); pEqu->AddSubPrimObj(&dataFrontC); clearData(dataFrontC); AecEqui::XCylinder CylinderFrontCM; memset(&CylinderFrontCM, 0, sizeof(AecEqui::XCylinder)); CylinderFrontCM.dr = dW / 400; CylinderFrontCM.dH = dH / 3; AcGeVector3d vecFrontCM(0, -38 * dW / 75 - dH / 10, dH / 4); AecEqui::XPrimData dataFrontCM; dataFrontCM.m_eType = AecEqui::kCylinder; dataFrontCM.m_iClr = 256; dataFrontCM.m_bBoolSubtract = false; dataFrontCM.m_vtMove = vecFrontCM; dataFrontCM.m_ptRotation.set(PI / 4, 0, PI / 2); setData(&dataFrontCM, &CylinderFrontCM); pEqu->AddSubPrimObj(&dataFrontCM); clearData(dataFrontCM); AecEqui::XCylinder CylinderFrontCT; memset(&CylinderFrontCT, 0, sizeof(AecEqui::XCylinder)); CylinderFrontCT.dr = 3 * dW / 400; CylinderFrontCT.dH = dH / 30; AcGeVector3d vecFrontCT(dH * cos(PI / 4) / 3, -38 * dW / 75 - dH / 3 + dH * sin(PI / 4) / 3, dH / 4 + dH * cos(PI / 4) / 3); AecEqui::XPrimData dataFrontCT; dataFrontCT.m_eType = AecEqui::kCylinder; dataFrontCT.m_iClr = 256; dataFrontCT.m_bBoolSubtract = false; dataFrontCT.m_vtMove = vecFrontCT; dataFrontCT.m_ptRotation.set(0, PI / 4, 0); setData(&dataFrontCT, &CylinderFrontCT); pEqu->AddSubPrimObj(&dataFrontCT); clearData(dataFrontCT); } void FunmakeFangZhiDingFa_Circle(AecDbEwEquipment* pEqu , const double& dDN //圆管公称 , const double& dFL // 阀门长 , const double& dFlT // 法兰厚 , const double& dFlE // 法兰卷边 ) { AecEqui::XBox boxFront; memset(&boxFront, 0, sizeof(AecEqui::XBox)); boxFront.dL = 2 * dDN / 15; boxFront.dW = dDN / 45; boxFront.dH = 7 * dDN / 54; AcGeVector3d vecFrontR(-dDN / 15, -dDN / 2 - dDN / 90, dDN / 12); AecEqui::XPrimData dataFront; dataFront.m_eType = AecEqui::kBox; dataFront.m_iClr = 256; dataFront.m_bBoolSubtract = FALSE; dataFront.m_vtMove = vecFrontR; dataFront.m_ptRotation.set(PI / 2.0, PI / 2.0, PI / 2.0); setData(&dataFront, &boxFront); pEqu->AddSubPrimObj(&dataFront); clearData(dataFront); AecEqui::XCylinder CylinderFrontC; memset(&CylinderFrontC, 0, sizeof(AecEqui::XCylinder)); CylinderFrontC.dr = dDN / 30; CylinderFrontC.dH = dDN / 45; AcGeVector3d vecFrontC(0, -dDN / 2 - dDN / 45, dDN / 12); AecEqui::XPrimData dataFrontC; dataFrontC.m_eType = AecEqui::kCylinder; dataFrontC.m_iClr = 256; dataFrontC.m_bBoolSubtract = false; dataFrontC.m_vtMove = vecFrontC; dataFrontC.m_ptRotation.set(PI / 2, 0, 0); setData(&dataFrontC, &CylinderFrontC); pEqu->AddSubPrimObj(&dataFrontC); clearData(dataFrontC); AecEqui::XCylinder CylinderFrontCM; memset(&CylinderFrontCM, 0, sizeof(AecEqui::XCylinder)); CylinderFrontCM.dr = dDN / 400; CylinderFrontCM.dH = dDN / 9; AcGeVector3d vecFrontCM(0, -38 * dDN / 75 - dDN / 30, dDN / 12); AecEqui::XPrimData dataFrontCM; dataFrontCM.m_eType = AecEqui::kCylinder; dataFrontCM.m_iClr = 256; dataFrontCM.m_bBoolSubtract = false; dataFrontCM.m_vtMove = vecFrontCM; dataFrontCM.m_ptRotation.set(PI / 4, 0, PI / 2); setData(&dataFrontCM, &CylinderFrontCM); pEqu->AddSubPrimObj(&dataFrontCM); clearData(dataFrontCM); AecEqui::XCylinder CylinderFrontCT; memset(&CylinderFrontCT, 0, sizeof(AecEqui::XCylinder)); CylinderFrontCT.dr = 3 * dDN / 400; CylinderFrontCT.dH = dDN / 90; AcGeVector3d vecFrontCT(dDN * cos(PI / 4) / 9, -38 * dDN / 75 - dDN / 9 + dDN * sin(PI / 4) / 9, dDN / 12 + dDN * cos(PI / 4) / 9); AecEqui::XPrimData dataFrontCT; dataFrontCT.m_eType = AecEqui::kCylinder; dataFrontCT.m_iClr = 256; dataFrontCT.m_bBoolSubtract = false; dataFrontCT.m_vtMove = vecFrontCT; dataFrontCT.m_ptRotation.set(0, PI / 4, 0); setData(&dataFrontCT, &CylinderFrontCT); pEqu->AddSubPrimObj(&dataFrontCT); clearData(dataFrontCT); } void FunmakeZhaBanFa_Rect(AecDbEwEquipment* pEqu , const double& dW // 方管长 , const double& dH // 方管宽 , const double& dFL // 阀门长 , const double& dFlT // 法兰厚 , const double& dFlE // 法兰卷边 ) { AecEqui::XBox boxTop; memset(&boxTop, 0, sizeof(AecEqui::XBox)); boxTop.dL = dW; boxTop.dW = dH / 10; boxTop.dH = 7 * dH / 12; AcGeVector3d vecTop(-17 * dH / 60, 0, 29 * dH / 20); AecEqui::XPrimData dataTop; dataTop.m_eType = AecEqui::kBox; dataTop.m_iClr = 256; dataTop.m_bBoolSubtract = FALSE; dataTop.m_vtMove = vecTop; dataTop.m_ptRotation.set(PI / 2.0, 0, PI / 2.0); setData(&dataTop, &boxTop); AecEqui::XBox boxLeft; memset(&boxLeft, 0, sizeof(AecEqui::XBox)); boxLeft.dL = dH / 10; boxLeft.dW = 7 * dH / 12; boxLeft.dH = 9 * dH / 10; AcGeVector3d vecLeft(dH / 120, dH, dH / 2); AecEqui::XPrimData dataLeft; dataLeft.m_eType = AecEqui::kBox; dataLeft.m_iClr = 256; dataLeft.m_bBoolSubtract = FALSE; dataLeft.m_vtMove = vecLeft; dataLeft.m_ptRotation.set(0, 0, PI / 2.0); setData(&dataLeft, &boxLeft); AcGeVector3d vecRight(dH / 120, -dH, dH / 2); AecEqui::XPrimData dataRight; dataRight.m_eType = AecEqui::kBox; dataRight.m_iClr = 256; dataRight.m_bBoolSubtract = FALSE; dataRight.m_vtMove = vecRight; dataRight.m_ptRotation.set(0, 0, PI * .5); setData(&dataRight, &boxLeft); pEqu->AddSubPrimObj(&dataTop); pEqu->AddSubPrimObj(&dataLeft); pEqu->AddSubPrimObj(&dataRight); clearData(dataTop); clearData(dataLeft); clearData(dataRight); AecEqui::XCylinder CylinderDown; memset(&CylinderDown, 0, sizeof(AecEqui::XCylinder)); CylinderDown.dr = dW / 80; CylinderDown.dH = 7 * dH / 4; AecEqui::XPrimData dataDown; dataDown.m_eType = AecEqui::kCylinder; dataDown.m_iClr = 256; dataDown.m_bBoolSubtract = false; setData(&dataDown, &CylinderDown); pEqu->AddSubPrimObj(&dataDown); clearData(dataDown); AcGePoint3d ptPath(0, 0, 0); AcGeVector3d vtN(0, 0, 1); AcDbCircle* pCir = new AcDbCircle(ptPath, vtN, 3 * dH / 10); AcDbPolyline* pPath = CoreTools::MakePolyline(pCir); DELETE_PTR(pCir); AcGePoint3d ptreg(dH / 4, 0, dH / 60); AcGeVector3d vec(0, 1, 0); pCir = new AcDbCircle(ptreg, vec, dH / 60); AcDbRegion* pReg = CoreTools::createRegion(pCir); DELETE_PTR(pCir); if (!pPath || !pReg) { DELETE_PTR(pPath); DELETE_PTR(pReg); DELETE_PTR(pEqu); return ; } AcGeVector3d vecPt(0, 0, 26 * dH / 15); NewSweep ns(true, pReg, pPath); DELETE_PTR(pPath); DELETE_PTR(pReg); AecEqui::XPrimData data; data.m_eType = AecEqui::kNewSweep; data.m_bBoolSubtract = false; data.m_iClr = 256; data.m_nSize = 0; data.m_vtMove = vecPt; ns.toData(data.m_pData, data.m_nSize); pEqu->AddSubPrimObj(&data); clearData(data); AcGeVector3d vecPt1(-dH / 4, 0, 26 * dH / 15); AecEqui::XCylinder CylinderDown1; memset(&CylinderDown1, 0, sizeof(AecEqui::XCylinder)); CylinderDown1.dr = dH / 60; CylinderDown1.dH = dH / 2; AecEqui::XPrimData dataDown1; dataDown1.m_eType = AecEqui::kCylinder; dataDown1.m_iClr = 256; dataDown1.m_bBoolSubtract = false; dataDown1.m_vtMove = vecPt1; dataDown1.m_ptRotation.set(0, PI / 2, 0); setData(&dataDown1, &CylinderDown1); pEqu->AddSubPrimObj(&dataDown1); clearData(dataDown1); AcGeVector3d vecPt2(0, dH / 4, 26 * dH / 15); AecEqui::XPrimData dataDown2; dataDown2.m_eType = AecEqui::kCylinder; dataDown2.m_iClr = 256; dataDown2.m_bBoolSubtract = false; dataDown2.m_vtMove = vecPt2; dataDown2.m_ptRotation.set(PI / 2, 0, 0); setData(&dataDown2, &CylinderDown1); pEqu->AddSubPrimObj(&dataDown2); clearData(dataDown2); } void FunmakeZhaBanFa_Circle(AecDbEwEquipment* pEqu , const double& dDN //圆管公称 , const double& dFL // 阀门长 , const double& dFlT // 法兰厚 , const double& dFlE // 法兰卷边 ) { AecEqui::XCylinder CylinderDown; memset(&CylinderDown, 0, sizeof(AecEqui::XCylinder)); CylinderDown.dr = dDN / 80; CylinderDown.dH = 7 * dDN / 12; AecEqui::XPrimData dataDown; dataDown.m_eType = AecEqui::kCylinder; dataDown.m_iClr = 256; dataDown.m_bBoolSubtract = false; setData(&dataDown, &CylinderDown); pEqu->AddSubPrimObj(&dataDown); clearData(dataDown); AcGePoint3d ptPath(0, 0, 0); AcGeVector3d vtN(0, 0, 1); AcDbCircle* pCir = new AcDbCircle(ptPath, vtN, dDN / 10); AcDbPolyline* pPath = CoreTools::MakePolyline(pCir); DELETE_PTR(pCir); AcGePoint3d ptreg(dDN / 12, 0, dDN / 180); AcGeVector3d vec(0, 1, 0); pCir = new AcDbCircle(ptreg, vec, dDN / 180); AcDbRegion* pReg = CoreTools::createRegion(pCir); DELETE_PTR(pCir); if (!pPath || !pReg) { DELETE_PTR(pPath); DELETE_PTR(pReg); DELETE_PTR(pEqu); return; } AcGeVector3d vecPt(0, 0, 26 * dDN / 45); NewSweep ns(true, pReg, pPath); DELETE_PTR(pPath); DELETE_PTR(pReg); AecEqui::XPrimData data; data.m_eType = AecEqui::kNewSweep; data.m_bBoolSubtract = false; data.m_iClr = 256; data.m_nSize = 0; data.m_vtMove = vecPt; ns.toData(data.m_pData, data.m_nSize); pEqu->AddSubPrimObj(&data); clearData(data); AcGeVector3d vecPt1(-dDN / 12, 0, 26 * dDN / 45); AecEqui::XCylinder CylinderDown1; memset(&CylinderDown1, 0, sizeof(AecEqui::XCylinder)); CylinderDown1.dr = dDN / 180; CylinderDown1.dH = dDN / 6; AecEqui::XPrimData dataDown1; dataDown1.m_eType = AecEqui::kCylinder; dataDown1.m_iClr = 256; dataDown1.m_bBoolSubtract = false; dataDown1.m_vtMove = vecPt1; dataDown1.m_ptRotation.set(0, PI / 2, 0); setData(&dataDown1, &CylinderDown1); pEqu->AddSubPrimObj(&dataDown1); clearData(dataDown1); AcGeVector3d vecPt2(0, dDN / 12, 26 * dDN / 45); AecEqui::XPrimData dataDown2; dataDown2.m_eType = AecEqui::kCylinder; dataDown2.m_iClr = 256; dataDown2.m_bBoolSubtract = false; dataDown2.m_vtMove = vecPt2; dataDown2.m_ptRotation.set(PI / 2, 0, 0); setData(&dataDown2, &CylinderDown1); pEqu->AddSubPrimObj(&dataDown2); clearData(dataDown2); } void FunmakeDieFa_Rect(AecDbEwEquipment* pEqu , const double& dW // 方管长 , const double& dH // 方管宽 , const double& dFL // 阀门长 , const double& dFlT // 法兰厚 , const double& dFlE // 法兰卷边 ) { AecEqui::XCylinder CylinderDown; memset(&CylinderDown, 0, sizeof(AecEqui::XCylinder)); CylinderDown.dr = dW / 320; CylinderDown.dH = dH; AecEqui::XPrimData dataDown; dataDown.m_eType = AecEqui::kCylinder; dataDown.m_iClr = 256; dataDown.m_bBoolSubtract = false; setData(&dataDown, &CylinderDown); pEqu->AddSubPrimObj(&dataDown); clearData(dataDown); AecEqui::XCylinder CylinderUp; memset(&CylinderUp, 0, sizeof(AecEqui::XCylinder)); CylinderUp.dr = dW / 40; CylinderUp.dH = dH / 4.0; AcGeVector3d Vec(0, dH / 8.0, dH + dW / 40.0); AecEqui::XPrimData dataUp; dataUp.m_eType = AecEqui::kCylinder; dataUp.m_iClr = 256; dataUp.m_bBoolSubtract = false; dataUp.m_ptRotation.set(PI / 2.0, PI / 2.0, 0); dataUp.m_vtMove = Vec; setData(&dataUp, &CylinderUp); pEqu->AddSubPrimObj(&dataUp); clearData(dataUp); AecEqui::XCylinder CylinderUpL; memset(&CylinderUpL, 0, sizeof(AecEqui::XCylinder)); CylinderUpL.dr = dW / 20; CylinderUpL.dH = dH / 4.0; AcGeVector3d VecL(0, 3.0 * dH / 8.0, dH + dW / 40.0); AecEqui::XPrimData dataUpL; dataUpL.m_eType = AecEqui::kCylinder; dataUpL.m_iClr = 256; dataUpL.m_bBoolSubtract = false; dataUpL.m_ptRotation.set(PI / 2.0, PI / 2.0, 0); dataUpL.m_vtMove = VecL; setData(&dataUpL, &CylinderUpL); pEqu->AddSubPrimObj(&dataUpL); clearData(dataUpL); AecEqui::XCylinder CylinderUpR; memset(&CylinderUpR, 0, sizeof(AecEqui::XCylinder)); CylinderUpR.dr = dW / 20; CylinderUpR.dH = dH / 4.0; AcGeVector3d VecR(0, -dH / 8.0, dH + dW / 40.0); AecEqui::XPrimData dataUpR; dataUpR.m_eType = AecEqui::kCylinder; dataUpR.m_iClr = 256; dataUpR.m_bBoolSubtract = false; dataUpR.m_ptRotation.set(PI / 2.0, PI / 2.0, 0); dataUpR.m_vtMove = VecR; setData(&dataUpR, &CylinderUpR); pEqu->AddSubPrimObj(&dataUpR); clearData(dataUpR); } void FunmakeDieFa_Circle(AecDbEwEquipment* pEqu , const double& dDN //圆管公称 , const double& dFL // 阀门长 , const double& dFlT // 法兰厚 , const double& dFlE // 法兰卷边 ) { AecEqui::XCylinder CylinderDown; memset(&CylinderDown, 0, sizeof(AecEqui::XCylinder)); CylinderDown.dr = dDN / 160; CylinderDown.dH = 2 * dDN / 3; AecEqui::XPrimData dataDown; dataDown.m_eType = AecEqui::kCylinder; dataDown.m_iClr = 256; dataDown.m_bBoolSubtract = false; setData(&dataDown, &CylinderDown); pEqu->AddSubPrimObj(&dataDown); clearData(dataDown); AecEqui::XCylinder CylinderUp; memset(&CylinderUp, 0, sizeof(AecEqui::XCylinder)); CylinderUp.dr = dDN / 20; CylinderUp.dH = dDN / 6; AcGeVector3d Vec(0, dDN / 12, 43 * dDN / 60); AecEqui::XPrimData dataUp; dataUp.m_eType = AecEqui::kCylinder; dataUp.m_iClr = 256; dataUp.m_bBoolSubtract = false; dataUp.m_ptRotation.set(PI / 2.0, PI / 2.0, 0); dataUp.m_vtMove = Vec; setData(&dataUp, &CylinderUp); pEqu->AddSubPrimObj(&dataUp); clearData(dataUp); AecEqui::XCylinder CylinderUpL; memset(&CylinderUpL, 0, sizeof(AecEqui::XCylinder)); CylinderUpL.dr = dDN / 10; CylinderUpL.dH = dDN / 6; AcGeVector3d VecL(0, dDN / 4, 43 * dDN / 60); AecEqui::XPrimData dataUpL; dataUpL.m_eType = AecEqui::kCylinder; dataUpL.m_iClr = 256; dataUpL.m_bBoolSubtract = false; dataUpL.m_ptRotation.set(PI / 2.0, PI / 2.0, 0); dataUpL.m_vtMove = VecL; setData(&dataUpL, &CylinderUpL); pEqu->AddSubPrimObj(&dataUpL); clearData(dataUpL); AecEqui::XCylinder CylinderUpR; memset(&CylinderUpR, 0, sizeof(AecEqui::XCylinder)); CylinderUpR.dr = dDN / 10; CylinderUpR.dH = dDN / 6; AcGeVector3d VecR(0, - dDN / 12, 43 * dDN / 60); AecEqui::XPrimData dataUpR; dataUpR.m_eType = AecEqui::kCylinder; dataUpR.m_iClr = 256; dataUpR.m_bBoolSubtract = false; dataUpR.m_ptRotation.set(PI / 2.0, PI / 2.0, 0); dataUpR.m_vtMove = VecR; setData(&dataUpR, &CylinderUpR); pEqu->AddSubPrimObj(&dataUpR); clearData(dataUpR); } AecDbEwEquipment* makeTiaoJieFa(const bool bRect , const double& dDN // 圆管公称 , const double& dW // 方管长 , const double& dH // 方管宽 , const double& dFL // 阀门长 , const double& dFlT // 法兰厚 , const double& dFlE // 法兰卷边 ) { AecDbEwEquipment* pEqu(MKValve::makeBaseEquiment(_T("调节阀"), true)); if (!pEqu) return NULL; if (bRect) { makeValveBody_Rect(pEqu, dW, dH, dFL, dFlT, dFlE); FunmakeZhaBanFa_Rect(pEqu, dW, dH, dFL, dFlT, dFlE); } else { makeValveBody_Circle(pEqu, dDN, dFL, dFlT, dFlE); FunmakeZhaBanFa_Circle(pEqu, dDN, dFL, dFlT, dFlE); } setDrawData(pEqu, 0, bRect, dDN, dW, dFL, dFlE); return pEqu; } AecDbEwEquipment* makeZhiHuiFa(const bool bRect , const double& dDN // 圆管公称 , const double& dW // 方管长 , const double& dH // 方管宽 , const double& dFL // 阀门长 , const double& dFlT // 法兰厚 , const double& dFlE // 法兰卷边 ) { AecDbEwEquipment* pEqu(MKValve::makeBaseEquiment(_T("止回阀"), true)); if (!pEqu) return NULL; if (bRect) { makeValveBody_Rect(pEqu, dW, dH, dFL, dFlT, dFlE); FunmakeFangZhiDingFa_Rect(pEqu, dW, dH, dFL, dFlT, dFlE); } else { makeValveBody_Circle(pEqu, dDN, dFL, dFlT, dFlE); FunmakeFangZhiDingFa_Circle(pEqu, dDN, dFL, dFlT, dFlE); } setDrawData(pEqu, 1, bRect, dDN, dW, dFL, dFlE); return pEqu; } AecDbEwEquipment* makeFangHuoFa(const bool bRect , const double& dDN // 圆管公称 , const double& dW // 方管长 , const double& dH // 方管宽 , const double& dFL // 阀门长 , const double& dFlT // 法兰厚 , const double& dFlE // 法兰卷边 ) { AecDbEwEquipment* pEqu(MKValve::makeBaseEquiment(_T("防火阀"), true)); if (!pEqu) return NULL; if (bRect) { makeValveBody_Rect(pEqu, dW, dH, dFL, dFlT, dFlE); FunmakeFangZhiDingFa_Rect(pEqu, dW, dH, dFL, dFlT, dFlE); } else { makeValveBody_Circle(pEqu, dDN, dFL, dFlT, dFlE); FunmakeFangZhiDingFa_Circle(pEqu, dDN, dFL, dFlT, dFlE); } setDrawData(pEqu, 2, bRect, dDN, dW, dFL, dFlE); return pEqu; } AecDbEwEquipment* makeZhaBanFa(const bool bRect , const double& dDN // 圆管公称 , const double& dW // 方管长 , const double& dH // 方管宽 , const double& dFL // 阀门长 , const double& dFlT // 法兰厚 , const double& dFlE // 法兰卷边 ) { AecDbEwEquipment* pEqu(MKValve::makeBaseEquiment(_T("闸板阀"), true)); if (!pEqu) return NULL; if (bRect) { makeValveBody_Rect(pEqu, dW, dH, dFL, dFlT, dFlE); FunmakeZhaBanFa_Rect(pEqu, dW, dH, dFL, dFlT, dFlE); } else { makeValveBody_Circle(pEqu, dDN, dFL, dFlT, dFlE); FunmakeZhaBanFa_Circle(pEqu, dDN, dFL, dFlT, dFlE); } setDrawData(pEqu, 3, bRect, dDN, dW, dFL, dFlE); return pEqu; } AecDbEwEquipment* makeDieFa(const bool bRect , const double& dDN // 圆管公称 , const double& dW // 方管长 , const double& dH // 方管宽 , const double& dFL // 阀门长 , const double& dFlT // 法兰厚 , const double& dFlE // 法兰卷边 ) { AecDbEwEquipment* pEqu(MKValve::makeBaseEquiment(_T("蝶阀"), true)); if (!pEqu) return NULL; if (bRect) { makeValveBody_Rect(pEqu, dW, dH, dFL, dFlT, dFlE); FunmakeDieFa_Rect(pEqu, dW, dH, dFL, dFlT, dFlE); } else { makeValveBody_Circle(pEqu, dDN, dFL, dFlT, dFlE); FunmakeDieFa_Circle(pEqu, dDN, dFL, dFlT, dFlE); } setDrawData(pEqu, 4, bRect, dDN, dW, dFL, dFlE); return pEqu; } AecDbEwEquipment* makeDingFengLiangFa(const bool bRect , const double& dDN // 圆管公称 , const double& dW // 方管长 , const double& dH // 方管宽 , const double& dFL // 阀门长 , const double& dFlT // 法兰厚 , const double& dFlE // 法兰卷边 ) { AecDbEwEquipment* pEqu(MKValve::makeBaseEquiment(_T("定风量阀"), true)); if (!pEqu) return NULL; if (bRect) { makeValveBody_Rect(pEqu, dW, dH, dFL, dFlT, dFlE); FunmakeFangZhiDingFa_Rect(pEqu, dW, dH, dFL, dFlT, dFlE); } else { makeValveBody_Circle(pEqu, dDN, dFL, dFlT, dFlE); FunmakeFangZhiDingFa_Circle(pEqu, dDN, dFL, dFlT, dFlE); } setDrawData(pEqu, 5, bRect, dDN, dW, dFL, dFlE); return pEqu; } AecDbEwEquipment* makeXiChenZhao(const bool bTRect // 风管形状 , const double& dDN // 圆风管公称 , const double& dL // 方风管长 , const double& dW // 方风管宽 , const bool bBRect // 罩口形状 , const double& dXDN // 罩口公称 , const double& dXL // 罩口长 , const double& dXW // 罩口宽 , const double& _dH // 总高 , const double& dBH // 边高 , const double& dFlT // 法兰厚 , const double& dFlE // 法兰卷边 ) { AecDbEwEquipment* pEqu(MKValve::makeBaseEquiment(_T("吸尘罩"), true)); if (!pEqu) return NULL; AcArray regs; // 总高减掉法兰片的厚度 double dH(_dH - dFlT); // 罩体 { AcDbRegion* pTopReg(NULL), * pSubTopReg(NULL); if (!bTRect) { pTopReg = makeCircleRegion( AcGePoint3d(0, 0, dH) , AcGeVector3d::kZAxis, dDN * .5); pSubTopReg = makeCircleRegion(AcGePoint3d(0, 0, dH - dFlT) , AcGeVector3d::kZAxis , dDN * .5 - dFlT); } else { pTopReg = makeRectRegion(AcGePoint3d(0., 0., dH), dL, dW); pSubTopReg = makeRectRegion(AcGePoint3d(0., 0., dH - dFlT), dL - dFlT, dW - dFlT); } AcDbRegion* pBotReg(NULL), * pSubBotReg(NULL); if (!bBRect) { pBotReg = makeCircleRegion(AcGePoint3d(0, 0, dBH) , AcGeVector3d::kZAxis , dXDN * .5); pSubBotReg = makeCircleRegion(AcGePoint3d(0, 0, dBH - dFlT) , AcGeVector3d::kZAxis , dXDN * .5 - dFlT); } else { pBotReg = makeRectRegion(AcGePoint3d(0., 0., dBH), dXL, dXW); pSubBotReg = makeRectRegion(AcGePoint3d(0., 0., dBH - dFlT), dXL - dFlT, dXW - dFlT); } if (pBotReg && pTopReg) { regs.append(pTopReg); regs.append(pBotReg); } else { DELETE_PTR(pTopReg); DELETE_PTR(pBotReg); return NULL; } AecEqui::XPrimData data; NewLoft nl(true, regs, NULL); data.m_nID = ::GetTickCount(); data.m_eType = AecEqui::kNewLoft; data.m_bBoolSubtract = false; data.m_iClr = 256; nl.toData(data.m_pData, data.m_nSize); pEqu->AddSubPrimObj(&data); clearData(data); deleteContainerOfArx(regs); // 挖空 regs.removeAll(); if (pSubBotReg && pSubTopReg) { regs.append(pSubTopReg); regs.append(pSubBotReg); AecEqui::XPrimData subData; NewLoft nl(false, regs, NULL); subData.m_nID = data.m_nID + 1; subData.m_eType = AecEqui::kNewLoft; subData.m_bBoolSubtract = true; subData.m_iClr = 256; nl.toData(subData.m_pData, subData.m_nSize); pEqu->AddSubPrimObj(&subData); clearData(subData); deleteContainerOfArx(regs); } else { DELETE_PTR(pSubTopReg); DELETE_PTR(pSubBotReg); } } // 罩体下边 { AcDbRegion* pReg(NULL), * pSubReg(NULL); if (bBRect) { pReg = makeRectRegion(AcGePoint3d::kOrigin, dXL, dXW); pSubReg = makeRectRegion(AcGePoint3d::kOrigin, dXL - dFlT, dXW - dFlT); } else { pReg = makeCircleRegion(AcGePoint3d::kOrigin, AcGeVector3d::kZAxis, dXDN * .5); pSubReg = makeCircleRegion(AcGePoint3d::kOrigin, AcGeVector3d::kZAxis, dXDN * .5 - dFlT); } if (pReg && pSubReg) { AecEqui::XPrimData data, subData; NewExtrude box(true, pReg, dBH), subBox(false, pSubReg, dBH); data.m_nID = ::GetTickCount(); data.m_eType = AecEqui::kNewExtrude; data.m_bBoolSubtract = false; data.m_iClr = 256; box.toData(data.m_pData, data.m_nSize); pEqu->AddSubPrimObj(&data); clearData(data); subData.m_nID = data.m_nID + 1; subData.m_eType = AecEqui::kNewExtrude; subData.m_bBoolSubtract = true; subData.m_iClr = 256; subBox.toData(subData.m_pData, subData.m_nSize); pEqu->AddSubPrimObj(&subData); clearData(data); } else { DELETE_PTR(pReg); DELETE_PTR(pSubReg); } } // 管嘴 { if (bTRect) { CoreTools::addNozzForEqu_Rect(pEqu , AcGeVector3d::kZAxis , AcGePoint3d(0., 0., dH) , dL , dW , dFlT , dFlE , dFlT , 0 , false , false); } else { CoreTools::addNozzForEqu_Rect(pEqu , AcGeVector3d::kZAxis , AcGePoint3d(0., .0, dH) , dDN , dDN + dFlE , dFlT , .0 , dFlT , 0 , true , false); } } return pEqu; } AecDbEwEquipment* makeLiXinShiFengJi(const double dL0 // 安装长度 , const double dW0 // 安装宽度 , const double dH0 // 安装高度 , const double dR1 // 叶轮半径 , const double dH1 // 叶轮高度 , const bool bshape // 出风口形状 , const double& dL2 // 方口长度 , const double& dW2 // 方口宽度 , const double& dR3 // 圆口半径 , const double& dH2 // 风口高度 , const double& dL4 // 底座长度 , const double& dW4 // 底座宽度 , const double& dH4 // 底座高度 ) { AecDbEwEquipment* pEqu(MKValve::makeBaseEquiment(_T("FENGJI"), true)); if (!pEqu) return NULL; //风机外廓 AcGePoint3d ptPath(0, 0, 0); AcGeVector3d vtN(0, 1, 0); AcDbCircle* pPath = new AcDbCircle(ptPath, vtN, dR1); AcDbPolyline* pPoly = CoreTools::MakePolyline(pPath); //截面 DELETE_PTR(pPath); AcGePoint3d ptReg(ptPath.x + 5 * dR1 / 8, ptPath.y + dH1 * .5, ptPath.z); AcGePoint3d pt0(ptReg.x - 3 * dR1 / 8, ptReg.y + dH1 * .5, .0) , pt1(ptReg.x + 3 * dR1 / 8, ptReg.y + dH1 * .5, .0) , pt2(ptReg.x + 3 * dR1 / 8, ptReg.y - dH1 * .5, .0) , pt3(ptReg.x - 3 * dR1 / 8, ptReg.y - dH1 * .5, .0); AcDbVoidPtrArray ar; ar.append(new AcDbLine(pt0, pt1)); ar.append(new AcDbLine(pt1, pt2)); ar.append(new AcDbLine(pt2, pt3)); ar.append(new AcDbLine(pt3, pt0)); AcDbRegion* pReg = CoreTools::createRegion(ar); //截面 deleteArrayVoidPtrs< AcDbLine>(ar); if (!pReg) { DELETE_PTR(pPoly); DELETE_PTR(pReg); DELETE_PTR(pEqu); return NULL; } /* NewSweep ns(true, pReg, pPoly); DELETE_PTR(pPoly); DELETE_PTR(pReg); AecEqui::XPrimData data; data.m_eType = AecEqui::kNewSweep; data.m_bBoolSubtract = false; data.m_iClr = 256; data.m_nSize = 0; data.m_vtMove = vecPt; data.m_ptRotation.set(0, PI / 2, 0); ns.toData(data.m_pData, data.m_nSize); pEqu->AddSubPrimObj(&data); clearData(data); */ AcGePoint3d ptOrg(0, 0, 0); // 旋转轴原点 AcGeVector3d vtDir(0, 1, 0); // 旋转轴方向 double dStartAngle = 0; // 旋转起始角 double dSweepAngle = 2 * PI; // 旋转终止角 AcGeVector3d vecPt(0, 0, 3 * dR1 / 20 + dH4 + dW4); NewRevolve Nr(true, pReg, ptOrg, vtDir, dSweepAngle, dStartAngle); DELETE_PTR(pReg); AecEqui::XPrimData dataNr; dataNr.m_eType = AecEqui::kNewRevolve; dataNr.m_bBoolSubtract = false; dataNr.m_iClr = 256; dataNr.m_nSize = 0; dataNr.m_vtMove = vecPt; Nr.toData(dataNr.m_pData, dataNr.m_nSize); pEqu->AddSubPrimObj(&dataNr); clearData(dataNr); // 风口 if (!bshape) { AecEqui::XBox boxTop; memset(&boxTop, 0, sizeof(AecEqui::XBox)); boxTop.dL = dR1 / 2; boxTop.dW = dR1 / 100; boxTop.dH = 6 * dR1 / 5; AcGeVector3d vecTop(3 * dR1 / 4, 0, 3 * dR1 / 20 + dH4 + dW4); AecEqui::XPrimData dataTop; dataTop.m_eType = AecEqui::kBox; dataTop.m_iClr = 256; dataTop.m_bBoolSubtract = FALSE; dataTop.m_vtMove = vecTop; setData(&dataTop, &boxTop); AcGeVector3d vecBottom(3 * dR1 / 4, dH1, 3 * dR1 / 20 + dH4 + dW4); AecEqui::XPrimData dataBottom; dataBottom.m_eType = AecEqui::kBox; dataBottom.m_iClr = 256; dataBottom.m_bBoolSubtract = FALSE; dataBottom.m_vtMove = vecBottom; setData(&dataBottom, &boxTop); AecEqui::XBox boxLeft; memset(&boxLeft, 0, sizeof(AecEqui::XBox)); boxLeft.dL = dR1 / 100; boxLeft.dW = dH1 - dR1 / 100; boxLeft.dH = 6 * dR1 / 5; AcGeVector3d vecLeft(dR1 / 2 + dR1 / 200, dH1 / 2, 3 * dR1 / 20 + dH4 + dW4); AecEqui::XPrimData dataLeft; dataLeft.m_eType = AecEqui::kBox; dataLeft.m_iClr = 256; dataLeft.m_bBoolSubtract = FALSE; dataLeft.m_vtMove = vecLeft; setData(&dataLeft, &boxLeft); AcGeVector3d vecRight(dR1 - dR1 / 200, dH1 / 2, 3 * dR1 / 20 + dH4 + dW4); AecEqui::XPrimData dataRight; dataRight.m_eType = AecEqui::kBox; dataRight.m_iClr = 256; dataRight.m_bBoolSubtract = FALSE; dataRight.m_vtMove = vecRight; setData(&dataRight, &boxLeft); pEqu->AddSubPrimObj(&dataTop); pEqu->AddSubPrimObj(&dataBottom); pEqu->AddSubPrimObj(&dataLeft); pEqu->AddSubPrimObj(&dataRight); clearData(dataTop); clearData(dataBottom); clearData(dataLeft); clearData(dataRight); //管嘴 CoreTools::addNozzForEqu_Rect(pEqu , AcGeVector3d::kZAxis , AcGePoint3d(3 * dR1 / 4, dH1 / 2 + dR1 / 200, 3 * dR1 / 20 + dH4 + dW4 + 6 * dR1 / 5) , dR1 / 2 , dH1 + dR1 / 100 , dR1 / 100 , .0 , dR1 / 100 , 0 , false , false ); } else { AcGePoint3d ptRegC(5 * dR1 / 8, .0, 6 * dR1 / 5); AcGePoint3d pt0C(ptRegC.x - dR1 / 200, .0, ptRegC.z + 3 * dR1 / 5) , pt1C(ptRegC.x + dR1 / 200, .0, ptRegC.z + 3 * dR1 / 5) , pt2C(ptRegC.x + dR1 / 200, .0, ptRegC.z - 3 * dR1 / 5) , pt3C(ptRegC.x - dR1 / 200, .0, ptRegC.z - 3 * dR1 / 5); AcDbVoidPtrArray arC; arC.append(new AcDbLine(pt0C, pt1C)); arC.append(new AcDbLine(pt1C, pt2C)); arC.append(new AcDbLine(pt2C, pt3C)); arC.append(new AcDbLine(pt3C, pt0C)); AcDbRegion* pRegC = CoreTools::createRegion(arC); deleteArrayVoidPtrs< AcDbLine>(arC); if (!pRegC) { DELETE_PTR(pRegC); DELETE_PTR(pEqu); return NULL; } AcGeVector3d vecPtC(3 * dR1 / 4 + 5 * dW4 / 4 + dR1 / 200, 5 * dR1 / 8, 6 * dR1 / 5 - dW4 / 2); /* NewSweep nsC(true, pRegC, pPolyC); DELETE_PTR(pPolyC); DELETE_PTR(pRegC); AecEqui::XPrimData dataC; dataC.m_eType = AecEqui::kNewSweep; dataC.m_bBoolSubtract = false; dataC.m_iClr = 256; dataC.m_nSize = 0; dataC.m_vtMove = vecPtC; nsC.toData(dataC.m_pData, dataC.m_nSize); pEqu->AddSubPrimObj(&dataC); clearData(dataC); */ AcGePoint3d ptOrgC(0, 0, 0); // 旋转轴原点 AcGeVector3d vtDirC(0, 0, 1); // 旋转轴方向 double dStartAngleC = 0; // 旋转起始角 double dSweepAngleC = 2 * PI; // 旋转终止角 NewRevolve NrC(true, pRegC, ptOrgC, vtDirC, dSweepAngleC, dStartAngleC); DELETE_PTR(pRegC); AecEqui::XPrimData dataNrC; dataNrC.m_eType = AecEqui::kNewRevolve; dataNrC.m_bBoolSubtract = false; dataNrC.m_iClr = 256; dataNrC.m_nSize = 0; dataNrC.m_vtMove = vecPtC; NrC.toData(dataNrC.m_pData, dataNrC.m_nSize); pEqu->AddSubPrimObj(&dataNrC); clearData(dataNrC); //管嘴 CoreTools::addNozzForEqu_Rect(pEqu , AcGeVector3d::kZAxis , AcGePoint3d(3 * dR1 / 4 + 5 * dW4 / 4 + dR1 / 200, 5 * dR1 / 8, 3 * dR1 -dW4 / 2 -dR1 / 200) , 5 * dR1 / 4 , dR1 / 200 , dR1 / 200 , .0 , 0 , 0 , true , false); } /* //电机 AcGePoint3d ptPathDj(0, dH1, 0); AcGeVector3d vtNDj(0, 1, 0); AcDbCircle* pPathDj = new AcDbCircle(ptPathDj, vtNDj, dR1); AcDbPolyline* pPolyDj = CoreTools::MakePolyline(pPathDj); //截面 AcGePoint3d ptRegDj(ptPathDj.x + dR1 / 4, ptPathDj.y + dH1 * .5, ptPathDj.z); AcGePoint3d pt00(ptRegDj.x - 3 * dR1 / 256, ptRegDj.y + dH1 * .5, .0) , pt11(ptRegDj.x + 3 * dR1 / 256, ptRegDj.y + dH1 * .5, .0) , pt22(ptRegDj.x + 3 * dR1 / 256, ptRegDj.y - dH1 * .5, .0) , pt33(ptRegDj.x - 3 * dR1 / 256, ptRegDj.y - dH1 * .5, .0); AcDbVoidPtrArray arDj; arDj.append(new AcDbLine(pt00, pt11)); arDj.append(new AcDbLine(pt11, pt22)); arDj.append(new AcDbLine(pt22, pt33)); arDj.append(new AcDbLine(pt33, pt00)); AcDbRegion* pRegDj = CoreTools::createRegion(arDj); deleteArrayVoidPtrs< AcDbLine>(arDj); if (!pRegDj) return NULL; AcGeVector3d vecPtDj(-ptPathDj.x, 0, 0); NewSweep nsDj(true, pRegDj, pPolyDj); AecEqui::XPrimData dataDj; dataDj.m_eType = AecEqui::kNewSweep; dataDj.m_bBoolSubtract = false; dataDj.m_iClr = 256; dataDj.m_nSize = 0; dataDj.m_vtMove = vecPtDj; dataDj.m_ptRotation.set(0, PI / 2, 0); nsDj.toData(dataDj.m_pData, dataDj.m_nSize); pEqu->AddSubPrimObj(&dataDj); clearData(dataDj); DELETE_PTR(pPathDj); */ //中心 AecEqui::XCylinder CylinderIn1; memset(&CylinderIn1, 0, sizeof(AecEqui::XCylinder)); CylinderIn1.dr = dR1 / 8; CylinderIn1.dH = dH1; AcGeVector3d vecIn1(0, 0, 3 * dR1 / 20 + dH4 + dW4); AecEqui::XPrimData dataIn1; dataIn1.m_eType = AecEqui::kCylinder; dataIn1.m_iClr = 256; dataIn1.m_bBoolSubtract = false; dataIn1.m_ptRotation.set(-PI / 2, 0, 0); dataIn1.m_vtMove = vecIn1; setData(&dataIn1, &CylinderIn1); pEqu->AddSubPrimObj(&dataIn1); clearData(dataIn1); //接线箱 AecEqui::XCylinder CylinderIn2; memset(&CylinderIn2, 0, sizeof(AecEqui::XCylinder)); CylinderIn2.dr = dR1 / 4; CylinderIn2.dH = dH1 / 2; AcGeVector3d vecIn2(0, dH1, dR1 / 2 + 3 * dR1 / 20 + dH4 + dW4); AecEqui::XPrimData dataIn2; dataIn2.m_eType = AecEqui::kCylinder; dataIn2.m_iClr = 256; dataIn2.m_bBoolSubtract = false; dataIn2.m_ptRotation.set(-PI / 2, 0, 0); dataIn2.m_vtMove = vecIn2; setData(&dataIn2, &CylinderIn2); pEqu->AddSubPrimObj(&dataIn2); clearData(dataIn2); //电机 AecEqui::XCylinder CylinderIn3; memset(&CylinderIn3, 0, sizeof(AecEqui::XCylinder)); CylinderIn3.dr = dR1 / 4; CylinderIn3.dH = dH1; AcGeVector3d vecIn3(0, dH1, 3 * dR1 / 20 + dH4 + dW4); AecEqui::XPrimData dataIn3; dataIn3.m_eType = AecEqui::kCylinder; dataIn3.m_iClr = 256; dataIn3.m_bBoolSubtract = false; dataIn3.m_ptRotation.set(-PI / 2, 0, 0); dataIn3.m_vtMove = vecIn3; setData(&dataIn3, &CylinderIn3); pEqu->AddSubPrimObj(&dataIn3); clearData(dataIn3); //底座 AecEqui::XBox boxRect; memset(&boxRect, 0, sizeof(AecEqui::XBox)); boxRect.dL = dL4; boxRect.dW = dW4; boxRect.dH = dH4; AcGeVector3d vecRect1(dR1 / 4, dH1 + dW4 / 2, -3 * dR1 / 2 - dH1 / 10 + 3 * dR1 / 20 + dH4 + dW4); AecEqui::XPrimData dataRect1; dataRect1.m_eType = AecEqui::kBox; dataRect1.m_iClr = 256; dataRect1.m_bBoolSubtract = FALSE; dataRect1.m_vtMove = vecRect1; setData(&dataRect1, &boxRect); pEqu->AddSubPrimObj(&dataRect1); clearData(dataRect1); AcGeVector3d vecRect2(-dR1 / 4, 2 * dH1 - dW4 / 2, -3 * dR1 / 2 - dH1 / 10 + 3 * dR1 / 20 + dH4 + dW4); AecEqui::XPrimData dataRect2; dataRect2.m_eType = AecEqui::kBox; dataRect2.m_iClr = 256; dataRect2.m_bBoolSubtract = FALSE; dataRect2.m_vtMove = vecRect2; setData(&dataRect2, &boxRect); pEqu->AddSubPrimObj(&dataRect2); clearData(dataRect2); AcGeVector3d vecRect3(dR1 / 4, 2 * dH1 - dW4 / 2, -3 * dR1 / 2 - dH1 / 10 + 3 * dR1 / 20 + dH4 + dW4); AecEqui::XPrimData dataRect3; dataRect3.m_eType = AecEqui::kBox; dataRect3.m_iClr = 256; dataRect3.m_bBoolSubtract = FALSE; dataRect3.m_vtMove = vecRect3; setData(&dataRect3, &boxRect); pEqu->AddSubPrimObj(&dataRect3); clearData(dataRect3); AcGeVector3d vecRect4(-dR1 / 4, dH1 + dW4 / 2, -3 * dR1 / 2 - dH1 / 10 + 3 * dR1 / 20 + dH4 + dW4); AecEqui::XPrimData dataRect4; dataRect4.m_eType = AecEqui::kBox; dataRect4.m_iClr = 256; dataRect4.m_bBoolSubtract = FALSE; dataRect4.m_vtMove = vecRect4; setData(&dataRect4, &boxRect); pEqu->AddSubPrimObj(&dataRect4); clearData(dataRect4); AecEqui::XBox boxRect1; memset(&boxRect1, 0, sizeof(AecEqui::XBox)); boxRect1.dL = dL4; boxRect1.dW = dW4; boxRect1.dH = 2 * dH1; AcGeVector3d vecRect5(dR1 / 4, 2 * dH1, -3 * dR1 / 2 - dH1 / 10 - dW4 / 2 + 3 * dR1 / 20 + dH4 + dW4); AecEqui::XPrimData dataRect5; dataRect5.m_eType = AecEqui::kBox; dataRect5.m_iClr = 256; dataRect5.m_bBoolSubtract = FALSE; dataRect5.m_vtMove = vecRect5; dataRect5.m_ptRotation.set(PI / 2, 0, 0); setData(&dataRect5, &boxRect1); pEqu->AddSubPrimObj(&dataRect5); clearData(dataRect5); AcGeVector3d vecRect6(-dR1 / 4, 2 * dH1, -3 * dR1 / 2 - dH1 / 10 - dW4 / 2 + 3 * dR1 / 20 + dH4 + dW4); AecEqui::XPrimData dataRect6; dataRect6.m_eType = AecEqui::kBox; dataRect6.m_iClr = 256; dataRect6.m_bBoolSubtract = FALSE; dataRect6.m_vtMove = vecRect6; dataRect6.m_ptRotation.set(PI / 2, 0, 0); setData(&dataRect6, &boxRect1); pEqu->AddSubPrimObj(&dataRect6); clearData(dataRect6); AecEqui::XBox boxRect2; memset(&boxRect1, 0, sizeof(AecEqui::XBox)); boxRect2.dL = dL4; boxRect2.dW = dW4; boxRect2.dH = dR1 / 2 - dW4; AcGeVector3d vecRect7(-dR1 / 4 + dW4 / 2, dW4 / 2, -dR1 / 4 - dH4 + 3 * dW4 / 4 + 3 * dR1 / 20 + dH4 + dW4); AecEqui::XPrimData dataRect7; dataRect7.m_eType = AecEqui::kBox; dataRect7.m_iClr = 256; dataRect7.m_bBoolSubtract = FALSE; dataRect7.m_vtMove = vecRect7; dataRect7.m_ptRotation.set(0, PI / 2, 0); setData(&dataRect7, &boxRect2); pEqu->AddSubPrimObj(&dataRect7); clearData(dataRect7); AcGeVector3d vecRect8(-dR1 / 4 + dW4 / 2, 2 * dH1 - dW4 / 2, -dR1 / 4 - dH4 + 3 * dW4 / 4 + 3 * dR1 / 20 + dH4 + dW4); AecEqui::XPrimData dataRect8; dataRect8.m_eType = AecEqui::kBox; dataRect8.m_iClr = 256; dataRect8.m_bBoolSubtract = FALSE; dataRect8.m_vtMove = vecRect8; dataRect8.m_ptRotation.set(0, PI / 2, 0); setData(&dataRect8, &boxRect2); pEqu->AddSubPrimObj(&dataRect8); clearData(dataRect8); AecEqui::XBox boxBw; memset(&boxBw, 0, sizeof(AecEqui::XBox)); boxBw.dL = 10; boxBw.dW = 4; boxBw.dH = dR1 / 4; for (int i = 0; i < 6; i++) { AcGeVector3d vecBw(0, 0, 3 * dR1 / 20 + dH4 + dW4); AecEqui::XPrimData dataBw; dataBw.m_eType = AecEqui::kBox; dataBw.m_iClr = 256; dataBw.m_bBoolSubtract = false; dataBw.m_vtMove = vecBw; dataBw.m_ptRotation.set(0, i * (2 * PI / 6), 0); setData(&dataBw, &boxBw); pEqu->AddSubPrimObj(&dataBw); clearData(dataBw); } return pEqu; } AecDbEwEquipment* makeZhouLiuShiFengJi(const double& dL0 // 安装长度 , const double& dW0 // 安装宽度 , const double& dH0 // 安装高度 , const double& dR1 // 风口半径 , const double& dH1 // 风机高度 , const double& dT1 // 风口厚度 , const double& dfe // 法兰卷边 , const double& dW2 // 风叶长度 , const double& dH2 // 风叶高度 , const double& dL30 // 梯形底座上底长度 , const double& dL31 // 梯形底座下底宽度 , const double& dH3 // 梯形底座高度 ) { AecDbEwEquipment* pEqu(MKValve::makeBaseEquiment(_T("FENGJI"), true)); if (!pEqu) return NULL; // 风机机壳 AcGePoint3d ptPathJK(AcGePoint3d::kOrigin); AcGeVector3d vtNJK(0, 1, 0); AcDbCircle* pCirJK = new AcDbCircle(ptPathJK, vtNJK, dR1 - dT1 * .5); AcDbPolyline* pPolyJK = CoreTools::MakePolyline(pCirJK); DELETE_PTR(pCirJK); AcGePoint3d ptOrgJK(-(dR1 - dT1 * .5), 0, 0); AcDbRegion* pRegJK = makeRectRegion(ptOrgJK, dT1, dH1); if (!pPolyJK || !pRegJK) { DELETE_PTR(pPolyJK); DELETE_PTR(pRegJK); DELETE_PTR(pEqu); return NULL; } NewSweep sweepJK(true, pRegJK, pPolyJK); DELETE_PTR(pPolyJK); DELETE_PTR(pRegJK); AecEqui::XPrimData dataJK; dataJK.m_eType = AecEqui::kNewSweep; dataJK.m_bBoolSubtract = false; dataJK.m_iClr = 50; sweepJK.toData(dataJK.m_pData, dataJK.m_nSize); pEqu->AddSubPrimObj(&dataJK); clearData(dataJK); // 风叶 AecEqui::XBox boxFY; memset(&boxFY, 0, sizeof(AecEqui::XBox)); boxFY.dL = dR1 * .75; boxFY.dW = dW2; boxFY.dH = dH2; AcGePoint3d ptFYS(0, 0, 0); AcGePoint3d ptFYE(0, dH1 * -.25, 0); AcGeVector3d vecFY; for (int i = 0; i < 6; i++) { ptFYE.x = ptFYS.x + dR1 * .25 * cos(i * ((2 * PI) / 6)); ptFYE.z = ptFYS.z + dR1 * .25 * sin(i * ((2 * PI) / 6)); vecFY = ptFYE - ptFYS; AecEqui::XPrimData dataFY; dataFY.m_eType = AecEqui::kBox; dataFY.m_iClr = 100; dataFY.m_bBoolSubtract = false; dataFY.m_vtMove = vecFY; dataFY.m_ptRotation.set(PI * .3, i * -((2 * PI) / 6), 0); setData(&dataFY, &boxFY); pEqu->AddSubPrimObj(&dataFY); clearData(dataFY); } // 电机 AecEqui::XCylinder CylinderDJ; memset(&CylinderDJ, 0, sizeof(AecEqui::XCylinder)); CylinderDJ.dr = dR1 * .25; CylinderDJ.dH = dH1 * .75 + dW2 * .5; AcGeVector3d vecDJ(0, dH1 * .5, 0); AecEqui::XPrimData dataDJ; dataDJ.m_eType = AecEqui::kCylinder; dataDJ.m_iClr = 150; dataDJ.m_bBoolSubtract = false; dataDJ.m_vtMove = vecDJ; dataDJ.m_ptRotation.set(PI * .5, 0, 0); setData(&dataDJ, &CylinderDJ); pEqu->AddSubPrimObj(&dataDJ); clearData(dataDJ); // 管嘴 CoreTools::addNozzForEqu_Rect(pEqu , AcGeVector3d::kYAxis , AcGePoint3d(0., dH1 * .5, 0.) , dR1 * .5 , dR1 * .5 + dfe , dT1 , .0 , dT1 , 0 , true , false); // 梯形底座 AcGePoint3d pt0(dL30 * -.5, .0, dH3) , pt1(dL30 * .5, .0, dH3) , pt2(dL31 * .5, .0, .0) , pt3(dL31 * -.5, .0, .0); AcDbVoidPtrArray ar; ar.append(new AcDbLine(pt0, pt1)); ar.append(new AcDbLine(pt1, pt2)); ar.append(new AcDbLine(pt2, pt3)); ar.append(new AcDbLine(pt3, pt0)); AcDbRegion* pRegDZ = CoreTools::createRegion(ar); deleteArrayVoidPtrs< AcDbLine>(ar); if (!pRegDZ) { DELETE_PTR(pEqu); return NULL; } NewExtrude extrudeDZ(true, pRegDZ, dH3 * .5); DELETE_PTR(pRegDZ); AcGeVector3d vecDZFront(0, dH1 * -.5, -(dR1 + dH3 * .5)); AecEqui::XPrimData dataDZFront; dataDZFront.m_eType = AecEqui::kNewExtrude; dataDZFront.m_bBoolSubtract = false; dataDZFront.m_iClr = 200; dataDZFront.m_vtMove = vecDZFront; extrudeDZ.toData(dataDZFront.m_pData, dataDZFront.m_nSize); pEqu->AddSubPrimObj(&dataDZFront); clearData(dataDZFront); AcGeVector3d vecDZBack(0, (dH1 - dH3) * .5, -(dR1 + dH3 * .5)); AecEqui::XPrimData dataDZBack; dataDZBack.m_eType = AecEqui::kNewExtrude; dataDZBack.m_bBoolSubtract = false; dataDZBack.m_iClr = 200; dataDZBack.m_vtMove = vecDZBack; extrudeDZ.toData(dataDZBack.m_pData, dataDZBack.m_nSize); pEqu->AddSubPrimObj(&dataDZBack); clearData(dataDZBack); // 接线箱 AecEqui::XBox boxJXX; memset(&boxJXX, 0, sizeof(AecEqui::XBox)); boxJXX.dL = dH3 * .5; boxJXX.dW = dH3 * .5; boxJXX.dH = dH3 * .5; AcGeVector3d vecJXX(dR1 + dH3 * .25, 0, dH3 * -.25); AecEqui::XPrimData dataJXX; dataJXX.m_eType = AecEqui::kBox; dataJXX.m_iClr = 25; dataJXX.m_bBoolSubtract = FALSE; dataJXX.m_vtMove = vecJXX; setData(&dataJXX, &boxJXX); pEqu->AddSubPrimObj(&dataJXX); clearData(dataJXX); // 法兰卷边flannels AcGePoint3d ptPathFE(0, 0, 0); AcGeVector3d vtNFE(0, 1, 0); AcDbCircle* pCirFE = new AcDbCircle(ptPathFE, vtNFE, dR1 + dfe * .5); AcDbPolyline* pPolyFE = CoreTools::MakePolyline(pCirFE); DELETE_PTR(pCirFE); AcGePoint3d ptOrgFE(-(dR1 + dfe * .5), 0, 0); AcDbRegion* pRegFE = makeRectRegion(ptOrgFE, dfe, dfe * .25); if (!pPolyFE || !pRegFE) { DELETE_PTR(pPolyFE); DELETE_PTR(pRegFE); DELETE_PTR(pEqu); return NULL; } NewSweep sweepJuanBian(true, pRegFE, pPolyFE); DELETE_PTR(pPolyFE); DELETE_PTR(pRegFE); AcGeVector3d vecFEFront(0, dH1 * -.5 + dT1 * .5, 0); AecEqui::XPrimData dataFEFront; dataFEFront.m_eType = AecEqui::kNewSweep; dataFEFront.m_bBoolSubtract = false; dataFEFront.m_iClr = 125; dataFEFront.m_vtMove = vecFEFront; sweepJuanBian.toData(dataFEFront.m_pData, dataFEFront.m_nSize); pEqu->AddSubPrimObj(&dataFEFront); clearData(dataFEFront); AcGeVector3d vecFEBack(0, dH1 * .5 - dT1 * .5, 0); AecEqui::XPrimData dataFEBack; dataFEBack.m_eType = AecEqui::kNewSweep; dataFEBack.m_bBoolSubtract = false; dataFEBack.m_iClr = 125; dataFEBack.m_vtMove = vecFEBack; sweepJuanBian.toData(dataFEBack.m_pData, dataFEBack.m_nSize); pEqu->AddSubPrimObj(&dataFEBack); clearData(dataFEBack); return pEqu; } AecDbEwEquipment* makeHunLiuShiFengJi(const double& dL0 // 安装长度 , const double& dW0 // 安装宽度 , const double& dH0 // 安装高度 , const double& dR1 // 风口半径 , const double& dH1 // 风机高度 , const double& dT1 // 风口厚度 , const double& dfe // 法兰卷边 , const double& dW2 // 风叶长度 , const double& dH2 // 风叶高度 , const double& dL30 // 梯形底座上底长度 , const double& dL31 // 梯形底座下底宽度 , const double& dH3 // 梯形底座高度 ) { AcGeVector3d X(AcGeVector3d::kXAxis), Y(AcGeVector3d::kYAxis), Z(AcGeVector3d::kZAxis); AcGePoint3d ptO(AcGePoint3d::kOrigin); AecDbEwEquipment* pEqu(MKValve::makeBaseEquiment(_T("FENGJI"), true)); if (!pEqu) return NULL; // 风机机壳 AcDbCircle* pCirJK = new AcDbCircle(ptO, Y, dR1 - dT1 * .5); AcDbPolyline* pPolyJK = CoreTools::MakePolyline(pCirJK); DELETE_PTR(pCirJK); AcGePoint3d ptOrgJK(ptO + X * (dT1 * .5 - dR1)); AcDbRegion* pRegJK = makeRectRegion(ptOrgJK, dT1, dH1); if (!pPolyJK || !pRegJK) { DELETE_PTR(pPolyJK); DELETE_PTR(pRegJK); DELETE_PTR(pEqu); return NULL; } NewSweep sweepJK(true, pRegJK, pPolyJK); DELETE_PTR(pPolyJK); DELETE_PTR(pRegJK); AecEqui::XPrimData dataJK; dataJK.m_eType = AecEqui::kNewSweep; dataJK.m_bBoolSubtract = false; dataJK.m_iClr = 50; sweepJK.toData(dataJK.m_pData, dataJK.m_nSize); pEqu->AddSubPrimObj(&dataJK); clearData(dataJK); // 风叶 AecEqui::XBox boxFY; memset(&boxFY, 0, sizeof(AecEqui::XBox)); boxFY.dL = dR1 * .75; boxFY.dW = dW2; boxFY.dH = dH2; AcGePoint3d ptFYE(ptO + Y * dH1 * -.25); AcGeVector3d vecFY; for (int i = 0; i < 6; i++) { ptFYE.x = ptO.x + dR1 * .25 * cos(i * ((2 * PI) / 6)); ptFYE.z = ptO.z + dR1 * .25 * sin(i * ((2 * PI) / 6)); vecFY = ptFYE - ptO; AecEqui::XPrimData dataFY; dataFY.m_eType = AecEqui::kBox; dataFY.m_iClr = 100; dataFY.m_bBoolSubtract = false; dataFY.m_vtMove = vecFY; dataFY.m_ptRotation.set(PI * .3, i * -((2 * PI) / 6), 0); setData(&dataFY, &boxFY); pEqu->AddSubPrimObj(&dataFY); clearData(dataFY); } // 电机 AecEqui::XCylinder CylinderDJ; memset(&CylinderDJ, 0, sizeof(AecEqui::XCylinder)); CylinderDJ.dr = dR1 * .25; CylinderDJ.dH = dH1 * .75 + dW2 * .5; AcGeVector3d vecDJ(Y * dH1 * .5); AecEqui::XPrimData dataDJ; dataDJ.m_eType = AecEqui::kCylinder; dataDJ.m_iClr = 150; dataDJ.m_bBoolSubtract = false; dataDJ.m_vtMove = vecDJ; dataDJ.m_ptRotation.set(PI * .5, 0, 0); setData(&dataDJ, &CylinderDJ); pEqu->AddSubPrimObj(&dataDJ); clearData(dataDJ); // 管嘴 CoreTools::addNozzForEqu_Rect(pEqu , AcGeVector3d::kYAxis , AcGePoint3d(ptO + Y * dH1 * .5) , dR1 * .5 , dR1 * .5 + dfe , dT1 , .0 , dT1 , 0 , true , false); // 梯形底座 AcGePoint3d pt1(ptO.x + dL30 * -.5, ptO.y, ptO.z + dH3) , pt2(ptO.x + dL30 * .5, ptO.y, ptO.z + dH3) , pt3(ptO + X * dL31 * .5) , pt4(ptO + X * dL31 * -.5); AcDbVoidPtrArray ar; ar.append(new AcDbLine(pt1, pt2)); ar.append(new AcDbLine(pt2, pt3)); ar.append(new AcDbLine(pt3, pt4)); ar.append(new AcDbLine(pt4, pt1)); AcDbRegion* pRegDZ = CoreTools::createRegion(ar); deleteArrayVoidPtrs< AcDbLine>(ar); if (!pRegDZ) { DELETE_PTR(pEqu); return NULL; } NewExtrude extrudeDZ(true, pRegDZ, dH3 * .5); DELETE_PTR(pRegDZ); AcGeVector3d vecDZFront(ptO.x, ptO.y + dH1 * -.5, ptO.z - (dR1 + dH3 * .5)); AecEqui::XPrimData dataDZFront; dataDZFront.m_eType = AecEqui::kNewExtrude; dataDZFront.m_bBoolSubtract = false; dataDZFront.m_iClr = 200; dataDZFront.m_vtMove = vecDZFront; extrudeDZ.toData(dataDZFront.m_pData, dataDZFront.m_nSize); pEqu->AddSubPrimObj(&dataDZFront); clearData(dataDZFront); AcGeVector3d vecDZBack(ptO.x, ptO.y + (dH1 - dH3) * .5, ptO.z - (dR1 + dH3 * .5)); AecEqui::XPrimData dataDZBack; dataDZBack.m_eType = AecEqui::kNewExtrude; dataDZBack.m_bBoolSubtract = false; dataDZBack.m_iClr = 200; dataDZBack.m_vtMove = vecDZBack; extrudeDZ.toData(dataDZBack.m_pData, dataDZBack.m_nSize); pEqu->AddSubPrimObj(&dataDZBack); clearData(dataDZBack); // 接线箱 AecEqui::XBox boxJXX; memset(&boxJXX, 0, sizeof(AecEqui::XBox)); boxJXX.dL = dH3 * .5; boxJXX.dW = dH3 * .5; boxJXX.dH = dH3 * .5; AcGeVector3d vecJXX(ptO.x + dR1 + dH3 * .25, ptO.y, ptO.z + dH3 * -.25); AecEqui::XPrimData dataJXX; dataJXX.m_eType = AecEqui::kBox; dataJXX.m_iClr = 25; dataJXX.m_bBoolSubtract = FALSE; dataJXX.m_vtMove = vecJXX; setData(&dataJXX, &boxJXX); pEqu->AddSubPrimObj(&dataJXX); clearData(dataJXX); // 法兰卷边flannels AcDbCircle* pCirFE = new AcDbCircle(ptO, Y, dR1 + dfe * .5); AcDbPolyline* pPolyFE = CoreTools::MakePolyline(pCirFE); DELETE_PTR(pCirFE); AcGePoint3d ptOrgFE(ptO - X * (dR1 + dfe * .5)); AcDbRegion* pRegFE = makeRectRegion(ptOrgFE, dfe, dfe * .25); if (!pPolyFE || !pRegFE) { DELETE_PTR(pPolyFE); DELETE_PTR(pRegFE); DELETE_PTR(pEqu); return NULL; } NewSweep sweepJuanBian(true, pRegFE, pPolyFE); DELETE_PTR(pPolyFE); DELETE_PTR(pRegFE); AcGeVector3d vecFEFront(Y * (dH1 * -.5 + dT1 * .5)); AecEqui::XPrimData dataFEFront; dataFEFront.m_eType = AecEqui::kNewSweep; dataFEFront.m_bBoolSubtract = false; dataFEFront.m_iClr = 125; dataFEFront.m_vtMove = vecFEFront; sweepJuanBian.toData(dataFEFront.m_pData, dataFEFront.m_nSize); pEqu->AddSubPrimObj(&dataFEFront); clearData(dataFEFront); AcGeVector3d vecFEBack(Y * (dH1 * .5 - dT1 * .5)); AecEqui::XPrimData dataFEBack; dataFEBack.m_eType = AecEqui::kNewSweep; dataFEBack.m_bBoolSubtract = false; dataFEBack.m_iClr = 125; dataFEBack.m_vtMove = vecFEBack; sweepJuanBian.toData(dataFEBack.m_pData, dataFEBack.m_nSize); pEqu->AddSubPrimObj(&dataFEBack); clearData(dataFEBack); return pEqu; } AecDbEwEquipment* makeWuDingFengJi(const double& dL0 // 安装长度 , const double& dW0 // 安装宽度 , const double& dH0 // 安装高度 , const double& dL1 // 底座长度 , const double& dW1 // 底座宽度 , const double& dH1 // 底座高度 , const double& dR2 // 风筒半径 , const double& dH2 // 风筒高度 , const double& dR3 // 风帽半径 , const double& dH3 // 风帽高度 ) { AcGeVector3d X(AcGeVector3d::kXAxis), Y(AcGeVector3d::kYAxis), Z(AcGeVector3d::kZAxis); AcGePoint3d ptO(AcGePoint3d::kOrigin); AecDbEwEquipment* pEqu(MKValve::makeBaseEquiment(_T("FENGJI"), true)); if (!pEqu) return NULL; // 底座 AecEqui::XBox boxDZ; memset(&boxDZ, 0, sizeof(AecEqui::XBox)); boxDZ.dL = dL1; boxDZ.dW = dW1; boxDZ.dH = dH1; AecEqui::XPrimData dataDZ; dataDZ.m_eType = AecEqui::kBox; dataDZ.m_iClr = 50; dataDZ.m_bBoolSubtract = false; setData(&dataDZ, &boxDZ); pEqu->AddSubPrimObj(&dataDZ); clearData(dataDZ); // 风筒 AecEqui::XCylinder CylinderFT; memset(&CylinderFT, 0, sizeof(AecEqui::XCylinder)); CylinderFT.dr = dR2; CylinderFT.dH = dH2; AcGeVector3d vecFT(Z * dH1); AecEqui::XPrimData dataFT; dataFT.m_eType = AecEqui::kCylinder; dataFT.m_iClr = 100; dataFT.m_bBoolSubtract = false; dataFT.m_vtMove = vecFT; setData(&dataFT, &CylinderFT); pEqu->AddSubPrimObj(&dataFT); clearData(dataFT); // 风帽 AcGePoint3d pt(AcGePoint3d::kOrigin); AcGePoint3d pt1(ptO + X * dR3); AcGePoint3d pt2(ptO + Z * dH3); AcGeVector3d majorAxis(X * dR3); double radiusRatio(dH3 / dR3); double startAngle(PI * 1.5); double endAngle(PI * 2); AcDbEllipse* pEllipse = new AcDbEllipse(pt, Y, majorAxis, radiusRatio, startAngle, endAngle); AcDbLine* pline1 = new AcDbLine(pt, pt1); AcDbLine* pline2 = new AcDbLine(pt, pt2); AcDbVoidPtrArray ar; ar.append(pEllipse); ar.append(pline1); ar.append(pline2); AcDbRegion* pReg = CoreTools::createRegion(ar); deleteArrayVoidPtrs< AcDbEntity>(ar); if (!pReg) { DELETE_PTR(pEqu); return NULL; } AcGeVector3d vecFM(Z * (dH1 + dH2)); NewRevolve revolveFM(true, pReg, pt, AcGeVector3d::kZAxis, PI * 2, 0); DELETE_PTR(pReg); AecEqui::XPrimData dataFM; dataFM.m_eType = AecEqui::kNewRevolve; dataFM.m_bBoolSubtract = false; dataFM.m_iClr = 200; dataFM.m_vtMove = vecFM; revolveFM.toData(dataFM.m_pData, dataFM.m_nSize); pEqu->AddSubPrimObj(&dataFM); clearData(dataFM); return pEqu; } AecDbEwEquipment* makeFENGKOUCZ(const bool& bShape // 风口形状 , const double& dDN // 圆风口公称 , const double& dL // 方风口长 , const double& dW // 方风口宽 , const bool& bType // 风口类型 , const double& dT // 风口厚度T , const double& dW1 // 风口边框宽W1 , const double& dBYNUM // 百叶条数BYNUM , const double& dDist // 风叶间距 ) { #ifdef _DEBUG acutPrintf(_T("\n makeSNFKCZ!")); #endif AcGeVector3d X(AcGeVector3d::kXAxis), Y(AcGeVector3d::kYAxis), Z(AcGeVector3d::kZAxis); AcGePoint3d ptO(AcGePoint3d::kOrigin); Adesk::Int32 itemID(0); AecDbEwEquipment* pEqu(MKValve::makeBaseEquiment(_T("SHINEIFENGKOU"), true)); if (!pEqu) return NULL; if (bType) { // 百叶 if (bShape) { // 方 AcGeMatrix3d mat; AecEqui::XBox boxTop; memset(&boxTop, 0, sizeof(AecEqui::XBox)); boxTop.dL = dL; boxTop.dW = dW1; boxTop.dH = dT; AecEqui::XBox boxBw; memset(&boxBw, 0, sizeof(AecEqui::XBox)); boxBw.dL = 1; boxBw.dW = dW - 2 * dW1; boxBw.dH = 10; AecEqui::XBox boxLeft; memset(&boxLeft, 0, sizeof(AecEqui::XBox)); boxLeft.dL = dW1; boxLeft.dW = dW - 2 * dW1; boxLeft.dH = dT; AcGePoint3d pt(ptO - Z * dT); AcGePoint3d ptTop(pt + Y * (dW * .5 - dW1 * .5)); AcGeVector3d vecTop(ptTop - ptO); AecEqui::XPrimData dataTop; dataTop.m_eType = AecEqui::kBox; dataTop.m_iClr = 50; dataTop.m_bBoolSubtract = FALSE; dataTop.m_vtMove = vecTop; setData(&dataTop, &boxTop); AcGeVector3d vtDir(AcGeVector3d::kXAxis); AcGeVector3d vt = vtDir.crossProduct(Y); if (vt == AcGeVector3d::kIdentity) vt = X; double a = Y.angleTo(vtDir, vt); mat.setToIdentity(); mat.setToRotation(a, vt); pEqu->TransformBy(mat); AcGePoint3d ptBottom(pt - Y * (dW * .5 - dW1 * .5)); AcGeVector3d vecBottom(ptBottom - ptO); AecEqui::XPrimData dataBottom; dataBottom.m_eType = AecEqui::kBox; dataBottom.m_iClr = 100; dataBottom.m_bBoolSubtract = FALSE; dataBottom.m_vtMove = vecBottom; setData(&dataBottom, &boxTop); for (int i = 0; i < dBYNUM; i++) { AcGePoint3d ptBw(pt + X * (dL * -.5 + dW1 + i * dL * 0.08)); AcGeVector3d vecBw(ptBw - ptO); AecEqui::XPrimData dataBw; dataBw.m_eType = AecEqui::kBox; dataBw.m_iClr = 251; dataBw.m_bBoolSubtract = FALSE; dataBw.m_vtMove = vecBw; dataBw.m_ptRotation.set(0, PI / 3.5, 0); setData(&dataBw, &boxBw); pEqu->AddSubPrimObj(&dataBw); clearData(dataBw); } AcGePoint3d ptLeft(pt - X * (dL * .5 - dW1 * .5)); AcGeVector3d vecLeft(ptLeft - ptO); AecEqui::XPrimData dataLeft; dataLeft.m_eType = AecEqui::kBox; dataLeft.m_iClr = 150; dataLeft.m_bBoolSubtract = FALSE; dataLeft.m_vtMove = vecLeft; setData(&dataLeft, &boxLeft); AcGePoint3d ptRight(pt + X * (dL * .5 - dW1 * .5)); AcGeVector3d vecRight(ptRight - ptO); AecEqui::XPrimData dataRight; dataRight.m_eType = AecEqui::kBox; dataRight.m_iClr = 200; dataRight.m_bBoolSubtract = FALSE; dataRight.m_vtMove = vecRight; setData(&dataRight, &boxLeft); pEqu->AddSubPrimObj(&dataLeft); pEqu->AddSubPrimObj(&dataRight); pEqu->AddSubPrimObj(&dataTop); pEqu->AddSubPrimObj(&dataBottom); clearData(dataLeft); clearData(dataRight); clearData(dataTop); clearData(dataBottom); } else { // 圆 AcGePoint3d ptPath(0, 0, 0); AcGeVector3d vtN(0, 0, 1); AcDbCircle* pPath = new AcDbCircle(ptPath, vtN, dDN * .5); AcDbPolyline* pPoly = CoreTools::MakePolyline(pPath); DELETE_PTR(pPath); AcGePoint3d ptReg(ptPath.x + (dDN * .5 - dW1 * .5), ptPath.y, ptPath.z + dT * .5); AcGePoint3d pt0(ptReg.x - dW1 * .5, .0, ptReg.z + dT * .5) , pt1(ptReg.x + dW1 * .5, .0, ptReg.z + dT * .5) , pt2(ptReg.x + dW1 * .5, .0, ptReg.z - dT * .5) , pt3(ptReg.x - dW1 * .5, .0, ptReg.z - dT * .5); AcDbVoidPtrArray ar; ar.append(new AcDbLine(pt0, pt1)); ar.append(new AcDbLine(pt1, pt2)); ar.append(new AcDbLine(pt2, pt3)); ar.append(new AcDbLine(pt3, pt0)); AcDbRegion* pReg = CoreTools::createRegion(ar); deleteArrayVoidPtrs< AcDbLine>(ar); if (!pReg) { DELETE_PTR(pPoly); DELETE_PTR(pEqu); return NULL; } AcGeVector3d vecPt(-ptPath.x, 0, -dT); NewSweep ns(true, pReg, pPoly); DELETE_PTR(pReg); DELETE_PTR(pPoly); AecEqui::XPrimData data; data.m_eType = AecEqui::kNewSweep; data.m_bBoolSubtract = false; data.m_iClr = 256; data.m_nSize = 0; data.m_vtMove = vecPt; ns.toData(data.m_pData, data.m_nSize); pEqu->AddSubPrimObj(&data); clearData(data); AecEqui::XBox boxBw; memset(&boxBw, 0, sizeof(AecEqui::XBox)); boxBw.dL = dDN - 2 * dW1; boxBw.dW = 2; boxBw.dH = dT; AcGeVector3d vecBw(0, 0, -dT); for (int i = 0; i < dBYNUM; i++) { AecEqui::XPrimData dataBw; dataBw.m_eType = AecEqui::kBox; dataBw.m_iClr = 256; dataBw.m_bBoolSubtract = false; dataBw.m_vtMove = vecBw; dataBw.m_ptRotation.set(0, 0, i * ((2 * PI) / 10)); setData(&dataBw, &boxBw); pEqu->AddSubPrimObj(&dataBw); clearData(dataBw); } AecEqui::XCylinder CylinderIn; memset(&CylinderIn, 0, sizeof(AecEqui::XCylinder)); CylinderIn.dr = 7.5; CylinderIn.dH = dT; AcGeVector3d vecIn(0, 0, -dT); AecEqui::XPrimData dataIn; dataIn.m_eType = AecEqui::kCylinder; dataIn.m_iClr = 256; dataIn.m_bBoolSubtract = false; dataIn.m_vtMove = vecIn; setData(&dataIn, &CylinderIn); pEqu->AddSubPrimObj(&dataIn); clearData(dataIn); } } else { // 散流 if (bShape) { // 方 int nCount = (int)(dW / dDist); AcDbPolyline* pPoly(NULL); AcDbRegion* pReg(NULL); AcGePoint3d pt; for (int i = 1; i <= nCount; ++i) { pt = ptO + X * dDist * .5 * i; pt += Y * dDist * .5 * i; pReg = makeRectRegion(pt, dW1 * .1, dT, X, Z); if (!pReg) { return NULL; } pPoly = makeRectPoly(ptO, dDist * i, dDist * i, X, Y); if (!pPoly) { return NULL; } NewSweep ns(true, pReg, pPoly); AecEqui::XPrimData data; data.m_eType = AecEqui::kNewSweep; data.m_bBoolSubtract = false; data.m_iClr = 256; data.m_nSize = 0; data.m_vtMove = Z * dT * -.5; ns.toData(data.m_pData, data.m_nSize); pEqu->AddSubPrimObj(&data); clearData(data); } } else { // 圆 int nCount = (int)(dDN / dDist); AcDbPolyline* pPoly(NULL); AcDbRegion* pReg(NULL); AcGePoint3d pt; AcDbCircle* pCir(NULL); for (int i = 1; i <= nCount; ++i) { pt = ptO + X * dDist * .5 * i; pReg = makeRectRegion(pt, dW1 * .1, dT, X, Z); if (!pReg) { return NULL; } pCir = new AcDbCircle(ptO, Z, dDist * .5 * i); if (!pCir) { return NULL; } pPoly = CoreTools::MakePolyline(pCir); if (!pPoly) { return NULL; } NewSweep ns(true, pReg, pPoly); AecEqui::XPrimData data; data.m_eType = AecEqui::kNewSweep; data.m_bBoolSubtract = false; data.m_iClr = 256; data.m_nSize = 0; data.m_vtMove = Z * dT * -.5; ns.toData(data.m_pData, data.m_nSize); pEqu->AddSubPrimObj(&data); clearData(data); } } } return pEqu; } AecDbEwEquipment* makeFENGKOUSP(const bool& bShape // 风口形状 , const double& dDN // 圆风口公称 , const double& dL // 方风口长 , const double& dW // 方风口宽 , const bool& bType // 风口类型 , const double& dT // 风口厚度T , const double& dW1 // 风口边框宽W1 , const double& dBYNUM // 百叶条数BYNUM , const double& dDist // 风叶间距 ) { #ifdef _DEBUG acutPrintf(_T("\n makeSNFKSP!")); #endif // _DEBUG AcGeVector3d X(AcGeVector3d::kXAxis), Y(AcGeVector3d::kYAxis), Z(AcGeVector3d::kZAxis); AcGePoint3d ptO(AcGePoint3d::kOrigin); Adesk::Int32 itemID(0); AecDbEwEquipment* pEqu(MKValve::makeBaseEquiment(_T("SHINEIFENGKOU"), true)); if (!pEqu) return NULL; if (bType) { if (bShape) { AcGeMatrix3d mat; AecEqui::XBox boxTop; memset(&boxTop, 0, sizeof(AecEqui::XBox)); boxTop.dL = dT; boxTop.dW = dW1; boxTop.dH = dL; AecEqui::XBox boxBw; memset(&boxBw, 0, sizeof(AecEqui::XBox)); boxBw.dL = 10; boxBw.dW = dW - 2 * dW1; boxBw.dH = 1; AecEqui::XBox boxLeft; memset(&boxLeft, 0, sizeof(AecEqui::XBox)); boxLeft.dL = dW1; boxLeft.dW = dW - 2 * dW1; boxLeft.dH = dT; AcGeVector3d vecTop(-dT / 2, dW * .5 - dW1 * .5, -dL / 2); AecEqui::XPrimData dataTop; dataTop.m_eType = AecEqui::kBox; dataTop.m_iClr = 50; dataTop.m_bBoolSubtract = FALSE; dataTop.m_vtMove = vecTop; setData(&dataTop, &boxTop); AcGeVector3d vecBottom(-dT / 2, -(dW * .5 - dW1 * .5), -dL / 2); AecEqui::XPrimData dataBottom; dataBottom.m_eType = AecEqui::kBox; dataBottom.m_iClr = 100; dataBottom.m_bBoolSubtract = FALSE; dataBottom.m_vtMove = vecBottom; setData(&dataBottom, &boxTop); double dWNDistance = (dL - 2 * dW1) / 10; for (int i = 1; i <= dBYNUM; i++) { AcGeVector3d vecBw(-dT / 2, 0, i * dWNDistance + dT / 2 - dL / 2); AecEqui::XPrimData dataBw; dataBw.m_eType = AecEqui::kBox; dataBw.m_iClr = 251; dataBw.m_bBoolSubtract = FALSE; dataBw.m_vtMove = vecBw; dataBw.m_ptRotation.set(0, -PI / 3.5, 0); setData(&dataBw, &boxBw); pEqu->AddSubPrimObj(&dataBw); clearData(dataBw); } AcGeVector3d vecLeft(-dT / 2, 0, -dL / 2); AecEqui::XPrimData dataLeft; dataLeft.m_eType = AecEqui::kBox; dataLeft.m_iClr = 150; dataLeft.m_bBoolSubtract = FALSE; dataLeft.m_vtMove = vecLeft; setData(&dataLeft, &boxLeft); AcGeVector3d vecRight(-dT / 2, 0, dL / 2 - dT); AecEqui::XPrimData dataRight; dataRight.m_eType = AecEqui::kBox; dataRight.m_iClr = 200; dataRight.m_bBoolSubtract = FALSE; dataRight.m_vtMove = vecRight; setData(&dataRight, &boxLeft); pEqu->AddSubPrimObj(&dataLeft); pEqu->AddSubPrimObj(&dataRight); pEqu->AddSubPrimObj(&dataTop); pEqu->AddSubPrimObj(&dataBottom); clearData(dataLeft); clearData(dataRight); clearData(dataTop); clearData(dataBottom); } else { AcGePoint3d ptPath(0, 0, 0); AcGeVector3d vtN(1, 0, 0); AcDbCircle* pPath = new AcDbCircle(ptPath, vtN, dDN * .5); AcDbPolyline* pPoly = CoreTools::MakePolyline(pPath); DELETE_PTR(pPath); AcGePoint3d ptReg(ptPath.x + dT * .5, ptPath.y, ptPath.z + (dDN * .5 - dW1 * .5)); AcGePoint3d pt0(ptReg.x + dT * .5, .0, ptReg.z - dW1 * .5) , pt1(ptReg.x + dT * .5, .0, ptReg.z + dW1 * .5) , pt2(ptReg.x - dT * .5, .0, ptReg.z + dW1 * .5) , pt3(ptReg.x - dT * .5, .0, ptReg.z - dW1 * .5); AcDbVoidPtrArray ar; ar.append(new AcDbLine(pt0, pt1)); ar.append(new AcDbLine(pt1, pt2)); ar.append(new AcDbLine(pt2, pt3)); ar.append(new AcDbLine(pt3, pt0)); AcDbRegion* pReg = CoreTools::createRegion(ar); deleteArrayVoidPtrs< AcDbLine>(ar); if (!pReg) { DELETE_PTR(pPoly); DELETE_PTR(pEqu); return NULL; } AcGePoint3d ptOrg(0, 0, 0); // 旋转轴原点 AcGeVector3d vtDir(1, 0, 0); // 旋转轴方向 double dStartAngle = 0; // 旋转起始角 double dSweepAngle = 2 * PI; // 旋转终止角 AcGeVector3d vecPt(-ptPath.x, 0, 0); NewRevolve Nr(true, pReg, ptOrg, vtDir, dSweepAngle, dStartAngle); DELETE_PTR(pReg); AecEqui::XPrimData dataNr; dataNr.m_eType = AecEqui::kNewRevolve; dataNr.m_bBoolSubtract = false; dataNr.m_iClr = 256; dataNr.m_nSize = 0; dataNr.m_vtMove = vecPt; Nr.toData(dataNr.m_pData, dataNr.m_nSize); pEqu->AddSubPrimObj(&dataNr); clearData(dataNr); AecEqui::XBox boxBw; memset(&boxBw, 0, sizeof(AecEqui::XBox)); boxBw.dL = dT; boxBw.dW = 2; boxBw.dH = dDN / 2 - dW1; AcGeVector3d vecBw(dT / 2, 0, 0); for (int i = 0; i < dBYNUM; i++) { AecEqui::XPrimData dataBw; dataBw.m_eType = AecEqui::kBox; dataBw.m_iClr = 256; dataBw.m_bBoolSubtract = false; dataBw.m_vtMove = vecBw; dataBw.m_ptRotation.set(i * ((2 * PI) / 10), 0, 0); setData(&dataBw, &boxBw); pEqu->AddSubPrimObj(&dataBw); clearData(dataBw); } AecEqui::XCylinder CylinderIn; memset(&CylinderIn, 0, sizeof(AecEqui::XCylinder)); CylinderIn.dr = 7.5; CylinderIn.dH = dT; AecEqui::XPrimData dataIn; dataIn.m_eType = AecEqui::kCylinder; dataIn.m_iClr = 256; dataIn.m_bBoolSubtract = false; dataIn.m_ptRotation.set(0, PI / 2, 0); setData(&dataIn, &CylinderIn); pEqu->AddSubPrimObj(&dataIn); clearData(dataIn); } } else { if (bShape) { int nCount = (int)min(dL / dDist, dW / dDist); AcDbPolyline* pPoly(NULL); AcDbRegion* pReg(NULL); AcGePoint3d pt; for (int i = 1; i <= nCount; ++i) { pt = ptO + X * dDist * .5 * i; pt += Y * dDist * .5 * i; pReg = makeRectRegion(pt, dW1 * .1, dT, X, Z); if (!pReg) { return NULL; } pPoly = makeRectPoly(ptO, dDist * i, dDist * i, X, Y); if (!pPoly) { return NULL; } NewSweep ns(true, pReg, pPoly); AecEqui::XPrimData data; data.m_eType = AecEqui::kNewSweep; data.m_bBoolSubtract = false; data.m_iClr = 256; data.m_nSize = 0; data.m_ptRotation.set(.0, PI * .5, .0); ns.toData(data.m_pData, data.m_nSize); pEqu->AddSubPrimObj(&data); clearData(data); } } else { int nCount = (int)(dDN / dDist); AcDbPolyline* pPoly(NULL); AcDbRegion* pReg(NULL); AcGePoint3d pt; AcDbCircle* pCir(NULL); for (int i = 1; i <= nCount; ++i) { pt = ptO + Y * dDist * .5 * i; pReg = makeCircleRegion(pt, Z, dW1 * .1); if (!pReg) { return NULL; } pCir = new AcDbCircle(ptO, X, dDist * .5 * i); if (!pCir) { return NULL; } pPoly = CoreTools::MakePolyline(pCir); if (!pPoly) { return NULL; } NewSweep ns(true, pReg, pPoly); AecEqui::XPrimData data; data.m_eType = AecEqui::kNewSweep; data.m_bBoolSubtract = false; data.m_iClr = 256; data.m_nSize = 0; ns.toData(data.m_pData, data.m_nSize); pEqu->AddSubPrimObj(&data); clearData(data); } } } return pEqu; } AecDbEwEquipment* makeFENGMAOTXCZ(const bool& bShape // 风口形状 , const double& dDN // 圆风口公称 , const double& dW // 方风口宽 , const double& dH // 方风口高 , const double& dR1 // 底座半径 , const double& dH1 // 风帽高度 ) { #ifdef _DEBUG acutPrintf(_T("\n makeFENGMAOTXCZ!")); #endif AecDbEwEquipment* pEqu(MKValve::makeBaseEquiment(_T("makeFENGMAOTXCZ"), true)); if (!pEqu) return NULL; AcGeVector3d X(AcGeVector3d::kXAxis), Y(AcGeVector3d::kYAxis), Z(AcGeVector3d::kZAxis); AcGePoint3d pt0(AcGePoint3d::kOrigin); double dFMR(.0); if (bShape) { dFMR = dW * .5; } else { dFMR = dDN * .5; } AcGePoint3d ptGe[6]; ptGe[0] = pt0 + Z * dH1; ptGe[1] = ptGe[0] - Z * dH1 * .1; ptGe[1] += X * dFMR; ptGe[2] = ptGe[1] - Z * dH1 * .8; ptGe[3] = ptGe[2] - Z * dH1 * .1; ptGe[4] = pt0; ptGe[5] = ptGe[0]; AcGePoint3d pt = ptGe[1] - Z * dH1 * .4; AcDbVoidPtrArray ar; ar.append(new AcDbLine(ptGe[0], ptGe[1])); ar.append(new AcDbArc(pt, Y, dH1 * .4, PI * -1.5, PI * -.5)); ar.append(new AcDbLine(ptGe[2], ptGe[3])); ar.append(new AcDbLine(ptGe[3], ptGe[4])); ar.append(new AcDbLine(ptGe[4], ptGe[0])); AcDbRegion* pReg = CoreTools::createRegion(ar); deleteArrayVoidPtrs< AcDbEntity>(ar); if (!pReg) { DELETE_PTR(pEqu); return NULL; } NewRevolve nr(true, pReg, pt0, AcGeVector3d::kZAxis, PI * 2, 0); DELETE_PTR(pReg); AecEqui::XPrimData data; data.m_eType = AecEqui::kNewRevolve; data.m_bBoolSubtract = false; data.m_iClr = 200; nr.toData(data.m_pData, data.m_nSize); pEqu->AddSubPrimObj(&data); clearData(data); return pEqu; } AecDbEwEquipment* makeFENGMAOSXCZ(const bool& bShape // 风口形状 , const double& dDN // 圆风口公称 , const double& dW // 方风口宽 , const double& dH // 方风口高 , const double& dR1 // 底座半径 , const double& dH1 // 风帽高度 , const double& dL2 // 支架长度 , const double& dW2 // 支架宽度 , const double& dH2 // 支架高度 ) { #ifdef _DEBUG acutPrintf(_T("\n makeFENGMAOSXCZ!")); #endif AecDbEwEquipment* pEqu(MKValve::makeBaseEquiment(_T("makeFENGMAOSXCZ"), true)); if (!pEqu) return NULL; AcGeVector3d X(AcGeVector3d::kXAxis), Y(AcGeVector3d::kYAxis), Z(AcGeVector3d::kZAxis); AcGePoint3d pt0(AcGePoint3d::kOrigin); double dFMR(.0); if (bShape) { dFMR = dW * .5; } else { dFMR = dDN * .5; } AcDbCircle* pCir = new AcDbCircle(pt0, Z, dFMR - dL2 * .5); if (!pCir) { return NULL; } AcDbPolyline* pPath = CoreTools::MakePolyline(pCir); DELETE_PTR(pCir); if (!pPath) { return NULL; } AcGePoint3d pt = pt0 + X * (dFMR - dL2 * .5); pt += Z * dH2 * .1 * .5; AcDbRegion* pReg = MKHvacValve::makeRectRegion(pt, dL2, dH2 * .1, X, Z); if (!pReg) { DELETE_PTR(pPath); return NULL; } NewSweep ns(true, pReg, pPath); DELETE_PTR(pPath); AecEqui::XPrimData data; data.m_eType = AecEqui::kNewSweep; data.m_bBoolSubtract = false; data.m_iClr = 256; data.m_nSize = 0; ns.toData(data.m_pData, data.m_nSize); pEqu->AddSubPrimObj(&data); clearData(data); // 支架 for (int i(0); i < 3; ++i) { pt = pt0 - X * (dFMR - dL2 * .5); pt += Z * dH2 * .1; pReg = MKHvacValve::makeRectRegion(pt, dW2, dL2, X, Y); if (!pReg) { return NULL; } NewExtrude neZJ(true, pReg, dH2); AecEqui::XPrimData dataZJ; dataZJ.m_nID = ::GetTickCount(); dataZJ.m_eType = AecEqui::kNewExtrude; dataZJ.m_bBoolSubtract = false; dataZJ.m_iClr = 256; dataZJ.m_ptRotation.set(.0, .0, PI * 2 / 3 * i); neZJ.toData(dataZJ.m_pData, dataZJ.m_nSize); pEqu->AddSubPrimObj(&dataZJ); clearData(dataZJ); } AcGePoint3d ptGe[4]; ptGe[0] = pt0; ptGe[0] += Z * dH2 * 1.1; ptGe[1] = ptGe[0] + X * dFMR * 2; ptGe[2] = ptGe[0] + Z * dH2; ptGe[3] = ptGe[0]; pReg = AecDbEarthWorm::CreatePolygonRegionOnly(ptGe, 4); if (!pReg) { return NULL; } NewRevolve nrFMTop(true, pReg, pt0, Z, 2 * PI, .0); AecEqui::XPrimData dataFMTop; dataFMTop.m_eType = AecEqui::kNewRevolve; dataFMTop.m_bBoolSubtract = false; dataFMTop.m_iClr = 256; dataFMTop.m_nSize = 0; nrFMTop.toData(dataFMTop.m_pData, dataFMTop.m_nSize); pEqu->AddSubPrimObj(&dataFMTop); clearData(dataFMTop); return pEqu; } AecDbEwEquipment* makeFENGMAOZXCZ(const bool& bShape // 风口形状 , const double& dDN // 圆风口公称 , const double& dW // 方风口宽 , const double& dH // 方风口高 , const double& dR1 // 底座半径 , const double& dH1 // 风帽高度 ) { #ifdef _DEBUG acutPrintf(_T("\n makeFENGMAOZXCZ!")); #endif AecDbEwEquipment* pEqu(MKValve::makeBaseEquiment(_T("makeFENGMAOZXCZ"), true)); if (!pEqu) return NULL; AcGeVector3d X(AcGeVector3d::kXAxis), Y(AcGeVector3d::kYAxis), Z(AcGeVector3d::kZAxis); AcGePoint3d pt0(AcGePoint3d::kOrigin); double dFMR(.0); if (bShape) { dFMR = dW * .5; } else { dFMR = dDN * .5; } AcGePoint3d ptGe[10]; ptGe[0] = pt0 + Z * dH1 * .1; ptGe[0] += X * dFMR * .9; ptGe[1] = ptGe[0] + X * dFMR * .1; ptGe[2] = ptGe[1] + X * dFMR; ptGe[2] += Z * dH1 * .5; ptGe[3] = ptGe[2] - X * dFMR; ptGe[3] += Z * dH1 * .5; ptGe[4] = ptGe[3] - X * dFMR * .1; ptGe[5] = ptGe[4] + X * dFMR * .9; ptGe[5] -= Z * dH1 * .5; ptGe[6] = ptGe[0]; AcDbRegion* pReg = AecDbEarthWorm::CreatePolygonRegionOnly(ptGe, 7); if (!pReg) { return NULL; } AcGePoint3d pt = pt0 + Z * dH1 * .1; AcDbCircle* pCir = new AcDbCircle(pt, Z, dFMR * .9); AcDbPolyline* pPath = CoreTools::MakePolyline(pCir); DELETE_PTR(pCir); NewSweep ns(true, pReg, pPath); DELETE_PTR(pPath); AecEqui::XPrimData data; data.m_eType = AecEqui::kNewSweep; data.m_bBoolSubtract = false; data.m_iClr = 256; data.m_nSize = 0; ns.toData(data.m_pData, data.m_nSize); pEqu->AddSubPrimObj(&data); clearData(data); ptGe[0] = pt0 + Z * dH1 * .1; ptGe[1] = ptGe[0] + Z * dH1; ptGe[2] = ptGe[1] + X * dFMR * .5; ptGe[2] -= Z * dH1 * .5; ptGe[3] = ptGe[0]; pReg = AecDbEarthWorm::CreatePolygonRegionOnly(ptGe, 4); if (!pReg) { return NULL; } pt = pt0 + Z * dH1 * .1; NewRevolve nrFMMid(true, pReg, pt, Z, 2 * PI, .0); AecEqui::XPrimData dataFMMid; dataFMMid.m_eType = AecEqui::kNewRevolve; dataFMMid.m_bBoolSubtract = false; dataFMMid.m_iClr = 256; nrFMMid.toData(dataFMMid.m_pData, dataFMMid.m_nSize); pEqu->AddSubPrimObj(&dataFMMid); clearData(dataFMMid); AecEqui::XCylinder CylDZ; memset(&CylDZ, 0, sizeof(AecEqui::XCylinder)); CylDZ.dr = dFMR; CylDZ.dH = dH1 * .1; AecEqui::XPrimData dataDZ; dataDZ.m_eType = AecEqui::kCylinder; dataDZ.m_iClr = 50; dataDZ.m_bBoolSubtract = FALSE; setData(&dataDZ, &CylDZ); pEqu->AddSubPrimObj(&dataDZ); clearData(dataDZ); return pEqu; } AecDbEwEquipment* makeFENGMAOTXSP(const bool& bShape // 风口形状 , const double& dDN // 圆风口公称 , const double& dW // 方风口宽 , const double& dH // 方风口高 , const double& dR1 // 底座半径 , const double& dH1 // 风帽高度 ) { #ifdef _DEBUG acutPrintf(_T("\n makeFENGMAOTXSP!")); #endif AecDbEwEquipment* pEqu(MKValve::makeBaseEquiment(_T("makeFENGMAOTXSP"), true)); if (!pEqu) return NULL; AcGeVector3d X(AcGeVector3d::kXAxis), Y(AcGeVector3d::kYAxis), Z(AcGeVector3d::kZAxis); AcGePoint3d pt0(AcGePoint3d::kOrigin); double dFMR(.0); if (bShape) { dFMR = dW * .5; } else { dFMR = dDN * .5; } AcGePoint3d ptGe[6]; ptGe[0] = pt0 + Z * dH1; ptGe[1] = ptGe[0] - Z * dH1 * .1; ptGe[1] += X * dFMR; ptGe[2] = ptGe[1] - Z * dH1 * .8; ptGe[3] = ptGe[2] - Z * dH1 * .1; ptGe[4] = pt0; ptGe[5] = ptGe[0]; AcGePoint3d pt = ptGe[1] - Z * dH1 * .4; AcDbVoidPtrArray ar; ar.append(new AcDbLine(ptGe[0], ptGe[1])); ar.append(new AcDbArc(pt, Y, dH1 * .4, PI * -1.5, PI * -.5)); ar.append(new AcDbLine(ptGe[2], ptGe[3])); ar.append(new AcDbLine(ptGe[3], ptGe[4])); ar.append(new AcDbLine(ptGe[4], ptGe[0])); AcDbRegion* pReg = CoreTools::createRegion(ar); deleteArrayVoidPtrs< AcDbEntity>(ar); if (!pReg) { DELETE_PTR(pEqu); return NULL; } NewRevolve nr(true, pReg, pt0, AcGeVector3d::kZAxis, PI * 2, 0); DELETE_PTR(pReg); AecEqui::XPrimData data; data.m_eType = AecEqui::kNewRevolve; data.m_bBoolSubtract = false; data.m_iClr = 200; data.m_ptRotation.set(.0, PI * -.5, .0); nr.toData(data.m_pData, data.m_nSize); pEqu->AddSubPrimObj(&data); clearData(data); return pEqu; } AecDbEwEquipment* makeFENGMAOSXSP(const bool& bShape // 风口形状 , const double& dDN // 圆风口公称 , const double& dW // 方风口宽 , const double& dH // 方风口高 , const double& dR1 // 底座半径 , const double& dH1 // 风帽高度 , const double& dL2 // 支架长度 , const double& dW2 // 支架宽度 , const double& dH2 // 支架高度 ) { #ifdef _DEBUG acutPrintf(_T("\n makeFENGMAOSXSP!")); #endif AecDbEwEquipment* pEqu(MKValve::makeBaseEquiment(_T("makeFENGMAOSXSP"), true)); if (!pEqu) return NULL; AcGeVector3d X(AcGeVector3d::kXAxis), Y(AcGeVector3d::kYAxis), Z(AcGeVector3d::kZAxis); AcGePoint3d pt0(AcGePoint3d::kOrigin); double dFMR(.0); if (bShape) { dFMR = dW * .5; } else { dFMR = dDN * .5; } AcDbCircle* pCir = new AcDbCircle(pt0, Z, dFMR - dL2 * .5); if (!pCir) { return NULL; } AcDbPolyline* pPath = CoreTools::MakePolyline(pCir); DELETE_PTR(pCir); if (!pPath) { return NULL; } AcGePoint3d pt = pt0 + X * (dFMR - dL2 * .5); pt += Z * dH2 * .1 * .5; AcDbRegion* pReg = MKHvacValve::makeRectRegion(pt, dL2, dH2 * .1, X, Z); if (!pReg) { DELETE_PTR(pPath); return NULL; } NewSweep ns(true, pReg, pPath); DELETE_PTR(pPath); AecEqui::XPrimData data; data.m_eType = AecEqui::kNewSweep; data.m_bBoolSubtract = false; data.m_iClr = 256; data.m_nSize = 0; data.m_ptRotation.set(.0, PI * -.5, .0); ns.toData(data.m_pData, data.m_nSize); pEqu->AddSubPrimObj(&data); clearData(data); // 支架 for (int i(0); i < 3; ++i) { pt = pt0 - Y * (dFMR - dL2 * .5); pt -= X * dH2 * .1; pReg = MKHvacValve::makeRectRegion(pt, dW2, dL2, Z, Y); if (!pReg) { return NULL; } NewExtrude neZJ(true, pReg, -dH2); AecEqui::XPrimData dataZJ; dataZJ.m_nID = ::GetTickCount(); dataZJ.m_eType = AecEqui::kNewExtrude; dataZJ.m_bBoolSubtract = false; dataZJ.m_iClr = 256; dataZJ.m_ptRotation.set(PI * 2 / 3 * i, .0, .0); neZJ.toData(dataZJ.m_pData, dataZJ.m_nSize); pEqu->AddSubPrimObj(&dataZJ); clearData(dataZJ); } AcGePoint3d ptGe[4]; ptGe[0] = pt0; ptGe[0] += Z * dH2 * 1.1; ptGe[1] = ptGe[0] + X * dFMR * 2; ptGe[2] = ptGe[0] + Z * dH2; ptGe[3] = ptGe[0]; pReg = AecDbEarthWorm::CreatePolygonRegionOnly(ptGe, 4); if (!pReg) { return NULL; } NewRevolve nrFMTop(true, pReg, pt0, Z, 2 * PI, .0); AecEqui::XPrimData dataFMTop; dataFMTop.m_eType = AecEqui::kNewRevolve; dataFMTop.m_bBoolSubtract = false; dataFMTop.m_iClr = 256; dataFMTop.m_nSize = 0; dataFMTop.m_ptRotation.set(.0, PI * -.5, .0); nrFMTop.toData(dataFMTop.m_pData, dataFMTop.m_nSize); pEqu->AddSubPrimObj(&dataFMTop); clearData(dataFMTop); return pEqu; } AecDbEwEquipment* makeFENGMAOZXSP(const bool& bShape // 风口形状 , const double& dDN // 圆风口公称 , const double& dW // 方风口宽 , const double& dH // 方风口高 , const double& dR1 // 底座半径 , const double& dH1 // 风帽高度 ) { #ifdef _DEBUG acutPrintf(_T("\n makeFENGMAOZXSP!")); #endif AecDbEwEquipment* pEqu(MKValve::makeBaseEquiment(_T("makeFENGMAOZXSP"), true)); if (!pEqu) return NULL; AcGeVector3d X(AcGeVector3d::kXAxis), Y(AcGeVector3d::kYAxis), Z(AcGeVector3d::kZAxis); AcGePoint3d pt0(AcGePoint3d::kOrigin); double dFMR(.0); if (bShape) { dFMR = dW * .5; } else { dFMR = dDN * .5; } AcGePoint3d ptGe[10]; ptGe[0] = pt0 + Z * dH1 * .1; ptGe[0] += X * dFMR * .9; ptGe[1] = ptGe[0] + X * dFMR * .1; ptGe[2] = ptGe[1] + X * dFMR; ptGe[2] += Z * dH1 * .5; ptGe[3] = ptGe[2] - X * dFMR; ptGe[3] += Z * dH1 * .5; ptGe[4] = ptGe[3] - X * dFMR * .1; ptGe[5] = ptGe[4] + X * dFMR * .9; ptGe[5] -= Z * dH1 * .5; ptGe[6] = ptGe[0]; AcDbRegion* pReg = AecDbEarthWorm::CreatePolygonRegionOnly(ptGe, 7); if (!pReg) { return NULL; } AcGePoint3d pt = pt0 + Z * dH1 * .1; AcDbCircle* pCir = new AcDbCircle(pt, Z, dFMR * .9); AcDbPolyline* pPath = CoreTools::MakePolyline(pCir); DELETE_PTR(pCir); NewSweep ns(true, pReg, pPath); DELETE_PTR(pPath); AecEqui::XPrimData data; data.m_eType = AecEqui::kNewSweep; data.m_bBoolSubtract = false; data.m_iClr = 256; data.m_nSize = 0; data.m_ptRotation.set(.0, PI * -.5, .0); ns.toData(data.m_pData, data.m_nSize); pEqu->AddSubPrimObj(&data); clearData(data); ptGe[0] = pt0 + Z * dH1 * .1; ptGe[1] = ptGe[0] + Z * dH1; ptGe[2] = ptGe[1] + X * dFMR * .5; ptGe[2] -= Z * dH1 * .5; ptGe[3] = ptGe[0]; pReg = AecDbEarthWorm::CreatePolygonRegionOnly(ptGe, 4); if (!pReg) { return NULL; } pt = pt0 + Z * dH1 * .1; NewRevolve nrFMMid(true, pReg, pt, Z, 2 * PI, .0); AecEqui::XPrimData dataFMMid; dataFMMid.m_eType = AecEqui::kNewRevolve; dataFMMid.m_bBoolSubtract = false; dataFMMid.m_iClr = 256; dataFMMid.m_ptRotation.set(.0, PI * -.5, .0); nrFMMid.toData(dataFMMid.m_pData, dataFMMid.m_nSize); pEqu->AddSubPrimObj(&dataFMMid); clearData(dataFMMid); // 底座 AecEqui::XCylinder CylDZ; memset(&CylDZ, 0, sizeof(AecEqui::XCylinder)); CylDZ.dr = dFMR; CylDZ.dH = dH1 * .1; AecEqui::XPrimData dataDZ; dataDZ.m_eType = AecEqui::kCylinder; dataDZ.m_iClr = 50; dataDZ.m_bBoolSubtract = FALSE; dataDZ.m_ptRotation.set(.0, PI * -.5, .0); setData(&dataDZ, &CylDZ); pEqu->AddSubPrimObj(&dataDZ); clearData(dataDZ); return pEqu; } AecDbEwEquipment* makeSXRECT(const bool& bHole // 人孔 , const double& dL0 // 方形人孔长度 , const double& dD0 // 圆形人孔直径 , const double& dL1 // 水箱长度 , const double& dW1 // 水箱宽度 , const double& dH1 // 水箱高度 , const bool& bSupport // 水箱是否需要支架 , const double& dNum // 支架数目 , const bool& bLocation // 支架位置 , const double& dL2 // 支架长度 , const double& dW2 // 支架宽度 , const double& dH2 // 支架高度 ) { #ifdef _DEBUG acutPrintf(_T("\n makeSXRECT!")); #endif AecDbEwEquipment* pEqu(MKValve::makeBaseEquiment(_T("SHUIXIANG"), true)); if (!pEqu) return NULL; AcGeVector3d X(AcGeVector3d::kXAxis), Y(AcGeVector3d::kYAxis), Z(AcGeVector3d::kZAxis); AcGePoint3d ptO(AcGePoint3d::kOrigin); // 水箱 AecEqui::XBox boxSX; memset(&boxSX, 0, sizeof(AecEqui::XBox)); boxSX.dL = dL1; boxSX.dW = dW1; boxSX.dH = dH1; AecEqui::XPrimData dataSX; dataSX.m_eType = AecEqui::kBox; dataSX.m_iClr = 50; dataSX.m_bBoolSubtract = FALSE; setData(&dataSX, &boxSX); pEqu->AddSubPrimObj(&dataSX); clearData(dataSX); // 人孔 if (bHole) { AecEqui::XBox boxRectRK; memset(&boxRectRK, 0, sizeof(AecEqui::XBox)); boxRectRK.dL = dL0; boxRectRK.dW = dL0; boxRectRK.dH = dL0 * .1; AcGeVector3d vecRectRK(Z * boxSX.dH); vecRectRK += X * -(boxSX.dL * .5 - boxRectRK.dL * .5); vecRectRK += Y * (boxSX.dW * .5 - boxRectRK.dW * .5); AecEqui::XPrimData dataRectRK; dataRectRK.m_eType = AecEqui::kBox; dataRectRK.m_iClr = 100; dataRectRK.m_bBoolSubtract = FALSE; dataRectRK.m_vtMove = vecRectRK; setData(&dataRectRK, &boxRectRK); pEqu->AddSubPrimObj(&dataRectRK); clearData(dataRectRK); AecEqui::XBox boxRectRKWK; memset(&boxRectRKWK, 0, sizeof(AecEqui::XBox)); boxRectRKWK.dL = boxRectRK.dL * .99; boxRectRKWK.dW = boxRectRK.dW * .99; boxRectRKWK.dH = boxRectRK.dH; dataRectRK.m_eType = AecEqui::kBox; dataRectRK.m_iClr = 100; dataRectRK.m_bBoolSubtract = TRUE; dataRectRK.m_vtMove = vecRectRK; setData(&dataRectRK, &boxRectRKWK); pEqu->AddSubPrimObj(&dataRectRK); clearData(dataRectRK); // 管嘴 CoreTools::addNozzForEqu_Rect(pEqu , AcGeVector3d::kZAxis , AcGePoint3d(ptO.x - (boxSX.dL - boxRectRK.dL) * .5, ptO.y + (boxSX.dW - boxRectRK.dW) * .5, ptO.z + boxSX.dH + boxRectRK.dH) , boxRectRK.dL , boxRectRK.dW , boxRectRK.dH * .01 , boxRectRK.dL * .05 , boxRectRK.dH * .01 , 0 , false , false); } else { AecEqui::XCylinder ClnCirRK; memset(&ClnCirRK, 0, sizeof(AecEqui::XCylinder)); ClnCirRK.dr = dL0 * .5; ClnCirRK.dH = dL0 * .1; AcGeVector3d vecCirRK(Z * boxSX.dH); vecCirRK += X * (boxSX.dL * -.5 + ClnCirRK.dr); vecCirRK += Y * (boxSX.dW * .5 - ClnCirRK.dr); AecEqui::XPrimData dataCirRK; dataCirRK.m_eType = AecEqui::kCylinder; dataCirRK.m_iClr = 100; dataCirRK.m_bBoolSubtract = FALSE; dataCirRK.m_vtMove = vecCirRK; setData(&dataCirRK, &ClnCirRK); pEqu->AddSubPrimObj(&dataCirRK); clearData(dataCirRK); AecEqui::XCylinder ClnCirRKWK; memset(&ClnCirRKWK, 0, sizeof(AecEqui::XCylinder)); ClnCirRKWK.dr = ClnCirRK.dr * .99; ClnCirRKWK.dH = ClnCirRK.dH; AecEqui::XPrimData dataCirRKWK; dataCirRKWK.m_eType = AecEqui::kCylinder; dataCirRKWK.m_iClr = 100; dataCirRKWK.m_bBoolSubtract = TRUE; dataCirRKWK.m_vtMove = vecCirRK; setData(&dataCirRKWK, &ClnCirRKWK); pEqu->AddSubPrimObj(&dataCirRKWK); clearData(dataCirRKWK); // 管嘴 CoreTools::addNozzForEqu_Rect(pEqu , AcGeVector3d::kZAxis , AcGePoint3d(ptO.x + (boxSX.dL * -.5 + ClnCirRK.dr), ptO.y + (boxSX.dW * .5 - ClnCirRK.dr), ptO.z + boxSX.dH + ClnCirRK.dH) , ClnCirRK.dr * 2 , ClnCirRK.dr * 2.1 , ClnCirRK.dH * .01 , .0 , ClnCirRK.dH * .01 , 0 , true , false); } // 支架 if (bSupport) { double average(1 / (dNum - 1)); AecEqui::XPrimData dataZJ; if (bLocation) { for (int i = 0; i < dNum; i++) { AecEqui::XBox boxSPZJ; memset(&boxSPZJ, 0, sizeof(AecEqui::XBox)); boxSPZJ.dL = dL2; boxSPZJ.dW = dW2; boxSPZJ.dH = dH2; AcGeVector3d vecSPZJ(Z * -boxSPZJ.dH); vecSPZJ += Y * (boxSX.dW * -.5 + boxSX.dW * i * average); dataZJ.m_eType = AecEqui::kBox; dataZJ.m_iClr = 150; dataZJ.m_bBoolSubtract = FALSE; dataZJ.m_vtMove = vecSPZJ; setData(&dataZJ, &boxSPZJ); pEqu->AddSubPrimObj(&dataZJ); clearData(dataZJ); } } else { for (int i = 0; i < dNum; i++) { AecEqui::XBox boxCZZJ; memset(&boxCZZJ, 0, sizeof(AecEqui::XBox)); boxCZZJ.dL = dL2; boxCZZJ.dW = dW2; boxCZZJ.dH = dH2; AcGeVector3d vecCZZJ(Z * -boxCZZJ.dH); vecCZZJ += X * (boxSX.dL * -.5 + boxSX.dL * i * average); dataZJ.m_eType = AecEqui::kBox; dataZJ.m_iClr = 150; dataZJ.m_bBoolSubtract = FALSE; dataZJ.m_vtMove = vecCZZJ; setData(&dataZJ, &boxCZZJ); pEqu->AddSubPrimObj(&dataZJ); clearData(dataZJ); } } } return pEqu; } AecDbEwEquipment* makeSXCIRCLE(const bool& bShape // 水箱放置形状 , const double& dD1 // 水箱直径D1 , const double& dH1 // 水箱高度H1 , const double& dH2 // 支架高度H2 , const double& dL2 // 支架边距L2 , const double& dD2 // 支架间距D2 ) { #ifdef _DEBUG acutPrintf(_T("\n makeSXCIRCLE!")); #endif AecDbEwEquipment* pEqu(MKValve::makeBaseEquiment(_T("SHUIXIANG"), true)); if (!pEqu) return NULL; AcGeVector3d X(AcGeVector3d::kXAxis), Y(AcGeVector3d::kYAxis), Z(AcGeVector3d::kZAxis); AcGePoint3d pt0(AcGePoint3d::kOrigin); if (bShape) { AcGePoint3d pt1(pt0 - Z * dH1 * .45); AcGePoint3d pt2(pt1 + X * dD1 * .5); AcGePoint3d pt3(pt2 + Z * dH1 * .9); AcGePoint3d pt4(pt3 - X * dD1 * .5); AcGePoint3d pt5(pt1 - Z * dH1 * .05); AcGePoint3d pt6(pt4 + Z * dH1 * .05); AcGePoint3d ptUp(pt4); AcGePoint3d ptDown(pt1); AcGeVector3d UpunitNormal(0, 1, 0); AcGeVector3d UpmajorAxis(dD1 * .5, 0, 0); double UpradiusRatio(dH1 * .05 / (dD1 * .5)); double UpstartAngle(PI * 1.5); double UpendAngle(PI * 2); AcGeVector3d DownunitNormal(0, 1, 0); AcGeVector3d DownmajorAxis(dD1 * .5, 0, 0); double DownradiusRatio(dH1 * .05 / (dD1 * .5)); double DownstartAngle(0); double DownendAngle(PI * .5); AcDbEllipse* pEllipse1 = new AcDbEllipse(ptUp, UpunitNormal, UpmajorAxis, UpradiusRatio, UpstartAngle, UpendAngle); AcDbEllipse* pEllipse2 = new AcDbEllipse(ptDown, DownunitNormal, DownmajorAxis, DownradiusRatio, DownstartAngle, DownendAngle); AcDbLine* pline1 = new AcDbLine(pt2, pt3); AcDbLine* pline2 = new AcDbLine(pt5, pt6); AcDbVoidPtrArray ar; ar.append(pline1); ar.append(pline2); ar.append(pEllipse1); ar.append(pEllipse2); AcDbRegion* pReg = CoreTools::createRegion(ar); deleteArrayVoidPtrs< AcDbEntity>(ar); if (!pReg) { DELETE_PTR(pEqu); return NULL; } AcGeVector3d vec(Z * (dH1 * .5 + dH2 * .5)); NewRevolve nr(true, pReg, pt0, AcGeVector3d::kZAxis, PI * 2, 0); DELETE_PTR(pReg); AecEqui::XPrimData data; data.m_eType = AecEqui::kNewRevolve; data.m_bBoolSubtract = false; data.m_iClr = 200; data.m_vtMove = vec; nr.toData(data.m_pData, data.m_nSize); pEqu->AddSubPrimObj(&data); clearData(data); //底座 AecEqui::XCylinder Cyl; memset(&Cyl, 0, sizeof(AecEqui::XCylinder)); Cyl.dr = dL2 * .5; Cyl.dH = dH2; for (int i = 0; i < 3; i++) { AcGeVector3d vecCyl((dD1 * .5 - dL2 * .5) * cos(i * 2 * PI / 3), (dD1 * .5 - dL2 * .5) * sin(i * 2 * PI / 3), 0); AecEqui::XPrimData dataCyl; dataCyl.m_eType = AecEqui::kCylinder; dataCyl.m_iClr = 100; dataCyl.m_bBoolSubtract = FALSE; dataCyl.m_vtMove = vecCyl; setData(&dataCyl, &Cyl); pEqu->AddSubPrimObj(&dataCyl); clearData(dataCyl); } AecEqui::XCylinder Cyl1; memset(&Cyl1, 0, sizeof(AecEqui::XCylinder)); Cyl1.dr = dD1 * .05; Cyl1.dH = dD1 * .05; AcGeVector3d vecCyl1(0, 0, dH2 * .5 - dD1 * .05); AecEqui::XPrimData dataCyl1; dataCyl1.m_eType = AecEqui::kCylinder; dataCyl1.m_iClr = 100; dataCyl1.m_bBoolSubtract = FALSE; dataCyl1.m_vtMove = vecCyl1; setData(&dataCyl1, &Cyl1); pEqu->AddSubPrimObj(&dataCyl1); clearData(dataCyl1); AcGeVector3d vecCyl2(0, 0, dH2 * .5 + dH1); AecEqui::XPrimData dataCyl2; dataCyl2.m_eType = AecEqui::kCylinder; dataCyl2.m_iClr = 100; dataCyl2.m_bBoolSubtract = FALSE; dataCyl2.m_vtMove = vecCyl2; setData(&dataCyl2, &Cyl1); pEqu->AddSubPrimObj(&dataCyl2); clearData(dataCyl2); // 管嘴 CoreTools::addNozzForEqu_Rect(pEqu , AcGeVector3d::kZAxis , AcGePoint3d(0., 0., dH2 * .5 + dH1 + dD2 * .1) , dD1 * .05 , dD1 * .05 , dD1 * .05 , .0 , dD1 * .05 , 0 , true , false); } else { AcGePoint3d pt1(pt0 + X * dH1 * .45); AcGePoint3d pt2(pt1 + Y * dD1 * .5); AcGePoint3d pt3(pt2 - X * dH1 * .9); AcGePoint3d pt4(pt3 - Y * dD1 * .5); AcGePoint3d pt5(pt1 + X * dH1 * .05); AcGePoint3d pt6(pt4 - X * dH1 * .05); AcGePoint3d ptLeft(pt4); AcGePoint3d ptRight(pt1); AcGeVector3d LeftunitNormal(0, 0, 1); AcGeVector3d LeftmajorAxis(0, dD1 * .5, 0); double LeftradiusRatio(dH1 * .05 / (dD1 * .5)); double LeftstartAngle(0); double LeftendAngle(PI * .5); AcGeVector3d RightunitNormal(0, 0, 1); AcGeVector3d RightmajorAxis(0, dD1 * .5, 0); double RightradiusRatio(dH1 * .05 / (dD1 * .5)); double RightstartAngle(PI * 1.5); double RightendAngle(PI * 2); AcDbEllipse* pEllipse1 = new AcDbEllipse(ptLeft, LeftunitNormal, LeftmajorAxis, LeftradiusRatio, LeftstartAngle, LeftendAngle); AcDbEllipse* pEllipse2 = new AcDbEllipse(ptRight, RightunitNormal, RightmajorAxis, RightradiusRatio, RightstartAngle, RightendAngle); AcDbLine* pline1 = new AcDbLine(pt2, pt3); AcDbLine* pline2 = new AcDbLine(pt5, pt6); AcDbVoidPtrArray ar; ar.append(pline1); ar.append(pline2); ar.append(pEllipse1); ar.append(pEllipse2); AcDbRegion* pReg = CoreTools::createRegion(ar); deleteArrayVoidPtrs< AcDbEntity>(ar); if (!pReg) { DELETE_PTR(pEqu); return NULL; } AcGeVector3d vec(Z * dD1); NewRevolve nr(true, pReg, pt0, AcGeVector3d::kXAxis, PI * 2, 0); DELETE_PTR(pReg); AecEqui::XPrimData data; data.m_eType = AecEqui::kNewRevolve; data.m_bBoolSubtract = false; data.m_iClr = 200; data.m_vtMove = vec; nr.toData(data.m_pData, data.m_nSize); pEqu->AddSubPrimObj(&data); clearData(data); AecEqui::XBox box; memset(&box, 0, sizeof(AecEqui::XBox)); box.dL = dL2; box.dW = dD1; box.dH = dD1; for (int i = 0; i < 2; i++) { AcGeVector3d vec(X * (dL2 * .5 - dH1 * .225 + i *( dH1 * .45 - dL2))); AecEqui::XPrimData data; data.m_eType = AecEqui::kBox; data.m_iClr = 100; data.m_bBoolSubtract = FALSE; data.m_vtMove = vec; setData(&data, &box); pEqu->AddSubPrimObj(&data); clearData(data); } AecEqui::XCylinder Cyl3; memset(&Cyl3, 0, sizeof(AecEqui::XCylinder)); Cyl3.dr = dD1 * .05; Cyl3.dH = dD1 * .05; AcGeVector3d vecCyl3( - dH1 * .5 - dD1 * .05, 0, dD1); AecEqui::XPrimData dataCyl3; dataCyl3.m_eType = AecEqui::kCylinder; dataCyl3.m_iClr = 100; dataCyl3.m_bBoolSubtract = FALSE; dataCyl3.m_vtMove = vecCyl3; dataCyl3.m_ptRotation.set(0, PI * .5, 0); setData(&dataCyl3, &Cyl3); pEqu->AddSubPrimObj(&dataCyl3); clearData(dataCyl3); AcGeVector3d vecCyl4(dH1 * .5, 0, dD1); AecEqui::XPrimData dataCyl4; dataCyl4.m_eType = AecEqui::kCylinder; dataCyl4.m_iClr = 100; dataCyl4.m_bBoolSubtract = FALSE; dataCyl4.m_vtMove = vecCyl4; dataCyl4.m_ptRotation.set(0, PI * .5, 0); setData(&dataCyl4, &Cyl3); pEqu->AddSubPrimObj(&dataCyl4); clearData(dataCyl4); // 管嘴 AcGeVector3d vecX(-1, 0, 0); CoreTools::addNozzForEqu_Rect(pEqu , vecX , AcGePoint3d( - dH1 * .5 - dD1 * .05, 0, dD1) , dD1 * .05 , dD1 * .05 , dD1 * .05 , .0 , dD1 * .05 , 0 , true , false); // 管嘴 CoreTools::addNozzForEqu_Rect(pEqu , AcGeVector3d::kXAxis , AcGePoint3d(dH1 * .5 + dD1 * .05, 0, dD1) , dD1 * .05 , dD1 * .05 , dD1 * .05 , .0 , dD1 * .05 , 0 , true , false); } return pEqu; } AecDbEwEquipment* makeFGRLJ(const bool bFRect // 风管形状 , const double& dDN // 圆风管公称 , const double& dL // 方风管长 , const double& dW // 方风管宽 , const bool& bEnterShape // 风管软连接入口形状 , const double& dL1 // 风管软连接入口长度L1 , const double& dW1 // 风管软连接入口宽度W1 , const double& dD1 // 风管软连接入口直径D1 , const double& dH1 // 风管软连接高度H1 , const double& dFla // 风管软连接法兰延伸长度Flange ) { #ifdef _DEBUG acutPrintf(_T("\n makeFGRLJ!")); #endif AecDbEwEquipment* pEqu(MKValve::makeBaseEquiment(_T("FENGGUANRUANLIANJIE"), true)); if (!pEqu) return NULL; AcGeVector3d X(AcGeVector3d::kXAxis), Y(AcGeVector3d::kYAxis), Z(AcGeVector3d::kZAxis); AcGePoint3d pt0(AcGePoint3d::kOrigin); AcArray regs; AcDbRegion* pTopReg(NULL), * pSubTopReg(NULL), * pFlaTopReg(NULL); AcGePoint3d ptTop(pt0 + Z * (dH1 * .5 - dFla)); if (!bEnterShape) { pTopReg = makeCircleRegion(ptTop, Z, dD1 * .5); pSubTopReg = makeCircleRegion(ptTop, Z, dD1 * .5 - dFla); pFlaTopReg = makeCircleRegion(ptTop, Z, dD1 * .5 + dFla); } else { pTopReg = makeRectRegion(ptTop, dL1, dW1); pSubTopReg = makeRectRegion(ptTop, dL1 - dFla * 2, dW1 - dFla * 2); pFlaTopReg = makeRectRegion(ptTop, dL1 + dFla * 2, dW1 + dFla * 2); } AcDbRegion* pBotReg(NULL), * pSubBotReg(NULL), * pFlaBotReg(NULL), * pFlaSubBotReg(NULL); AcGePoint3d ptBot(pt0 - Z * (dH1 * .5 - dFla)); AcGePoint3d ptFlaBot(pt0 + Z * (dH1 * -.5)); if (!bFRect) { pBotReg = makeCircleRegion(ptBot, Z, dDN * .5); pSubBotReg = makeCircleRegion(ptBot, Z, dDN * .5 - dFla); pFlaBotReg = makeCircleRegion(ptFlaBot, Z, dDN * .5 + dFla); pFlaSubBotReg = makeCircleRegion(ptFlaBot, Z, dDN * .5); } else { pBotReg = makeRectRegion(ptBot, dL, dW); pSubBotReg = makeRectRegion(ptBot, dL - dFla * 2, dW - dFla * 2); pFlaBotReg = makeRectRegion(ptFlaBot, dL + dFla * 2, dW + dFla * 2); pFlaSubBotReg = makeRectRegion(ptFlaBot, dL, dW); } AcGeVector3d vecFGRLJ(X * dH1 * -.5); // 风管软连接 if (pTopReg && pBotReg) { regs.append(pBotReg); regs.append(pTopReg); NewLoft nlFGRLJ(true, regs, NULL); AecEqui::XPrimData dataFGRLJ; dataFGRLJ.m_nID = ::GetTickCount(); dataFGRLJ.m_eType = AecEqui::kNewLoft; dataFGRLJ.m_bBoolSubtract = false; dataFGRLJ.m_iClr = 50; dataFGRLJ.m_ptRotation.set(PI * .5, 0, PI * -.5); dataFGRLJ.m_vtMove = vecFGRLJ; nlFGRLJ.toData(dataFGRLJ.m_pData, dataFGRLJ.m_nSize); pEqu->AddSubPrimObj(&dataFGRLJ); clearData(dataFGRLJ); } // 挖空 regs.removeAll(); if (pSubTopReg && pSubBotReg) { regs.append(pSubTopReg); regs.append(pSubBotReg); NewLoft nlWK(false, regs, NULL); deleteContainerOfArx(regs); AecEqui::XPrimData dataWK; dataWK.m_nID = ::GetTickCount(); dataWK.m_eType = AecEqui::kNewLoft; dataWK.m_bBoolSubtract = true; dataWK.m_iClr = 100; dataWK.m_ptRotation.set(PI * .5, 0, PI * -.5); dataWK.m_vtMove = vecFGRLJ; nlWK.toData(dataWK.m_pData, dataWK.m_nSize); pEqu->AddSubPrimObj(&dataWK); clearData(dataWK); } // 风管软连接法兰 if (pFlaTopReg && pTopReg) { NewExtrude neFla(true, pFlaTopReg, dFla), neFlaWk(false, pTopReg, dFla); DELETE_PTR(pFlaTopReg); DELETE_PTR(pTopReg); AecEqui::XPrimData dataFla, dataFlaWk; dataFla.m_nID = ::GetTickCount(); dataFla.m_eType = AecEqui::kNewExtrude; dataFla.m_bBoolSubtract = false; dataFla.m_iClr = 200; dataFla.m_ptRotation.set(PI * .5, 0, PI * -.5); dataFla.m_vtMove = vecFGRLJ; neFla.toData(dataFla.m_pData, dataFla.m_nSize); pEqu->AddSubPrimObj(&dataFla); clearData(dataFla); dataFlaWk.m_nID = dataFla.m_nID + 1; dataFlaWk.m_eType = AecEqui::kNewExtrude; dataFlaWk.m_bBoolSubtract = true; dataFlaWk.m_iClr = 200; dataFlaWk.m_ptRotation.set(PI * .5, 0, PI * -.5); dataFlaWk.m_vtMove = vecFGRLJ; neFlaWk.toData(dataFlaWk.m_pData, dataFlaWk.m_nSize); pEqu->AddSubPrimObj(&dataFlaWk); clearData(dataFlaWk); } DELETE_PTR(pBotReg); if (pFlaBotReg && pFlaSubBotReg) { NewExtrude neFla(true, pFlaBotReg, dFla), neFlaWk(false, pFlaSubBotReg, dFla); DELETE_PTR(pFlaBotReg); DELETE_PTR(pFlaSubBotReg); AecEqui::XPrimData dataFla, dataFlaWk; dataFla.m_nID = ::GetTickCount(); dataFla.m_eType = AecEqui::kNewExtrude; dataFla.m_bBoolSubtract = false; dataFla.m_iClr = 200; dataFla.m_ptRotation.set(PI * .5, 0, PI * -.5); dataFla.m_vtMove = vecFGRLJ; neFla.toData(dataFla.m_pData, dataFla.m_nSize); pEqu->AddSubPrimObj(&dataFla); clearData(dataFla); dataFlaWk.m_nID = dataFla.m_nID + 1; dataFlaWk.m_eType = AecEqui::kNewExtrude; dataFlaWk.m_bBoolSubtract = true; dataFlaWk.m_iClr = 200; dataFlaWk.m_ptRotation.set(PI * .5, 0, PI * -.5); dataFlaWk.m_vtMove = vecFGRLJ; neFlaWk.toData(dataFlaWk.m_pData, dataFlaWk.m_nSize); pEqu->AddSubPrimObj(&dataFlaWk); clearData(dataFlaWk); } // 管嘴 if (!bEnterShape) { CoreTools::addNozzForEqu_Rect(pEqu , X , AcGePoint3d(-(dH1 + dFla), .0, .0) , dD1 , .0 , dFla , .0 , .0 , 0 , true , false); } else { CoreTools::addNozzForEqu_Rect(pEqu , X , AcGePoint3d(-(dH1 + dFla), .0, .0) , dW1 , dL1 , dFla , .0 , .0 , 0 , false , false); } if (!bFRect) { CoreTools::addNozzForEqu_Rect(pEqu , X , AcGePoint3d(.0, .0, .0) , dDN , .0 , dFla , .0 , .0 , 0 , true , false); } else { CoreTools::addNozzForEqu_Rect(pEqu , X , AcGePoint3d(.0, .0, .0) , dW , dL , dFla , .0 , .0 , 0 , false , false); } return pEqu; } AecDbEwEquipment* makeFENGGUANXIAOSHENGQI(const bool bFRect // 风管形状 , const double& dDN // 圆风管公称 , const double& dL // 方风管长 , const double& dW // 方风管宽 , const double& dL1 // 消声器长度 , const double& dT1 // 法兰厚度 ) { AecDbEwEquipment* pEqu(MKValve::makeBaseEquiment(_T("FENGGUANXIAOSHENGQI"), true)); if (!pEqu) return NULL; AcGeVector3d X(AcGeVector3d::kXAxis), Y(AcGeVector3d::kYAxis), Z(AcGeVector3d::kZAxis); AcGePoint3d pt0(AcGePoint3d::kOrigin); if (bFRect) { AecEqui::XBox boxFGXSQ; memset(&boxFGXSQ, 0, sizeof(AecEqui::XBox)); boxFGXSQ.dL = dL1; boxFGXSQ.dW = dL; boxFGXSQ.dH = dW; AcGeVector3d vecFGXSQ(0, 0, boxFGXSQ.dH * -.5); AecEqui::XPrimData dataFGXSQ; dataFGXSQ.m_eType = AecEqui::kBox; dataFGXSQ.m_iClr = 50; dataFGXSQ.m_bBoolSubtract = FALSE; dataFGXSQ.m_vtMove = vecFGXSQ; setData(&dataFGXSQ, &boxFGXSQ); pEqu->AddSubPrimObj(&dataFGXSQ); clearData(dataFGXSQ); AcArray regs; AcDbRegion* pTopReg(NULL), * pBotReg(NULL); AcGePoint3d ptBot(pt0 + Z * boxFGXSQ.dL * .1); pTopReg = makeRectRegion(pt0, boxFGXSQ.dH * .8, boxFGXSQ.dW * .8); pBotReg = makeRectRegion(ptBot, boxFGXSQ.dH * .6, boxFGXSQ.dW * .6); if (pTopReg && pBotReg) { regs.append(pBotReg); regs.append(pTopReg); NewLoft nlXSQ(true, regs, NULL); deleteContainerOfArx(regs); for (int i = 0; i < 2; i++) { AcGeVector3d vecXSQLeft(boxFGXSQ.dL * -.5 + boxFGXSQ.dL * i, 0, 0); AecEqui::XPrimData dataXSQLeft; dataXSQLeft.m_nID = ::GetTickCount(); dataXSQLeft.m_eType = AecEqui::kNewLoft; dataXSQLeft.m_bBoolSubtract = false; dataXSQLeft.m_iClr = 150; dataXSQLeft.m_ptRotation.set(0, PI * -.5, PI * i); dataXSQLeft.m_vtMove = vecXSQLeft; nlXSQ.toData(dataXSQLeft.m_pData, dataXSQLeft.m_nSize); pEqu->AddSubPrimObj(&dataXSQLeft); clearData(dataXSQLeft); // 管嘴 AcGePoint3d ptNozz(-(boxFGXSQ.dL * .5 + dT1 + boxFGXSQ.dL * .1), 0, 0); ptNozz.x = ptNozz.x + (boxFGXSQ.dL + boxFGXSQ.dL * .2 + dT1) * i; CoreTools::addNozzForEqu_Rect(pEqu , X , ptNozz , dW , dL , dT1 , .0 , .0 , 0 , false , false); } } } else { AecEqui::XCylinder CylXSQ; memset(&CylXSQ, 0, sizeof(AecEqui::XCylinder)); CylXSQ.dr = dDN * .5; CylXSQ.dH = dL1; AcGeVector3d vecXSQ(CylXSQ.dH * .5, 0, 0); AecEqui::XPrimData dataXSQ; dataXSQ.m_eType = AecEqui::kCylinder; dataXSQ.m_iClr = 50; dataXSQ.m_bBoolSubtract = FALSE; dataXSQ.m_ptRotation.set(0, PI * -.5, 0); dataXSQ.m_vtMove = vecXSQ; setData(&dataXSQ, &CylXSQ); pEqu->AddSubPrimObj(&dataXSQ); clearData(dataXSQ); AecEqui::XCylinder CylXSQWK; memset(&CylXSQWK, 0, sizeof(AecEqui::XCylinder)); CylXSQWK.dr = CylXSQ.dr * .4; CylXSQWK.dH = CylXSQ.dH; AecEqui::XPrimData dataXSQWK; dataXSQWK.m_eType = AecEqui::kCylinder; dataXSQWK.m_iClr = 50; dataXSQWK.m_bBoolSubtract = TRUE; dataXSQWK.m_ptRotation.set(0, PI * -.5, 0); dataXSQWK.m_vtMove = vecXSQ; setData(&dataXSQWK, &CylXSQWK); pEqu->AddSubPrimObj(&dataXSQWK); clearData(dataXSQWK); // 管嘴 AcGePoint3d ptNozz(-(CylXSQ.dH * .5 + dT1), 0, 0); for (int i = 0; i < 2; i++) { ptNozz.x = ptNozz.x + (CylXSQ.dH + dT1) * i; CoreTools::addNozzForEqu_Rect(pEqu , X , ptNozz , dDN , .0 , dT1 , .0 , .0 , 0 , true , false); } } return pEqu; } AecDbEwEquipment* makeNENGLIANGBIAO(const bool bFRect // 风管形状 , const double& dDN // 圆风管公称 , const double& dL // 方风管长 , const double& dW // 方风管宽 , const double& dH // 圆环底座高度 , const double& dL1 // 量表边长 ) { #ifdef _DEBUG acutPrintf(_T("\n makeNENGLIANGBIAO!")); #endif AecDbEwEquipment* pEqu(MKValve::makeBaseEquiment(_T("NENGLIANGBIAO"), true)); if (!pEqu) return NULL; AcGeVector3d X(AcGeVector3d::kXAxis), Y(AcGeVector3d::kYAxis), Z(AcGeVector3d::kZAxis); AcGePoint3d pt0(AcGePoint3d::kOrigin); // 能量表 AecEqui::XCylinder CylNLB; memset(&CylNLB, 0, sizeof(AecEqui::XCylinder)); CylNLB.dr = dDN * .25; CylNLB.dH = dH; AcGeVector3d vecNLB(CylNLB.dH * .5, 0, 0); AecEqui::XPrimData dataNLB; dataNLB.m_eType = AecEqui::kCylinder; dataNLB.m_iClr = 50; dataNLB.m_bBoolSubtract = FALSE; dataNLB.m_vtMove = vecNLB; dataNLB.m_ptRotation.set(0, PI * -.5, 0); setData(&dataNLB, &CylNLB); pEqu->AddSubPrimObj(&dataNLB); clearData(dataNLB); // 能量表挖空 AecEqui::XCylinder CylNLBWK; memset(&CylNLBWK, 0, sizeof(AecEqui::XCylinder)); CylNLBWK.dr = CylNLB.dr * .9; CylNLBWK.dH = CylNLB.dH; AecEqui::XPrimData dataNLBWK; dataNLBWK.m_eType = AecEqui::kCylinder; dataNLBWK.m_iClr = 50; dataNLBWK.m_bBoolSubtract = TRUE; dataNLBWK.m_vtMove = vecNLB; dataNLBWK.m_ptRotation.set(0, -PI * .5, 0); setData(&dataNLBWK, &CylNLBWK); pEqu->AddSubPrimObj(&dataNLBWK); clearData(dataNLBWK); // 能量表底座 AecEqui::XCylinder CylDZ; memset(&CylDZ, 0, sizeof(AecEqui::XCylinder)); CylDZ.dr = dDN * .5; CylDZ.dH = dH * .1; // 能量表底座挖空 AecEqui::XCylinder CylDZWK; memset(&CylDZWK, 0, sizeof(AecEqui::XCylinder)); CylDZWK.dr = CylNLB.dr; CylDZWK.dH = CylDZ.dH; AcGeVector3d vecDZ(-(dH * .5), 0, 0); for (int i = 0; i < 2; i++) { vecDZ.x = vecDZ.x + (CylNLB.dH + CylDZ.dH) * i; AecEqui::XPrimData dataDZ; dataDZ.m_eType = AecEqui::kCylinder; dataDZ.m_iClr = 150; dataDZ.m_bBoolSubtract = FALSE; dataDZ.m_vtMove = vecDZ; dataDZ.m_ptRotation.set(0, PI * -.5, 0); setData(&dataDZ, &CylDZ); pEqu->AddSubPrimObj(&dataDZ); clearData(dataDZ); AecEqui::XPrimData dataDZWK; dataDZWK.m_eType = AecEqui::kCylinder; dataDZWK.m_iClr = 150; dataDZWK.m_bBoolSubtract = TRUE; dataDZWK.m_vtMove = vecDZ; dataDZWK.m_ptRotation.set(0, -PI * .5, 0); setData(&dataDZWK, &CylDZWK); pEqu->AddSubPrimObj(&dataDZWK); clearData(dataDZWK); } // 能量表换能器 AecEqui::XBox boxHNQ; memset(&boxHNQ, 0, sizeof(AecEqui::XBox)); boxHNQ.dL = dL1; boxHNQ.dW = dL1; boxHNQ.dH = dL1 * .1; AcGeVector3d vecHNQ(0, 0, CylNLB.dr * 2); AecEqui::XPrimData dataHNQ; dataHNQ.m_eType = AecEqui::kBox; dataHNQ.m_iClr = 200; dataHNQ.m_bBoolSubtract = FALSE; dataHNQ.m_vtMove = vecHNQ; setData(&dataHNQ, &boxHNQ); pEqu->AddSubPrimObj(&dataHNQ); clearData(dataHNQ); // 能量表换能器支架 AecEqui::XBox boxHNQZJ; memset(&boxHNQZJ, 0, sizeof(AecEqui::XBox)); boxHNQZJ.dL = boxHNQ.dH; boxHNQZJ.dW = boxHNQ.dH; boxHNQZJ.dH = CylNLB.dr; AcGeVector3d vecHNQZJ(0, 0, CylNLB.dr); AecEqui::XPrimData dataHNQZJ; dataHNQZJ.m_eType = AecEqui::kBox; dataHNQZJ.m_iClr = 200; dataHNQZJ.m_bBoolSubtract = FALSE; dataHNQZJ.m_vtMove = vecHNQZJ; setData(&dataHNQZJ, &boxHNQZJ); pEqu->AddSubPrimObj(&dataHNQZJ); clearData(dataHNQZJ); // 能量表接口 AecEqui::XCylinder CylJK; memset(&CylJK, 0, sizeof(AecEqui::XCylinder)); CylJK.dr = CylNLB.dr * .25; CylJK.dH = CylNLB.dr; AcGeVector3d vecJK(CylNLB.dH * .35, CylNLB.dr * -1.5, 0); AecEqui::XPrimData dataJK; dataJK.m_eType = AecEqui::kCylinder; dataJK.m_iClr = 230; dataJK.m_bBoolSubtract = FALSE; dataJK.m_vtMove = vecJK; dataJK.m_ptRotation.set(PI * -.25, PI * -.5, 0); setData(&dataJK, &CylJK); pEqu->AddSubPrimObj(&dataJK); clearData(dataJK); // 管嘴 for (int i = 0; i < 2; i++) { AcGePoint3d ptNozz = pt0 + X * -(CylNLB.dH * .5 + CylDZ.dH + dH * .1); ptNozz += X * (CylNLB.dH + CylDZ.dH * 2 + dH * .1) * i; if (bFRect) { CoreTools::addNozzForEqu_Rect(pEqu , X , ptNozz , dW , dL , dH * .1 , dH * .1 , dH * .1 , 0 , false , false); } else { CoreTools::addNozzForEqu_Rect(pEqu , X , ptNozz , dDN , dDN * 1.1 , dH * .1 , dH * .1 , dH * .1 , 0 , true , false); } } return pEqu; } AecDbEwEquipment* makeSHISHIBAOJINGFA(const bool bFRect // 风管形状 , const double& dDN // 圆风管公称 , const double& dL // 方风管长 , const double& dW // 方风管宽 ) { #ifdef _DEBUG acutPrintf(_T("\n makeSHISHIBAOJINGFA!")); #endif AecDbEwEquipment* pEqu(MKValve::makeBaseEquiment(_T("SHISHIBAOJINGFA"), true)); if (!pEqu) return NULL; AcGeVector3d X(AcGeVector3d::kXAxis), Y(AcGeVector3d::kYAxis), Z(AcGeVector3d::kZAxis); AcGePoint3d pt0(AcGePoint3d::kOrigin); // 法兰 AecEqui::XCylinder CylFlange; memset(&CylFlange, 0, sizeof(AecEqui::XCylinder)); CylFlange.dr = 200; CylFlange.dH = 100; AcGeVector3d vtFlange; for (int i = 0; i < 2; ++i) { vtFlange = Z * 900 * i; AecEqui::XPrimData dataFlange; dataFlange.m_eType = AecEqui::kCylinder; dataFlange.m_iClr = 50; dataFlange.m_bBoolSubtract = FALSE; dataFlange.m_vtMove = vtFlange; setData(&dataFlange, &CylFlange); pEqu->AddSubPrimObj(&dataFlange); clearData(dataFlange); } // 颈部 AecEqui::XCylinder CylNeck; memset(&CylNeck, 0, sizeof(AecEqui::XCylinder)); CylNeck.dr = 100; CylNeck.dH = 800; AcGeVector3d vtNeck(Z * CylFlange.dH); AecEqui::XPrimData dataNeck; dataNeck.m_eType = AecEqui::kCylinder; dataNeck.m_iClr = 50; dataNeck.m_bBoolSubtract = FALSE; dataNeck.m_vtMove = vtNeck; setData(&dataNeck, &CylNeck); pEqu->AddSubPrimObj(&dataNeck); clearData(dataNeck); // 腹部 AecEqui::XCylinder CylAbdomen; memset(&CylAbdomen, 0, sizeof(AecEqui::XCylinder)); CylAbdomen.dr = 150; CylAbdomen.dH = 100; AcGeVector3d vtAbdomen(Z * 450); AecEqui::XPrimData dataAbdomen; dataAbdomen.m_eType = AecEqui::kCylinder; dataAbdomen.m_iClr = 50; dataAbdomen.m_bBoolSubtract = FALSE; dataAbdomen.m_vtMove = vtAbdomen; setData(&dataAbdomen, &CylAbdomen); pEqu->AddSubPrimObj(&dataAbdomen); clearData(dataAbdomen); // 阀门 AecEqui::XCylinder CylValve; memset(&CylValve, 0, sizeof(AecEqui::XCylinder)); CylValve.dr = 25; CylValve.dH = 300; AcGeVector3d vtValve(Z * 500); AecEqui::XPrimData dataValve; dataValve.m_eType = AecEqui::kCylinder; dataValve.m_iClr = 50; dataValve.m_bBoolSubtract = FALSE; dataValve.m_vtMove = vtValve; dataValve.m_ptRotation.set(.0, PI * -.5, .0); setData(&dataValve, &CylValve); pEqu->AddSubPrimObj(&dataValve); clearData(dataValve); // 警报器 AecEqui::XCylinder CylAlarm; memset(&CylAlarm, 0, sizeof(AecEqui::XCylinder)); CylAlarm.dr = 50; CylAlarm.dH = 300; AcGeVector3d vtAlarm(Z * 500); AecEqui::XPrimData dataAlarm; dataAlarm.m_eType = AecEqui::kCylinder; dataAlarm.m_iClr = 50; dataAlarm.m_bBoolSubtract = FALSE; dataAlarm.m_vtMove = vtAlarm; dataAlarm.m_ptRotation.set(PI * .5, .0, .0); setData(&dataAlarm, &CylAlarm); pEqu->AddSubPrimObj(&dataAlarm); clearData(dataAlarm); return pEqu; } AecDbEwEquipment* makeGANSHIBAOJINGFA(const bool bFRect // 风管形状 , const double& dDN // 圆风管公称 , const double& dL // 方风管长 , const double& dW // 方风管宽 ) { #ifdef _DEBUG acutPrintf(_T("\n makeGANSHIBAOJINGFA!")); #endif AecDbEwEquipment* pEqu(MKValve::makeBaseEquiment(_T("GANSHIBAOJINGFA"), true)); if (!pEqu) return NULL; AcGeVector3d X(AcGeVector3d::kXAxis), Y(AcGeVector3d::kYAxis), Z(AcGeVector3d::kZAxis); AcGePoint3d pt0(AcGePoint3d::kOrigin); AcGeVector3d vtFlange; // 法兰 AecEqui::XCylinder CylFlangeOut; memset(&CylFlangeOut, 0, sizeof(AecEqui::XCylinder)); CylFlangeOut.dr = 200; CylFlangeOut.dH = 50; AecEqui::XPrimData dataFlangeOut; dataFlangeOut.m_eType = AecEqui::kCylinder; dataFlangeOut.m_iClr = 50; dataFlangeOut.m_bBoolSubtract = FALSE; //dataFlangeOut.m_vtMove = vtFlange; setData(&dataFlangeOut, &CylFlangeOut); pEqu->AddSubPrimObj(&dataFlangeOut); clearData(dataFlangeOut); AecEqui::XCylinder CylFlangeIn; memset(&CylFlangeIn, 0, sizeof(AecEqui::XCylinder)); CylFlangeIn.dr = 180; CylFlangeIn.dH = 50; AecEqui::XPrimData dataFlangeIn; dataFlangeIn.m_eType = AecEqui::kCylinder; dataFlangeIn.m_iClr = 50; dataFlangeIn.m_bBoolSubtract = TRUE; //dataFlangeIn.m_vtMove = vtFlange; setData(&dataFlangeIn, &CylFlangeIn); pEqu->AddSubPrimObj(&dataFlangeIn); clearData(dataFlangeIn); for (int i = 0; i < 2; ++i) { } return pEqu; } AecDbEwEquipment* makeYUZUOYONGBAOJINGFA(const bool bFRect // 风管形状 , const double& dDN // 圆风管公称 , const double& dL // 方风管长 , const double& dW // 方风管宽 ) { #ifdef _DEBUG acutPrintf(_T("\n makeYUZUOYONGBAOJINGFA!")); #endif AecDbEwEquipment* pEqu(MKValve::makeBaseEquiment(_T("YUZUOYONGBAOJINGFA"), true)); if (!pEqu) return NULL; AcGeVector3d X(AcGeVector3d::kXAxis), Y(AcGeVector3d::kYAxis), Z(AcGeVector3d::kZAxis); AcGePoint3d pt0(AcGePoint3d::kOrigin); AecEqui::XCylinder CylNLB; memset(&CylNLB, 0, sizeof(AecEqui::XCylinder)); CylNLB.dr = 100; CylNLB.dH = 1000; AecEqui::XPrimData dataNLB; dataNLB.m_eType = AecEqui::kCylinder; dataNLB.m_iClr = 50; dataNLB.m_bBoolSubtract = FALSE; setData(&dataNLB, &CylNLB); pEqu->AddSubPrimObj(&dataNLB); clearData(dataNLB); return pEqu; } AecDbEwEquipment* makeYULINBAOJINGFA(const bool bFRect // 风管形状 , const double& dDN // 圆风管公称 , const double& dL // 方风管长 , const double& dW // 方风管宽 ) { #ifdef _DEBUG acutPrintf(_T("\n makeYULINBAOJINGFA!")); #endif AecDbEwEquipment* pEqu(MKValve::makeBaseEquiment(_T("YULINBAOJINGFA"), true)); if (!pEqu) return NULL; AcGeVector3d X(AcGeVector3d::kXAxis), Y(AcGeVector3d::kYAxis), Z(AcGeVector3d::kZAxis); AcGePoint3d pt0(AcGePoint3d::kOrigin); // AecEqui::XCylinder CylNLB; memset(&CylNLB, 0, sizeof(AecEqui::XCylinder)); CylNLB.dr = 100; CylNLB.dH = 1000; AecEqui::XPrimData dataNLB; dataNLB.m_eType = AecEqui::kCylinder; dataNLB.m_iClr = 50; dataNLB.m_bBoolSubtract = FALSE; setData(&dataNLB, &CylNLB); pEqu->AddSubPrimObj(&dataNLB); clearData(dataNLB); return pEqu; } }