
C++
文章平均质量分 50
beidou111
研究图形学流体仿真。个人学习笔记,仅作记录,侵权必删。曾经是搞CFD流化床生物质的。现北航计算机博士生在读。联系请发邮件。私信不看。邮箱:li_cl@foxmail.com
展开
-
Debug Eigen
(下载地址: https://gitlab.com/libeigen/eigen/-/blob/master/debug/msvc/eigen.natvis )(如果你git clone过Eigen文件夹,就发现它就在Eigen源码的Debug目录下面)假如我们直接想要检查Eigen中的VectorXf的值,我们会发现无法看到内部的值,如图。(其中%VSINSTALLDIR%是Visual studio的安装目录)只需要下载eigen.natvis这个文件,然后放到下面的目录即可。原创 2024-02-01 23:59:28 · 789 阅读 · 0 评论 -
vs code 可视化git diff比较历史文件与当前文件(git lens插件)
3. 点击open change with working file。然后点击右上角clear file annotations。首先我们需要安装git lens插件 和git graph插件。然后 我想比较first和 当前HEAD的文件差异。左边就是历史的文件,右边是当前的。但是这样很不方便,不能可视化。如果安装了git lens。如果使用命令行,就是。原创 2023-02-10 17:27:37 · 14448 阅读 · 1 评论 -
powershell设定环境变量
【代码】powershell设定环境变量。原创 2023-02-06 15:02:05 · 1250 阅读 · 0 评论 -
【非牛顿】zeno实现路线记录
最终对结果施加影响的是SolveViscousTerm节点。该节点中的solve_viscosity函数实际求解了粘性项。其中viscosity的应该是一个VDBFloatGrid,每个网格都有不同的值。我们的目的是根据非牛顿模型调节粘度。非牛顿模型根据剪切应变率来计算。非牛顿模型节点位于NonNewtonViscosity。为此我们要为该节点传入非牛顿模型计算出来的粘度值。该节点只是个门面,负责传入传出参数的。这就是我们非牛顿子模型要实现的地方。这个节点的内部实现位于。原创 2023-01-08 16:45:47 · 154 阅读 · 0 评论 -
【并行】std::thread入门
thread是C++11之后的一个并行STL库。由于是STL的一部分,好处是跨平台。与之相比,pthread.h只支持linux,因此建议用std::thread来代替pthread。thread无非就是一个C++类。所以创建线程就是类的实例化,而结束则会自动调用析构函数。thread的构造函数具有变长参数。第一个参数需要的是个函数指针/函数对象,第二个和之后的参数就是这个函数的参数。非常简单。其中有两个成员函数最为重要:join()和detach()。原创 2023-01-04 13:39:05 · 771 阅读 · 0 评论 -
【Partio】探索Partio(3): 将Partio数据封装成单例
我们将partio的数据封装成单例类。这样在程序的任何地方都可以方便的引用partio的数据。单例我们采用static。我们只要在程序的任何地方读入数据,在其他地方就能找到并使用该数据。这些数据即partio_data这个成员。关于Partio的往期回顾。原创 2023-01-02 23:23:39 · 215 阅读 · 0 评论 -
【cmake】搭配vcpkg的manifest模式实现自动安装第三方库
类似于pip的requirements。你只需要指定该项目的依赖库,就会自动运行vcpkg为你安装所有的依赖库。并且安装在当前项目build下面。这些第三方库与你本地的已经装好了的第三方库是隔离开的,因此解决了版本问题。并且他人安装你的库的时候,都会自动安装第三方库。原创 2022-12-10 19:52:06 · 1415 阅读 · 1 评论 -
zeno封装子图
2. 设置输入输出(可以有多个)最后,在main图中测试。原创 2022-12-08 23:01:09 · 225 阅读 · 0 评论 -
zeno将节点写死到程序内部
这个类的mydata变量,存储的实际上是json的ascii码(原版本直接存字符串,但是因为msvc字符串长度有限制)它实际上就是将节点的json文件序列化了一下。创建了一个节点类的模板。比方说,我们把它保存到projects/PBD目录下面。然后control+shift+e保存为cpp格式。最后就可以看到写死的子图作为新节点了。(使用target_source)我们可以观察一下这个cpp文件。首先我们有个封装好的子图。原创 2022-12-08 22:43:15 · 183 阅读 · 0 评论 -
【partio】仿真粒子数据格式转换器partio的用法
可以用来统一houdini、renderMan、Maya等不同软件中的粒子数据格式(GEO, BGEO, PTC, PDB, PDA)。partio只是个数据转换器,它在磁盘上是没有自己的格式的。但是你可以想象它在内存中具有一定的数据格式。它可以作为C++的一个库使用,也同时具有python的API。其中test.bgeo是从下载的源码的data文件夹下拷贝过来的,用于测试。我们下载好源代码,把里面的lib文件夹下面的源码拷贝到自己的项目中。partio是迪士尼2010年推出的仿真粒子格式转换器。原创 2022-11-08 11:11:07 · 1365 阅读 · 0 评论 -
ERROR LINK2019 无法解析的外部符号的常见错因
参考 微软官方文档https://learn.microsoft.com/en-us/cpp/error-messages/tool-errors/linker-tools-error-lnk2019?view=msvc-170链接器发现了一个函数声明,但是却没找到它的定义。原创 2022-11-03 19:04:08 · 1031 阅读 · 0 评论 -
【CMake】使用ctest配置googletest
以下讨论均为C++我们首先要理解什么是测试。测试就是把程序的某个函数单独拿出来,然后为它单独写一个main函数。运行这个main函数,看看打印结果是不是预期的,那就是测试了。由于测试是软件开发通用流程的一部分,因此当然可以用第三方工具来规范化测试流程。其中GoogleTest就是谷歌家推出的测试框架。它为你定义了一些方便的宏,还提供了好看的测试输出(比如测试失败的时候到底哪里错了?正确值是多少?)。我们要记住,它只是个方便的工具,你完全你可自己手写一个简陋的测试框架,只要写自己的main函数即可。原创 2022-11-03 17:11:39 · 2728 阅读 · 0 评论 -
【zeno】找到三角面的邻接三角面的算法
先讲什么是邻接三角面:一个三角面,有三条边,这三条边不但属于这个三角面,而且还可能属于其他相邻的三角面。这些相邻的三角面就是邻接三角面。最少有一个邻接三角面(在边角处),最多有三个邻接三角面(在中间)邻接的英文是adjacent建立边到三角面的映射。也就是找到边所属的三角面。对每个三角面的三条边,分别查询边到三角面映射,就可以得到邻接三角面。在此期间,我们需要利用以下关键特性:尽管是同一条边,但是由于所属三角面不同,他们的序号恰好是相反的。也就是同一条边以相反的序号存储了两边。原创 2022-10-08 16:32:42 · 882 阅读 · 0 评论 -
mac 配置eigen
【代码】mac 配置eigen。原创 2022-10-03 18:09:35 · 765 阅读 · 0 评论 -
【zeno】zeno配置Qt5
其实就是Qt5Config.cmake所在位置,请自行替换为你的安装位置。在系统的环境变量中增加Qt5_DIR变量(注意DIR为大写)安装Qt5.14.2在某个目录之后(需要注册Qt账号)在~/.zshrc中添加一行。原创 2022-10-01 01:21:35 · 568 阅读 · 0 评论 -
debug rust(splashsurf) in VS Code
安装rust extension pack。按F5生成launch.json。launch.json文件。原创 2022-09-22 16:51:19 · 154 阅读 · 0 评论 -
【c++】用fstream读取txt文件
定义一个stringstream,用来分割字符串并且转换成数字。指定路径并定义一个输入流in,注意一定要用绝对路径。返回的是1代表读入成功。读入的内容存到line中。分割出来的ss存入position的三个变量中。分别是所有位置和单个位置。再放到vector里面。原创 2022-09-05 15:50:42 · 1584 阅读 · 0 评论 -
从四面体数据中提取表面
四面体网格数据是这样存储的:分为两部分:第一部分:所有顶点的三维坐标数据。第二部分每个四面体的顶点编号。原创 2022-08-21 00:26:10 · 1215 阅读 · 0 评论 -
VTK四面体文件格式
参考文件为文本文件,后缀为.vtk存储类型为非结构网格: UNSTRUCTURED_GRID。原创 2022-08-18 21:48:34 · 2235 阅读 · 1 评论 -
C++ 静态和运行时断言 assert, static_assert和 throw runtime_error
就三种用法//用法1:运行时assert assert(0 && "assert here");//用法2:静态static_assert static_assert(0 , "triggered the static assert");//用法3:throw运行时异常 throw std :: runtime_error("test the runtime err.");不建议用第一种方式。因为zeno对第一种方式支持不好。...原创 2022-08-18 18:58:24 · 1164 阅读 · 0 评论 -
cpp 在release模式使用 assert的用法
一定要把#undef NDEBUG放到#include的前面!但是要注意:在cpp文件内使用,而不要在h文件内使用,因为宏是可以传递的。这样,cmake 的release mode也是可以用assert的。这就是先消除NDEBUG宏,从而可以让这个文件内部使用断言。......原创 2022-08-18 17:29:12 · 1040 阅读 · 0 评论 -
zeno获取外来输入节点
但是他只有get_input和get_input2两种。要接收三个参数,就得先打包成一个NumericObject的shared ptr,然后再解析成vec3f。这时候,内部变量external_force就是一个vec3f类型的变量。例如要获取名为external_force的外来节点参数。get_input这个函数是获取外来节点数据的。对应GUI binding为。...原创 2022-08-17 22:48:13 · 190 阅读 · 0 评论 -
现代cpp教程笔记
constexpr将表达式在编译器就计算好,从而运行时为一个常量。这就使得可以指定变量作为数组大小。原创 2022-08-17 15:04:15 · 571 阅读 · 0 评论 -
【C++】最通俗的多态、虚表、虚指针讲解
多态需要两个特性:(1)方法重写(override):父类与子类具有函数签名完全相同的方法。(2)向上类型转换(upcasting):用一个父类指针指向子类对象的时候,假如调用的是虚函数,会自动暂时将该指针转换为子类类型的指针。虚函数的存在就是为了类型转换,即使没有虚函数也能重写方法。虚函数并不是为了解决函数重写问题的。假如你去在父类和子类中都写上函数签名相同的方法,同样也能重写函数。例如 我们先写一个没有虚函数的例子结果为是完全没问题的!是的,即使不加virtual,也能实现方法重写!假如我用子类原创 2022-06-28 16:00:12 · 3397 阅读 · 5 评论 -
【splishsplash】记录一个并行时无法用if的错误
在修改SPlisHSPlasH\Viscosity\Viscosity_Weiler2018.cpp的函数void Viscosity_Casson::matrixVecProd(const Real* vec, Real *result, void *userData)时出现了编译器错误 C2451查询MSVC文档发现如下即不能对自定义的类型B使用if语句。如果要使用,if里面必须的是整数型或者bool型。我希望在AVX并行的时候,使用如下语句去判断xj是否处于某个立方体区域内然而该语句是不能编译通原创 2022-05-31 22:42:34 · 116 阅读 · 0 评论 -
VS2019如何查看真实文件夹
打开.sln文件之后,会发现右侧的导航栏是如下图所示:这显然不是真实的文件夹,而是sln文件所定义的结构。Remember that, sln文件,即solution文件,实际上是一个xml文件,他集合了各个projx文件,相当于一个工程结构目录。那么,如何切换到真实文件夹呢?上方有个小按钮:在解决方案和可用视图之间切换等待几秒钟,他就会自动扫描真实文件夹。双击文件夹视图,就得到了这就是真实文件夹视图。...原创 2022-04-11 10:30:34 · 3027 阅读 · 1 评论 -
【OpenFOAM】用VS Code调试OpenFOAM
参考https://www.bilibili.com/video/BV1MP4y1u7rS?spm_id_from=333.337.search-card.all.click安装软件准备ubuntu系统安装cmake安装VS Code安装OpenFOAM(我的版本8.0)准备文件CMakeLists.txt文件cavity文件夹myicoFoam2文件夹以下会分别说明注意:这三步无所谓先后顺序1: 准备CMakeLists.txt在桌面上新建一个文件夹myicoFoam2原创 2022-03-27 14:07:22 · 5722 阅读 · 6 评论 -
用VS2019调试fluid engine development代码的记录
1 cmake在最外层文件夹中创建debug文件夹然后进入该文件夹在debug文件夹打开终端后输入cmake .. -DCMAKE_BUILD_TYPE=Debug2 编译此时会产生VS的项目文件打开jet.sln编译静等几十分钟3 调试一个例子解决方案中有许多项,我们只想debug一个sph的example于是在上面右键,调试-启动新实例此时可以打断点了...原创 2021-12-13 22:11:43 · 293 阅读 · 0 评论 -
解决Windows下VS CODE+无法查看vector值的问题(实际上是MinGW 的GDB版本问题)
原文链接https://segmentfault.com/q/1010000017199543简单来说就是因为MinGW的 GDB版本不行,64位版本的MinGW尚未加入调试STL的功能。所以要用32位的MinGW。采用的是i686版本(应该是32位MinGW的一种)i686版本MinGW下载地址https://mmbizurl.cn/s/Xtn6Gu8sa安装以后,配置下tasks.json和launch.json文件即可这里简要说明下tasks.json是用来编译的,相当于(我这里的文件名原创 2021-04-14 15:40:23 · 1553 阅读 · 3 评论 -
安装和使用C++线性代数库eigen(Windows下minGW+VS code, VS2019配置方式)
安装eigeneigen无需安装,直接下载源代码解压包解压即可。下载地址(3.3.8版本):https://gitlab.com/libeigen/eigen/-/archive/3.3.8/eigen-3.3.8.zip官网:http://eigen.tuxfamily.org/index.php?title=Main_PageVS2019配置方式随便打开一个空项目在右侧解决方案资源管理器上,对项目名点击右键,属性配置和平台选择 所有配置,所有平台左侧点VC++目录,然后右侧选原创 2021-04-06 11:15:38 · 45510 阅读 · 9 评论 -
error: ‘fpDe’ does not name a type
发现了一个神奇的错误, 还是c语言基础不扎实导致的这样写的时候发生错误FILE* fpDe;fpDe=fopen("debug.txt","w");void BCdown(){...}报错:error: ‘fpDe’ does not name a type解决:原来是因为没有把fpDe=fopen(“debug.txt”,“w”);这一句写进任何函数里面导致的. 编译...原创 2019-08-22 16:34:48 · 1084 阅读 · 0 评论 -
报错use of deleted function ‘std::basic_fstream..的处理
bug1:在定义print函数的时候,文件输出流没有定义成引用导致以下报错:use of deleted function ‘std::basic_fstream<_CharT, _Traits>::basic_fstream(const std::basic_fstream<_CharT, _Traits>&) [with _CharT = char; _Tr...原创 2019-07-12 10:51:37 · 5210 阅读 · 0 评论