OpenCASCADE入门——7.8.0版本通过源码自编译,生成解决方案,用draw进行简单尝试

本文主要是介绍OpenCASCADE入门——7.8.0版本通过源码自编译,生成解决方案,用draw进行简单尝试,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述

目录

  • 引出
  • OpenCASCADE源码自编译
    • 首先安装cmake 和 vs
    • 然后安装两个重要的库TCL/TK和FreeType
      • TCL/TK的安装
        • nmake编译【失败的尝试】
        • activestate上下载安装包【失败】
          • 官网论坛查,也失败
        • 编译的再次尝试【应该是64位】
      • FreeType安装
        • 进行编译
    • 用cmake进行编译
    • 最终生成解决方案
    • 设置启动项,运行
  • 总结
  • 其他
    • 自定义信号和槽
      • 1.自定义信号
      • 2.自定义槽
      • 3.建立连接
      • 4.进行触发
    • 自定义信号重载
      • 带参数的
      • 按钮触发
      • 信号触发信号
      • 拓展
    • lambda表达式
      • 返回值
      • mutable修饰
      • 案例

引出

OpenCASCADE入门——7.8.0版本通过源码自编译,生成解决方案,用draw进行简单尝试


OpenCASCADE源码自编译

首先安装cmake 和 vs

Windows下CMake安装教程_window 安装cmake-CSDN博客

在这里插入图片描述

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

然后安装两个重要的库TCL/TK和FreeType

构建 OCCT - Open CASCADE Technology Documentation

开放式 CASCADE 技术:构建 OCCT (opencascade.org)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如果没有配置好第三方库就会报错

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

官网文档中说明了要先安装好这两个库

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

TCL/TK的安装

https://www.tcl.tk/doc/howto/compile.html

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

nmake编译【失败的尝试】

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

插曲:处理windows下,‘nmake‘不是内部或外部命令,也不是可运行的程序或批处理文件

然后我装了一个msvc编译环境,但其实不是这样搞的

在这里插入图片描述

在这里插入图片描述

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

还是报错,说Visual C++compiler environment not initialized.

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

期间还重启电脑,安装编译库,均以失败告终

重启了电脑,然后装了一个库

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

以上的尝试以失败告终

正确的nmake方式是打开如下控制台窗口

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

activestate上下载安装包【失败】

https://www.activestate.com/products/tcl/

需要注册一个账号,才可以下载

[Tcl/Tk 安装 - 哔哩哔哩 (bilibili.com)](https://www.bilibili.com/read/cv22487672/#:~:text=点击绿色的 Download Latest Version 按钮,下载最新版。 注意:默认下载的是x64版,针对64位系统。 如果使用的是32位的win7,则应该下载tcl-8.6.13-installer-1.13.0-x86.msi 下载之后双击安装包就可以安装,安装完毕后,在window开始菜单中会出现:,其中Tcl dommand shell对应Tcl语言解释器 tclsh.exe Tk graphical console对应Tk图形解释器 wish.exe)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

终于TCL,TK安装成功

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

但是这个后面在vs中编译会报错

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

官网论坛查,也失败

TKDraw 项目无法在 W32 中构建。( 7.5.0 版 ) - 论坛 Open Cascade Technology

即便在官网的论坛中找解决方案还是不行

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

编译的再次尝试【应该是64位】

tcl/tk编译 - ParamousGIS - 博客园 (cnblogs.com)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这个有误,应该用64位的那个编译

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

D:\PetFile\myPrograme\theThridPackage\tclBuid

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

nmake -f makefile.vc INSTALLDIR=D:\PetFile\myPrograme\theThridPackage\tclBuid TCLDIR=D:\PetFile\myPrograme\theThridPackage\tcl8.6.14

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

以上版本出现问题,应该用64位编译

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

FreeType安装

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

进行编译

进入这个目录,用vs打开,打开后运行一下,获得编译后DLL文件

D:\PetFile\myPrograme\theThridPackage\freetype-2.10.1\builds\windows\vc2010

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

上面这种错误方式后面会报错

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

中间有问题,后来又重新生成了一下

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

然后在cmake中配置这些第三方的包

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

上面用的是错误的包,失败了

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

用cmake进行编译

点击configure进行配置的验证

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

最后点击generate生成

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

最终生成解决方案

Windows11+VS2022+OCCT7.6.0安装配置记录_vs2022 occ-CSDN博客

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

设置启动项,运行

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传


总结

OpenCASCADE入门——7.8.0版本通过源码自编译,生成解决方案,用draw进行简单尝试


其他内容

其他

自定义信号和槽

1.自定义信号

写到signals下
返回void
需要声明,不需要实现
可以有参数,可以重戟

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2.自定义槽

返回void
需要声明,也需要实现
可以有参数,可以重载
写到public slot下或者public或者全局函数

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3.建立连接

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

// 老师饿了,学生请吃饭
connect(te,&Teacher::hungry,st,&Student::treat);

4.进行触发

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

自定义信号重载

当自定义信号和槽出现重载
8.1 需要利用还数指针明确指向函数的地址·
8.2void(Teacher::tsignal )QString )=&Teacher::hungry;
8.3 QString转成char *
8.3.1.ToUtf80转为QByteArray
8.3.2.Data0转为Char *
8.4信号可以连接信号
8.5断开信号disconnect

