CEGUI作用思考
guice的能力简述

guice的能⼒简述guice这个google出的bean容器框架,ES有⽤到他。
1. 是⼀个bean容器2. 能AOP1. 以module创建injector。
可以看成是⼀个容器。
Module需要⾃定义且继承⾃他的AbstractModule。
覆写config⽅法完成装配关系的确定。
详细参见2. 绑定顶层接⼝到具体实现类。
bind(TransactionLog.class).to(DatabaseTransactionLog.class); ⽀持bind(A).to(B) 然后链式的bind(B).to(C)3. ⽀持在构造函数上打上Inject注解标签,⽤于注⼊字段4. ⽀持⾃定义注解⽤于标志装配⽬标,⽐如⾃定义注解Paypal。
对于加了PayPal注解的参数,注⼊PaypalCreditCardProcessor实现,其余的注⼊GoogleCheckoutProcessor实现。
bind(CreditCardProcessor.class).annotatedWith(PayPal.class).to(PaypalCreditCardProcessor.class);5. 对于加了Named注解其值为testnamed的地⽅注⼊TestNamedCreditCardProcessor实现。
bind(CreditCardProcessor.class).annotatedWith(d("testnamed")).to(TestNamedCreditCardProcessor.class);6. 结合Named注解可以将⼀个参数绑定⼀个特定的instance ⽽不是⼀个实现类。
bind(Integer.class).annotatedWith(d("chargeTimeout")).toInstance(200);7. 可以使⽤Provides注解主动对外提供创建的bean 有点类似 Spring的@Bean注解,这种⽅式可以对bean做⾃定义加⼯。
在游戏中使用CEGUI —— 第一章(底层)

在游戏中使用“CEGUI”—第一章(底层)日期:2006/4/13 – 2006/10/10 本文首次刊登于《游戏创造》,现开放与大家共享,转载请注明出处。
作者介绍唐亮(千里马肝),四年游戏从业经验,曾任职于大宇软星科技(上海)有限公司任程序技术指导,现在ATI任Engineer,主要负责XP/Vista下的Display Driver。
迄今为止主要个人作品为《阿猫阿狗2》,参与开发《汉朝与罗马》、《阿猫阿狗大作战OLG》和《仙剑奇侠传4》,主要研究方向为C++、图形渲染技术和系统架构。
blog地址:简介CEGUI(Crazy Eddie’s GUI )是一个自由免费的GUI库,基于LGPL协议,使用C++实现,完全面向对象设计。
CEGUI开发者的目的是希望能够让游戏开发人员从繁琐的GUI实现细节中抽身出来,以便有更多的开发时间可以放在游戏性上。
CEGUI的渲染需要3D图形API的支持,如OpenGL或Direct3D。
另外,使用更高级的图形库也是可以的,像是OGRE、Irrlicht和RenderWare,关键需求可以简化为二点:1.纹理(Texture)的支持2.直接写屏(RHW的顶点格式、正交投影、或者使用shader实现)本文截止日时,CEGUI的最新版本是0.4.1(本文的讨论也是基于此版本),提供了SDK 和全部源码的下载,同时为了适应不同的使用需求,还根据STL的使用区分为Native(VC 自带的P.J. 版STL)和STLport(基于SGI STL实现的跨编译器版本,详细见),以及VC6.0、VC7.0、VC7.1和VC8.0几种。
除此之外,CEGUI还同步提供了官方界面编辑器LayoutEditor,以方便UI的制作,下载地址:/downloads/CELayoutEditorSetup_0.4.1.exe。
作为界面编辑器,它需要系统级界面以提供编辑器操作,在此之前的0.3.0版是基于MFC实现的;而在0.4.1版本中,改为基于wxWidgets(跨平台的本地UI框架,这里的UI指Window操作系统底层,如:Windows、Unix和Mac,详见)实现。
GUI(用户图形界面)

03
减少了程序中的循环和延时操作,提高了 程序的执行效率。
04
方便实现复杂的交互逻辑和动态界面效果。
多任务和多线程
01
并行处理
02 支持多个任务同时运行和处理,提高了程序的并 发性能和响应速度。
03 可以将耗时的任务放在后台线程中执行,避免阻 塞主线程和影响用户体验。
多任务和多线程
• 提供了线程同步和互斥机制,避免多线程并发访问导致的 数据竞争和死锁问题。
重要性
GUI为用户提供了一种直观、易用的操作方式,使得计算机的使用变得更加便捷 和高效。GUI能够降低用户的学习成本,提高工作效率,并增强用户体验。
GUI的历史和发展
历史
GUI的概念起源于20世纪60年代,最早的图形用户界面是SGI公司为斯坦福大学开发的斯坦福大学图形界面 (Stanford Graphics Interface)。随着计算机技术的不断发展,GUI逐渐成为计算机操作系统和应用程序的标 准界面。
娱乐软件
娱乐软件是一类用于休闲和放松的软件,如 音乐播放器、视频播放器等。GUI在娱乐软 件中扮演着重要的角色,提供了简洁、易用 的界面,使用户能够轻松地享受娱乐内容。
嵌入式系统和专用设备
嵌入式系统
嵌入式系统是一类专用的计算机系统,通常 用于控制和管理特定的硬件设备。GUI在嵌 入式系统中起着重要的作用,提供了直观、 易用的界面,使用户能够方便地与设备进行 交互和控制。
错误处理与提示
GUI应具备完善的错误处 理机制和友好的提示信息, 帮助用户快速解决问题。
适应性与兼容性
GUI应具备良好的适应性 与兼容性,支持不同设备 和浏览器的使用,确保用 户体验的一致性。
美观性原则
视觉层次与布局
CEGUI完全使用手册

