2009年3月16日星期一

【原】设计3+2之建模相关

浅尝的小结了下建模中常用到的相关命令:
1.Edit Mesh多用于多边形编辑
2.Shapes二维物体编辑
3.Editmesh修改器的相关参数
4.System Unit系统单位
很常用的快捷键:
ctrl+z 返回上一步操作
ctrl+x用专家视图方式显示
ctrl+o打开文件
常用视图:
/p 透视图
t 顶视图
l 左视图
f 前视图/
ctrl+u用户视图
m 材质编辑
f10 快速渲染
f9 查看渲染效果
一个简单的建模效果:

2009年3月15日星期日

【原】ArcGIS中最短路径的实现(一)

最短路径分析属于ArcGIS的网络分析范畴。而ArcGIS的网络分析分为两类,分别是基于几何网络和网络数据集的网络分析。它们都可以实现最短路径功能。下面先介绍基于几何网络的最短路径分析的实现。以后会陆续介绍基于网络数据集的最短路径分析以及这两种方法的区别。

几何网络是一种特殊的特征要素类,由一系列不同类别的点要素和线要素(可以度量并能图形表达)组成的,可在FeatureDataset下面创建,可进行图形与属性的编辑。包括流向分析和追踪分析两大功能。主要接口是ITraceFlowSolver。我们先在一幅地图上做出一个几何网络才能进行最短路径分析。下面是主要的一些步骤(ArcMap帮助中琐碎的说明有三四十项,被我省略很多):



  1. 打开ArcCatalog,连接到包含地图的文件夹。

  2. 在空白处,右键新建一个“Personal GeoDatabase”。

  3. 在生成的Personal GeoDatabase上右键新建一个feature dataset。

  4. 双击Personal GeoDatabase进去,找到刚才new出的feature dataset,右键Import导入Feature Class(Single),选择要建立几何网络的图层或者shape文件。

  5. 然后再右键新建一个Geometric Network,选择从已存在的图元中建立几何网络。

  6. 打开ArcMap,把刚才建立的“Personal GeoDatabase Feature Class”添加到地图中,这样几何网络就建立好了。

这样我们就建立好一个几何网络了。我们现在要通过编程来实现最短路径,用到的接口主要有INetworkCollection,IGeometricNetwork,IPointToEID,ITraceFlowSolverGEN(它实现了ITraceFlowSolver的接口),INetSchema,IEIDHelper等。主要步骤如下:

  1. 获取几何网络工作空间
  2. 定义一个边线旗数组,把离点串最近的网络元素添加进数组
  3. 设置开始和结束边线的权重
  4. 进行路径分析
  5. 得到路径分析的结果

具体的程序太过繁琐、冗长了,这里不便贴出,可以打开这个链接查看源程序。http://www.cnblogs.com/3echo/archive/2008/01/24/865527.html

相关链接:ArcGIS中最短路径的实现(二)

【原】涂鸦SD之二

直接上图:

PS:今天发现电脑坏了,资料都拷不出来,过程步骤后补。

【原】Boost库之tuple、any和variant的使用

Boost库中提供了三种比较实用的数据结构,分别是tuple、any和variant。它们的共同优点就是支持类型安全地存储和获取数据。灵活地使用这三种数据结构,对我们进行程序设计无疑是大有裨益的。下面分别加以介绍。
tuple支持一次直接声明和使用n个不同数据类型的变量。对于有多个返回值的函数,我们再也不用定义一个结构体作为函数的返回值类型了,也不用通过对参数进行引用来传出返回值(这样返回值的概念不太明确),而是可以直接使用tuple。
◆ 声明一个tuple类型的对象:tuple<int,double,string> triple(42, 3.14, "hello world");
◆ 获得tuple中某个变量的值:string s = get<2>(triple);
◆ 获得tuple中所有变量的值:tie(nAdd, dbSub, strText) = triple;
◆ 通过几个变量构造一个tuple类型的变量:tuple<int,int> temp = make_tuple(3, 5);
any支持存储任意类型的变量,但它只允许你在知道类型的前提下访问它的值。如果类型不符合,则any会抛出一个bad_any_cast的异常。如果访问的是指针,则类型符合时返回的指针是一个有效值,否则返回的指针为空(此时不会抛出异常)。
◆ 给any赋任意类型的值:any a; a = 42; a= string("hello world"); a=3.14;
◆ 获得any中存储的值:double dbTemp = any_cast<double>(a);
◆ 获得any中存储值的指针:string *pString = any_cast<string *>(a);
variant支持存储和操作来自于多个不同类型的变量。获得variant中当前存储的值时,如果给定的类型与实际存储值的类型不符合,会抛出一个bad_get的异常。如果要获得的是指针,则类型符合时返回的指针是一个有效值,否则返回的指针为空(此时不会抛出异常)。这里需要着重谈一下variant与tuple和any的区别:tuple可以保存n个变量的值,而variant只能保存一个变量的值; any可以保存任意类型的变量,而variant只能保存指定数据类型的变量。
◆ 声明一个variant类型的对象:variant<int,double,string> va("hello world");
◆ 给variant赋值: va=3.14; va=42;
◆ 获得variant中当前存储的值:int nTemp = get<int>(va);
◆ 获得指向variant中存储的值的指针:string *pString = get<string *>(&va);

