随笔-341  评论-2670  文章-0  trackbacks-0
 
     摘要: 当Vczh Free Script还处于1.0版本的时候,我用C#写了一个IDE出来。因为脚本本身是不能产生exe的,所以这个IDE只有执行而没有编译的功能。不过有两个个困难的地方。

RichTextBox里面的修改会让颜色变化。我找不到C#中的有效做法,所以只好把自己的正则表达式引擎包一层插入C#,每次修改的时候都重新生成整个RTF文档插入RichTextBox。后来测试的时候,发现只要脚本在1000行左右的时候速度仍然是可以接受的。没有进行更多的测试。

脚本自己也是可以调用编译器的。脚本代码可以用字符串产生一段新的代码然后执行。因此IDE也要动态的【发现】并【调试】这些动态产生的代码。下面贴了4幅图。  阅读全文
posted @ 2008-06-14 00:20 陈梓瀚(vczh) 阅读(4197) | 评论 (14)编辑 收藏
    1:开发将椭圆、贝塞尔曲线以及文字转换成多边形的工具

    2:解决多边形的布尔运算,有并集、交集和余集等

    3:使用2开发画笔

    4:开发画刷基础,实现Color Matrix、Vertex Transformation及多边形渲染

    5:图像工具
posted @ 2008-06-12 09:40 陈梓瀚(vczh) 阅读(758) | 评论 (2)编辑 收藏
     摘要: 终于完成了相当于GDI中Arc函数的功能了。这次仍然跟API有点误差,不多这里的误差是GDI的问题。这里贴出截图和代码。观看图2和图3,我们知道椭圆是对称的,但是GDI并没有做到这一点。我的算法也不能精确对称,但是左右两边仅相差1个像素。Arc是椭圆的子集,所以Arc在这个局部(椭圆的最上方)中也应该左右对称。图1中我先用GDI绘制黑色Arc,然后使用我的算法绘制红色Arc。这里的自适应步长算法跟上一篇的Bezier曲线的算法是一样的。  阅读全文
posted @ 2008-06-12 06:02 陈梓瀚(vczh) 阅读(2338) | 评论 (5)编辑 收藏
     摘要: 花了两个小时把这个东西做好了。虽然不及[LIEN87 ; SHAN87 ; SHAN89]论文厉害,不过自己弄的这个写起来倒是相当容易的。在这里贴出效果图和代码。效果图中,我先使用蓝色画笔,用PolyBezier绘制曲线,然后使用红色像素使用自己的算法绘制曲线。可以看见有一点点误差,不过效果还是可以接受的。代码仍然使用自己的那套库开发,不过曲线扫描的方法不受库的限制。这个算法保证点不会被重复绘制。

有了这个算法之后我就可以把贝塞尔曲线转换成密度刚好的折线了。这才是最终目的。  阅读全文
posted @ 2008-06-11 21:20 陈梓瀚(vczh) 阅读(2615) | 评论 (1)编辑 收藏
     摘要: 为了让这篇文章说的东西能够落实,无法躲避的基本东西还是要先准备一下的。今天花了6个小时查了无数资料终于把文字的边框弄出来了。

在此贴出代码和效果图,不作过多解释。熟悉Win32API中的GDI部分的朋友们可以很容易看懂。

效果图:
提取的轮廓:红色和黑色为直线,蓝色为四次贝塞尔曲线。其中上面是先TextOut后自己画,下面是先自己画后TextOut。四次贝塞尔曲线转换成三次贝塞尔曲线之后使用PolyBezier绘制。

代码:
代码使用的框架是我自己寒假无聊的时候封装API的结果,暂时有窗口、菜单、组合键以及菜单,附带GDI。事件自己弄了一个跟C#差不多的可以同时Bind很多不同种类函数的东西。不过这个不是重点。需要重点阅读的是如何使用GetGlyphOutline。

dtof将double转换成FIXED,ftod相反。
GetPoint进行点的变换,主要是因为画字符的时候需要偏移。
DrawCurve绘制边框。  阅读全文
posted @ 2008-06-11 07:48 陈梓瀚(vczh) 阅读(12057) | 评论 (12)编辑 收藏
     摘要: 接着上一篇文章继续往下讲。如果按照上一篇文章走下去的话,现在估计做了有些小软件了吧。字符串和图形都容易做大,而且对于潜意识上喜欢数学的最有希望的程序员们也是有吸引力的。但是这两种东西却不容易做好。等到程序到了一定规模的时候,维护和效率这两大问题就会凸显出来。心急吃不了热豆腐,为了解决维护和效率这两个经常会出现的问题,我们需要学习算法和架构。这两种东西是可以同时学的,但是一篇文章说不了多少东西,那么就从算法开始吧。

程序员是需要开阔眼界的,光C#一门也是不行的,毕竟程序运行在各种平台上,有各种各样的语言。譬如Win32上的native C/C++、Delphi等,.NET上的C#和VB.NET,还有自成体系的Java,然后就是运行在mainframe上的COBOL,剩下的还有各种各样的函数式语言、脚本语言等等。熟悉了C#的人从Delphi入手不会很困难,从C/C++入手也可以了。这两门原本是本地语言的语言在编写程序的时候需要我们注意多一些的东西,典型的就是内存管理。这还是需要多加练习的,在这里就不多说了。

说到算法,在这里首先向  阅读全文
posted @ 2008-06-11 00:03 陈梓瀚(vczh) 阅读(9213) | 评论 (8)编辑 收藏
     摘要: 前天在博客上说希望开发一个尽量独立于GDI的图形库。这个图形库将不使用其他图形库例如GDI+、OpenGL以及DirectX等。图形库使用GDI的原因如下:
