librecad二次开发

2023-10-29

1/ui 部份

    1/增加主菜单
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/65e596109caf43a485505ab1b705ea94.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETkDns5bnjq8,size_18,color_FFFFFF,t_70,g_se,x_16)

    增加子菜单项

3/plt dxf 转换 只转换成简单连续线段
端点 0 — x y 坐标 标志 10/20
端点 1 — x y 坐标 标志 11/21

 起笔  抬笔 转换成  sec 及段结束

2/显示接口

获取当前界面  组件单元列表

RS_BlockList* RS_Block::getBlockList() {
RS_Graphic* g = getGraphic();
if (g) {
    return g->getBlockList();
} else {
    return NULL;
}
}

4/端点绘线接口 镜像操作 负坐标处理

/**
* Adds a line to the current graphic document.
*/
void rsPyAddLine(double x1, double y1, double x2, double y2) {
//printf("c: addLine called\n");
//printf("c: parameter from python: %f\n", x1);

    RS_Graphic* graphic = RS_SIMPLEPYTHON->getGraphic();
if (graphic!=NULL) {
    graphic->addEntity(new RS_Line(graphic,
                                   RS_LineData(RS_Vector(x1, y1),
                                               RS_Vector(x2, y2))));
} else {
    std::cerr << "rsPyAddLine: No graphic object set.\n";
}
}

5/鼠标滚轮控制缩放

//将下面事件操作替换
if (scroll && scrollbars) {
	//scroll by scrollbars: issue #479
    RS_SETTINGS->beginGroup("/Defaults");
    bool inv_h = (RS_SETTINGS->readNumEntry("/WheelScrollInvertH", 0) == 1);
    bool inv_v = (RS_SETTINGS->readNumEntry("/WheelScrollInvertV", 0) == 1);
    RS_SETTINGS->endGroup();

    int delta;

	switch(direction){
	case RS2::Left:
	case RS2::Right:
        delta = (inv_h) ? -e->delta() : e->delta();
		hScrollBar->setValue(hScrollBar->value()+delta);
		break;
	default:
        delta = (inv_v) ? -e->delta() : e->delta();
		vScrollBar->setValue(vScrollBar->value()+delta);
	}

//        setCurrentAction(new RS_ActionZoomScroll(direction,
//                         *container, *this));
}