2009年3月9日星期一

[原] 涂鸦SD

连绵了半个多月的阴雨天,今天终于露出久违的阳光,连带的心情都好了很多:-D
晚上整理电脑资料,看到许久前收集的一些SD娃娃的图片,忍不住有些手痒,随便涂涂,休闲一下.
发个简单的步骤图如下:

1. 铅笔把大形状勾画出来。


2. 数码喷枪喷绘出简单的黑白素描关系。


3. 加水笔柔化笔触。


4. 油画笔刻画细节,强调结构。


5. 建立颜色图层,叠加色彩。


6. 合并可见图册,整体调整刻画。


7. (偷个懒~帽子不画了 :-P )
在保证画面整体下,细节进行细微调整。

完成~~
PS:涂鸦性质练笔,很多方面没顾及到,随便看看就好~~ ^-^

【原】设计3+2

平面设计更多更多传统的归属与2D的范畴,的确,2D可以更精致细腻的表达图像,把一些细节完美地表现出来,但是,现在有越来越多的平面设计师把自己的设计与3D结合了起来,也就出现了越来越多的精致美观的有着更强的视觉冲击力的作品!
比如网站方面,基本上图片加文字,好一些的加入了FLASH动效果,而现在高档的网站则更多的结合了3D效果,可以让人真实的更加身临其境的,全方位体会它的产品和想表达的境界!最近一直在接触宣传册的设计,下面聊些关于用3D做宣传册效果的尝试,以前做印刷品的效果图,我通常还 是会用平面工具,这样也可以很好表达出想要展示的效果,但如果上,下,左,右效果都要的话,我就要出N张不同的图(同时还要注意透视关系),那叫一个烦琐,,如果利用3D对作品进行表现就可以大大加快制作速度,同时在不失创意的情下,可以更有效地把握自己要表达的意图。

同时3D制作过程中的:
1.视点(摄像机)是可以任意移动并改变角度
2.灯光(光影的变化)光源位置明暗效果
3.质感(材质渲染)

都显得非常灵活,不但能细致地表现对象,更能更易于修改画面!
本人还处在学习摸索阶段,希望以后能有更好的想法与各位分享!
:D以下是2张简单的建模贴图的应用:

【原】关于const修饰符的问题

对const修饰符的使用一直感觉疙疙瘩瘩的,因为用的不是很多。上周写了个小程序,搞清楚了它的用法。话不多说,先贴程序。
  1. const int n = 10;
  2. const char * pszTemp = "a";
  3. char const * pszTemp2 = "c";
  4. char * const pszTemp3 = "b";
  5. const char * const pszTemp4 = "e";
  6. pszTemp = "d";
  7. pszTemp2 = "e";
  8. pszTemp3 = "f";
  9. pszTemp4 = "f";
  10. lstrcpy(pszTemp, "d");
  11. lstrcpy(pszTemp2, "d");
  12. lstrcpy(pszTemp3, "d");
  13. lstrcpy(pszTemp4, "f");

把这段程序拿到VC6的环境下编译,会发现编译出错。第8、9、10、11和13行都有错误。我们先从第2行开始分析。第2行定义了一个名叫pszTemp 的字符串指针,const放在char *之前,表明它是一个指向常量的指针变量,它指向的常量值不可以改变,所以第10行会编译出错,但是它保存的地址却可以改变,所以我们仍然可以通过改变它指向的地址来改变它的值。第3行同第2行。第4行定义了一个常指针,表明它本身是常量,而不是它指向的对象声明为常量。所以第8行出错,而第12行却可以通过。第5行是定义了一个指向常量的常指针,所以无论是对它指向的值的改变还是指针本身值的改变都是不允许的。因此,第9行和13行写法都是错误的。
下面再贴几行代码,有兴趣的读者可以指出其中出错的行数。

  1. const int *pAge = new int(1);
  2. int const *pAge2 = new int(2);
  3. int * const pAge3 = new int(3);
  4. const int * const pAge4 = new int(4);
  5. *pAge = n;
  6. *pAge2 = n;
  7. *pAge3 = n;
  8. *pAge4 = n;
  9. pAge = &n;
  10. pAge2 = &n;
  11. pAge3 = &n;
  12. pAge4 = &n;

【原】Boost库使用入门