带参数的

    void (Teacher::*teacherSignal)(QString) = &Teacher::hungry;void (Student::*StudentSlot)(QString) = &Student::treat;

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

void Student::treat(QString foodName){// QString -> char * 先转成QByteArray(.toUtf8())  再转成Char* ()qDebug() << "请老师吃。。。" << foodName.toUtf8().data();
}

按钮触发

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    // 用一个按钮调用下课QPushButton *btn = new QPushButton("下课了",this);// 重置窗口daxiaothis->resize(600,400);connect(btn,&QPushButton::clicked,this,&Widget::classIsOver);

信号触发信号

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    // 无参的信号和槽连接void (Teacher::*teacherSignal2)(void) = &Teacher::hungry;void (Student::*StudentSlot2)(void) = &Student::treat;connect(te,teacherSignal2,st,StudentSlot2);// 信号连接信号connect(btn,&QPushButton::clicked,te,teacherSignal2);

断开信号disconnect

拓展

1、信号是可以连接信号
2、一个信号可以连接多个槽函数
3、多个信号可以连接同一个糟函数
4、信号和槽函数的参数必须类型一一对应
5、信号和槽的参数个数是不是要一致?信号的参数个数可以多余槽函数的参数个数

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

connect(信号的发送者,发送的信号signal信号),信号接受者,槽函数SLOT)
优点:参数直观
缺点:编译器不会检测爸数类型:

lambda表达式

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传在这里插入图片描述

在这里插入图片描述

    [=](){btn->setText("aaa");}();

返回值

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    int ret = []()->int{return 1000;}();qDebug() << "ret = " << ret;

mutable修饰

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    QPushButton *myBtn1 = new QPushButton(this);QPushButton *myBtn2 = new QPushButton(this);myBtn1->move(100,100);int m = 10;connect(myBtn1,&QPushButton::clicked,this,[m]()mutable {m=100+10;qDebug()<< m;});connect(myBtn2,&QPushButton::clicked,this,[=](){qDebug()<<m;});qDebug() << m;