// zoom in / out:
else if (e->modifiers()==0) {

7/绘制工作空间大小,以指定缩放/对应屏幕像素及转换后实时中心点为原点画矩形

QRect(-50, -50, 300, 300)

8/添加图元及block 选中显示 tableview

 添加 point 映射
 添加选中映射
       选中处理代码


/**
 * @return True if the entity is in the given range.
*/
 bool RS_Entity::isInWindow(RS_Vector v1,        RS_Vector v2) const
{
double right, left, top, bottom;

right = std::max(v1.x, v2.x);
left = std::min(v1.x, v2.x);
top = std::max(v1.y, v2.y);
bottom = std::min(v1.y, v2.y);

return (getMin().x>=left &&
        getMax().x<=right &&
        getMin().y>=bottom &&
        getMax().y<=top);
}


 获取图元id
 获取图元名称

        
// There should be a better way then this...
switch(e.rtti()) {
case RS2::EntityPoint:
    os << (RS_Point&)e;
    break;

case RS2::EntityLine:
    os << (RS_Line&)e;
    break;

case RS2::EntityPolyline:
    os << (RS_Polyline&)e;
    break;

case RS2::EntityArc:
    os << (RS_Arc&)e;
    break;
 添加图元参数控制

10/多点触控/键盘方向键移动

     if (e->modifiers() & Qt::ControlModifier)
{        auto value = text();        if (value.isEmpty())            value = relative_ray;        QString r_string;        switch (e->key())        {            case Qt::Key_Up:                r_string = "0," + value;                break;            case Qt::Key_Down:                r_string = "0,-" + value;                break;            case Qt::Key_Right:                r_string = value + ",0";                break;            case Qt::Key_Left:                r_string = "-" + value + ",0";                break;            default:                QLineEdit::keyPressEvent(e);                return;        }
    


void Widget::mouseMoveEvent(QMouseEvent * event)
{
       qDebug()<<tr("%1,%2").arg(event->pos().x()).arg(event->pos().y());
}

11/系统坐标中点绘制随窗体自动拉伸定位框

QPainter painter(this);
static double wid = rect().width();
static double hei = rect().height();

painter.setRenderHints(QPainter::Antialiasing, true);//抗锯齿

double new_wid = rect().width()/wid;
double new_hei = rect().height()/hei;
painter.scale(new_wid,  new_hei);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

librecad二次开发 的相关文章

  • 关于使用SSM框架搭建的项目的运行方法

    目录 运行环境配置 1 安装 IDEA 开发工具 中文版设置 JDK直接下载 2 安装 MYSQL 数据库 2 1 下载安装 2 2 配置环境变量 2 4 安装 MySQL 2 4 进入 MySQL 2 5 常见问题 3 安装Tomcat
  • java日期之间的比较【项目日常】

    一 String类中提供了compareTo方法 原理是将字符串转成char 从char 0 开始进行比较 如果两值不相等 则返回相减的结果 一般将结果与0相比 进行判断 并不关心返回的具体值 String s1 2022 09 22 St

随机推荐

  • 蓝桥杯每日练习2

    文章目录 一 Fibonacci斐波那契数列 1 题目 2 样例 3 解析 4 Python代码 二 求圆的面积 1 题目 2 样例 3 解析 4 Python代码 三 N以内累加求和 1 题目 2 样例 3 解析 4 Python代码 四
  • 分布式文件系统 - FastDFS 在UBUNTU下安装

    分布式文件系统 FastDFS 在 CentOS 下配置安装部署 按照该博主的介绍 大部分安装操作正常 只是在创建软连接的时候报错 所以只好用笨办法启动和关闭 启动tracker usr bin fdfs trackerd etc fdfs
  • Python 实现不平衡采样

    本文将基于不平衡数据 使用Python进行反欺诈模型数据分析实战 模拟分类预测模型中因变量分类出现不平衡时该如何解决 具体的案例应用场景除反欺诈外 还有客户违约和疾病检测等 只要是因变量中各分类占比悬殊 就可对其使用一定的采样方法 以达到除
  • python命令行操作:Click包

    0 前言 在Python开发和测试过程中主要有两种模式可以选择 脚本模式 命令行模式 在代码的开发和调试过程中使用脚本模式还是很方便的 尤其接触pycharm eclipse这类强大的IDE 或者配合vs code这种综合的文本编辑器 但是
  • 【MySQL】——数据库的基本查询练习

    个人主页 努力学习的少年 版权 本文由 努力学习的少年 原创 在CSDN首发 需要转载请联系博主 如果文章对你有帮助 欢迎关注 点赞 收藏 一键三连 和订阅专栏哦 基本查询 基本查询只在一张数据表中进行查询 接下来的题目都会在下面这张表进行
  • Java多线程——线程池

    一 ThreadPoolExecutor接口 之前提到过Executors所提供的四种线程池 即 Scheduled Single Fixed Cached 如果这几种线程池不能完全满足你的需求 那么通过ThreadPoolExecutor
  • [4G&5G专题-97]:MAC层- 调度 - 上行调度的原理、过程与算法

    目录 第1章 调度概述 1 1 调度概述 1 2 无线资源调度的分类 第2章 上行调度的整体架构与过程 2 1 上行需要调度的信道 2 2 上行数据发送过程 2 3 上行调度架构 2 4 上行调度的输入信息 2 5 上行调度的步骤与过程 2
  • 【客户案例】云联壹云帮助华北电力大学搭建 AI 训练平台

    客户介绍 华北电力大学是教育部直属全国重点大学 是国家 211 工程 和 985 工程优势学科创新平台 重点建设大学 2017 年 学校进入国家 双一流 建设高校行列 重点建设能源电力科学与工程学科群 全面开启了建设世界一流学科和高水平研究
  • 如何制作属于自己的图片马

    前言 图片马是指代码写入后不破坏图片为前提 图片仍可正常打开 详细过程 自定义一个新的文件夹 文件夹里放入三个文件 一张自己喜欢的图片 自定义php代码文件 批处理文件 super png 用文本编辑器打开也没php代码
  • 深度学习基础知识

    深度学习入门者必看 25个你一定要知道的概念如果你还不了解深度学习有多么强大 不妨就从这篇文章开始 https mp weixin qq com s biz MzIzNjc1NzUzMw mid 2247485927 idx 1 sn 60
  • vue diff 双端比较算法

    文章目录 双端指针 比较策略 命中策略四 命中策略二 命中策略三 命中策略一 未命中四种策略 遍历旧节点列表 新增情况一 新增情况二 删除节点 双端比较的优势 双端指针 使用四个变量 oldStartIdx oldEndIdx newSta
  • 微信小程序页面跳转三种方式

    为了不让用户在使用小程序时造成困扰 微信小程序规定页面路径只能是五层 请尽量避免多层级的交互方式 页面跳转的话就涉及到了多个页面层级 第一种 wx navigateTo OBJECT 保留当前页面 跳转到应用内的某个页面 使用wx navi
  • powershell 自动补全

    我在zsh中使用智能提示 zsh autosuggestions已经习惯了 而在windows中的终端默认没有智能提示 很起来不舒服 那么有没有什么替代呢 安装powershell 7 3 我的windows 10默认安装的是powersh
  • CSDN 改变字体颜色

    将字体改变为红色 font color 900 我是编程ID font 设置字体颜色和字号 font face 华文行楷 color red size 5 本字体是华文行楷 红色 5号大小 font 更多字体参见 https blog cs
  • vue+element+table+render+slot

    前言 最新又回忆并且整理下之前的资料 在这里共享下把 主要是element ui框架里面对table的使用 因为element ui不可以像我们iview框架一样可以直接的在表头里面写render函数 我这里把element ui的tabl
  • Java使用EasyExcel导出数据到Excel文件,以及调用接口下载文件

    1 引入EasyExcel 依赖
  • OAM PDU

    MPLS OAM基本概念 MPLS提供一个完全不依赖于任何三层协议或二层协议的OAM机制 在MPLS的数据平面实现以下功能 1确定LSP的连通性 2 衡量网络利用率以及度量网络性能 3 在链路出现缺陷或故障时迅速进行保护倒换 以便根据与客户
  • hping3的使用

    Hping 是面向命令行的 用于生成和解析 TCP IP 协议数据包汇编 分析的开源工具 常见的应用是 扫描端口 伪造地址和洪水攻击 hping3中的参数如下 h help 显示帮助 v version 显示版本 c count 发送数据包
  • APS计划排程系统之下的MRPII、JIT、TOC三种方式对比分析

    1 生产物流计划的制订方式对比 MRPII采用的是集中式的物料计划方式 建立好产品加工程序 在电脑中确定好准确的订单需求和库存量 对各个生产单元传送生产指令 JIT利用的是看板管理控制方式 按照有限能力计划 逐道工序地倒序传递生产中的取货指
  • librecad二次开发

    1 ui 部份 1 增加主菜单 在这里插入图片描述 https img blog csdnimg cn 65e596109caf43a485505ab1b705ea94 png x oss process image watermark t