1:字体的边框比较难获得。直接读TTF文件暂时还不想做,因此想借助GDI的API获取文字的Bezier轮廓。
2:不使用GDI无法把图片刷上窗口。
因此这个图形库使用的GDI的功能也仅限于此。当然,开发出来的结果必然是GDI所不能达到的。GDI+的结构也稍微有一点点不理想。

为什么GDI和GDI+的速度都不太理想呢?下面的分析将会给出一个可能的解释。

今天早上考了软件配置管理,也就是让我们了解一下为什么需要Subversion这样的软件来帮助我们开发软件。考完试回来的路上就构思了这个图形库的结构。让我们考虑一下图形库所需的功能,也就是需求分析了。我们用惯的图形库都有绘制图形、文字以及图像的功能。图形有画刷和边框,其中边框是具有形状的。

首先考虑一下文字。我们知道现在绝大多数的文字都是由Bezier边  阅读全文
posted @ 2008-06-10 19:13 陈梓瀚(vczh) 阅读(4370) | 评论 (13)编辑 收藏
     摘要: 人生中的很可能的最后一次期末考就到了,复习之余不免忙里偷闲,想想程序的那些破事。

相对于去年来说,今年做的事情比较少。06年做了一个软件渲染器和一个强类型的脚本引擎和一个基于OpenGL的GUI,07年冲做了一个基于OpenGL的GUI,一个正则表达式和动态的上下文无关文法分析器(并在年内重写了一次),还有一个基于闭包的无类型脚本引擎。今年做的是一些修修补补的工作,首先为最新的脚本引擎提供了基于闭包实现的class和namespace、重写了内核并加上了multi-method和operator overloading,为正则表达式引擎重写了一个新的几乎提高了9倍速度的分析器(于是写了一篇招口水的文章)。自从Borland的没落导致我狠一狠心从Delphi过渡到C++之后,一直到现在我都在维护一个我自己个人使用的“非标准模板库”。STL啊Boost啊什么的就不用了,函数的名字比较鸟。

大三也快完了,学院要求我们自己张罗实习的事情,班主任推荐我去微软,后来花了点时间准备了一下。不过不幸的是最后发现准备是没有用的,面试官总会在意外  阅读全文
posted @ 2008-06-09 10:16 陈梓瀚(vczh) 阅读(1528) | 评论 (5)编辑 收藏
     摘要: 终于还是要写这种文章了。期末考试将至,写大程序没时间,写小程序没动力,只要演变成写文章了。之前的两篇字符串处理写完了仍然不过瘾,打算继续写关于递归下降法和LALR的事。后来想想还是暂时写写关于如何学习编程的好,毕竟这个问题对大家来说更加有益。

本篇将是一个系列,重点讲述在外力很少的情况下如何自学编程,以及需要注意的一些地方。

一般来说,一些所谓的『高手』或者老师会告诉人们算法是非常非常重要以至于会不会算法就是你会不会编程的唯一标准。不过事实上并非如此。掌握算法固然是好,只是大部分程序并不需要高深的算法,而且招人的时候仅仅要求会算法的公司也是很少的(而且很难进)。我并不是学院派的人,所以虽然我本人也推崇学习算法,但并不推崇一开始就学习算法。

刚开始学编程的人总是不知道自己应该从哪里入手。实际上这是一个相当重要的问题。在我看来,学好变成有若干条件:
·兴趣
·数学/英语
·财力

首先谈一谈兴趣。那些为了生计而寻找捷径学习编程的人并不  阅读全文
posted @ 2008-06-06 18:29 陈梓瀚(vczh)| 编辑 收藏
自我感觉良好系列代码:
    GacUI
    编程相关讨论1000人群:点击进入 
    IDE实验项目Release提供下载
    Cppblog博客下载小程序:点击进入

语法分析推荐书籍
    我推荐的书:《Parsing Techniques》,还有它的第二版(part1.rarpart2.rar

编译原理系列文章:
   
跟vczh看实例学编译原理:系列文章(零)(一)(二)*new*
    如何开发可配置语法分析器:系列文章(一)(二)(三)(三点五)(四)(五)(六),(七)。
    如何设计一门语言:系列文章(一)(二)(三)(四)(五)(六)(七)(八)(九)(十)(十一)(十二)
    浅谈面向对象语言的类型运算
    如何手写语法分析器《构造正则表达式引擎》和《构造可配置词法分析器》
    使用高阶函数开发语法分析器

使用我写的库开发语法分析器系列文章:
    Vczh Library++语法分析器开发指南
    Vczh Library++3.0 C++轻量级可配置语法分析器,系列文章(一)(二)(三)(四)
    C++轻量级可配置语法分析器

    开发自己的IDE——Vczh Library++的IDE工程开发历程:十一十二

挖了坑却没空填上系列文章:
    手把手教你写脚本引擎(一)(二)(三)(四)(五)。Demo (一)
    C++实用技巧:(一)(二)(三)(四)

作品及代码下载:
    JIT脚本引擎:CMinus 0.1版开放下载 
    Vczh Library++ 2.0 GUI Framework 预览版代码以及示例程序
    Vczh Free Script 2.0 beta发布 
posted @ 2008-06-05 09:36 陈梓瀚(vczh)| 编辑 收藏
仅列出标题
共35页: First 27 28 29 30 31 32 33 34 35