使用CEGUI步骤:初始化CEGUI(Renderer,system)加载文件(scheme,font,mousecursor)创建CEGUI窗口注入输入事件,添加事件处理函数渲染CEGUI(ogre自动渲染)程序框架:CEGUIBaseApp.h:初始化CEGUICEGUIDemo.h:创建CEGUI窗口CEGUIFrameListener.h:监听器CEGUImain.cpp:创建要显示的窗口/*********************************************************** CEGUIBaseApp.h葛娟<gejuan@>************************************************************/ #ifndef_CEGUIBaseApp_h_#define_CEGUIBaseApp_h_///包含头文件#include<CEGUI/CEGUI.h>#include<OgreCEGUIRenderer.h>#include<Ogre.h>#include"CEGUIFrameListener.h"#include"CEGUIDemo.h "///前向声明class CEGUIDemo;class CEGUIFrameListener;class CEGUIBaseApp{public:CEGUIBaseApp();virtual ~CEGUIBaseApp();//初始化实例并进行渲染virtual bool execute(CEGUIDemo* sampleApp);virtual void cleanup();virtual void setQuitting(bool quit = true) { d_quitting = quit; }virtual bool isQuitting() const { return d_quitting; }protected:bool d_quitting; //程序是否退出bool d_initialised; //是否已经初始化Ogre::Root* d_ogreRoot;Ogre::Camera* d_camera;Ogre::RenderWindow* d_window;CEGUI::OgreCEGUIRenderer* d_renderer;CEGUIFrameListener* d_frameListener;/*------------------------------------------------------------------增加资源组及路径--------------------------------------------------------------------*/void initialiseResources(void);};#endif//end of guard _CEGUIBaseApp_h_/***********************************************************CEGUIBaseApp.cpp葛娟<gejuan@>************************************************************/#include"CEGUIBaseApp.h"//--------------------------------------------------------------------------------------------------------------- void CEGUIBaseApp::initialiseResources(void){using namespace Ogre;ResourceGroupManager& rgm = ResourceGroupManager::getSingleton();// 创建资源组rgm.createResourceGroup("imagesets");rgm.createResourceGroup("fonts");rgm.createResourceGroup("layouts");rgm.createResourceGroup("schemes");rgm.createResourceGroup("looknfeels");ResourceGroupManager::getSingleton().addResourceLocation("ceguifiles/fonts", "FileSystem", "fonts");ResourceGroupManager::getSingleton().addResourceLocation("ceguifiles/imagesets", "FileSystem", "imagesets");ResourceGroupManager::getSingleton().addResourceLocation("ceguifiles/layouts", "FileSystem", "layouts");ResourceGroupManager::getSingleton().addResourceLocation("ceguifiles/looknfeel", "FileSystem", "looknfeels");ResourceGroupManager::getSingleton().addResourceLocation("ceguifiles/schemes", "FileSystem", "schemes");ResourceGroupManager::getSingleton().addResourceLocation("ceguifiles/configs", "FileSystem");ResourceGroupManager::getSingleton().addResourceLocation("ceguifiles/lua_scripts", "FileSystem");}//---------------------------------------------------------------------------------------------------------------------CEGUIBaseApp::CEGUIBaseApp():d_quitting(false),d_ogreRoot(0),d_renderer(0),d_initialised(false),d_frameListener(0){using namespace Ogre;d_ogreRoot = new Root();//创建根initialiseResources();if (d_ogreRoot->showConfigDialog()){d_window = d_ogreRoot->initialise(true,"GeJuan");// 初始化渲染系统,返回自动创建的窗口SceneManager* sm = d_ogreRoot->createSceneManager(ST_GENERIC, "SampleSceneMgr");// 创建场景管理器d_camera = sm->createCamera("SampleCam");// 创建摄像机d_camera->setPosition(Vector3(0,0,500));d_camera->lookAt(Vector3(0,0,-300));d_camera->setNearClipDistance(5);Viewport* vp = d_window->addViewport(d_camera);// 创建占据整个窗口的视口vp->setBackgroundColour(ColourValue(0,0,0));d_camera->setAspectRatio(Real(vp->getActualWidth()) / Real(vp->getActualHeight()));ResourceGroupManager::getSingleton().initialiseAllResourceGroups();// 初始化资源组//CEGUI的初始化///////////////////////////////////////////////////////////////////////////////////d_renderer = new CEGUI::OgreCEGUIRenderer(d_window, RENDER_QUEUE_OVERLAY, false, 0, sm);// 初始化GUInew CEGUI::System(d_renderer);CEGUI::Imageset::setDefaultResourceGroup("imagesets");CEGUI::Font::setDefaultResourceGroup("fonts");CEGUI::Scheme::setDefaultResourceGroup("schemes");CEGUI::WidgetLookManager::setDefaultResourceGroup("looknfeels");CEGUI::WindowManager::setDefaultResourceGroup("layouts");CEGUI::ScriptModule::setDefaultResourceGroup("lua_scripts");// 创建帧监听器d_frameListener= new CEGUIFrameListener(this, d_window, d_camera);d_ogreRoot->addFrameListener(d_frameListener);d_initialised = true;}else{delete d_ogreRoot;d_ogreRoot = 0;}}//-------------------------------------------------------------------------------------------------------- CEGUIBaseApp::~CEGUIBaseApp(){delete d_frameListener;delete CEGUI::System::getSingletonPtr();delete d_renderer;delete d_ogreRoot;}//-------------------------------------------------------------------------------------------------------------- bool CEGUIBaseApp::execute(CEGUIDemo* sampleApp){if (d_ogreRoot && d_initialised){sampleApp->initialiseSample();// 通过Ogre3D 渲染try{d_ogreRoot->startRendering();}catch(Ogre::Exception&){return false;}catch(CEGUI::Exception&){return false;}return true;}else{return false;}}//----------------------------------------------------------------------------------------------------- void CEGUIBaseApp::cleanup(){}Demo1:Demo2:Demo3:代码创建窗口#include"CEGUIDemo.h "using namespace CEGUI;//----------------------------------------------------------------------class CEGUIDemoApp:public CEGUIDemo{public:bool initialiseSample(){WindowManager& winMgr = WindowManager::getSingleton();SchemeManager::getSingleton().loadScheme("TaharezLook.scheme");System::getSingleton().setDefaultMouseCursor("TaharezLook", "MouseArrow");FontManager::getSingleton().createFont("Commonwealth-10.font");ImagesetManager::getSingleton().createImagesetFromImageFile("BackgroundImage", "GPN-2000-001437.tga");Window* background = winMgr.createWindow("TaharezLook/StaticImage", "root_wnd");background->setPosition(UVector2(cegui_reldim(0), cegui_reldim( 0)));background->setSize(UVector2(cegui_reldim(1), cegui_reldim( 1)));background->setProperty("FrameEnabled", "false");background->setProperty("BackgroundEnabled", "false");background->setProperty("Image", "set:BackgroundImage image:full_image");System::getSingleton().setGUISheet(background);createDemoWindows();initDemoEventWiring();return true;}void cleanupSample(){}private:void createDemoWindows(void){ListboxTextItem* itm;WindowManager& winMgr = WindowManager::getSingleton();Window* root = winMgr.getWindow("root_wnd");MultiColumnList* mcl = static_cast<MultiColumnList*>(winMgr.createWindow("TaharezLook/MultiColumnList", "Demo6 root->addChildWindow(mcl);mcl->setPosition(UVector2(cegui_reldim(0.01f), cegui_reldim( 0.1f)));mcl->setSize(UVector2(cegui_reldim(0.5f), cegui_reldim( 0.8f)));FrameWindow* fwnd = static_cast<FrameWindow*>(winMgr.createWindow("TaharezLook/FrameWindow", "Demo6/ControlPan root->addChildWindow(fwnd);fwnd->setPosition(UVector2(cegui_reldim(0.53f), cegui_reldim( 0.03f)));fwnd->setMaxSize(UVector2(cegui_reldim(1.0f), cegui_reldim( 1.0f)));fwnd->setSize(UVector2(cegui_reldim(0.44f), cegui_reldim( 0.94f)));fwnd->setText("Demo 6 - Control Panel");Combobox* cbbo = static_cast<Combobox*>(winMgr.createWindow("TaharezLook/Combobox", "Demo6/ControlPanel/SelMode fwnd->addChildWindow(cbbo);cbbo->setPosition(UVector2(cegui_reldim(0.04f), cegui_reldim( 0.06f)));cbbo->setSize(UVector2(cegui_reldim(0.66f), cegui_reldim( 0.33f)));const CEGUI::Image* sel_img = &ImagesetManager::getSingleton().getImageset("TaharezLook")->getImage("MultiList itm = new ListboxTextItem("Full Row (Single)", 0);itm->setSelectionBrushImage(sel_img);cbbo->addItem(itm);itm = new ListboxTextItem("Full Row (Multiple)", 1);itm->setSelectionBrushImage(sel_img);cbbo->addItem(itm);itm = new ListboxTextItem("Full Column (Single)", 2);itm->setSelectionBrushImage(sel_img);cbbo->addItem(itm);itm = new ListboxTextItem("Full Column (Multiple)", 3);itm->setSelectionBrushImage(sel_img);cbbo->addItem(itm);itm = new ListboxTextItem("Single Cell (Single)", 4);itm->setSelectionBrushImage(sel_img);cbbo->addItem(itm);itm = new ListboxTextItem("Single Cell (Multiple)", 5);itm->setSelectionBrushImage(sel_img);cbbo->addItem(itm);itm = new ListboxTextItem("Nominated Column (Single)", 6);itm->setSelectionBrushImage(sel_img);cbbo->addItem(itm);itm = new ListboxTextItem("Nominated Column (Multiple)", 7);itm->setSelectionBrushImage(sel_img);cbbo->addItem(itm);itm = new ListboxTextItem("Nominated Row (Single)", 8);itm->setSelectionBrushImage(sel_img);cbbo->addItem(itm);itm = new ListboxTextItem("Nominated Row (Multiple)", 9);itm->setSelectionBrushImage(sel_img);cbbo->addItem(itm);cbbo->setReadOnly(true);Window* st = winMgr.createWindow("TaharezLook/StaticText", "Demo6/ControlPanel/ColumnPanel");fwnd->addChildWindow(st);st->setPosition(UVector2(cegui_reldim(0.02f), cegui_reldim( 0.12f)));st->setSize(UVector2(cegui_reldim(0.96f), cegui_reldim( 0.25f)));st->setText("Column Control");st->setProperty("VertFormatting", "TopAligned");Window* label = winMgr.createWindow("TaharezLook/StaticText", "Demo6/ControlPanel/Label1");st->addChildWindow(label);label->setProperty("FrameEnabled", "false");label->setProperty("BackgroundEnabled", "false");label->setPosition(UVector2(cegui_reldim(0.02f), cegui_reldim( 0.2f)));label->setSize(UVector2(cegui_reldim(0.2f), cegui_reldim( 0.12f)));label->setText("ID Code:");label = winMgr.createWindow("TaharezLook/StaticText", "Demo6/ControlPanel/Label2");st->addChildWindow(label);label->setProperty("FrameEnabled", "false");label->setProperty("BackgroundEnabled", "false");label->setPosition(UVector2(cegui_reldim(0.23f), cegui_reldim( 0.2f)));label->setSize(UVector2(cegui_reldim(0.2f), cegui_reldim( 0.12f)));label->setText("Width:");label = winMgr.createWindow("TaharezLook/StaticText", "Demo6/ControlPanel/Label3");st->addChildWindow(label);label->setProperty("FrameEnabled", "false");label->setProperty("BackgroundEnabled", "false");label->setPosition(UVector2(cegui_reldim(0.44f), cegui_reldim( 0.2f)));label->setSize(UVector2(cegui_reldim(0.2f), cegui_reldim( 0.12f)));label->setText("Caption:");PushButton* btn = static_cast<PushButton*>(winMgr.createWindow("TaharezLook/Button", "Demo6/ControlPanel/Column st->addChildWindow(btn);btn->setPosition(UVector2(cegui_reldim(0.81f), cegui_reldim( 0.32f)));btn->setSize(UVector2(cegui_reldim(0.15f), cegui_reldim( 0.2f)));btn->setText("Add");Editbox* ebox = static_cast<Editbox*>(winMgr.createWindow("TaharezLook/Editbox", "Demo6/ControlPanel/ColumnPane st->addChildWindow(ebox);ebox->setPosition(UVector2(cegui_reldim(0.02f), cegui_reldim( 0.32f)));ebox->setSize(UVector2(cegui_reldim(0.2f), cegui_reldim( 0.2f)));ebox->setValidationString("\\d*");ebox = static_cast<Editbox*>(winMgr.createWindow("TaharezLook/Editbox", "Demo6/ControlPanel/ColumnPanel/NewColW st->addChildWindow(ebox);ebox->setPosition(UVector2(cegui_reldim(0.23f), cegui_reldim( 0.32f)));ebox->setSize(UVector2(cegui_reldim(0.2f), cegui_reldim( 0.2f)));ebox->setValidationString("\\d*");ebox = static_cast<Editbox*>(winMgr.createWindow("TaharezLook/Editbox", "Demo6/ControlPanel/ColumnPanel/NewColT st->addChildWindow(ebox);ebox->setPosition(UVector2(cegui_reldim(0.44f), cegui_reldim( 0.32f)));ebox->setSize(UVector2(cegui_reldim(0.36f), cegui_reldim( 0.2f)));ebox->setValidationString(".*");label = winMgr.createWindow("TaharezLook/StaticText", "Demo6/ControlPanel/Label4");st->addChildWindow(label);label->setProperty("FrameEnabled", "false");label->setProperty("BackgroundEnabled", "false");label->setPosition(UVector2(cegui_reldim(0.02f), cegui_reldim( 0.55f)));label->setSize(UVector2(cegui_reldim(0.2f), cegui_reldim( 0.12f)));label->setText("ID Code:");ebox = static_cast<Editbox*>(winMgr.createWindow("TaharezLook/Editbox", "Demo6/ControlPanel/ColumnPanel/DelColI st->addChildWindow(ebox);ebox->setPosition(UVector2(cegui_reldim(0.02f), cegui_reldim( 0.67f)));ebox->setSize(UVector2(cegui_reldim(0.2f), cegui_reldim( 0.2f)));ebox->setValidationString("\\d*");btn = static_cast<PushButton*>(winMgr.createWindow("TaharezLook/Button", "Demo6/ControlPanel/ColumnPanel/DelCol st->addChildWindow(btn);btn->setPosition(UVector2(cegui_reldim(0.25f), cegui_reldim( 0.67f)));btn->setSize(UVector2(cegui_reldim(0.4f), cegui_reldim( 0.2f)));btn->setText("Delete Column");st = winMgr.createWindow("TaharezLook/StaticText", "Demo6/ControlPanel/RowControl");fwnd->addChildWindow(st);st->setPosition(UVector2(cegui_reldim(0.02f), cegui_reldim( 0.38f)));st->setSize(UVector2(cegui_reldim(0.96f), cegui_reldim( 0.25f)));st->setText("Row Control");st->setProperty("VertFormatting", "TopAligned");label = winMgr.createWindow("TaharezLook/StaticText", "Demo6/ControlPanel/Label5");st->addChildWindow(label);label->setProperty("FrameEnabled", "false");label->setProperty("BackgroundEnabled", "false");label->setPosition(UVector2(cegui_reldim(0.02f), cegui_reldim( 0.2f)));label->setSize(UVector2(cegui_reldim(0.2f), cegui_reldim( 0.12f)));label->setText("Col ID:");label = winMgr.createWindow("TaharezLook/StaticText", "Demo6/ControlPanel/Label6");st->addChildWindow(label);label->setProperty("FrameEnabled", "false");label->setProperty("BackgroundEnabled", "false");label->setPosition(UVector2(cegui_reldim(0.23f), cegui_reldim( 0.2f)));label->setSize(UVector2(cegui_reldim(0.55f), cegui_reldim( 0.12f)));label->setText("Item Text:");ebox = static_cast<Editbox*>(winMgr.createWindow("TaharezLook/Editbox", "Demo6/ControlPanel/ColumnPanel/RowColI st->addChildWindow(ebox);ebox->setPosition(UVector2(cegui_reldim(0.02f), cegui_reldim( 0.32f)));ebox->setSize(UVector2(cegui_reldim(0.2f), cegui_reldim( 0.2f)));ebox->setValidationString("\\d*");ebox = static_cast<Editbox*>(winMgr.createWindow("TaharezLook/Editbox", "Demo6/ControlPanel/ColumnPanel/RowText st->addChildWindow(ebox);ebox->setPosition(UVector2(cegui_reldim(0.23f), cegui_reldim( 0.32f)));ebox->setSize(UVector2(cegui_reldim(0.55f), cegui_reldim( 0.2f)));ebox->setValidationString(".*");btn = static_cast<PushButton*>(winMgr.createWindow("TaharezLook/Button", "Demo6/ControlPanel/ColumnPanel/AddRow st->addChildWindow(btn);btn->setPosition(UVector2(cegui_reldim(0.81f), cegui_reldim( 0.32f)));btn->setSize(UVector2(cegui_reldim(0.15f), cegui_reldim( 0.2f)));btn->setText("Add");label = winMgr.createWindow("TaharezLook/StaticText", "Demo6/ControlPanel/Label7");st->addChildWindow(label);label->setProperty("FrameEnabled", "false");label->setProperty("BackgroundEnabled", "false");label->setPosition(UVector2(cegui_reldim(0.02f), cegui_reldim( 0.55f)));label->setSize(UVector2(cegui_reldim(0.2f), cegui_reldim( 0.12f)));label->setText("Row Idx:");ebox = static_cast<Editbox*>(winMgr.createWindow("TaharezLook/Editbox", "Demo6/ControlPanel/ColumnPanel/DelRowI st->addChildWindow(ebox);ebox->setPosition(UVector2(cegui_reldim(0.02f), cegui_reldim( 0.67f)));ebox->setSize(UVector2(cegui_reldim(0.2f), cegui_reldim( 0.2f)));ebox->setValidationString("\\d*");btn = static_cast<PushButton*>(winMgr.createWindow("TaharezLook/Button", "Demo6/ControlPanel/ColumnPanel/DelRowst->addChildWindow(btn);btn->setPosition(UVector2(cegui_reldim(0.25f), cegui_reldim( 0.67f)));btn->setSize(UVector2(cegui_reldim(0.4f), cegui_reldim( 0.2f)));btn->setText("Delete Row");st = winMgr.createWindow("TaharezLook/StaticText", "Demo6/ControlPanel/SetItemPanel");fwnd->addChildWindow(st);st->setPosition(UVector2(cegui_reldim(0.02f), cegui_reldim( 0.65f)));st->setSize(UVector2(cegui_reldim(0.96f), cegui_reldim( 0.25f)));st->setText("Item Modification");st->setProperty("VertFormatting", "TopAligned");label = winMgr.createWindow("TaharezLook/StaticText", "Demo6/ControlPanel/Label8");st->addChildWindow(label);label->setProperty("FrameEnabled", "false");label->setProperty("BackgroundEnabled", "false");label->setPosition(UVector2(cegui_reldim(0.02f), cegui_reldim( 0.2f)));label->setSize(UVector2(cegui_reldim(0.2f), cegui_reldim( 0.12f)));label->setText("Row Idx:");label = winMgr.createWindow("TaharezLook/StaticText", "Demo6/ControlPanel/Label9");st->addChildWindow(label);label->setProperty("FrameEnabled", "false");label->setProperty("BackgroundEnabled", "false");label->setPosition(UVector2(cegui_reldim(0.23f), cegui_reldim( 0.2f)));label->setSize(UVector2(cegui_reldim(0.2f), cegui_reldim( 0.12f)));label->setText("Col ID:");label = winMgr.createWindow("TaharezLook/StaticText", "Demo6/ControlPanel/Label10");st->addChildWindow(label);label->setProperty("FrameEnabled", "false");label->setProperty("BackgroundEnabled", "false");label->setPosition(UVector2(cegui_reldim(0.44f), cegui_reldim( 0.2f)));label->setSize(UVector2(cegui_reldim(0.2f), cegui_reldim( 0.12f)));label->setText("Item Text:");ebox = static_cast<Editbox*>(winMgr.createWindow("TaharezLook/Editbox", "Demo6/ControlPanel/ColumnPanel/SetItem st->addChildWindow(ebox);ebox->setPosition(UVector2(cegui_reldim(0.02f), cegui_reldim( 0.32f)));ebox->setSize(UVector2(cegui_reldim(0.2f), cegui_reldim( 0.2f)));ebox->setValidationString("\\d*");ebox = static_cast<Editbox*>(winMgr.createWindow("TaharezLook/Editbox", "Demo6/ControlPanel/ColumnPanel/SetItem st->addChildWindow(ebox);ebox->setPosition(UVector2(cegui_reldim(0.23f), cegui_reldim( 0.32f)));ebox->setSize(UVector2(cegui_reldim(0.2f), cegui_reldim( 0.2f)));ebox->setValidationString("\\d*");ebox = static_cast<Editbox*>(winMgr.createWindow("TaharezLook/Editbox", "Demo6/ControlPanel/ColumnPanel/SetItem st->addChildWindow(ebox);ebox->setPosition(UVector2(cegui_reldim(0.44f), cegui_reldim( 0.32f)));ebox->setSize(UVector2(cegui_reldim(0.36f), cegui_reldim( 0.2f)));ebox->setValidationString(".*");btn = static_cast<PushButton*>(winMgr.createWindow("TaharezLook/Button", "Demo6/ControlPanel/ColumnPanel/SetIt st->addChildWindow(btn);btn->setPosition(UVector2(cegui_reldim(0.81f), cegui_reldim( 0.32f)));btn->setSize(UVector2(cegui_reldim(0.15f), cegui_reldim( 0.2f)));btn->setText("Set");label = winMgr.createWindow("TaharezLook/StaticText", "Demo6/ControlPanel/RowCount");st->addChildWindow(label);label->setProperty("FrameEnabled", "false");label->setProperty("BackgroundEnabled", "false");label->setPosition(UVector2(cegui_reldim(0.02f), cegui_reldim( 0.55f)));label->setSize(UVector2(cegui_reldim(1.0f), cegui_reldim( 0.12f)));label->setText("Current Row Count:");label = winMgr.createWindow("TaharezLook/StaticText", "Demo6/ControlPanel/ColCount");st->addChildWindow(label);label->setProperty("FrameEnabled", "false");label->setProperty("BackgroundEnabled", "false");label->setPosition(UVector2(cegui_reldim(0.02f), cegui_reldim( 0.67f)));label->setSize(UVector2(cegui_reldim(1.0f), cegui_reldim( 0.12f)));label->setText("Current Column Count:");label = winMgr.createWindow("TaharezLook/StaticText", "Demo6/ControlPanel/SelCount");st->addChildWindow(label);label->setProperty("FrameEnabled", "false");label->setProperty("BackgroundEnabled", "false");label->setPosition(UVector2(cegui_reldim(0.02f), cegui_reldim( 0.79f)));label->setSize(UVector2(cegui_reldim(1.0f), cegui_reldim( 0.12f)));label->setText("Current Selected Count:");btn = static_cast<PushButton*>(winMgr.createWindow("TaharezLook/Button", "Demo6/QuitButton"));fwnd->addChildWindow(btn);btn->setPosition(UVector2(cegui_reldim(0.25f), cegui_reldim( 0.93f)));btn->setSize(UVector2(cegui_reldim(0.50f), cegui_reldim( 0.05f)));btn->setText("Quit This Demo!");}void initDemoEventWiring(void){WindowManager& winMgr = WindowManager::getSingleton();winMgr.getWindow("Demo6/ControlPanel/ColumnPanel/AddColButton")->subscribeEvent(PushButton::EventClicked, Event::Subscriber(&CEGUIDemoApp::handleAddColumn, this));winMgr.getWindow("Demo6/ControlPanel/ColumnPanel/DelColButton")->subscribeEvent(PushButton::EventClicked, Event::Subscriber(&CEGUIDemoApp::handleDeleteColumn, this));winMgr.getWindow("Demo6/ControlPanel/ColumnPanel/AddRowButton")->subscribeEvent(PushButton::EventClicked, Event::Subscriber(&CEGUIDemoApp::handleAddRow, this));winMgr.getWindow("Demo6/ControlPanel/ColumnPanel/DelRowButton")->subscribeEvent(PushButton::EventClicked, Event::Subscriber(&CEGUIDemoApp::handleDeleteRow, this));winMgr.getWindow("Demo6/ControlPanel/ColumnPanel/SetItemButton")->subscribeEvent(PushButton::EventClicked, Event::Subscriber(&CEGUIDemoApp::handleSetItem, this));winMgr.getWindow("Demo6/QuitButton")->subscribeEvent(PushButton::EventClicked, Event::Subscriber(&CEGUIDemoApp::handleQuit, this));winMgr.getWindow("Demo6/ControlPanel/SelModeBox")->subscribeEvent(Combobox::EventListSelectionAccepted, Event::Subscriber(&CEGUIDemoApp::handleSelectModeChanwinMgr.getWindow("Demo6/MainList")->subscribeEvent(MultiColumnList::EventSelectionChanged, Event::Subscriber(&CEGUIDemoApp::handleSelectChangewinMgr.getWindow("Demo6/MainList")->subscribeEvent(MultiColumnList::EventListContentsChanged, Event::Subscriber(&CEGUIDemoApp::handleContentsC }//--------------事件处理函数-----------------------------------------------------------------------bool handleQuit(const CEGUI::EventArgs& e){d_sampleApp->setQuitting();return true;}bool handleAddColumn(const CEGUI::EventArgs& e){MultiColumnList* mcl = static_cast<MultiColumnList*>(WindowManager::getSingleton().getWindow("Demo6/MainList") Editbox* idbox = static_cast<Editbox*>(WindowManager::getSingleton().getWindow("Demo6/ControlPanel/ColumnPanel/ Editbox* widthbox = static_cast<Editbox*>(WindowManager::getSingleton().getWindow("Demo6/ControlPanel/ColumnPanEditbox* textbox = static_cast<Editbox*>(WindowManager::getSingleton().getWindow("Demo6/ControlPanel/ColumnPaneCEGUI::uint id = atoi(idbox->getText().c_str());float width = atof(widthbox->getText().c_str());String text = textbox->getText();//idbox->setText("");//widthbox->setText("");//textbox->setText("");if (width < 10.0f)width = 10.0f;mcl->addColumn(text, id, cegui_absdim(width));return true;}bool handleDeleteColumn(const CEGUI::EventArgs& e){MultiColumnList* mcl = static_cast<MultiColumnList*>(WindowManager::getSingleton().getWindow("Demo6/MainList") Editbox* idbox = static_cast<Editbox*>(WindowManager::getSingleton().getWindow("Demo6/ControlPanel/ColumnPanel/CEGUI::uint id = atoi(idbox->getText().c_str());try{mcl->removeColumnWithID(id);}catch (InvalidRequestException){}//idbox->setText("");return true;}bool handleAddRow(const CEGUI::EventArgs& e){MultiColumnList* mcl = static_cast<MultiColumnList*>(WindowManager::getSingleton().getWindow("Demo6/MainList") Editbox* idbox = static_cast<Editbox*>(WindowManager::getSingleton().getWindow("Demo6/ControlPanel/ColumnPanel/ Editbox* textbox = static_cast<Editbox*>(WindowManager::getSingleton().getWindow("Demo6/ControlPanel/ColumnPaneCEGUI::uint id = atoi(idbox->getText().c_str());String text = textbox->getText();//idbox->setText("");//textbox->setText("");ListboxTextItem* item = new ListboxTextItem(text);item->setSelectionBrushImage(&ImagesetManager::getSingleton().getImageset("TaharezLook")->getImage("MultiListStry{mcl->addRow(item, id);//?????????????????????????????????????}catch (InvalidRequestException){delete item;}return true;}bool handleDeleteRow(const CEGUI::EventArgs& e){MultiColumnList* mcl = static_cast<MultiColumnList*>(WindowManager::getSingleton().getWindow("Demo6/MainList") Editbox* idxbox = static_cast<Editbox*>(WindowManager::getSingleton().getWindow("Demo6/ControlPanel/ColumnPanelCEGUI::uint idx = atoi(idxbox->getText().c_str());try{mcl->removeRow(idx);}catch (InvalidRequestException){}//idxbox->setText("");return true;}bool handleSetItem(const CEGUI::EventArgs& e){MultiColumnList* mcl = static_cast<MultiColumnList*>(WindowManager::getSingleton().getWindow("Demo6/MainList") Editbox* idbox = static_cast<Editbox*>(WindowManager::getSingleton().getWindow("Demo6/ControlPanel/ColumnPanel/ Editbox* rowbox = static_cast<Editbox*>(WindowManager::getSingleton().getWindow("Demo6/ControlPanel/ColumnPane Editbox* textbox = static_cast<Editbox*>(WindowManager::getSingleton().getWindow("Demo6/ControlPanel/ColumnPaneCEGUI::uint id = atoi(idbox->getText().c_str());CEGUI::uint row = atoi(rowbox->getText().c_str());String text = textbox->getText();//idbox->setText("");。
eCognition简要介绍

