摘要: 當Vczh Free Script還處于1.0版本的時候,我用C#寫了一個IDE出來。因為腳本本身是不能產生exe的,所以這個IDE只有執行而沒有編譯的功能。不過有兩個個困難的地方。
RichTextBox里面的修改會讓顏色變化。我找不到C#中的有效做法,所以只好把自己的正則表達式引擎包一層插入C#,每次修改的時候都重新生成整個RTF文檔插入RichTextBox。后來測試的時候,發現只要腳本在1000行左右的時候速度仍然是可以接受的。沒有進行更多的測試。
腳本自己也是可以調用編譯器的。腳本代碼可以用字符串產生一段新的代碼然后執行。因此IDE也要動態的【發現】并【調試】這些動態產生的代碼。下面貼了4幅圖。
閱讀全文
posted @
2008-06-14 00:20 陳梓瀚(vczh) 閱讀(4212) |
評論 (14) |
編輯 收藏
1:開發將橢圓、貝塞爾曲線以及文字轉換成多邊形的工具
2:解決多邊形的布爾運算,有并集、交集和余集等
3:使用2開發畫筆
4:開發畫刷基礎,實現Color Matrix、Vertex Transformation及多邊形渲染
5:圖像工具
posted @
2008-06-12 09:40 陳梓瀚(vczh) 閱讀(776) |
評論 (2) |
編輯 收藏
摘要: 終于完成了相當于GDI中Arc函數的功能了。這次仍然跟API有點誤差,不多這里的誤差是GDI的問題。這里貼出截圖和代碼。觀看圖2和圖3,我們知道橢圓是對稱的,但是GDI并沒有做到這一點。我的算法也不能精確對稱,但是左右兩邊僅相差1個像素。Arc是橢圓的子集,所以Arc在這個局部(橢圓的最上方)中也應該左右對稱。圖1中我先用GDI繪制黑色Arc,然后使用我的算法繪制紅色Arc。這里的自適應步長算法跟上一篇的Bezier曲線的算法是一樣的。
閱讀全文
posted @
2008-06-12 06:02 陳梓瀚(vczh) 閱讀(2349) |
評論 (5) |
編輯 收藏
摘要: 花了兩個小時把這個東西做好了。雖然不及[LIEN87 ; SHAN87 ; SHAN89]論文厲害,不過自己弄的這個寫起來倒是相當容易的。在這里貼出效果圖和代碼。效果圖中,我先使用藍色畫筆,用PolyBezier繪制曲線,然后使用紅色像素使用自己的算法繪制曲線。可以看見有一點點誤差,不過效果還是可以接受的。代碼仍然使用自己的那套庫開發,不過曲線掃描的方法不受庫的限制。這個算法保證點不會被重復繪制。
有了這個算法之后我就可以把貝塞爾曲線轉換成密度剛好的折線了。這才是最終目的。
閱讀全文
posted @
2008-06-11 21:20 陳梓瀚(vczh) 閱讀(2627) |
評論 (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) 閱讀(12235) |
評論 (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) 閱讀(9225) |
評論 (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) 閱讀(4393) |
評論 (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) 閱讀(1538) |
評論 (5) |
編輯 收藏
摘要: 終于還是要寫這種文章了。期末考試將至,寫大程序沒時間,寫小程序沒動力,只要演變成寫文章了。之前的兩篇字符串處理寫完了仍然不過癮,打算繼續寫關于遞歸下降法和LALR的事。后來想想還是暫時寫寫關于如何學習編程的好,畢竟這個問題對大家來說更加有益。
本篇將是一個系列,重點講述在外力很少的情況下如何自學編程,以及需要注意的一些地方。
一般來說,一些所謂的『高手』或者老師會告訴人們算法是非常非常重要以至于會不會算法就是你會不會編程的唯一標準。不過事實上并非如此。掌握算法固然是好,只是大部分程序并不需要高深的算法,而且招人的時候僅僅要求會算法的公司也是很少的(而且很難進)。我并不是學院派的人,所以雖然我本人也推崇學習算法,但并不推崇一開始就學習算法。
剛開始學編程的人總是不知道自己應該從哪里入手。實際上這是一個相當重要的問題。在我看來,學好變成有若干條件:
·興趣
·數學/英語
·財力
首先談一談興趣。那些為了生計而尋找捷徑學習編程的人并不
閱讀全文
posted @
2008-06-06 18:29 陳梓瀚(vczh)|
編輯 收藏
自我感覺良好系列代碼: GacUI
編程相關討論1000人群:
點擊進入 IDE實驗項目Release
提供下載!
Cppblog博客下載小程序:
點擊進入 語法分析推薦書籍:
我推薦的書:
《Parsing Techniques》,還有它的第二版(
part1.rar和
part2.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)|
編輯 收藏