librecad 是一个非常优秀的二维cad开源软件,是一个可控的图纸绘制方案。

使用简单,支持命令行绘制。
![在这里插入图片描述](https://img-blog.csdnimg.cn/c3f7fd9f2dee4ecc952cbaf2212d0b88.png

li;
0,0;
@306,0;
@0,-275;
@-120,0;
@0,-356;
@-368,0;
@0,330;
@180,0;
c;

也可以将上面命令写入文件,然后加载文件,可以在某种程度上灵活修改(以后建议加个历史修改功能。)

唯一诟病的 librecad 的中文支持比较差, wqy-unicode 对中文进行了支持, 但是是空心的。

个人对这个有两种想法。
一种是修改文字,重新对几千上万个文字进行绘制肯定不太好, c++opencv中线条细化算法 - 爱码网提供了一种思路。

//四周细化算法
void Refine(Mat& image) {int p[8];int top=1, down=1, right=1, left=1;vector<Point> del;int grayvalue = 0;int height = image.rows;   //获取图像高度int width = image.cols;       //获取图像宽度Mat *im = reinterpret_cast<Mat*>((void*)&image);    //获取像素点信息//上下收缩for (int i = 1; i < height-1; i++) {for (int j = 1; j < width-1; j++) {grayvalue = Get_gray(im, j, i);  //获取指定点灰度值if (grayvalue != 0) {  //判断中心点是否为前景 p[0] = (Get_gray(im, j + 1, i) == 0) ? 0 : 1;p[1] = (Get_gray(im, j + 1, i - 1) == 0) ? 0 : 1;p[2] = (Get_gray(im, j, i - 1) == 0) ? 0 : 1;p[3] = (Get_gray(im, j - 1, i - 1) == 0) ? 0 : 1;p[4] = (Get_gray(im, j - 1, i) == 0) ? 0 : 1;p[5] = (Get_gray(im, j - 1, i + 1) == 0) ? 0 : 1;p[6] = (Get_gray(im, j, i + 1) == 0) ? 0 : 1;p[7] = (Get_gray(im, j + 1, i + 1) == 0) ? 0 : 1;if (i < height - 2)down = (Get_gray(im, j, i + 2) == 0) ? 0 : 1;elsedown = 1;//  横向直线if (p[6] && (p[5] || p[7] || p[0] || p[4]) \ && !(p[1] || p[3]) && p[2] == 0 && down) {del.push_back(Point(j, i));}if (p[2] && (p[1] || p[3] || p[0] || p[4]) \ && !( p[5] || p[7]) && p[6] == 0) {del.push_back(Point(j, i));}}}}for (int i = 1; i < height - 2; i++) {grayvalue = Get_gray(im, 0, i);if (grayvalue != 0) {if ( Get_gray(im, 0, i - 1) \&& Get_gray(im, 1, i - 1) \ && Get_gray(im, 0, i + 1)==0 \ && Get_gray(im, 1, i)==0) {//上2,上1,右上1,下1=0,右1=0 del.push_back(Point(0, i));}if (Get_gray(im, 0, i - 1) == 0 \ && Get_gray(im, 1, i + 1) \ && Get_gray(im, 1, i) == 0 \ && Get_gray(im, 0, i+2)){//上1=0,下1,右下1,右1=0,下2 del.push_back(Point(0, i));}}if (grayvalue != 0) {if (Get_gray(im, width - 1, i - 1) \ && Get_gray(im, width - 2, i - 1) \ && Get_gray(im, width - 1, i + 1) == 0 \ && Get_gray(im, width - 2, i) == 0){ //上2,上1,左上1,下1=0,左1=0 del.push_back(Point(width - 1, i));}if (Get_gray(im, width - 1, i - 1) == 0 \ && Get_gray(im, width - 2, i + 1) \ && Get_gray(im, width - 2, i) == 0 \ && Get_gray(im, width - 1, i + 2)){//上1=0,下1,左下1,左1=0,下2 del.push_back(Point(width - 1, i));}}}for (int i = 0; i < del.size();i++) {uchar* data = image.ptr<uchar>(del[i].y);data[del[i].x]=0;}//左右收缩for (int i = 1; i < height - 1; i++) {for (int j = 1; j < width - 1; j++) {grayvalue = Get_gray(im, j, i);  //获取指定点灰度值if (grayvalue != 0)  {  //判断中心点是否为前景p[0] = (Get_gray(im, j + 1, i) == 0) ? 0 : 1;p[1] = (Get_gray(im, j + 1, i - 1) == 0) ? 0 : 1;p[2] = (Get_gray(im, j, i - 1) == 0) ? 0 : 1;p[3] = (Get_gray(im, j - 1, i - 1) == 0) ? 0 : 1;p[4] = (Get_gray(im, j - 1, i) == 0) ? 0 : 1;p[5] = (Get_gray(im, j - 1, i + 1) == 0) ? 0 : 1;p[6] = (Get_gray(im, j, i + 1) == 0) ? 0 : 1;p[7] = (Get_gray(im, j + 1, i + 1) == 0) ? 0 : 1;if (j < width - 2)right = (Get_gray(im, j + 2, i) == 0) ? 0 : 1;elseright = 1;//竖直线if (p[0] && (p[1] || p[7] || p[2] || p[6]) && !(p[3] || p[5]) && p[4] == 0 && right) {del.push_back(Point(j, i));}if (p[4] && (p[3] || p[5] || p[2] || p[6]) && !(p[1] || p[7]) && p[0] == 0) {del.push_back(Point(j, i));}}}}for (int j = 1; j < width - 2; j++) {grayvalue = Get_gray(im, j, 0);if (grayvalue != 0) {if (Get_gray(im, j - 1, 0) == 0 \ && Get_gray(im, j + 1, 0) \ && Get_gray(im, j + 2, 0) \ && Get_gray(im, j, 1) == 0 \ && Get_gray(im, j+1, 1)) {//左1=0,右1,右2,下1=0,右下1 del.push_back(Point(j, 0));}if (Get_gray(im, j - 1, 0) \ && Get_gray(im, j+1, 0)==0 \ && Get_gray(im, j, 1) == 0 \ && Get_gray(im, j-1, 1)){//左1,右1=0,下1=0,左下1 del.push_back(Point(j, 0));}}}for (int j = 1; j < width - 2; j++) {grayvalue = Get_gray(im, j, height-1);if (grayvalue != 0) {if (Get_gray(im, j - 1, height - 1) == 0 \ && Get_gray(im, j + 1, height - 1) \ && Get_gray(im, j + 2, height - 1) \ && Get_gray(im, j, height - 2) == 0 \ && Get_gray(im, j + 1, height - 2))  {//左1=0,右1,右2,下1=0,右下1del.push_back(Point(j, height - 1));}if (Get_gray(im, j - 1, height - 1) \ && Get_gray(im, j + 1, height - 1) == 0 \ && Get_gray(im, j, height - 2) == 0 \ && Get_gray(im, j - 1, height - 2)){//左1,右1=0,下1=0,左下1 del.push_back(Point(j, height - 1));}}}for (int i = 0; i < del.size(); i++) {uchar* data = image.ptr<uchar>(del[i].y);data[del[i].x] = 0;}}

另外一种就是直接修改软件, 思路也很简单, 框的数据看了wqy-unicode文件, 里面的数据都是闭环的。

只需要判断以下, 第一个点是否和最后一个点相同,如果相同就调用QT的API填充内容即可。

不过遇到点问题, 我的电脑目前没有装编译环境, 虽然看了librecad的源码,但是还没有动手修改, 等librecad的编译环境搭建好了在说, 这牵扯到另外一个项目。

不过一步一步来, 大家有什么思路,也可以帮忙优化下, 建立一个良好的开源生态。

参考

  • c++opencv中线条细化算法 - 爱码网

关于 librecad 的中文支持相关推荐

  1. matlab2018无法使用qcat,解决Matlab 2018a源代码的中文支持问题

    1. 问题 Matlab 2018a源代码的中文支持问题: Matlab软件要求源文件mfile采用GBK编码.但是在调用程序过程中,程序有时候必须用UTF-8编码,例如shaperead中文地图程序 ...

  2. JSON asp(vbs)中文支持问题

    JSON asp(vbs)中文支持问题 <% '************************************************************************* ...

  3. WINCE6.0 中文支持

    WINCE6.0 中文支持(转) 2009-07-28 09:42 在以前用PB做CE5.0的时候,选择中文很简单: 现在用CE6.0,其实也很简单 ,但是我今天居然忘了, 又花费了点时间去catal ...

  4. irrlicht1.3中文支持

    irrlicht1.3的中文支持补丁,需要的朋友可以下载,如何使用里面有说明./Files/flysnow/IrrlichtML-1.3-win32Linux.zip 转载于:https://www. ...

  5. centos6.2安装桌面环境 与中文支持

    yum groupinstall "X Window System" //安装Xorg yum groupinstall "Desktop" //安装GNOME ...

  6. Linux(CentOS)中常用软件安装,使用及异常——XManager, 中文支持,JDK

    欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. 欢迎跳转到本文的原文链接:https: ...

  7. OpenReports中文支持方案

    此文章在<OpenReports中文支持完全解决方案.doc>的基础上做优化,并贴出代码.已测试通过. 一.主要解决的问题 1 页面显示支持中文 2 与服务器或数据库的交互支持中文 3 查 ...

  8. Python 数据分析三剑客之 Matplotlib(二):文本描述 / 中文支持 / 画布 / 网格等基本图像属性

    CSDN 课程推荐:<Python 数据分析与挖掘>,讲师刘顺祥,浙江工商大学统计学硕士,数据分析师,曾担任唯品会大数据部担任数据分析师一职,负责支付环节的数据分析业务.曾与联想.亨氏.网 ...

  9. linux mint php mysql_linux mint 下mysql中文支持问题

    一.mysql默认不支持中文,它的server和db默认是latin1编码.所以我们要将其改变为utf-8编码,因为utf-8包含了地球上大部分语言的二进制编码 1.关闭mysql服务 sudo /e ...

  10. CentOS cannot change locale UTF-8解决方法及设置中文支持

    CentOS cannot change locale UTF-8解决方法及设置中文支持 原文链接:https://blog.csdn.net/wave_1102/article/details/45 ...

最新文章

  1. GBDT算法原理及附有源码实现的 转
  2. nable to execute dex: Multiple dex files define Lcom/chinaCEB/cebActivity/R
  3. python作用域与LEGB规则
  4. css之flex布局
  5. access主窗体名词解释_ACCESS 父子窗体的语法介绍
  6. [LeetCode] 159. Longest Substring with At Most Two Distinct Characters 最多有两个不同字符的最长子串...
  7. api调用实例python_调用阿里云API 的demo示例(java/python)
  8. 51nod 1428 bzoj 1651: [Usaco2006 Feb]Stall Reservations 专用牛棚
  9. SpringBoot 集成ElasticSearch(二)分页查询
  10. [diy-windows系统] Windows下dism 集成系统补丁、驱动
  11. 中国移动2013~2018年笔试真题及答案解析(助力2020秋招)
  12. 2021年最新DNF脚本框架
  13. MySQL 数据库简介
  14. PreparedStatement 用法
  15. linux win10 mac地址修改,两种方法教你修改Win10专业版MAC物理地址
  16. 阿里云盘已经正式开放(获得1T永久免费空间,25MB/s下载速度)
  17. 台式计算机看网络电视,关于电脑看网络电视卡的原因及解决方法
  18. 跨越专业翻译的语言之墙:百度翻译的技术攀登
  19. 百度网盘超级会员,年卡低至198元!百度官方直充,会员实时生效!
  20. python对excel操作简书_python Excel 写

热门文章

  1. 2022年4月树莓派系统初始用户名密码
  2. 修改树莓派默认密码及切换root账号
  3. DirectX简单的FBX文件加载(网格MESH)
  4. 医咖会免费SPSS教程学习笔记—非参数检验之两相关样本
  5. ArcGIS软件操作问题及解决方法总结
  6. 手机App测试的相关测试点-简单总结
  7. 遍历文件夹下所有文件
  8. 疯狂的程序员 71-80
  9. visio绘制流程图连接线总拐弯
  10. 谷歌浏览器:下载,插件安装