u为影像区域整体紧致度; v为影像区域边界光滑度; E为影像区域实际的边界长 度;
N为影像区域的像元总数; L为包含影像区域范围的矩 形边界总长度
E为区域A的红色边界的长度 L为青色矩形的周长 N为区域A所包含的像素数 紧致度u衡量区域的饱满程度 光滑度v衡量区域边界的光滑(破碎)程度
合并后的区域异质性计算[4]
EC软件操作实验
面向对象分类(基于规则) 面向对象分类(基于样本)
基本概念[1]
基本概念[1]
分割 VS 分类
分割:cut the image into pieces for further analysis
分类:label these objects according to their attributes
分类精度得到保障
对象能够准确反映地物的真实边界、轮廓信息,从而从根本上减少错 分、漏分的几率,同时能有效避免椒盐现象
分割尺度可控
针对不同地物目标的提取需求,可灵活控制分割尺度,满足多尺度分 割分类要求
多尺度分割思想[3]
多尺度分割(异质性最小的区域合并算法[4])
区域异质性f
光谱异质性x(画图) n x pii i 1
形状异质性y(画图)
w1为光谱权值,x为光谱异 质性,y为形状异质性
w2为紧致度的权重; u为影像区域整体紧致度; v为影像区域边界光滑度; E为影像区域实际的边界长 度;N为影像区域的像元总 数;L为包含影像区域范围 的矩形边界总长度
形状参数(紧致度&光滑度)
Y_min
S
X_min
Y_max X_max
对象(子对象,父对象,相邻对象)
对象:包含状态(数据)和行为(操作)的集合体,用来描述真实世界的 (物理或逻辑概念上的)物体。
Acegi 知识点文档