Boost库是一套开放源代码、高度可移植的C++准标准库。它相当于STL库的延续和扩充,其设计理念和STL比较接近,都是利用泛型让复用达到最大化。
Boost库当前的最新版本为V1.38.0,大家可以到Boost库的官网http://www.boost.org/去下载,下载后直接安装即可。这里需要格外注意的是,Boost的绝大部分库只需要包含头文件就可以直接使用了,而另外一些库,比如正则表达式库(regex)、线程库(thread),需要编译生成lib和dll后才能使用。
Boost库主要包含以下几个大类:
1.字符串及文本处理
2.输入/输出
3.数学和数字处理
4.泛型编程和模板元编程
5.函数对象及高级编程
6.数据结构、容器、迭代器和算法
7.杂项
大家在学习Boost库的过程中,肯定会遇到这样或那样的问题,这是很正常的。这里,我把自己在学习中总结出来的一些注意事项列出来,以供大家参考:
1.由于VC6对模板类的支持不是很好,因此,使用有些Boost库(如string_algo库)时在VC6下无法编译成功,可以使用VC7或更高的VC版本来解决这一问题。
2.由于VC6的编译器并不是完全支持C++标准,因此使用有些库时即使编译通过了,但运行的结果可能会不正确,解决方法同上。
3.安装完Boost库之后,需要将Boost库的根路径添加到VC的Include Files和Library Files中。
4.与使用STL库一样,使用Boost库时,最好使用using namespace boost来声明名字空间boost。
最后,列出学习Boost库的一些实用资源:
1.Boost库的SDK
2.《超越c++标准库——boost程序库导论》
3.Boost官方网站
4.Boost中文站
OK,Boost库的概述就讲这么多。让我们赶快进入Boost库的神秘世界吧,Let′s go!

2009年3月8日星期日

【原】AE之鹰眼的实现

大家都用过百度地图或者googole地图吧,在它们主地图的右下角,有个小地图窗口,这就是鹰眼窗口。用鼠标拖动鹰眼里的小窗口,则主地图便移动到相应的位置。下面就介绍鹰眼的实现。
鹰眼和主地图的互动,主要体现在两个方面:一是主地图的地图改变了,则鹰眼里的矩形框要移动到对应的位置,以指示当前地图在整个地图中的位置;二是鹰眼的矩形框移动了,则主地图中显示的地图要移动到相应的位置。
AE中显示地图的控件叫 ESRI MapControl,这里主要用到了它的OnAfterDraw事件。在主地图的OnAfterDraw事件中,根据当前地图的大小,改变鹰眼中矩形框的大小;在鹰眼的OnAfterDraw事件中,根据矩形框的位置,确定主地图中地图的位置。google地图的鹰眼还实现了矩形框的拖动,这个也很好实现,呵呵。在鼠标点击到鹰眼控件时,先判断是否在矩形框内,如果在的话,用一个状态量记住这个状态,此时如果鼠标移动,则矩形框跟着相应的移动;若不在矩形框内,则矩形框移动到鼠标点击的位置。

【原】谈谈网络视频监控系统软件平台的发展趋势

从当前行业的局面来看,伴随着各厂商硬件产品差距的日益缩小,视频监控在未来的竞争将是软件平台的竞争。谁家平台做的好,谁就在竞争中占有绝对优势。那么,软件平台会如何发展,向着哪个方向发展?个人看来有以下几方面趋势:

  1. 需要具备支持其他厂商设备接入的能力,我们称之为“吸收性”。做大系统,做运营,不能方便的接入其他厂商的设备怎么可以?吸收性强,系统才有可能做大。所以,系统在设计之初就要考虑这一点。
  2. 系统要有足够的扩容能力。当系统中的设备由原有的几十台突然上升为几百台甚至上千台的时候,如何才能够微笑着去面对?假设系统设计之初便考虑到这点,那么一个灵活而有效的系统结构将会使该问题迎刃而解。
  3. 必须具备一套功能全面、界面友好并且易于定制的客户端软件。以前我们说服务器的性能好坏很重要,但是将来客户端的性能会需要我们更多的投入,良好的用户体验不仅仅能够锦上添花,有时甚至可以起到决定性的关键作用。
  4. 系统要便于搭建和配置、易组网。在系统模块较多的情况下,这个问题需要尤为注意。
  5. 具备良好的平台兼容性,这可能已经是默认的潜规则了,不需要多说,Linux必须要支持。
  6. 具备良好的稳定性,这点真是易说不易做。监控这个行业要求我们服务器稳定,客户端也要稳定。做一个系统很简单,想做好就要下功夫。

目前应该还没有一个厂家敢说他的系统已经做到最好,事实上很多厂家还没有自己的系统。这让我们的竞争变得更加残酷,也让我们对未来充满信心。因为创世已经走在了前面,我们还将继续大踏步向前迈进。

2009年3月5日星期四

寄语CREARO-SW

既来之,则留之,请在下方发表留言,谢谢@_@

2009年3月4日星期三

Hello everyone

欢迎来到创世软件团队,让我们在这里记录下团队以及团队里每一位成员的成长历程,展示和分享大家的研究成果,共同致力于打造行业内优秀的网络视频监控系统软件平台。