#include "stdafx.h" #include "StdArx.h" #include "math.h" #include "CDSTDlg.h" #include "ZJSTDlg.h" #include "AcDbX3dSolid.h" #include "AecDbX3dPartEntity.h" #include "KTCadUtility.h" #include "KTCADUtilityEx.h" #include "CoreTools.h" #include "GiDrawUtility.h" CCDSTDlg *g_pCDSTDlg = NULL; #ifndef ITEM_ROOT #define ITEM_ROOT 0 #endif #ifndef ITEM_ITEM #define ITEM_ITEM 1 #endif #ifndef ITEM_ITEMSEL #define ITEM_ITEMSEL 2 #endif int g_nSTNo = 1; IMPLEMENT_DYNAMIC(CCDSTDlg, CDialog) CCDSTDlg::CCDSTDlg(CWnd* pParent/* = NULL*/) : CDialog(CCDSTDlg::IDD, pParent) , m_dMove(.0) , m_dRotate(.0) , m_nMoveMode(0) , m_nRotateMode(0) , m_sPoolSize(_T("")) , m_sNo(_T("S-001")) , m_sMaterial(_T("混凝土")) { m_pBasinCln = NULL; memset(&m_poolData,0,sizeof(PoolData)); m_vtDirX.set(1,0,0); m_vtDirY.set(0,1,0); g_nSTNo++; m_sNo.Format(_T("S-%d"),g_nSTNo); } CCDSTDlg::~CCDSTDlg(void) { } void CCDSTDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_Control(pDX, IDC_TREE1, m_wndModelTree); DDX_Radio(pDX, IDC_RADIO1, m_nMoveMode); DDX_Radio(pDX, IDC_RADIO4, m_nRotateMode); DDX_Text(pDX, IDC_EDIT19, m_dMove); DDV_MinMaxDouble(pDX, IDC_EDIT19, .1, 1000000); DDX_Text(pDX, IDC_EDIT4, m_dRotate); DDV_MinMaxDouble(pDX, IDC_EDIT4, .1, 1000000); DDX_Text(pDX, IDC_EDIT1, m_sPoolSize); DDX_Text(pDX, IDC_EDIT6, m_sNo); DDX_CBString(pDX, IDC_COMBO1, m_sMaterial); } BEGIN_MESSAGE_MAP(CCDSTDlg, CDialog) ON_WM_CLOSE() ON_BN_CLICKED(IDOK, &CCDSTDlg::OnBnClickedOk) ON_BN_CLICKED(IDCANCEL, &CCDSTDlg::OnBnClickedCancel) ON_BN_CLICKED(IDC_BUTTON2, &CCDSTDlg::OnBnClickedButton2) ON_BN_CLICKED(IDC_BUTTON7, &CCDSTDlg::OnBnClickedButton7) ON_BN_CLICKED(IDC_BUTTON8, &CCDSTDlg::OnBnClickedButton8) ON_BN_CLICKED(IDC_BUTTON9, &CCDSTDlg::OnBnClickedButton9) ON_BN_CLICKED(IDC_BUTTON11, &CCDSTDlg::OnBnClickedButton11) ON_BN_CLICKED(IDC_BUTTON12, &CCDSTDlg::OnBnClickedButton12) ON_BN_CLICKED(IDC_BUTTON31, &CCDSTDlg::OnBnClickedButton31) ON_BN_CLICKED(IDC_BUTTON34, &CCDSTDlg::OnBnClickedButton34) ON_BN_CLICKED(IDC_BUTTON27, &CCDSTDlg::OnBnClickedButton27) ON_BN_CLICKED(IDC_BUTTON28, &CCDSTDlg::OnBnClickedButton28) ON_BN_CLICKED(IDC_BUTTON3, &CCDSTDlg::OnBnClickedButton3) ON_BN_CLICKED(IDC_BUTTON10, &CCDSTDlg::OnBnClickedButton10) ON_NOTIFY(NM_CLICK, IDC_TREE1, &CCDSTDlg::OnNMClickTree1) ON_MESSAGE(WM_ACAD_KEEPFOCUS, &CCDSTDlg::onAcadKeepFocus) END_MESSAGE_MAP() BOOL CCDSTDlg::OnInitDialog() { CDialog::OnInitDialog(); UpdateData(FALSE); CBitmap bmp; if (!bmp.LoadBitmap (IDB_BITMAPPRIV)) { AfxMessageBox(_T ("Can't load bitmap IDB_BITMAPPRIV")); ASSERT (FALSE); return FALSE; } BITMAP bmpObj; bmp.GetBitmap (&bmpObj); UINT nFlags = ILC_COLOR24 | ILC_MASK; m_Imagelist.Create (16, bmpObj.bmHeight, nFlags, 0, 0); m_Imagelist.Add (&bmp, RGB (255, 0, 0)); m_wndModelTree.SetImageList(&m_Imagelist,TVSIL_NORMAL); m_wndModelTree.InsertItem(_T("素砼"),ITEM_ROOT,ITEM_ROOT); ShowTreeView(); return TRUE; } void CCDSTDlg::SetPoolBasin(AecDbXSlab* pBasinCln,const AcDbObjectId& idBasinOld) { m_idBasinOld = idBasinOld; if (pBasinCln != NULL) { m_pBasinCln = pBasinCln; m_pBasinCln->GetBasinSlabData(m_poolData); m_ptOrg = m_pBasinCln->GetBasinOrg();//底板中心 m_vtDirX = m_pBasinCln->GetBasinXDir(); m_vtDirX.normalize(); m_vtDirY = m_vtDirX; m_vtDirY.rotateBy(PI / 2.0,AcGeVector3d::kZAxis); double dEl = m_poolData.m_dBomEl; dEl += m_poolData.m_dBomThick;//到达内底 m_ptOrg.z = dEl;// } OPENOBJ_BEGIN(m_idBasinOld, AcDb::kForRead, AecDbXSlab, pEnt) { if (pEnt) { ESection es = pEnt->GetBasinShape(); m_ePoolSec = es; switch (es) { case eRect: m_sPoolSize.Format(_T("内长x内宽:%.2fx%.2f"), m_poolData.m_dData[0], m_poolData.m_dData[1]); break; case eCircle: m_sPoolSize.Format(_T("内半径:%.2f"), m_poolData.m_dData[2] - m_poolData.m_dWallThick); break; case eEllispe: m_sPoolSize.Format(_T("内长轴x内短轴:%.2fx%.2f"), m_poolData.m_dData[2], m_poolData.m_dData[2] * m_poolData.m_dData[3]); break; case eUserDef: case eRightTri: case eEquilTri: case eTrape: case eTriangle: case eXShape: m_sPoolSize.Format(_T("异形")); break; default: break; } } } OPENOBJ_END() UpdateData(FALSE); if (m_wndModelTree.GetRootItem() == NULL) m_wndModelTree.InsertItem(_T("素砼"),ITEM_ROOT,ITEM_ROOT); ShowTreeView(); } void CCDSTDlg::ShowTreeView() { CString sName; OPENOBJ_BEGIN(m_idBasinOld, AcDb::kForRead, AecDbXSlab, pPool) { if (!pPool) return; int nCount = pPool->GetAssocPartCount(); AcDbObjectId id(AcDbObjectId::kNull); for (int i = 0; i < nCount; i++) { pPool->GetAssocPart(i, id); OPENOBJ_BEGIN(id, AcDb::kForRead, AecDbX3dPartEntity, pXPart) { if (pXPart) { sName = pXPart->GetName(); if (sName.Find(_T("素砼")) != -1) InsertTreeView(sName, id); } } OPENOBJ_END() } } OPENOBJ_END() } void CCDSTDlg::OnBnClickedOk() { OnClose(); } void CCDSTDlg::InsertTreeView(LPCTSTR pszName,AcDbObjectId& id) { HTREEITEM hItem = m_wndModelTree.InsertItem(pszName, ITEM_ITEM,ITEM_ITEMSEL, m_wndModelTree.GetRootItem()); if (hItem) m_wndModelTree.SetItemData(hItem, (DWORD_PTR)id.asOldId()); m_wndModelTree.Expand(m_wndModelTree.GetRootItem(), TVE_EXPAND); } //直角 void CCDSTDlg::OnBnClickedButton2() { CZJSTDlg dlg; dlg.m_dLen = m_poolData.m_dData[0]; if (IDOK != dlg.DoModal()) return; CreateRightTriangle(dlg); acedPostCommand(_T("regen ")); } //三角 void CCDSTDlg::OnBnClickedButton7() { CSJSTDlg dlg; dlg.m_dL = (int)(m_poolData.m_dData[0]+0.5); if (IDOK != dlg.DoModal()) return; CreateTriangle(dlg); acedPostCommand(_T("regen ")); } //矩形 void CCDSTDlg::OnBnClickedButton8() { CJXSTDlg dlg; dlg.m_dW = (int)(m_poolData.m_dData[0] + 0.5); dlg.m_dL = (int)(m_poolData.m_dData[1] + 0.5); if (IDOK != dlg.DoModal()) return; CreateRect(dlg); acedPostCommand(_T("regen ")); } //梯形 void CCDSTDlg::OnBnClickedButton9() { CTXSTDlg dlg; dlg.m_dL = (int)(m_poolData.m_dData[0] + 0.5); if (IDOK != dlg.DoModal()) return; CreateTrapezoid(dlg); acedPostCommand(_T("regen ")); } //自定义 void CCDSTDlg::OnBnClickedButton11() { CYXSTDlg dlg; dlg.m_dL = (int)(m_poolData.m_dData[0] + 0.5); if (IDOK != dlg.DoModal()) return; ShowWindow(SW_HIDE); CreateUserDef(dlg); ShowWindow(SW_SHOW); acedPostCommand(_T("regen ")); } // 四角 void CCDSTDlg::OnBnClickedButton12() { C4JSTDlg dlg; if (IDOK != dlg.DoModal()) return; Create4Angle(dlg); acedPostCommand(_T("regen ")); } //移动 void CCDSTDlg::OnBnClickedButton31() { AcAxDocLock lock; UpdateData(TRUE); AcGeVector3d vt(AcGeVector3d::kXAxis); switch (m_nMoveMode) { case 0: vt = AcGeVector3d::kXAxis * m_dMove; break; case 1: vt = AcGeVector3d::kYAxis * m_dMove; break; case 2: vt = AcGeVector3d::kZAxis * m_dMove; break; default: break; } AcDbObjectId id(GetSelectID()); OPENOBJ_BEGIN(id, AcDb::kForWrite, AecDbX3dPartEntity, pEnt) { if (!pEnt) return; pEnt->AddMove(vt); pEnt->Create(); } OPENOBJ_END() acedPostCommand(_T("regen ")); } //移动复位 void CCDSTDlg::OnBnClickedButton34() { AcAxDocLock lock; AcDbObjectId id(GetSelectID()); OPENOBJ_BEGIN(id, AcDb::kForWrite, AecDbX3dPartEntity, pEnt) { if (!pEnt) return; pEnt->ResetMove(); pEnt->Create(); } OPENOBJ_END() acedPostCommand(_T("regen ")); } //旋转 void CCDSTDlg::OnBnClickedButton27() { AcAxDocLock lock; UpdateData(TRUE); AcGeVector3d vt(AcGeVector3d::kXAxis); switch (m_nRotateMode) { case 0: vt = AcGeVector3d::kXAxis; break; case 1: vt = AcGeVector3d::kYAxis; break; case 2: vt = AcGeVector3d::kZAxis; break; default: break; } AcDbObjectId id(GetSelectID()); OPENOBJ_BEGIN(id, AcDb::kForWrite, AecDbX3dPartEntity, pEnt) { if (!pEnt) return; pEnt->AddRotate(m_nRotateMode, (m_dRotate * PI )/ 180); pEnt->SetAxis(m_nRotateMode, vt); pEnt->Create(); } OPENOBJ_END() acedPostCommand(_T("regen ")); } //旋转复位 void CCDSTDlg::OnBnClickedButton28() { AcAxDocLock lock; UpdateData(TRUE); AcDbObjectId id(GetSelectID()); OPENOBJ_BEGIN(id, AcDb::kForWrite, AecDbX3dPartEntity, pEnt) { if (!pEnt) return; pEnt->ResetRotation(m_nRotateMode); pEnt->Create(); } OPENOBJ_END() acedPostCommand(_T("regen ")); } // 修改 void CCDSTDlg::OnBnClickedButton3() { AcAxDocLock lock; AcDbObjectId id(GetSelectID()); OPENOBJ_BEGIN(id, AcDb::kForWrite, AecDbX3dPartEntity, pEnt) { if (!pEnt) return; int se; pEnt->GetSpecialtyData()->GetAt(KEY_SECSHAPE, se); switch ((ESection)se) { case eRightTri: { CZJSTDlg dlg; pEnt->GetSpecialtyData()->GetAt(KEY_X, dlg.m_dX); pEnt->GetSpecialtyData()->GetAt(KEY_Y, dlg.m_dY); pEnt->GetSpecialtyData()->GetAt(KEY_L, dlg.m_dLen); pEnt->GetSpecialtyData()->GetAt(KEY_CLASS, dlg.m_nPos); if (dlg.DoModal() != IDOK) return; CreateRightTriangle(dlg); } break; case eRect: { CJXSTDlg dlg; pEnt->GetSpecialtyData()->GetAt(KEY_SIZE1, dlg.m_dW); pEnt->GetSpecialtyData()->GetAt(KEY_SIZE2, dlg.m_dH); pEnt->GetSpecialtyData()->GetAt(KEY_SIZE3, dlg.m_dL); pEnt->GetSpecialtyData()->GetAt(KEY_CLASS, dlg.m_nMode); if (dlg.DoModal() != IDOK) return; CreateRect(dlg); } break; case eTriangle: { CSJSTDlg dlg; pEnt->GetSpecialtyData()->GetAt(KEY_SIZE1, dlg.m_dC); pEnt->GetSpecialtyData()->GetAt(KEY_SIZE2, dlg.m_dH); pEnt->GetSpecialtyData()->GetAt(KEY_SIZE3, dlg.m_dL); pEnt->GetSpecialtyData()->GetAt(KEY_CLASS, dlg.m_nMode); if (dlg.DoModal() != IDOK) return; CreateTriangle(dlg); } break; case eTrape: { CTXSTDlg dlg; pEnt->GetSpecialtyData()->SetAt(KEY_CLASS, dlg.m_nMode); pEnt->GetSpecialtyData()->SetAt(KEY_SIZE1, dlg.m_dT); pEnt->GetSpecialtyData()->SetAt(KEY_SIZE2, dlg.m_dB); pEnt->GetSpecialtyData()->SetAt(KEY_SIZE3, dlg.m_dH); pEnt->GetSpecialtyData()->SetAt(KEY_X, dlg.m_dL); if (dlg.DoModal() != IDOK) return; CreateTrapezoid(dlg); } break; case eUserDef: { CYXSTDlg dlg; if (dlg.DoModal() != IDOK) return; CreateUserDef(dlg); } break; default: { C4JSTDlg dlg; if (dlg.DoModal() != IDOK) return; Create4Angle(dlg); } break; } RemoveAssocPartForPool(id); DelCurTreeItem(); pEnt->erase(); } OPENOBJ_END() acedPostCommand(_T("regen ")); } // 删除 void CCDSTDlg::OnBnClickedButton10() { AcAxDocLock lock; AcDbObjectId id(GetSelectID()); OPENOBJ_BEGIN(id, AcDb::kForWrite, AecDbX3dPartEntity, pEnt) { if (!pEnt) return; RemoveAssocPartForPool(id); pEnt->erase(); DelCurTreeItem(); } OPENOBJ_END() acedPostCommand(_T("regen ")); } void CCDSTDlg::OnNMClickTree1(NMHDR *pNMHDR, LRESULT *pResult) { CPoint point,ptcursor; ::GetCursorPos(&point); ptcursor = point; m_wndModelTree.ScreenToClient(&point); UINT uFlags; HTREEITEM hItem = m_wndModelTree.HitTest(point,&uFlags); if (hItem == m_hItemCur) { return; } m_hItemCur = hItem; ClickTreeItem(hItem); *pResult = 0; } void CCDSTDlg::ClickTreeItem(HTREEITEM hItem) { AcDbObjectId id(AcDbObjectId::kNull); Adesk::IntDbId ii = m_wndModelTree.GetItemData(hItem); id.setFromOldId(ii); CKTCadUtility::HighLightEntity(id, TRUE, acDocManager->curDocument()); } LONG_PTR CCDSTDlg::onAcadKeepFocus(UINT_PTR, LONG_PTR) { POINT pt; ::GetCursorPos(&pt); CRect rect; GetWindowRect(&rect); if (!(rect.PtInRect(pt))) { return FALSE; } //如果当前有命令在执行中,提示 struct resbuf rb; acedGetVar(_T("CMDNAMES"), &rb); if (rb.restype == RTSTR && rb.resval.rstring != NULL) { if (_tcslen(rb.resval.rstring) > 0) { acedPostCommand(_T("\x03")); } } return TRUE; } void CCDSTDlg::OnBnClickedCancel() { OnClose(); } void CCDSTDlg::OnClose() { ShowWindow(SW_HIDE); } AcDbObjectId CCDSTDlg::GetSelectID() { AcDbObjectId id(AcDbObjectId::kNull); HTREEITEM hRoot = m_wndModelTree.GetRootItem(); HTREEITEM hItem(m_hItemCur); if (!hItem || hRoot == hItem) { AfxMessageBox(_T("请选择一个素砼!")); return id; } Adesk::IntDbId ii = (Adesk::IntDbId)m_wndModelTree.GetItemData(hItem); id.setFromOldId(ii); if (!id.isValid()) { AfxMessageBox(_T("选择的素砼无效!")); return id; } return id; } void CCDSTDlg::DelCurTreeItem() { HTREEITEM hRoot = m_wndModelTree.GetRootItem(); HTREEITEM hItem = m_wndModelTree.GetSelectedItem(); if (!hItem || hRoot == hItem) { AfxMessageBox(_T("请选择一个素砼!")); } m_wndModelTree.DeleteItem(hItem); m_wndModelTree.Expand(hRoot, TVE_EXPAND); } void CCDSTDlg::CreateRightTriangle(CZJSTDlg & dlg) { AecDbX3dPartEntity* pPart = new AecDbX3dPartEntity; pPart->SetName(_T("直角素砼")); pPart->GetSpecialtyData()->SetAt(KEY_NO,m_sNo); pPart->GetSpecialtyData()->SetAt(KEY_SECSHAPE, eRightTri); pPart->GetSpecialtyData()->SetAt(KEY_CLASS, dlg.m_nPos); pPart->GetSpecialtyData()->SetAt(KEY_X, dlg.m_dX); pPart->GetSpecialtyData()->SetAt(KEY_Y, dlg.m_dY); pPart->GetSpecialtyData()->SetAt(KEY_L, dlg.m_dLen); pPart->GetSpecialtyData()->SetAt(KEY_MATERIAL,m_sMaterial); AcDbObjectId id; AcGePoint3d ptFr(m_ptOrg), ptPoints[4]; AcGeVector3d vtLinePath; AcDbX3dSolid *pSolid(NULL); AcDbEntity *pEnt(NULL); if (dlg.m_nPos == 0 || dlg.m_nPos == 4) // left { ptFr = m_ptOrg; ptFr -= m_vtDirX * 0.5 * m_poolData.m_dData[0]; ptFr -= m_vtDirY * 0.5 * m_poolData.m_dData[1]; ptPoints[0] = ptFr; ptPoints[1] = ptPoints[0]; ptPoints[1].z += dlg.m_dY; ptPoints[2] = ptPoints[0]; ptPoints[2] += dlg.m_dX * m_vtDirX; vtLinePath = m_vtDirY; vtLinePath *= dlg.m_nPos == 0 ? dlg.m_dLen : m_poolData.m_dData[1]; pSolid = new AcDbX3dSolid; pSolid->CreateFenceExtrude(ptFr, ptPoints, 3, vtLinePath, 1.0); pPart->AddX3dSolid(pSolid); } if (dlg.m_nPos == 1 || dlg.m_nPos == 4) // right { ptFr = m_ptOrg; ptFr += m_vtDirX * 0.5 * m_poolData.m_dData[0]; ptFr -= m_vtDirY * 0.5 * m_poolData.m_dData[1]; ptPoints[0] = ptFr; ptPoints[1] = ptPoints[0]; ptPoints[1].z += dlg.m_dY; ptPoints[2] = ptPoints[0]; ptPoints[2] -= dlg.m_dX * m_vtDirX; vtLinePath = m_vtDirY; vtLinePath *= dlg.m_nPos == 1 ? dlg.m_dLen : m_poolData.m_dData[1]; pSolid = new AcDbX3dSolid; pSolid->CreateFenceExtrude(ptFr, ptPoints, 3, vtLinePath, 1.0); pPart->AddX3dSolid(pSolid); } if (dlg.m_nPos == 2 || dlg.m_nPos == 4) // top { ptFr = m_ptOrg; ptFr -= m_vtDirX * 0.5 * m_poolData.m_dData[0]; ptFr += m_vtDirY * 0.5 * m_poolData.m_dData[1]; ptPoints[0] = ptFr; ptPoints[1] = ptPoints[0]; ptPoints[1].z += dlg.m_dY; ptPoints[2] = ptPoints[0]; ptPoints[2] -= dlg.m_dX * m_vtDirY; vtLinePath = m_vtDirX; vtLinePath *= dlg.m_nPos == 2 ? dlg.m_dLen : m_poolData.m_dData[0]; pSolid = new AcDbX3dSolid; pSolid->CreateFenceExtrude(ptFr, ptPoints, 3, vtLinePath, 1.0); pPart->AddX3dSolid(pSolid); } if (dlg.m_nPos == 3 || dlg.m_nPos == 4) // bottom { ptFr = m_ptOrg; ptFr -= m_vtDirX * 0.5 * m_poolData.m_dData[0]; ptFr -= m_vtDirY * 0.5 * m_poolData.m_dData[1]; ptPoints[0] = ptFr; ptPoints[1] = ptPoints[0]; ptPoints[1].z += dlg.m_dY; ptPoints[2] = ptPoints[0]; ptPoints[2] += dlg.m_dX * m_vtDirY; vtLinePath = m_vtDirX; vtLinePath *= dlg.m_nPos == 3 ? dlg.m_dLen : m_poolData.m_dData[0]; pSolid = new AcDbX3dSolid; pSolid->CreateFenceExtrude(ptFr, ptPoints, 3, vtLinePath, 1.0); pPart->AddX3dSolid(pSolid); } pPart->Create(); AcAxDocLock lock; CKTCadUtility::AddToBlockTableRecord(pPart); id = pPart->objectId(); pPart->close(); if (Acad::eOk == acdbOpenAcDbEntity(pEnt, m_idBasinOld, AcDb::kForWrite)) { AecDbXSlab* pBasin = AecDbXSlab::cast(pEnt); if (pBasin != NULL) { pBasin->AppendAssocPart(id); } pEnt->close(); } InsertTreeView(pPart->GetName(), id); } void CCDSTDlg::CreateRect(CJXSTDlg & dlg) { AecDbX3dPartEntity* pPart = new AecDbX3dPartEntity; pPart->SetName(_T("矩形素砼")); pPart->GetSpecialtyData()->SetAt(KEY_NO,m_sNo); pPart->GetSpecialtyData()->SetAt(KEY_SECSHAPE, eRect); pPart->GetSpecialtyData()->SetAt(KEY_CLASS, dlg.m_nMode); pPart->GetSpecialtyData()->SetAt(KEY_SIZE1, dlg.m_dW); pPart->GetSpecialtyData()->SetAt(KEY_SIZE2, dlg.m_dH); pPart->GetSpecialtyData()->SetAt(KEY_SIZE3, dlg.m_dL); pPart->GetSpecialtyData()->SetAt(KEY_MATERIAL,m_sMaterial); AcDbObjectId id; AcGePoint3d ptFr(m_ptOrg), ptPoints[4]; AcGeVector3d vtLinePath, vtZ(AcGeVector3d::kZAxis); AcDbX3dSolid *pSolid(NULL); AcDbEntity *pEnt(NULL); if (dlg.m_nMode == 0 || dlg.m_nMode == 4) // left { ptFr = m_ptOrg; ptFr -= m_vtDirX * 0.5 * m_poolData.m_dData[0]; ptFr -= m_vtDirY * 0.5 * m_poolData.m_dData[1]; ptPoints[0] = ptFr; ptPoints[1] = ptPoints[0] + vtZ * dlg.m_dH; ptPoints[2] = ptPoints[1] + m_vtDirX * dlg.m_dW; ptPoints[3] = ptPoints[2] - vtZ * dlg.m_dH; vtLinePath = m_vtDirY; vtLinePath *= dlg.m_nMode == 0 ? dlg.m_dL : m_poolData.m_dData[1]; pSolid = new AcDbX3dSolid; pSolid->CreateFenceExtrude(ptFr, ptPoints, 4, vtLinePath, 1.0); pPart->AddX3dSolid(pSolid); } if (dlg.m_nMode == 1 || dlg.m_nMode== 4) // right { ptFr = m_ptOrg; ptFr += m_vtDirX * 0.5 * m_poolData.m_dData[0]; ptFr -= m_vtDirY * 0.5 * m_poolData.m_dData[1]; ptPoints[0] = ptFr; ptPoints[1] = ptPoints[0] + vtZ * dlg.m_dH; ptPoints[2] = ptPoints[1] - m_vtDirX * dlg.m_dW; ptPoints[3] = ptPoints[2] - vtZ * dlg.m_dH; vtLinePath = m_vtDirY; vtLinePath *= dlg.m_nMode == 1 ? dlg.m_dL : m_poolData.m_dData[1]; pSolid = new AcDbX3dSolid; pSolid->CreateFenceExtrude(ptFr, ptPoints, 4, vtLinePath, 1.0); pPart->AddX3dSolid(pSolid); } if (dlg.m_nMode== 2 || dlg.m_nMode== 4) // top { ptFr = m_ptOrg; ptFr -= m_vtDirX * 0.5 * m_poolData.m_dData[0]; ptFr += m_vtDirY * 0.5 * m_poolData.m_dData[1]; ptPoints[0] = ptFr; ptPoints[1] = ptPoints[0] + vtZ * dlg.m_dH; ptPoints[2] = ptPoints[1] - m_vtDirY * dlg.m_dW; ptPoints[3] = ptPoints[2] - vtZ * dlg.m_dH; vtLinePath = m_vtDirX; vtLinePath *= dlg.m_nMode == 2 ? dlg.m_dL : m_poolData.m_dData[0]; pSolid = new AcDbX3dSolid; pSolid->CreateFenceExtrude(ptFr, ptPoints, 4, vtLinePath, 1.0); pPart->AddX3dSolid(pSolid); } if (dlg.m_nMode== 3 || dlg.m_nMode== 4) // bottom { ptFr = m_ptOrg; ptFr -= m_vtDirX * 0.5 * m_poolData.m_dData[0]; ptFr -= m_vtDirY * 0.5 * m_poolData.m_dData[1]; ptPoints[0] = ptFr; ptPoints[1] = ptPoints[0] + vtZ * dlg.m_dH; ptPoints[2] = ptPoints[1] + m_vtDirY * dlg.m_dW; ptPoints[3] = ptPoints[2] - vtZ * dlg.m_dH; vtLinePath = m_vtDirX; vtLinePath *= dlg.m_nMode == 3 ? dlg.m_dL : m_poolData.m_dData[0]; pSolid = new AcDbX3dSolid; pSolid->CreateFenceExtrude(ptFr, ptPoints, 4, vtLinePath, 1.0); pPart->AddX3dSolid(pSolid); } pPart->Create(); AcAxDocLock lock; CKTCadUtility::AddToBlockTableRecord(pPart); id = pPart->objectId(); pPart->close(); if (Acad::eOk == acdbOpenAcDbEntity(pEnt, m_idBasinOld, AcDb::kForWrite)) { AecDbXSlab* pBasin = AecDbXSlab::cast(pEnt); if (pBasin != NULL) { pBasin->AppendAssocPart(id); } pEnt->close(); } InsertTreeView(pPart->GetName(), id); } void CCDSTDlg::CreateTriangle(CSJSTDlg & dlg) { AecDbX3dPartEntity* pPart = new AecDbX3dPartEntity; pPart->SetName(_T("三角素砼")); pPart->GetSpecialtyData()->SetAt(KEY_NO,m_sNo); pPart->GetSpecialtyData()->SetAt(KEY_SECSHAPE, eTriangle); pPart->GetSpecialtyData()->SetAt(KEY_CLASS, dlg.m_nMode); pPart->GetSpecialtyData()->SetAt(KEY_SIZE1, dlg.m_dC); pPart->GetSpecialtyData()->SetAt(KEY_SIZE2, dlg.m_dH); pPart->GetSpecialtyData()->SetAt(KEY_SIZE3, dlg.m_dL); pPart->GetSpecialtyData()->SetAt(KEY_MATERIAL,m_sMaterial); AcDbObjectId id; AcGePoint3d ptFr(m_ptOrg), ptPoints[4]; AcGeVector3d vtLinePath, vtZ(AcGeVector3d::kZAxis), vtX(m_vtDirX), vtY(m_vtDirY); AcDbX3dSolid *pSolid(NULL); AcDbEntity *pEnt(NULL); double angle = atan(2 * dlg.m_dH / dlg.m_dC); double a = dlg.m_dH / sin(angle); AcGeVector3d vt1(vtX), vt2(-vtY); vt1.rotateBy(angle, -vtY); vt2.rotateBy(angle, -vtX); if (dlg.m_nMode == 0 || dlg.m_nMode == 4) // left { ptFr = m_ptOrg; ptFr -= m_vtDirX * 0.5 * m_poolData.m_dData[0]; ptFr -= m_vtDirY * 0.5 * m_poolData.m_dData[1]; ptPoints[0] = ptFr; ptPoints[1] = ptPoints[0] + vtX * dlg.m_dC; ptPoints[2] = ptPoints[0] + vt1 * a; vtLinePath = m_vtDirY; vtLinePath *= dlg.m_nMode == 0 ? dlg.m_dL : m_poolData.m_dData[1]; pSolid = new AcDbX3dSolid; pSolid->CreateFenceExtrude(ptFr, ptPoints, 3, vtLinePath, 1.0); pPart->AddX3dSolid(pSolid); } if (dlg.m_nMode == 1 || dlg.m_nMode == 4) // right { ptFr = m_ptOrg; ptFr += m_vtDirX * 0.5 * m_poolData.m_dData[0]; ptFr -= m_vtDirY * 0.5 * m_poolData.m_dData[1]; ptPoints[0] = ptFr; ptPoints[1] = ptPoints[0] - vtX * dlg.m_dC; ptPoints[2] = ptPoints[1] + vt1 * a; vtLinePath = m_vtDirY; vtLinePath *= dlg.m_nMode == 1 ? dlg.m_dL : m_poolData.m_dData[1]; pSolid = new AcDbX3dSolid; pSolid->CreateFenceExtrude(ptFr, ptPoints, 3, vtLinePath, 1.0); pPart->AddX3dSolid(pSolid); } if (dlg.m_nMode == 2 || dlg.m_nMode == 4) // top { ptFr = m_ptOrg; ptFr -= m_vtDirX * 0.5 * m_poolData.m_dData[0]; ptFr += m_vtDirY * 0.5 * m_poolData.m_dData[1]; ptPoints[0] = ptFr; ptPoints[1] = ptPoints[0] - vtY * dlg.m_dC; ptPoints[2] = ptPoints[0] + vt2 * a; vtLinePath = m_vtDirX; vtLinePath *= dlg.m_nMode == 2 ? dlg.m_dL : m_poolData.m_dData[0]; pSolid = new AcDbX3dSolid; pSolid->CreateFenceExtrude(ptFr, ptPoints, 3, vtLinePath, 1.0); pPart->AddX3dSolid(pSolid); } if (dlg.m_nMode == 3 || dlg.m_nMode == 4) // bottom { ptFr = m_ptOrg; ptFr -= m_vtDirX * 0.5 * m_poolData.m_dData[0]; ptFr -= m_vtDirY * 0.5 * m_poolData.m_dData[1]; ptPoints[0] = ptFr; ptPoints[1] = ptPoints[0] + vtY * dlg.m_dC; ptPoints[2] = ptPoints[1] + vt2 * a; vtLinePath = m_vtDirX; vtLinePath *= dlg.m_nMode == 3 ? dlg.m_dL : m_poolData.m_dData[0]; pSolid = new AcDbX3dSolid; pSolid->CreateFenceExtrude(ptFr, ptPoints, 3, vtLinePath, 1.0); pPart->AddX3dSolid(pSolid); } pPart->Create(); AcAxDocLock lock; CKTCadUtility::AddToBlockTableRecord(pPart); id = pPart->objectId(); pPart->close(); if (Acad::eOk == acdbOpenAcDbEntity(pEnt, m_idBasinOld, AcDb::kForWrite)) { AecDbXSlab* pBasin = AecDbXSlab::cast(pEnt); if (pBasin != NULL) { pBasin->AppendAssocPart(id); } pEnt->close(); } InsertTreeView(pPart->GetName(), id); } void CCDSTDlg::CreateTrapezoid(CTXSTDlg & dlg) { AecDbX3dPartEntity* pPart = new AecDbX3dPartEntity; pPart->SetName(_T("梯形素砼")); pPart->GetSpecialtyData()->SetAt(KEY_NO,m_sNo); pPart->GetSpecialtyData()->SetAt(KEY_SECSHAPE, eTrape); pPart->GetSpecialtyData()->SetAt(KEY_CLASS, dlg.m_nMode); pPart->GetSpecialtyData()->SetAt(KEY_SIZE1, dlg.m_dT); pPart->GetSpecialtyData()->SetAt(KEY_SIZE2, dlg.m_dB); pPart->GetSpecialtyData()->SetAt(KEY_SIZE3, dlg.m_dH); pPart->GetSpecialtyData()->SetAt(KEY_X, dlg.m_dL); pPart->GetSpecialtyData()->SetAt(KEY_MATERIAL,m_sMaterial); AcDbObjectId id; AcGePoint3d ptFr(m_ptOrg), ptPoints[4]; AcGeVector3d vtLinePath, vtZ(AcGeVector3d::kZAxis), vtX(m_vtDirX), vtY(m_vtDirY); AcDbX3dSolid *pSolid(NULL); AcDbEntity *pEnt(NULL); if (dlg.m_nMode == 0 || dlg.m_nMode == 4) // left { ptFr = m_ptOrg; ptFr -= m_vtDirX * 0.5 * m_poolData.m_dData[0]; ptFr -= m_vtDirY * 0.5 * m_poolData.m_dData[1]; ptPoints[0] = ptFr; ptPoints[1] = ptPoints[0] + vtZ * dlg.m_dH; ptPoints[2] = ptPoints[1] + vtX * dlg.m_dT; ptPoints[3] = ptPoints[0] + vtX * dlg.m_dB; vtLinePath = m_vtDirY; vtLinePath *= dlg.m_nMode == 0 ? dlg.m_dL : m_poolData.m_dData[1]; pSolid = new AcDbX3dSolid; pSolid->CreateFenceExtrude(ptFr, ptPoints, 4, vtLinePath, 1.0); pPart->AddX3dSolid(pSolid); } if (dlg.m_nMode == 1 || dlg.m_nMode == 4) // right { ptFr = m_ptOrg; ptFr += m_vtDirX * 0.5 * m_poolData.m_dData[0]; ptFr -= m_vtDirY * 0.5 * m_poolData.m_dData[1]; ptPoints[0] = ptFr; ptPoints[1] = ptPoints[0] + vtZ * dlg.m_dH; ptPoints[2] = ptPoints[1] - vtX * dlg.m_dT; ptPoints[3] = ptPoints[0] - vtX * dlg.m_dB; vtLinePath = m_vtDirY; vtLinePath *= dlg.m_nMode == 1 ? dlg.m_dL : m_poolData.m_dData[1]; pSolid = new AcDbX3dSolid; pSolid->CreateFenceExtrude(ptFr, ptPoints, 4, vtLinePath, 1.0); pPart->AddX3dSolid(pSolid); } if (dlg.m_nMode == 2 || dlg.m_nMode == 4) // top { ptFr = m_ptOrg; ptFr -= m_vtDirX * 0.5 * m_poolData.m_dData[0]; ptFr += m_vtDirY * 0.5 * m_poolData.m_dData[1]; ptPoints[0] = ptFr; ptPoints[1] = ptPoints[0] + vtZ * dlg.m_dH; ptPoints[2] = ptPoints[1] - vtY * dlg.m_dT; ptPoints[3] = ptPoints[0] - vtY * dlg.m_dB; vtLinePath = m_vtDirX; vtLinePath *= dlg.m_nMode == 2 ? dlg.m_dL : m_poolData.m_dData[0]; pSolid = new AcDbX3dSolid; pSolid->CreateFenceExtrude(ptFr, ptPoints, 4, vtLinePath, 1.0); pPart->AddX3dSolid(pSolid); } if (dlg.m_nMode == 3 || dlg.m_nMode == 4) // bottom { ptFr = m_ptOrg; ptFr -= m_vtDirX * 0.5 * m_poolData.m_dData[0]; ptFr -= m_vtDirY * 0.5 * m_poolData.m_dData[1]; ptPoints[0] = ptFr; ptPoints[1] = ptPoints[0] + vtZ * dlg.m_dH; ptPoints[2] = ptPoints[1] + vtY * dlg.m_dT; ptPoints[3] = ptPoints[0] + vtY * dlg.m_dB; vtLinePath = m_vtDirX; vtLinePath *= dlg.m_nMode == 3 ? dlg.m_dL : m_poolData.m_dData[0]; pSolid = new AcDbX3dSolid; pSolid->CreateFenceExtrude(ptFr, ptPoints, 4, vtLinePath, 1.0); pPart->AddX3dSolid(pSolid); } pPart->Create(); AcAxDocLock lock; CKTCadUtility::AddToBlockTableRecord(pPart); id = pPart->objectId(); pPart->close(); if (Acad::eOk == acdbOpenAcDbEntity(pEnt, m_idBasinOld, AcDb::kForWrite)) { AecDbXSlab* pBasin = AecDbXSlab::cast(pEnt); if (pBasin != NULL) { pBasin->AppendAssocPart(id); } pEnt->close(); } InsertTreeView(pPart->GetName(), id); } void CCDSTDlg::Create4Angle(C4JSTDlg & dlg) { AecDbX3dPartEntity* pPart = new AecDbX3dPartEntity; pPart->SetName(_T("四角素砼")); pPart->GetSpecialtyData()->SetAt(KEY_NO,m_sNo); pPart->GetSpecialtyData()->SetAt(KEY_SECSHAPE, eXShape); pPart->GetSpecialtyData()->SetAt(KEY_CLASS, dlg.m_nMode); pPart->GetSpecialtyData()->SetAt(KEY_SIZE1, dlg.m_dC); //pPart->GetSpecialtyData()->SetAt(KEY_SIZE2, dlg.m_dL); pPart->GetSpecialtyData()->SetAt(KEY_MATERIAL,m_sMaterial); AcDbObjectId id; AcGePoint3d ptFr(m_ptOrg), ptPoints[4]; AcGeVector3d vt(.5, .5, .5), vtZ(AcGeVector3d::kZAxis), vtX(m_vtDirX), vtY(m_vtDirY); AcDbX3dSolid *pSolid(NULL); AcDbEntity *pEnt(NULL); AcDbRegion *pReg1(NULL), *pReg2(NULL); AcDbVoidPtrArray curves; double c(dlg.m_dC); double a = c / 1.41421; double b = .5 * c / cos(PI / 6); double h = sqrt(a * a - b * b); vt.normalize(); AcGePoint3d pt0, pt1, pt2, pt3; if (dlg.m_nMode == 0 || dlg.m_nMode == 4) // left down { ptFr = m_ptOrg; ptFr -= m_vtDirX * 0.5 * m_poolData.m_dData[0]; ptFr -= m_vtDirY * 0.5 * m_poolData.m_dData[1]; pt0 = ptFr; pt1 = ptFr + vtX * a; pt2 = ptFr + vtY * a; pt3 = ptFr + vtZ * a; pSolid = new AcDbX3dSolid; pSolid->CreateTriangularPyramid(pt0, pt1, pt2, pt3); pPart->AddX3dSolid(pSolid); } if (dlg.m_nMode == 1 || dlg.m_nMode == 4) // left up { ptFr = m_ptOrg; ptFr -= m_vtDirX * 0.5 * m_poolData.m_dData[0]; ptFr += m_vtDirY * 0.5 * m_poolData.m_dData[1]; pt0 = ptFr; pt1 = ptFr + vtX * a; pt2 = ptFr - vtY * a; pt3 = ptFr + vtZ * a; pSolid = new AcDbX3dSolid; pSolid->CreateTriangularPyramid(pt0, pt1, pt2, pt3); pPart->AddX3dSolid(pSolid); } if (dlg.m_nMode == 2 || dlg.m_nMode == 4) // right down { ptFr = m_ptOrg; ptFr += m_vtDirX * 0.5 * m_poolData.m_dData[0]; ptFr -= m_vtDirY * 0.5 * m_poolData.m_dData[1]; pt0 = ptFr; pt1 = ptFr - vtX * a; pt2 = ptFr + vtY * a; pt3 = ptFr + vtZ * a; pSolid = new AcDbX3dSolid; pSolid->CreateTriangularPyramid(pt0, pt1, pt2, pt3); pPart->AddX3dSolid(pSolid); } if (dlg.m_nMode == 3 || dlg.m_nMode == 4) // right up { ptFr = m_ptOrg; ptFr += m_vtDirX * 0.5 * m_poolData.m_dData[0]; ptFr += m_vtDirY * 0.5 * m_poolData.m_dData[1]; pt0 = ptFr; pt1 = ptFr - vtX * a; pt2 = ptFr - vtY * a; pt3 = ptFr + vtZ * a; pSolid = new AcDbX3dSolid; pSolid->CreateTriangularPyramid(pt0, pt1, pt2, pt3); pPart->AddX3dSolid(pSolid); } pPart->Create(); AcAxDocLock lock; CKTCadUtility::AddToBlockTableRecord(pPart); id = pPart->objectId(); pPart->close(); if (Acad::eOk == acdbOpenAcDbEntity(pEnt, m_idBasinOld, AcDb::kForWrite)) { AecDbXSlab* pBasin = AecDbXSlab::cast(pEnt); if (pBasin != NULL) { pBasin->AppendAssocPart(id); } pEnt->close(); } InsertTreeView(pPart->GetName(), id); } void CCDSTDlg::CreateUserDef(CYXSTDlg & dlg) { // 选PLine线 ads_name ent; ads_point adsPt; if (acedEntSel(_T("\n请选择在XOY面上的闭合多段线:"), ent, adsPt) != RTNORM) return; AcDbObjectId idPoly(AcDbObjectId::kNull); acdbGetObjectId(idPoly, ent); if (!idPoly.isValid()) return; AcDbRegion *pReg(NULL); OPENOBJ_BEGIN(idPoly, AcDb::kForRead, AcDbCurve, pPoly) { if (!pPoly || !pPoly->isClosed()) { AfxMessageBox(_T("请选择一段闭合多段线!")); return; } pReg = CoreTools::createRegion(pPoly); if (!pReg) { ads_printf(_T("\n创建截面失败!")); return; } } OPENOBJ_END() AcDbExtents ext; AcGePoint3d ptMaxXZY(AcGePoint3d::kOrigin), ptMaxYZX(AcGePoint3d::kOrigin) , ptMinXZY(AcGePoint3d::kOrigin), ptMinYZX(AcGePoint3d::kOrigin); AcDbRegion *pXZY((AcDbRegion*)pReg->clone()), *pYZX((AcDbRegion*)pReg->clone()); DELETE_PTR(pReg); // 通过pReg创建出两个不同坐标系的region 分别是 (X,Z,-Y) (-Y,Z,-X) AcGeMatrix3d mat; mat.setToAlignCoordSys(AcGePoint3d::kOrigin , AcGeVector3d::kXAxis , AcGeVector3d::kYAxis , AcGeVector3d::kZAxis , AcGePoint3d::kOrigin , AcGeVector3d::kXAxis , AcGeVector3d::kZAxis , -AcGeVector3d::kYAxis); pXZY->transformBy(mat); pXZY->getGeomExtents(ext); ptMaxXZY = ext.maxPoint(); ptMinXZY = ext.minPoint(); mat = AcGeMatrix3d::kIdentity; mat.setToAlignCoordSys(AcGePoint3d::kOrigin , AcGeVector3d::kXAxis , AcGeVector3d::kYAxis , AcGeVector3d::kZAxis , AcGePoint3d::kOrigin , -AcGeVector3d::kYAxis , AcGeVector3d::kZAxis , -AcGeVector3d::kXAxis); pYZX->transformBy(mat); pYZX->getGeomExtents(ext); ptMaxYZX.transformBy(mat); ptMinYZX.transformBy(mat); AecDbX3dPartEntity* pPart = new AecDbX3dPartEntity; pPart->SetName(_T("异形素砼")); pPart->GetSpecialtyData()->SetAt(KEY_NO,m_sNo); pPart->GetSpecialtyData()->SetAt(KEY_SECSHAPE, eUserDef); pPart->GetSpecialtyData()->SetAt(KEY_CLASS, dlg.m_nMode); pPart->GetSpecialtyData()->SetAt(KEY_X, dlg.m_dL); pPart->GetSpecialtyData()->SetAt(KEY_MATERIAL,m_sMaterial); AcGePoint3d ptFr(m_ptOrg); AcGeVector3d vtLinePath, vtZ(AcGeVector3d::kZAxis), vtX(m_vtDirX), vtY(m_vtDirY), vtMove; AcDbX3dSolid *pSolid(NULL); if (dlg.m_nMode == 0 || dlg.m_nMode == 4) { ptFr = m_ptOrg; ptFr -= m_vtDirX * 0.5 * m_poolData.m_dData[0]; ptFr -= m_vtDirY * 0.5 * m_poolData.m_dData[1]; // 将 pXZY minpt 移动到 ptFr vtMove = ptFr - ptMinXZY; pXZY->transformBy(vtMove); vtLinePath = m_vtDirY; vtLinePath *= dlg.m_nMode == 0 ? dlg.m_dL : m_poolData.m_dData[1]; pSolid = new AcDbX3dSolid; pSolid->CreateExtrude(pXZY, AcDbLine(ptFr, ptFr + vtLinePath)); pPart->AddX3dSolid(pSolid); } if (dlg.m_nMode == 1 || dlg.m_nMode == 4) { ptFr = m_ptOrg; ptFr += m_vtDirX * 0.5 * m_poolData.m_dData[0]; ptFr -= m_vtDirY * 0.5 * m_poolData.m_dData[1]; // 将 pXZY maxpt 移动到 ptFr vtMove = ptFr - ptMaxXZY; pXZY->transformBy(vtMove); vtLinePath = m_vtDirY; vtLinePath *= dlg.m_nMode == 1 ? dlg.m_dL : m_poolData.m_dData[1]; pSolid = new AcDbX3dSolid; pSolid->CreateExtrude(pXZY, AcDbLine(ptFr, ptFr + vtLinePath)); pPart->AddX3dSolid(pSolid); } if (dlg.m_nMode == 2 || dlg.m_nMode == 4) { ptFr = m_ptOrg; ptFr -= m_vtDirX * 0.5 * m_poolData.m_dData[0]; ptFr += m_vtDirY * 0.5 * m_poolData.m_dData[1]; // 将 pYZX minpt 移动到 ptFr vtMove = ptFr - ptMinYZX; pYZX->transformBy(vtMove); vtLinePath = m_vtDirX; vtLinePath *= dlg.m_nMode == 2 ? dlg.m_dL : m_poolData.m_dData[0]; pSolid = new AcDbX3dSolid; pSolid->CreateExtrude(pYZX, AcDbLine(ptFr, ptFr + vtLinePath)); pPart->AddX3dSolid(pSolid); } if (dlg.m_nMode == 3 || dlg.m_nMode == 4) { ptFr = m_ptOrg; ptFr -= m_vtDirX * 0.5 * m_poolData.m_dData[0]; ptFr -= m_vtDirY * 0.5 * m_poolData.m_dData[1]; // 将 pYZX maxpt 移动到 ptFr vtMove = ptFr - ptMaxYZX; pYZX->transformBy(vtMove); vtLinePath = m_vtDirX; vtLinePath *= dlg.m_nMode == 3 ? dlg.m_dL : m_poolData.m_dData[0]; pSolid = new AcDbX3dSolid; pSolid->CreateExtrude(pYZX, AcDbLine(ptFr, ptFr + vtLinePath)); pPart->AddX3dSolid(pSolid); } DELETE_PTR(pXZY); DELETE_PTR(pYZX); pPart->Create(); AcAxDocLock lock; CKTCadUtility::AddToBlockTableRecord(pPart); AcDbObjectId id = pPart->objectId(); pPart->close(); AcDbEntity *pEnt(NULL); if (Acad::eOk == acdbOpenAcDbEntity(pEnt, m_idBasinOld, AcDb::kForWrite)) { AecDbXSlab* pBasin = AecDbXSlab::cast(pEnt); if (pBasin != NULL) { pBasin->AppendAssocPart(id); } pEnt->close(); } InsertTreeView(pPart->GetName(), id); } void CCDSTDlg::clear() { m_pBasinCln = NULL; memset(&m_poolData,0,sizeof(PoolData)); m_vtDirX.set(1,0,0); m_vtDirY.set(0,1,0); m_sPoolSize.Empty(); m_ptOrg = AcGePoint3d::kOrigin; m_idBasinOld = AcDbObjectId::kNull; m_hItemCur = NULL; m_wndModelTree.DeleteAllItems(); m_nMoveMode = 0; m_nRotateMode = 0; m_dMove = .0; m_dRotate = .0; } void CCDSTDlg::RemoveAssocPartForPool(AcDbObjectId & idPart) { OPENOBJ_BEGIN(m_idBasinOld, AcDb::kForWrite, AecDbXSlab, pPool) { if (!pPool) return; pPool->RemoveAssocPart(idPart); } OPENOBJ_END() }