发布大幅重构优化的 TouchVG 1.0.2
发布大幅重构优化的 TouchVG 1.0.2,支持SVG、多模块扩展结构,欢迎评阅改进、提交pull request。
https://github.com/rhcad/touchvg
关于 TouchVG
TouchVG 是一个主要由C++开发的轻量级2D矢量绘图框架,可在 iOS、Android、Windows 等多个平台构建矢量绘图应用。
作者:张云贵 rhcad@hotmail.com 开源协议:LGPL 2.1,见 LICENSE 文件描述。
TouchVG 的功能
支持多点触摸或鼠标的交互绘图方式,可以无级放缩或平移显示矢量图形、图像、SVG。
除了基本的15余种矢量图形类型外,可使用C++或Java等来扩充更多的图形类型。
除了基本的20余种选择和绘图命令外,还可使用C++、Java等扩充更多的交互命令。
可以交互式修改图形的线宽、颜色等属性,可以进行放缩变形、克隆等图形操作。
支持JSON等格式的图形序列化操作,允许扩充XML、数据库等其他序列化适配器。
支持多模块的扩展机制,可构建数字教育、动态几何、图文笔记等多种行业绘图模块。
更多说明将在TouchVG的 在线文档 中补充。
引用的开源框架
Larva Labs 的 Android SVG 解析框架 svgandroid (Apache License 2.0)。
iOS SVG 解析框架 SVGKit (MIT)。
用于跨语言转换的 SWIG,用此工具生成粘合代码。
iOS静态库模板 iOS-Universal-Library-Template。
JSON 解析和输出框架 rapidjson (MIT)。
GCC编译脚本 x3py (Apache License 2.0)。
算法:圆弧和Bezier曲线最近点计算、 三次Bezier范围计算、 两圆求交点、 点线位置判断。
意见和建议
在您使用 TouchVG 的过程中有任何意见和建议,请到此项目 提交Issue。
Android编译说明
在 eclipse 中导入此项目下的所有工程,运行 VGTest 工程可看演示效果。
可能需要根据实际安装情况修改工程的SDK版本号。
建议使用较新的 ADT Bundle,省掉了eclipse和ADT的安装配置麻烦事。
可以将 democmds 改为你的应用库工程(例如使用UltraEdit保持大小写全文替换,并替换文件名), 该工程包含 democmds.jar 和 libdemocmds.so(本地库)。在此增加自己的图形类和命令类,这样就不需要改动 TouchVG 内核了。
不写C++代码、不要democmds也行,参考
android/test/src/vgtest/testview/shape
包写自己的图形和命令吧。如需重新生成 libtouchvg.so 和 libdemocmds.so,则进入此项目的 android 目录,运行
./build.sh
或./build.sh NDK_DEBUG=1
(需要将NDK安装位置加到PATH环境变量,以便使用 ndk-build)。使用NDK-r8c以后的版本如果出现
build/gmsl/__gmsl:512: *** non-numeric second argument to wordlist function
错误, 则打开 NDK 安装目录下的build/gmsl/__gmsl
文件,将512行改为:int_encode = $(__gmsl_tr1)$(wordlist 1,$(words $1),$(__gmsl_input_int))
如果是在Windows上编译,推荐使用 MSYS(Unix模拟环境工具)、TDM-GCC(一种MinGW发行版)。
如需重新生成内核JNI类(democmds.jar中的core包),则先删除
democmds_java_wrap.cpp
,再运行./build.sh
(需要安装SWIG,并将SWIG位置加到 PATH 环境变量)。
iOS编译说明
在 Xcode 中打开 ios/TestVG.xcworkspace 文件,运行 TestView 演示程序。
libTouchVG.a 和 libDemoCmds.a 太大,没上传到源码库,需要自己编译:
进入此项目的 ios 目录,运行
./build.sh
(需要配置Xcode命令行环境,以便使用 xcodebuild)。本项目对 SVGKit 做了少量修改,可下载预编译的 libSVGKit-iOS.a到
ios/output
目录下。在真机上调试时需要修改主程序的Bundle Identifier,例如“com.yourcompany.TestView”,并选择自己的开发证书(Code Signing)。
可以将 DemoCmds 改为你的应用库工程(例如使用UltraEdit保持大小写全文替换,并替换文件名), 增加自己的图形类和命令类,这样就不需要改动 TouchVG 内核了。
WPF编译说明
在 Visual Studio 2010 中打开
wpf/Test_cs10.sln
,运行 WpfDemo 工程。VS2008则打开wpf/Test_cs9.sln
。如需重新生成内核类(编译 Swig Files 下的 touchvg.i 或 democmds.i),需要安装 SwigWin,并将SWIG解压位置加到 PATH 环境变量。
其他编译说明
还可在Linux、MinGW、Mac OS X下编译静态库,或为 Python、Perl、Java 等应用编译动态库。
进入
core
目录,该目录下有 Makefile 文件,运行下列 make 指令:
make all install
:编译C++静态库。
make java
:为Java程序生成Jar包和动态库。
make python
、make perl
:分别为Python、Perl等生成类文件和动态库。
make clean java.clean python.clean
:删除上述编译出的临时文件。如果是在Windows上编译,推荐使用 MSYS(Unix模拟环境工具)、TDM-GCC(一种MinGW发行版)。
发布大幅重构优化的 TouchVG 1.0.2的更多相关文章
- 各大浏览器相继发布声明将停止支持 TLS 1.0 和 TLS 1.1 !
简评:TLS 1.0 发布至今已将近 20 周年即将寿终正寝,期间为我们保障了千亿次甚至万亿次的数据请求安全. TLS 工作组几个月前发布声明文件弃用 TLS 1.0 和 TLS 1.1. 昨天,包括 ...
- SQL语句也可以重构优化
真的,不管是程序中的代码可以重构优化,在SQL Server的语句,也是可以的.下面举个例子,在存储过程中,所传入的数据参数不能为空,另外在对数据表进行更新时,所更新的字段如果是空的话,就更新,如果传 ...
- AgileConfig轻量级配置中心1.4.0发布,重构了发布功能
加入 NCC 先说一个事,AgileConfig 在 7 月底终于通过了 NCC 社区的审核,正式成为了 NCC 大家庭的一员.这对 AgileConfig 来说是一个里程碑,希望加入 NCC 后能更 ...
- YuebonCore 2021第一版发布,重构功能菜单模块
YuebonCore 2021.1.6 版本发布了,这是该软件 2021 年的首个版本更新. 对功能菜单模块进行重构,简化功能模块的新增配置,删除了原有的sys_function功能表,,优化sys_ ...
- Android优化—— Google 发布 Android 性能优化典范
阅读目录 0)Render Performance 1)Understanding Overdraw 2)Understanding VSYNC 3)Tool:Profile GPU Renderin ...
- Google 发布 Android 性能优化典范
2015年伊始,Google发布了关于Android性能优化典范的专题, 一共16个短视频,每个3-5分钟,帮助开发者创建更快更优秀的Android App.课程专题不仅仅介绍了Android系统中有 ...
- java常用重构优化总结--自己亲身体验
代码重构 6大原则: 单一职责原则(一个类最好最好只有一种行为动机,太多承担职责会导致耦合度太高). 开放封闭原则(功能可以扩展,但是不可以内部修改). 依赖倒转原则(应该依赖抽象 ...
- 基于C#的钉钉SDK开发(1)--对官方SDK的重构优化
在前段时间,接触一个很喜欢钉钉并且已在内部场景广泛使用钉钉进行工厂内部管理的客户,如钉钉考勤.日常审批.钉钉投影.钉钉门禁等等方面,才体会到原来钉钉已经已经在企业上可以用的很广泛的,因此回过头来学习研 ...
- 【转】Google 发布 Android 性能优化典范(比较老,但很实用)
2015年伊始,Google发布了关于Android性能优化典范的专题, 一共16个短视频,每个3-5分钟,帮助开发者创建更快更优秀的Android App.课程专题不仅仅介绍了Android系统中有 ...
随机推荐
- java集合类的学习总结一
概况总结 首先,区分最顶层接口的区别:Collection和Map的区别:前者是单个元素:后者存储的是一对元素.Collection有List和Set两个子接口,两个子接口下分别有Vector和Arr ...
- ThinkPHP执行原生sql,实现一些复杂的业务需求
1)事情起因:写php的同事做了社区消息接口,主要返回几个方面的消息,如我的主贴的点赞.我的层帖的点赞.我的主贴的评论.我的评论的评论, 数据因为关联了5张以上的表,返回的格式不一: 如原来的thin ...
- spark spark ziliao important
http://book.51cto.com/art/201408/448416.htm 一.如何实现多台机器的ssh无密码登录 当我们在配置多台计算,使之可以相互使用无密码登录-ssh,之前都是一台一 ...
- 为什么Android的图片质量会比iPhone的差?
经常看到有人问:“安卓版微信发出去的图片怎么那么渣!比iPhone的差远了!”.不只是微信,很多应用安卓版的图片质量就是要比iPhone版逊色很多,这到底是怎么回事? 我们团队最初也纠结 ...
- Spring3.3 整合 Hibernate3、MyBatis3.2 配置多数据源/动态切换数据源 方法
一.开篇 这里整合分别采用了Hibernate和MyBatis两大持久层框架,Hibernate主要完成增删改功能和一些单一的对象查询功能,MyBatis主要负责查询功能.所以在出来数据库方言的时候基 ...
- Docker实践(2)—虚拟网络
1 docker(container)的虚拟网络 docker的虚拟网络结构: host创建一个虚拟bridge,每个container对应一个虚拟网络设备(TAP设备),与bridge一起构成一个虚 ...
- 解决genemotion模拟器冲突导致的Android Studio无法启动ADB的问题
首先命令行下运行 adb nodaemon server ./adb nodaemon server (Mac OSX) 如果出现错误: error: could not install *smart ...
- .NET通过async/await实现并行
如果可以并行可以大大提高性能,但在我们的使用中,不可能全是并行的也是要有线行操作,所以我们需要在业务逻辑层进行并行操作的护展: 数据访问层不变还是以前一样如下: public class UserDA ...
- [LeetCode] Range Sum Query - Immutable & Range Sum Query 2D - Immutable
Range Sum Query - Immutable Given an integer array nums, find the sum of the elements between indice ...
- Logdump使用指引
Logdump使用指引 Logdump使用指引在GGSCI中使用如下命令查看当前处理的队列文件和RBA号,例如:GGSCI (br-jl-accs-db1) 3> info REPYXAREPL ...