Skip to content

浙江大学c语言程序设计专题用的图形库的一个重构和改进版本(以及简单的CAD)

License

Notifications You must be signed in to change notification settings

yunwei37/graphics-zju

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

(一个不知道叫啥名字好的简易版图形库)

大一下尝试用纯c语言实现一些面向对象的概念的试验品(牺牲品)

底层使用win32 api实现,大概不能跨平台但是也许穿越时空还是可以的(二十年前的老玩意了。。。)

对我个人而言最大的意义是...大概比较简略地体会了一下软件开发的一些流程,比如需求分析、系统设计、实现、单元测试、集成测试什么的...

并且我在尝试尽量有良好的代码风格、实现系统可扩展性、高内聚低耦合之类的...( 之前搞得什么垃圾解释器和搜索引擎算法还行,实现简直是shit....

希望能做到,和原先《c语言的科学和艺术》中提供的图形库相比,在底层方面更加贴近原生api的实现方式,牺牲一部分的封装和对老硬件的兼容性,带来更丰富的api接口和更快的运行速度;在上层,提供面向对象形式的进一步抽象和封装,使对复杂gui应用的构建更为便利。

  • 语言:c语言

  • 开发环境 vs2017

  • 本图形库主要由两个部分构成:

      第一部分是graphics库,基于《c语言的科学和艺术》中提供的图形库,以及翁凯老师在中国大学mooc c语言程序设计进阶课程中提供的ACLlib库
      (github地址:https://github.com/wengkai/ACLLib/)
      同时参考了刘新国老师对于书中图形库的改进版本进行编写。其中,本图形库的主要绘图逻辑使用acllib中的绘图函数并稍作改动,并在此基础上实现了大部分书中的其他api接口(如字体属性、大小,绘图信息保存与重载,窗口信息设定与获取等等);同时添加和封装了一些其他功能,如更简单的文字绘制函数、声音函数,菜单创建函数等等。
      如果您是graphic的用户,值得注意的是,在坐标系的选择上,本库的实现最后还是采用了屏幕坐标系而非自然坐标系,即以左上角为原点,向下为y轴正方向,向右为x轴正方向。
       第一部分的库可以在不使用第二部分的库的基础上独立使用。
    
       第二部分是engine库,是一个基于graphics、从面向对象的概念出发的图形库:本实现将所需要绘制的gui单元视为一个对象(object),每个对象有自己的结构属性、绘图方式、对于外界信号的响应方式,以及附加信息;对象可以向系统注册或者删除所需要接受的信号模式;对象可以组成对象组,对象组也可以作为某个对象的成员;对象和对象之间可以通过回调函数,也可以通过信号与槽的方式进行多对多的通信。
       由于时间紧迫,这个库的实现方式其实大部分是自己意淫出来的(划掉),其中一些想法来源于java的swing组件,另一些大概来自于windows的回调函数、消息队列机制,以及qt库等等gui实现。同时自己使用gui编程、面向对象编程的经验也不很丰富,win32 api也是看了两天一本书都没翻完就开始写的(不过我觉得它可能理论意义远大于实际意义了),因此难免会有不少疏漏和设计的缺陷,恳请诸公不吝赐教。
    

具体使用方法以及实现,请移步相关文档。

About

浙江大学c语言程序设计专题用的图形库的一个重构和改进版本(以及简单的CAD)

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published