中国数码技术研发中心
中国数码技术研发中心
Acegi 主要功能 - 域对象许可
中国数码技术研发中心
Acegi 配置
<filter> <filter-name>Acegi Filter Chain Proxy</filter-name> <filter-class> org.acegisecurity.util.FilterToBeanProxy </filter-class> <init-param> <param-name>targetClass</param-name> <param-value> org.acegisecurity.util.FilterChainProxy </param-value> </init-param> </filter> <filter-mapping> <filter-name>Acegi Filter Chain Proxy</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
Acegi 概要
用于 Spring 的安全框架 认证和授权机制 耶鲁单点登陆 X509 认证 Channel Security 频道安全管理
中国数码技术研发中心
Acegi 安全控制粒度
URL 资源访问控制
http://apps:8080/index.htm -> for public http://apps:8080/user.htm -> for authorized user
基于CEGUI的游戏图形用户界面的开发

—
r p
( C E G UI : : S y s t e m: : g e t S i n g l e t o n 0 . g e t R e s o u r c e P r o V i d e r ( ) ) ;
r 1 ) 一 > s e t R e s o u r c e Gr o u p D i r e c t o r y ( ” s c h e me s ” , ” . . / d a t a i f l e s / s c h e me s / ” ) ;
G r a p h i c Us e r I n t e r f a c e ) 是 一个 用 c + + 实现 的 、面 向对 象 的免 费图形 用户 界面库 ,它 为游 戏开发 者提 供 3 D环
境 的 窗 口及 部件 图形 AP I ,能 使开 发人 员从 繁琐 的 G UI 实现 细节 中解 放 出来 ,将 更多 开发 时 间用 在游 戏性
系统 中用于指 示各种 资 源组所 在 的 目录和设 置默 认资源 组 的代 码 如下 :
游戏开发中 的 CEGUI 应用

