/** * \brief Unserialize the layer. */ void Layer::UnserializeFrom(const SerializerElement & element) { SetName(element.GetStringAttribute("name", "", "Name")); SetVisibility(element.GetBoolAttribute("visibility", true, "Visibility")); //Compatibility with GD <= 3.3 if (element.HasChild("Camera")) { for (std::size_t i = 0; i < element.GetChildrenCount("Camera"); ++i) { const SerializerElement & cameraElement = element.GetChild("Camera", i); SetCameraCount(GetCameraCount()+1); Camera & camera = GetCamera(GetCameraCount()-1); camera.SetUseDefaultSize(cameraElement.GetBoolAttribute("DefaultSize", true)); camera.SetSize(cameraElement.GetDoubleAttribute("Width"), cameraElement.GetDoubleAttribute("Height")); camera.SetUseDefaultViewport(cameraElement.GetBoolAttribute("DefaultViewport", true)); camera.SetViewport(cameraElement.GetDoubleAttribute("ViewportLeft"), cameraElement.GetDoubleAttribute("ViewportTop"), cameraElement.GetDoubleAttribute("ViewportRight"), cameraElement.GetDoubleAttribute("ViewportBottom") ); // (sf::Rect used Right and Bottom instead of Width and Height before) } } //End of compatibility code else { SerializerElement & camerasElement = element.GetChild("cameras"); camerasElement.ConsiderAsArrayOf("camera"); for (std::size_t i = 0; i < camerasElement.GetChildrenCount(); ++i) { const SerializerElement & cameraElement = camerasElement.GetChild(i); SetCameraCount(GetCameraCount()+1); Camera & camera = GetCamera(GetCameraCount()-1); camera.SetUseDefaultSize(cameraElement.GetBoolAttribute("defaultSize", true)); camera.SetSize(cameraElement.GetDoubleAttribute("width"), cameraElement.GetDoubleAttribute("height")); camera.SetUseDefaultViewport(cameraElement.GetBoolAttribute("defaultViewport", true)); camera.SetViewport(cameraElement.GetDoubleAttribute("viewportLeft"), cameraElement.GetDoubleAttribute("viewportTop"), cameraElement.GetDoubleAttribute("viewportRight"), cameraElement.GetDoubleAttribute("viewportBottom")); // (sf::Rect used Right and Bottom instead of Width and Height before) } } effects.clear(); SerializerElement & effectsElement = element.GetChild("effects"); effectsElement.ConsiderAsArrayOf("effect"); for (std::size_t i = 0; i < effectsElement.GetChildrenCount(); ++i) { const SerializerElement & effectElement = effectsElement.GetChild(i); auto effect = std::shared_ptr<gd::Effect>(new Effect); effect->UnserializeFrom(effectElement); effects.push_back(effect); } }
void Layer::SerializeTo(SerializerElement& element) const { element.SetAttribute("name", GetName()); element.SetAttribute("visibility", GetVisibility()); SerializerElement& camerasElement = element.AddChild("cameras"); camerasElement.ConsiderAsArrayOf("camera"); for (std::size_t c = 0; c < GetCameraCount(); ++c) { SerializerElement& cameraElement = camerasElement.AddChild("camera"); cameraElement.SetAttribute("defaultSize", GetCamera(c).UseDefaultSize()); cameraElement.SetAttribute("width", GetCamera(c).GetWidth()); cameraElement.SetAttribute("height", GetCamera(c).GetHeight()); cameraElement.SetAttribute("defaultViewport", GetCamera(c).UseDefaultViewport()); cameraElement.SetAttribute("viewportLeft", GetCamera(c).GetViewportX1()); cameraElement.SetAttribute("viewportTop", GetCamera(c).GetViewportY1()); cameraElement.SetAttribute("viewportRight", GetCamera(c).GetViewportX2()); cameraElement.SetAttribute("viewportBottom", GetCamera(c).GetViewportY2()); } SerializerElement& effectsElement = element.AddChild("effects"); effectsElement.ConsiderAsArrayOf("effect"); for (std::size_t i = 0; i < GetEffectsCount(); ++i) { SerializerElement& effectElement = effectsElement.AddChild("effect"); GetEffect(i).SerializeTo(effectElement); } }
/************************************ * 设备初始化 *************************************/ bool CCommon::InitialDevice(CComboBox &m_cbDevice, LONG * width, LONG * height) { LONG w = 0, h = 0; bool m_bCameraOpen = false; int cam_count = GetCameraCount();//仅仅获取摄像头数目 m_cbDevice.SetDroppedWidth(cam_count); //获取所有摄像头的名称 for(int i=0; i < cam_count; i++) { char camera_name[1024]; int retval = GetCameraName(i, camera_name, sizeof(camera_name)); if(retval >0) { CString str,str_camera_name; str_camera_name = CCommon::Char2CString(camera_name); //防止摄像头名称太长,超出显示区域 int spaceNum = str_camera_name.Find(" "); CString strTemp = str_camera_name.Mid(0,spaceNum); str.Format("[%d] %s",i,strTemp); m_cbDevice.InsertString(i,str.GetBuffer(0)); } } if(cam_count > 0) { CString camera = CCommon::GetReg("Camera"); int m_iCameraIndex = atoi(CCommon::CString2Char(camera));//注册表获取摄像头id if(m_iCameraIndex < 0 || m_iCameraIndex > cam_count - 1) m_iCameraIndex = 0; m_cbDevice.SetCurSel(m_iCameraIndex);//设置默认选中第一个摄像头,现在从配置文件读取 //打开第一个摄像头 if(OpenCameraCB(m_iCameraIndex, false, &w,&h)) //不弹出属性选择窗口,用代码制定图像宽和高 { m_bCameraOpen = TRUE; } if(m_bCameraOpen == false) { for(int k = 0; k < cam_count; k++) { //打开第一个摄像头 if(OpenCameraCB(k, false, &w, &h)) //不弹出属性选择窗口,用代码制定图像宽和高 { m_bCameraOpen = TRUE; break; } } if(m_bCameraOpen == false && cam_count> 0) { //AfxMessageBox("摄像头初始化失败", MB_OK, MB_ICONINFORMATION); //OnOK(); *width = w; *width = h; return false; } } } *width = w; *height = h; return true; }
int CCommon::GetCamNum() { int cam_count = GetCameraCount();//仅仅获取摄像头数目 return cam_count; }