案例

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    QPushButton * btnClose = new QPushButton;btnClose->setText("close");btnClose->move(100,0);btnClose->setParent(this);connect(btnClose,&QPushButton::clicked,this,[=](){btnClose->setText("关闭");emit te->hungry("娃哈哈");
//        this->close();});

这篇关于OpenCASCADE入门——7.8.0版本通过源码自编译,生成解决方案,用draw进行简单尝试的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1018742

相关文章

从入门到精通详解Python虚拟环境完全指南

《从入门到精通详解Python虚拟环境完全指南》Python虚拟环境是一个独立的Python运行环境,它允许你为不同的项目创建隔离的Python环境,下面小编就来和大家详细介绍一下吧... 目录什么是python虚拟环境一、使用venv创建和管理虚拟环境1.1 创建虚拟环境1.2 激活虚拟环境1.3 验证虚

C#文件复制异常:"未能找到文件"的解决方案与预防措施

《C#文件复制异常:未能找到文件的解决方案与预防措施》在C#开发中,文件操作是基础中的基础,但有时最基础的File.Copy()方法也会抛出令人困惑的异常,当targetFilePath设置为D:2... 目录一个看似简单的文件操作问题问题重现与错误分析错误代码示例错误信息根本原因分析全面解决方案1. 确保

Ubuntu如何升级Python版本

《Ubuntu如何升级Python版本》Ubuntu22.04Docker中,安装Python3.11后,使用update-alternatives设置为默认版本,最后用python3-V验证... 目China编程录问题描述前提环境解决方法总结问题描述Ubuntu22.04系统自带python3.10,想升级

C# LiteDB处理时间序列数据的高性能解决方案

《C#LiteDB处理时间序列数据的高性能解决方案》LiteDB作为.NET生态下的轻量级嵌入式NoSQL数据库,一直是时间序列处理的优选方案,本文将为大家大家简单介绍一下LiteDB处理时间序列数... 目录为什么选择LiteDB处理时间序列数据第一章:LiteDB时间序列数据模型设计1.1 核心设计原则

Python 基于http.server模块实现简单http服务的代码举例

《Python基于http.server模块实现简单http服务的代码举例》Pythonhttp.server模块通过继承BaseHTTPRequestHandler处理HTTP请求,使用Threa... 目录测试环境代码实现相关介绍模块简介类及相关函数简介参考链接测试环境win11专业版python

Python从Word文档中提取图片并生成PPT的操作代码

《Python从Word文档中提取图片并生成PPT的操作代码》在日常办公场景中,我们经常需要从Word文档中提取图片,并将这些图片整理到PowerPoint幻灯片中,手动完成这一任务既耗时又容易出错,... 目录引言背景与需求解决方案概述代码解析代码核心逻辑说明总结引言在日常办公场景中,我们经常需要从 W

Nginx中配置使用非默认80端口进行服务的完整指南

《Nginx中配置使用非默认80端口进行服务的完整指南》在实际生产环境中,我们经常需要将Nginx配置在其他端口上运行,本文将详细介绍如何在Nginx中配置使用非默认端口进行服务,希望对大家有所帮助... 目录一、为什么需要使用非默认端口二、配置Nginx使用非默认端口的基本方法2.1 修改listen指令

SpringBoot3匹配Mybatis3的错误与解决方案

《SpringBoot3匹配Mybatis3的错误与解决方案》文章指出SpringBoot3与MyBatis3兼容性问题,因未更新MyBatis-Plus依赖至SpringBoot3专用坐标,导致类冲... 目录SpringBoot3匹配MyBATis3的错误与解决mybatis在SpringBoot3如果

MySQL按时间维度对亿级数据表进行平滑分表

《MySQL按时间维度对亿级数据表进行平滑分表》本文将以一个真实的4亿数据表分表案例为基础,详细介绍如何在不影响线上业务的情况下,完成按时间维度分表的完整过程,感兴趣的小伙伴可以了解一下... 目录引言一、为什么我们需要分表1.1 单表数据量过大的问题1.2 分表方案选型二、分表前的准备工作2.1 数据评估

C++ vector越界问题的完整解决方案

《C++vector越界问题的完整解决方案》在C++开发中,std::vector作为最常用的动态数组容器,其便捷性与性能优势使其成为处理可变长度数据的首选,然而,数组越界访问始终是威胁程序稳定性的... 目录引言一、vector越界的底层原理与危害1.1 越界访问的本质原因1.2 越界访问的实际危害二、基