计 算 机 系 统 应 用 2010 年 第 19 卷 第1期36 研究开发 R es earch Devel op ment基于CEGUI 的界面框架设计与实现①黄伟强 1 夏科艺2 (1 华南师范大学 网络中心 广东 广州 510631;2 广州博冠信息科技有限公司 广东 广州 510665)摘 要: 通过对界面开发库CEGUI(Crazy Eddie’s GUI)的研究基础上,采用归纳与总结、流程优化及代码与框架重构的思想实现对CEGUI 界面库的p ython 脚本封装,形成框架而进行界面开发,并以此框架开发界面编辑器,实现对界面开发流程优化,降低界面开发成本以及提高界面开发效率。
通过游戏界面开发框架脚本化,对产品开发起到良好的促进作用。
关键词: 界面开发 封装 框架 CEGUI python 编辑器Design and Implementation of User Interface Framework Based on CEGUIHUANG Wei-Qiang 1, XIA Ke-Yi 2(1.Center of Netw ork,Sou th C hina Normal University, Guangzhou 510631, C hina;2.B oguan Tenglong Information Tech Ltd, Guangzhou 510665, C hina)Abstract : Through applying the CEGUI(Crazy Eddie's GUI )user interface LIB research, this paper accomplishes theCEGUI’s python encapsulation by using induction, f low optimization and f rame Refactoring. User interface development and User interf ace editor can use this CEGUI python f rame to build, optimize the developing f low , reduce the cost of User interf ace development and improve eff i ciency.Keywords: UI development; encapsulation; f ram e; CEGUI; python; UI editor1 引言目前游戏业已经形成一个发展快速的产业链,游戏产品层出不穷,市场需求巨大,而作为游戏产品重要的界面开发往往对游戏产品质量起到重要作用。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
CEGUI的重要作用在于:
嵌套!
这只是我的一种假设,还没有实际操作的经验,
但是问过大牛,他们回答是嵌入其他引擎或工具中不难。
现在我的第一目标就是先完成嵌套,主要以下步骤来实施:
制定方案(尝试方案)如下:
a、利用CEGUI创建简单Window窗口
b、在窗口上,创建简单按钮
c、将创建按钮方法嵌入我们引擎中
目标是测试CEGUI是否可嵌入及嵌入难度
在我看来,
CEGUI关心的不主窗口创建、消息机制、渲染,
它关心的是UI表现及逻辑实现,
所以这样的东西,如何嵌入就应该是第一目标。
为什么不用MFC,或者游戏引擎自带UI?
1、MFC自身是UI工具,如果说应用程序的一套东西都是由自身开发倒没问题,
但是要将做的东西嵌入其他应用程序中,可能就比较麻烦。
理由:
1、消息机制处理问题,MFC自成一套消息系统,如果嵌入其他引擎,消息系统处理流程不同,可能会比较麻烦.
暂时只想到这个理由,不过凭我的感觉,应该是比较麻烦的,如有不对,欢迎指正^^。
总结:MFC之类的工具嵌入其他程序困难。
2、为什么不用游戏引擎自带UI系统
理由:
1、CEGUI专业,如果只是一般的游戏引擎自带UI系统,我想不一定会比CEGUI好,不然也不会这么多人肯定它的存在了^^,
最后全面总结:
CEGUI多用于嵌入式开发中,一般用在中低档的引擎里,应该还是合适的。