发布大幅重构优化的 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的更多相关文章

  1. 各大浏览器相继发布声明将停止支持 TLS 1.0 和 TLS 1.1 !

    简评:TLS 1.0 发布至今已将近 20 周年即将寿终正寝,期间为我们保障了千亿次甚至万亿次的数据请求安全. TLS 工作组几个月前发布声明文件弃用 TLS 1.0 和 TLS 1.1. 昨天,包括 ...

  2. SQL语句也可以重构优化

    真的,不管是程序中的代码可以重构优化,在SQL Server的语句,也是可以的.下面举个例子,在存储过程中,所传入的数据参数不能为空,另外在对数据表进行更新时,所更新的字段如果是空的话,就更新,如果传 ...

  3. AgileConfig轻量级配置中心1.4.0发布,重构了发布功能

    加入 NCC 先说一个事,AgileConfig 在 7 月底终于通过了 NCC 社区的审核,正式成为了 NCC 大家庭的一员.这对 AgileConfig 来说是一个里程碑,希望加入 NCC 后能更 ...

  4. YuebonCore 2021第一版发布,重构功能菜单模块

    YuebonCore 2021.1.6 版本发布了,这是该软件 2021 年的首个版本更新. 对功能菜单模块进行重构,简化功能模块的新增配置,删除了原有的sys_function功能表,,优化sys_ ...

  5. Android优化—— Google 发布 Android 性能优化典范

    阅读目录 0)Render Performance 1)Understanding Overdraw 2)Understanding VSYNC 3)Tool:Profile GPU Renderin ...

  6. Google 发布 Android 性能优化典范

    2015年伊始,Google发布了关于Android性能优化典范的专题, 一共16个短视频,每个3-5分钟,帮助开发者创建更快更优秀的Android App.课程专题不仅仅介绍了Android系统中有 ...

  7. java常用重构优化总结--自己亲身体验

    代码重构  6大原则:    单一职责原则(一个类最好最好只有一种行为动机,太多承担职责会导致耦合度太高).    开放封闭原则(功能可以扩展,但是不可以内部修改).    依赖倒转原则(应该依赖抽象 ...

  8. 基于C#的钉钉SDK开发(1)--对官方SDK的重构优化

    在前段时间,接触一个很喜欢钉钉并且已在内部场景广泛使用钉钉进行工厂内部管理的客户,如钉钉考勤.日常审批.钉钉投影.钉钉门禁等等方面,才体会到原来钉钉已经已经在企业上可以用的很广泛的,因此回过头来学习研 ...

  9. 【转】Google 发布 Android 性能优化典范(比较老,但很实用)

    2015年伊始,Google发布了关于Android性能优化典范的专题, 一共16个短视频,每个3-5分钟,帮助开发者创建更快更优秀的Android App.课程专题不仅仅介绍了Android系统中有 ...

随机推荐

  1. Atitit.列表页面and条件查询的实现最佳实践(2)------翻页 分页 控件的实现java .net php

    )------翻页 分页 控件的实现java .net php 1. 关于翻页有关的几大控件::搜索框控件,显示表格控件,翻页器,数据源控件.. 1 2. 翻页的显示格式:: 1 2.1. 通常ui- ...

  2. JAVA学习中Swing部分JDialog对话框窗体的简单学习

    package com.swing; import java.awt.Color;import java.awt.Container;import java.awt.event.ActionEvent ...

  3. MyEclipse使用总结——MyEclipse文件查找技巧 ctrl+shift+R ctrl+H

    一.查找文件 使用快捷键[ctrl+shift+R]弹出弹出文件查找框,如下图所示: 二.查找包含某个字符串的文件 使用快捷键[ctrl+H]在弹出对话框中选File Search选项,然后在第一个文 ...

  4. Factory模式

    使用new的Code都违反了DIP. 但是,依赖于稳定的具体类,是无害的.例如string. 另一方面,对于正在开发中的APP,很多具体类是易变的.此时应该依赖于抽象接口. Factory模式:只依赖 ...

  5. linux开发神器--Tmux

    在Linux上工作的朋友,可能会常常遇到这种情况: 痛点1: 在公司用putty连着Linux开发机,程序正跑着,不知不觉到了下班的时候,要和老婆/女朋友约会了,但是程序还没跑完,并且进度有点紧,还得 ...

  6. Call and Apply in JavaScript

    Call 和 Apply 方法可以用来代替另一个对象调用一个方法,改变this指向. 1.call -call([thisObj[,arg1[, arg2[,   [,.argN]]]]]) -调用一 ...

  7. Java 线程 — JMM Java内存模型

    JMM Java Memory Model,Java内存模型,属于语言级的内存模型 并发编程中存在的问题: 如何通信:用于线程之间交换信息.两种方式:共享内存,消息传递 如何同步:用于控制不同线程间操 ...

  8. 改善C#公共程序类库质量的10种方法

    最近重构一套代码,运用以下几种方法,供参考. 1  公共方法尽可能的使用缓存 public static List<string> GetRegisteredCompany() { Str ...

  9. android: UriMatcher的用法

    ContentProvider是Android四大组件之一,网上也有不少关于它的文章,基本用法都可以查到,但关于UriMatcher在其中的作用,文章中都有例子,但我觉得还没有说清楚. 先说为什么用U ...

  10. 线程同步中使用信号量AutoResetEvent

    using System; using System.Threading; namespace ConsoleApplication1 { class Program { static void Ma ...