#include "stdafx.h" #include "ItemWellGroupEdit.h" #include "ActionDeleteItem.h" CItemWellGroupEdit::CItemWellGroupEdit(CSigmaDoc * ppDoc) :CItemSelect(ppDoc) { m_pWellGroupOne = nullptr; this->SetType(ITEM_WELL_GROUP_EDIT); } CItemWellGroupEdit::~CItemWellGroupEdit(void) { if (m_pWellGroupOne != nullptr) { delete m_pWellGroupOne; m_pWellGroupOne = nullptr; } } int CItemWellGroupEdit::DeleteSelection(void) { if (GetItemForGrid()) this->DeleteItemGrid(); //GetDoc()->InvalidateDelete(m_selection); if (m_selection.IsEmpty()) return 0; int nResult = m_selection.GetSize(); POSITION posSelect = m_selection.GetHead(); for (int i = 0; i < m_pDoc->m_BranchElements.size(); i++) { WellGroupBranchStruct branchInfo = m_pDoc->m_BranchElements[i]; if (posSelect == branchInfo.DataPosition) { if (branchInfo.DataType <= 3) { m_selection.RemoveAll(); for (int j = 0; j < m_pDoc->m_BranchElements.size(); j++) { if (m_pDoc->m_BranchElements[j].BranchIndex == branchInfo.BranchIndex) { m_selection.AddTail(m_pDoc->m_BranchElements[j].DataPosition); } } break; } } } CActionDeleteItem * deleteItem = new CActionDeleteItem(GetDoc(), IDS_STRING_ACTION_DELETE, m_selection); GetDoc()->SetActionItem(deleteItem); for (int i = (int)m_pDoc->m_BranchElements.size() - 1; i >= 0; i--) { POSITION posList = m_selection.GetHeadPosition(); while (posList != nullptr) { POSITION posFind = m_selection.GetNext(posList); if (posFind == m_pDoc->m_BranchElements[i].DataPosition) { m_pDoc->m_BranchElements.erase(m_pDoc->m_BranchElements.begin() + i); } } } m_selection.RemoveAll(); m_Tracker.Clear(); return nResult; } int CItemWellGroupEdit::OnMouseMove(CDC * pDC, UINT nFlags, CPoint point) { int nElementCount = (int)GetDoc()->m_BranchElements.size(); CXy* pXy = GetDoc()->GetDraw(); for (POSITION pos = (m_selection).GetHeadPosition(); pos != nullptr; (m_selection).GetNext(pos)) { POSITION posOne = m_selection.GetAt(pos); for (auto &item : GetDoc()->m_BranchElements) { if (item.DataPosition == posOne && item.DataType == 0) { return 0; } } } return CItemSelect::OnMouseMove(pDC, nFlags, point); } BOOL CItemWellGroupEdit::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) { int nElementCount = (int)GetDoc()->m_BranchElements.size(); CXy* pXy = GetDoc()->GetDraw(); for (POSITION pos = (m_selection).GetHeadPosition(); pos != nullptr; (m_selection).GetNext(pos)) { POSITION posOne = m_selection.GetAt(pos); for (auto &item : GetDoc()->m_BranchElements) { if (item.DataPosition == posOne && item.DataType == 0) { return false; } } } return CItemSelect::OnKeyDown(nChar, nRepCnt, nFlags); } void CItemWellGroupEdit::SetBranchHorizonLength(double curveLength, POSITION pos) { for (int i = 0; i < m_pDoc->m_BranchElements.size(); i++) { POSITION posFind = m_pDoc->m_BranchElements[i].DataPosition; if (pos == posFind) { if (m_pDoc->m_BranchElements[i].DataType == 1) { COne* pOne = m_pDoc->GetDraw()->GetAt(pos); CCurveEx* pCurve = (CCurveEx*)pOne->value; double dX1 = pCurve->x[0]; double dY1 = pCurve->y[0]; double dX2 = pCurve->x[1]; double dY2 = pCurve->y[1]; double dL = pCurve->Length(); if (dL == 0) { return; } double dX = (curveLength / dL)*(dX2 - dX1) + dX1; double dY = (curveLength / dL)*(dY2 - dY1) + dY1; pCurve->x[1] = dX; pCurve->y[1] = dY; for (int j = 0; j < m_pDoc->m_BranchElements.size(); j++) { if (m_pDoc->m_BranchElements[j].DataType == 3 && m_pDoc->m_BranchElements[j].BranchIndex== m_pDoc->m_BranchElements[i].BranchIndex) { COne* pOnePt = m_pDoc->GetDraw()->GetAt(m_pDoc->m_BranchElements[j].DataPosition); CPointNameEx* pPoint = (CPointNameEx*)pOnePt->value; pPoint->x0 = dX; pPoint->y0 = dY; } } } else if (m_pDoc->m_BranchElements[i].DataType == 0) { COne* pOne = m_pDoc->GetDraw()->GetAt(pos); CCurveEx* pCurve = (CCurveEx*)pOne->value; double dX1 = pCurve->x[0]; double dY1 = pCurve->y[0]; double dX2 = pCurve->x[1]; double dY2 = pCurve->y[1]; double dL = pCurve->Length(); if (dL == 0) { return; } double dX = (curveLength / dL)*(dX2 - dX1) + dX1; double dY = (curveLength / dL)*(dY2 - dY1) + dY1; pCurve->x[1] = dX; pCurve->y[1] = dY; for (int j = 0; j < m_pDoc->m_BranchElements.size(); j++) { if (m_pDoc->m_BranchElements[j].BranchIndex != m_pDoc->m_BranchElements[i].BranchIndex) { continue; } if (m_pDoc->m_BranchElements[j].DataType == 2) { COne* pOnePt = m_pDoc->GetDraw()->GetAt(m_pDoc->m_BranchElements[j].DataPosition); CPointNameEx* pPoint = (CPointNameEx*)pOnePt->value; pPoint->x0 = dX; pPoint->y0 = dY; } else if (m_pDoc->m_BranchElements[j].DataType == 1) { COne* pOneHori = m_pDoc->GetDraw()->GetAt(m_pDoc->m_BranchElements[j].DataPosition); CCurveEx* pCurveHori = (CCurveEx*)pOneHori->value; double dOffsetX = dX - pCurveHori->x[0]; double dOffsetY = dY - pCurveHori->y[0]; pCurveHori->x[0] = dX; pCurveHori->y[0] = dY; pCurveHori->x[1] = pCurveHori->x[1] + dOffsetX; pCurveHori->y[1] = pCurveHori->y[1] + dOffsetY; for (int k = 0; k < m_pDoc->m_BranchElements.size(); k++) { if (m_pDoc->m_BranchElements[k].BranchIndex == m_pDoc->m_BranchElements[i].BranchIndex && m_pDoc->m_BranchElements[k].DataType == 3) { COne* pOneEnd = m_pDoc->GetDraw()->GetAt(m_pDoc->m_BranchElements[k].DataPosition); CPointNameEx* ptEnd = (CPointNameEx*)pOneEnd->value; ptEnd->x0 = pCurveHori->x[1]; ptEnd->y0 = pCurveHori->y[1]; break; } } } } } break; } } } void CItemWellGroupEdit::SetData(BYTE* buffElement, int buffLen) { CXy* pXy = m_pDoc->GetDraw(); if (m_pWellGroupOne == nullptr) { m_pWellGroupOne = CreateOne(); } m_pWellGroupOne->ReadMemory(buffElement, 0, buffLen, 3); CWellGroup* pGroup = (CWellGroup*)m_pWellGroupOne->value; for (int i = 0; i < pGroup->WellBranches.size(); i++) { CCurveEx *pCurve = new CCurveEx; pCurve->Create(2); pCurve->x[0] = pGroup->x0; pCurve->y[0] = pGroup->y0; pCurve->x[1] = pGroup->WellBranches[i]->PointStart.x0; pCurve->y[1] = pGroup->WellBranches[i]->PointStart.y0; POSITION pos = pXy->AddElement(pCurve, DOUBLEFOX_CURVE); COne* pOneOffset = pXy->GetAt(pos); pOneOffset->HowToViewCurve = pGroup->WellBranches[i]->m_pHowTowViewCurveOffset; WellGroupBranchStruct branchStruct; branchStruct.BranchIndex = i; branchStruct.DataPosition = pos; branchStruct.DataType = 0; m_pDoc->m_BranchElements.push_back(branchStruct); CCurveEx *pCurveHori = new CCurveEx; pCurveHori->Create(2); pCurveHori->x[0] = pGroup->WellBranches[i]->PointStart.x0; pCurveHori->y[0] = pGroup->WellBranches[i]->PointStart.y0; pCurveHori->x[1] = pGroup->WellBranches[i]->PointEnd.x0; pCurveHori->y[1] = pGroup->WellBranches[i]->PointEnd.y0; POSITION posHori = pXy->AddElement(pCurveHori, DOUBLEFOX_CURVE); COne* pOneHori = pXy->GetAt(posHori); pOneHori->HowToViewCurve = pGroup->WellBranches[i]->m_pHowTowViewCurveHori; WellGroupBranchStruct branchStructHori; branchStructHori.BranchIndex = i; branchStructHori.DataPosition = posHori; branchStructHori.DataType = 1; m_pDoc->m_BranchElements.push_back(branchStructHori); // 入靶点 CPointNameEx* ptStart = new CPointNameEx; POSITION posPtStart = pXy->AddElement(ptStart, DOUBLEFOX_POINT); *ptStart = pGroup->WellBranches[i]->PointStart; if (pGroup->WellBranches[i]->m_pHowTowViewPointStart != nullptr) { CHowToViewPoint* pHowToViewPointStart = new CHowToViewPoint(); *pHowToViewPointStart = *(pGroup->WellBranches[i]->m_pHowTowViewPointStart); COne* pOnePtStart = pXy->GetAt(posPtStart); pOnePtStart->HowToViewPoint = pHowToViewPointStart; } WellGroupBranchStruct branchPtStart; branchPtStart.BranchIndex = i; branchPtStart.DataPosition = posPtStart; branchPtStart.DataType = 2; m_pDoc->m_BranchElements.push_back(branchPtStart); // 出靶点 CPointNameEx* ptEnd = new CPointNameEx; *ptEnd = pGroup->WellBranches[i]->PointEnd; POSITION posPtEnd = pXy->AddElement(ptEnd, DOUBLEFOX_POINT); if (pGroup->WellBranches[i]->m_pHowTowViewPointEnd != nullptr) { COne* pOnePtEnd = pXy->GetAt(posPtEnd); CHowToViewPoint* pHowToViewPointEnd = new CHowToViewPoint(); *pHowToViewPointEnd = *(pGroup->WellBranches[i]->m_pHowTowViewPointEnd); pOnePtEnd->HowToViewPoint = pHowToViewPointEnd; } WellGroupBranchStruct branchPtEnd; branchPtEnd.BranchIndex = i; branchPtEnd.DataPosition = posPtEnd; branchPtEnd.DataType = 3; m_pDoc->m_BranchElements.push_back(branchPtEnd); } // 井点 CPointNameEx* ptWell = new CPointNameEx; *ptWell = *((CPointNameEx*)pGroup); POSITION posPtWell = pXy->AddElement(ptWell, DOUBLEFOX_POINT); COne* pOnePtWell = pXy->GetAt(posPtWell); if (pGroup->m_pHowTowViewPointWell != nullptr) { CHowToViewPoint* pHowToViewPointWell = new CHowToViewPoint(); *pHowToViewPointWell = *pGroup->m_pHowTowViewPointWell; pOnePtWell->HowToViewPoint = pHowToViewPointWell; } WellGroupBranchStruct branchPtWell; branchPtWell.BranchIndex = -1; branchPtWell.DataPosition = posPtWell; branchPtWell.DataType = 4; m_pDoc->m_BranchElements.push_back(branchPtWell); } COne* CItemWellGroupEdit::CreateOne() { CWellGroup* pWellGroup = new CWellGroup; //pWellGroup->x0 = m_pt.x0; //pWellGroup->y0 = m_pt.y0; //pWellGroup->z0 = m_z; // m_pt.z0; //pWellGroup->angle = m_angle; //pWellGroup->SetName(m_pointName); COne* pOne = m_pDoc->GetDraw()->CreateOne(pWellGroup, WELL_GROUP); return pOne; }