//取消选取 void DcGp::DcGpPointCloud::CancelChoosed() { if (!IsChoosed()) { return; } //取消每个点的选取状态 std::fill_n(m_pDcGpPointCloudImpl->m_pointsChoosedState.begin(), Size(), false); //清空每个点的选取颜色 if (HasColors() && GetColorMode() == eTrueLinearColor) { m_pDcGpPointCloudImpl->m_choosedColors = m_pDcGpPointCloudImpl->m_rgbColors; } else if (GetColorMode() == eFalseRangeColor || GetColorMode() == eFalseHeightColor || GetColorMode() == eFalseScalarColor) { m_pDcGpPointCloudImpl->m_choosedColors = m_pDcGpPointCloudImpl->m_scalarColors; } else { PointColor color = {GetTempColor()[0], GetTempColor()[1], GetTempColor()[2]}; std::fill_n(m_pDcGpPointCloudImpl->m_choosedColors.begin(), Size(), color); } }
//设置指定点的选中状态 void DcGp::DcGpPointCloud::SetPointChoosed(unsigned index, bool status) { if (GetPointVisibility(index) == DCCore::POINT_VISIBLE) { m_pDcGpPointCloudImpl->m_pointsChoosedState[index] = status; //设置选取点的颜色 if (status) { m_pDcGpPointCloudImpl->m_choosedColors[index][0] = 255; m_pDcGpPointCloudImpl->m_choosedColors[index][1] = 0; m_pDcGpPointCloudImpl->m_choosedColors[index][2] = 0; } else { if (HasColors() && GetColorMode() == eTrueLinearColor) { m_pDcGpPointCloudImpl->m_choosedColors[index] = m_pDcGpPointCloudImpl->m_rgbColors[index]; } else if (GetColorMode() == eFalseRangeColor || GetColorMode() == eFalseHeightColor || GetColorMode() == eFalseScalarColor) { m_pDcGpPointCloudImpl->m_choosedColors[index] = m_pDcGpPointCloudImpl->m_scalarColors[index]; } else { m_pDcGpPointCloudImpl->m_choosedColors[index][0] = GetTempColor()[0]; m_pDcGpPointCloudImpl->m_choosedColors[index][1] = GetTempColor()[1]; m_pDcGpPointCloudImpl->m_choosedColors[index][2] = GetTempColor()[2]; } } } }
INT WINAPI StartRecording(HIDS* m_hCam, const char* strFilePath, INT quality) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); INT result = IS_SUCCESS; if (!m_nAviID) { result = isavi_InitAVI(&m_nAviID, *m_hCam); } if (result == IS_AVI_NO_ERR) { // Query image buffer geometry int nWidth, nHeight, xPos, yPos; int pnX, pnY, pnBits, pnPitch; is_InquireImageMem (*m_hCam, m_pcImageMemory, m_lMemoryId, &pnX,&pnY, &pnBits, &pnPitch); GetImageSize( *m_hCam, nWidth, nHeight ); // Derive pixel pitch from buffer byte pitch INT pPitchPx=0; pPitchPx = (pnPitch * 8 ) / pnBits; nWidth = nWidth /8 * 8; // width has to be a multiple of 8 INT LineOffsetPx = pPitchPx - nWidth ; // Get actual framerate double newFPS; GetFrameRate(*m_hCam, newFPS); // Get image position GetImagePos(*m_hCam, xPos, yPos); pnX = pnX == nWidth ? 0 : xPos; pnY = pnY == nHeight ? 0 : yPos; // Get color mode INT cMode = GetColorMode(*m_hCam); result |= isavi_SetImageSize( m_nAviID, cMode, nWidth, nHeight, pnX, pnY, LineOffsetPx); result |= isavi_OpenAVI(m_nAviID, strFilePath); // TODO image quality is hard coded to 75 for now result |= isavi_SetImageQuality (m_nAviID, quality); result |= isavi_SetFrameRate(*m_hCam, newFPS); result |= isavi_StartAVI(m_nAviID); // Set recording to true m_bRecording = TRUE; PostThreadMessage(m_renderThread->m_nThreadID, IS_THREAD_MESSAGE, IS_RECORDING, (LPARAM) m_bRecording); // Send avi id to render thread PostThreadMessage(m_renderThread->m_nThreadID, IS_THREAD_MESSAGE, SET_AVI_ID, (LPARAM) m_nAviID); TRACE("Recording started\n"); } return result; }
//刷新选取颜色 void DcGp::DcGpPointCloud::RefreshChoosedColor() { if (m_pDcGpPointCloudImpl->m_choosedColors.size() == 0) { return; } switch (GetColorMode()) { case eAmplitudeLinearColor: break; case eFalseRangeColor: m_pDcGpPointCloudImpl->m_choosedColors = m_pDcGpPointCloudImpl->m_scalarColors; break; case eFalseHeightColor: m_pDcGpPointCloudImpl->m_choosedColors = m_pDcGpPointCloudImpl->m_scalarColors; break; case eFalseScalarColor: m_pDcGpPointCloudImpl->m_choosedColors = m_pDcGpPointCloudImpl->m_scalarColors; break; case eTrueLinearColor: if (HasColors()) { //如果数据有真实颜色 for (unsigned i = 0; i < Size(); ++i) { if (false == m_pDcGpPointCloudImpl->m_pointsChoosedState[i]) { m_pDcGpPointCloudImpl->m_choosedColors[i] = m_pDcGpPointCloudImpl->m_rgbColors[i]; } } } else { //数据没有真实颜色 for (unsigned i = 0; i < Size(); ++i) { if (false == m_pDcGpPointCloudImpl->m_pointsChoosedState[i]) { m_pDcGpPointCloudImpl->m_choosedColors[i] = GetTempColor(); } } } break; case eTrueLogarithmicColor: break; case eSingleColor: for (unsigned i = 0; i < Size(); ++i) { if (false == m_pDcGpPointCloudImpl->m_pointsChoosedState[i]) { m_pDcGpPointCloudImpl->m_choosedColors[i] = GetTempColor(); } } break; case eDeviationColor: break; default: break; } }