读取ugrid格式文件

2023-05-16

#include <iostream>
#include <vector>
#include <string>
#include <fstream>

using namespace std;

int main()
{
	int node_num, tri_bd_num, quad_bd_num, tet_num, pyramid_num, prism_num, hex_num;
	node_num = tri_bd_num = quad_bd_num = tet_num = pyramid_num = prism_num = hex_num = 0;
	ofstream fout("test.ugrid");
	ifstream fin("ugrid_bin.ugrid", ios::binary | ios::in);

	if (!fin.is_open())
	{
		cout << "文件未正常读入" << endl;
		return 0;
	}
	if (!fout.is_open())
	{
		cout << "文件输出有误" << endl;
	}

	fin.read((char*)&node_num, sizeof(int));
	fin.read((char*)&tri_bd_num, sizeof(int));
	fin.read((char*)&quad_bd_num, sizeof(int));
	fin.read((char*)&tet_num, sizeof(int));
	fin.read((char*)&pyramid_num, sizeof(int));
	fin.read((char*)&prism_num, sizeof(int));
	fin.read((char*)&hex_num, sizeof(int));

	fout << node_num << " " << tri_bd_num << " " << quad_bd_num << " " << tet_num << " " << pyramid_num << " " << prism_num << " " << hex_num << endl;

	// 边界面数目和实单元数目
	int bd_fac_num = tri_bd_num + quad_bd_num;
	int ele_num = tet_num + pyramid_num + prism_num + hex_num;
	
	// 点坐标
	double* Node = new double[node_num * 3];

	// 三角形边界面的点索引
	int *tri_bd_fac = new int[tri_bd_num*3];
	// 四边形边界面的点索引
	int* quad_bd_fac = new int[quad_bd_num*4];
	// 边界面元对应的surface ID
	int* fac_type = new int[bd_fac_num];
	// 四面体单元的点索引
	int* tet = new int[tet_num * 4];
	// 金字塔单元的点索引
	int* pyramid = new int[pyramid_num * 5];
	// 三棱柱单元的点索引
	int* prism = new int[prism_num * 6];
	// 六面体单元的点索引
	int* hex = new int[hex_num * 8];

	// 读取点坐标
	fin.read((char*)Node, sizeof(double) * 3 * node_num);
	for (auto i = 0; i < node_num; i++)
	{
		fout << Node[i * 3 + 0] << " " << Node[i * 3 + 1] << " " << Node[i * 3 + 2] << endl;
	}

	// 读取三角形边界面的点索引
	fin.read((char*)tri_bd_fac, sizeof(int) * 3 * tri_bd_num);
	for (auto i = 0; i < tri_bd_num; i++)
	{
		fout << tri_bd_fac[i * 3 + 0] << " " << tri_bd_fac[i * 3 + 1] << " " << tri_bd_fac[i * 3 + 2] << endl;
	}
	
	// 读取四角形边界面的点索引
	fin.read((char*)quad_bd_fac, sizeof(int) * 4 * quad_bd_num);
	for (auto i = 0; i < quad_bd_num; i++)
	{
		fout << quad_bd_fac[i * 4 + 0] << " " << quad_bd_fac[i * 4 + 1] << " " 
			<< quad_bd_fac[i * 4 + 2]<<" " << quad_bd_fac[i * 4 + 3] << endl;
	}
	
	// 读取边界面元对应的 surface ID
	fin.read((char*)fac_type, sizeof(int)*bd_fac_num);
	for (auto i = 0; i < bd_fac_num; i++)
	{
		fout << fac_type[i] << endl;
	}
	
	// 读取四面体单元的点索引
	fin.read((char*)tet, sizeof(int) * 4 * tet_num);
	for (auto i = 0; i < tet_num; i++)
	{
		fout << tet[4 * i + 0] << " " << tet[4 * i + 1] << " "
			<< tet[4 * i + 2] << " " << tet[4 * i + 3] << endl;
	}

	// 读取金字塔单元的点索引
	fin.read((char*)pyramid, sizeof(int) * 5 * pyramid_num);
	for (auto i = 0; i < pyramid_num; i++)
	{
		fout << pyramid[4 * i + 0] << " " << pyramid[4 * i + 1] << " "
			<< pyramid[4 * i + 2] << " " << pyramid[4 * i + 3] << " "
			<< pyramid[4 * i + 4] << endl;
	}

	// 读取三棱柱单元的点索引
	fin.read((char*)prism, sizeof(int) * 6 * prism_num);
	for (auto i = 0; i < prism_num; i++)
	{
		fout << prism[4 * i + 0] << " " << prism[4 * i + 1] << " "
			<< prism[4 * i + 2] << " " << prism[4 * i + 3] << " "
			<< prism[4 * i + 4] << " " << prism[4 * i + 5] << endl;
	}

	// 读取四面体单元的点索引
	fin.read((char*)hex, sizeof(int) * 8 * hex_num);
	for (auto i = 0; i < hex_num; i++)
	{
		fout << hex[4 * i + 0] << " " << hex[4 * i + 1] << " "
			<< hex[4 * i + 2] << " " << hex[4 * i + 3] << " "
			<< hex[4 * i + 4] << " " << hex[4 * i + 5] << " "
			<< hex[4 * i + 6] << " " << hex[4 * i + 7] << endl;
	}

	fin.close();
	fout.close();

	// 点坐标
	delete[] Node;
	delete[] tri_bd_fac;
	delete[] quad_bd_fac;
	delete[] fac_type;
	delete[] tet;
	delete[] pyramid;
	delete[] prism;
	delete[] hex;

	return 0;
}

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

读取ugrid格式文件 的相关文章

  • C语言之调试技巧(VS2019编译器)

    C语言之调试技巧 xff08 VS2019编译器 xff09 一 什么是调试 xff1f 调试的作用1 1 什么是调试1 2 调试的基本步骤1 3 Debug版本和Release版本的介绍二 Windows环境调试的准备2 1 调试环境的准
  • 怎么在vscode上编写C语言代码

    1 准备工作 xff1a 在vscode的拓展里面下载安装c c 43 43 官方插件 此外 xff0c 需要安装一个c c 43 43 的编译器 MinGW xff0c MinGW 官网下载地址 xff08 点击即可进入官网 xff09
  • Ubuntu20.04系统安装ROS-noetic教程及常见问题的处理

    Ubuntu版本 xff1a 20 04 ROS版本 xff1a Noetic Ninjemys 注 xff1a Ubuntu系统版本要与ROS版本相对应 xff0c 不同版本的Ubuntu系统对应了不同的ROS版本 如Ubuntu20 0
  • 笔记(STM32篇)day2——GPIO及寄存器映射

    目录 一 GPIO结构及模式 1 推挽输出 2 开漏输出 3 复用功能输出 4 上拉 下拉输入 5 复用功能输入与模拟输入 二 寄存器映射 一 GPIO结构及模式 图1 GPIO基本结构 如图1所示为GPIO基本结构 xff0c 右侧I O
  • 笔记(STM32篇)day3——寄存器结构体、端口置位函数

    目录 一些C知识点 1 define和typedef的区别 2 结构体struct 3 结构体中 和 gt 的区别 4 c文件和 h文件的关系 5 防止重复引用 一 寄存器结构体定义 1 定义结构体变量指针 2 寄存器赋值 二 端口置位函数
  • 笔记(STM32篇)day6——按键控制

    目录 一 按键硬件图 1 硬件原理 2 输入方式选择 二 功能实现 1 按键GPIO配置 2 按键扫描函数 3 LED翻转宏定义 4 主程序 参考 一 按键硬件图 1 硬件原理 按键的硬件原理图如图 xff0c 右侧接3 3V xff0c
  • 笔记(STM32篇)day8——系统时钟配置、MCO输出系统时钟

    目录 一 时钟框图 二 配置过程 1 系统时钟配置函数 2 MCO配置 参考 一 时钟框图 下图就是STM32F10x的时钟系统框图 xff0c 此处用的正点原子的图 xff0c 左侧四个蓝色的分别是 xff1a 高速内部RC时钟 xff0
  • pixhawk博客导读

    写的东西有点多 xff0c 写的也有点乱 xff0c 看题目也不知道内容是什么 xff0c 为了方便网友观看自己感兴趣的地方 xff0c 笔者把pixhawk博客归类一下 由于笔者也是边学习边写的 xff0c 难免有错误 xff0c 还请多
  • 笔记(STM32篇)day13——USART串口与PC通信实例

    USART 常用来实现控制器与电脑之间的数据传输 这使得我们调试程序非常方便 xff0c 比如我们可以把一些变量的值 函数的返回值 寄存器标志位等等通过 USART 发送到串口调试助手 xff0c 这样我们可以非常清楚程序的运行状态 xff
  • Leetcode 566. 重塑矩阵(C++矩阵容器)

    题目 输入 xff1a mat 61 1 2 3 4 r 61 1 c 61 4 输出 xff1a 1 2 3 4 思路 将原二维数组变成一维数组 xff0c 在重新放入变换后的二维数组 可以使用一维数组过渡 xff0c 也可以直接用整数除
  • 笔记(嵌入式Linux C篇)4——创建顺序存储表(二级指针方法)

    顺序存储表 概念等同于一个数组 xff0c 使用结构体定义 xff0c 成员为一个某类型的数组 xff0c 以及一个整形的last xff0c 作用是指示顺序存储表最后一个元素的下标 xff0c last默认为 1即数组为空 typedef
  • 笔记(嵌入式Linux C篇)5——单链表(有头节点)

    链表 数据元素随机存储 xff0c 通过指针表示数据之间的逻辑关系的结构就是链式存储结构 xff0c 即链表 一个链表节点包括一个数据域和一个指针域 数据域存储数据 xff0c 指针域存储下一个节点的地址 链表的结构体声明如下 xff1a
  • 实现对单链表的赋值、去重、拆分、排序。

    在一个带头结点的单链表A中 xff0c 自行输入A中的元素值 xff0c 请实现 xff1a xff08 1 xff09 将链表A中值相同的结点 xff0c 仅保留第一次出现的结点 xff1b xff08 2 xff09 将新得到的A链表
  • Linux高级编程——网络通信实现TCP(1)

    基于TCP协议的文件传输 xff08 套接字 xff09 实例 xff1a 客户端 xff1a 只用于收文件 xff1b 执行命令 xff1a 执行文件名 IP Port span class token comment 客户端 输入 执行
  • FPGA学习笔记—UART,RS485串口通信(verilog)

    目录 一 串口通信基础知识1 什么是串口 xff1f 2 同步通信和异步通信3 串行通信的传输方向4 常见的串口通信接口 二 UART串口通信UART基础知识1 协议层 xff1a 通信协议 xff08 包括数据格式 xff0c 传输速率等
  • 使用多线程编码实现:火车站卖票实例,四个卖票窗口随机卖出50张票

    public class Test 火车票 public static void main String args TicketWindow th1 61 new TicketWindow TicketWindow th2 61 new T

随机推荐

  • 【Arduino】arduino使用l298n的代码分享

    一 接线 二 使用步骤 int Left motor go 61 8 左电机前进 IN1 int Left motor back 61 9 左电机后退 IN2 int Right motor go 61 10 右电机前进 IN3 int R
  • Arduino基础与常用函数

    文章目录 1 Arduino语言2 Arduino代码结构1 类似于C的头文件包含 xff0c 变量定义等2 void setup 3 void loop 3 串口常用函数1 串口收发函数 Serial begin speed 2 读取串口
  • pixhawk px4 commander.cpp

    对于复杂的函数 xff0c 要做的就是看函数的输入是什么 来自哪里 xff0c 经过处理后得到什么 给谁用 xff0c 这样就可以把程序逻辑理清 中间的分析就是看函数如何处理的 span class hljs keyword extern
  • ESP8266 读取多个传感器数据(风速、风向、颗粒物、CO)

    文章目录 1 ESP8266开发板资源2 Arduino编程1 准备工作2 读取多个串口数据1 定义软串口 2 涉及传感器简介 3 集成代码 xff08 注释详细 xff09 4 Arduino 串口监视器 1 ESP8266开发板资源 一
  • ESP8266采集多个传感器数据通过WIFI上传到本地数据库(风速、风向、CO、颗粒物)

    文章目录 1 数据库使用简介1 Navicat premium连接2 新建数据库3 在数据库中新建表 2 代码实现代码 1 数据库使用简介 建立数据库连接 xff0c 在连接里新建数据库 xff0c 在数据库里新建表 1 Navicat p
  • STM32读取串口传感器(颗粒物传感器,被动传输)

    文章目录 1 串口2中断 xff08 在主动上传的基础上 xff09 1 添加发送字符和数组函数2 主函数调用3 串口助手接收数据 2 遇到的串口通信不成功问题 1 串口2中断 xff08 在主动上传的基础上 xff09 1 添加发送字符和
  • STM32采集问答式串口传感器数据写入SD卡(spi模式)

    文章目录 1 实验工具2 接线说明3 部分代码说明1 文件的覆盖问题1 文件系统的文件打开方式2 移动文件初始写入指针位置 2 变量的转换及写入问题1 sprintf函数2 CSV文件创建 3 数据采集流程 xff08 主函数 中断函数处理
  • (1)STM32 RC522模块测试代码

    文章目录 1 使用资源2 RC522模块2 1 RC522简介2 2 RC522工作模式 3 模块测试代码 工程文件源码链接 1 使用资源 使用32 的SPI1资源 xff1a SDA PA4 RST PA1 普通io SCK PA5 MI
  • (3)STM32 SG90舵机模块测试

    文章目录 1 资源简介2 测试源码 1 资源简介 stm32 rct6板SG90舵机模块 接线引脚 xff1a 橙色 xff1a 信号线 红色 xff1a 电源 43 5v 咖色 xff1a GND 此模块三条线固定在一起 xff0c 如果
  • (4) STM32 AS608指纹识别模块测试代码

    文章目录 1 使用资源2 实现思路简述3 指纹测试代码3 1 部分代码介绍3 2 源码链接 1 使用资源 stm32RCT6板子AS608指纹模块 软件资源 xff1a 串口二资源连接AS608 TX RX接线AS608 wak线连接PA8
  • 通过路由器连接JetsonNano与地面站

    通过路由器连接JetsonNano与地面站 一 前期准备注意事项连接局域网虚拟机网络设置 二 获取IP地址和设备名称IP地址设备名称 三 配置Nano修改bashrc文件修改hosts文件 四 配置地面站修改bashrc文件修改hosts文
  • jvm 堆 栈中存什么?

    数据类型 Java虚拟机中 xff0c 数据类型可以分为两类 xff1a 基本类型和引用类型 基本类型的变量保存原始值 xff0c 即 xff1a 他代表的 值就是数值本身 xff1b 而引用类型的变量保存引用值 引用值 代表了某个对象的引
  • YOLOv5 数据集划分及生成labels

    0 本人文件夹存放格式 xff08 因为要测试多个数据集和不同的yolov5版本和其他算法 xff0c 所以数据集整体放到外面 xff09 1 划分数据集 验证集 测试集 coding utf 8 import os import rand
  • mission planner发送数据之mavlink

    前段时间研究mp的地面站 xff0c 看了几天有点体会 xff0c 看网上的解析比较少 xff0c 写上来和大家分享下 xff0c 全是自己的理解 xff0c 东西比较少 xff0c 硬货不多 xff0c 还请见谅 最开始是想做个无人机超声
  • 实验三、嵌入式Linux网络通信实验

    实验三 嵌入式Linux网络通信实验 一 实验目的 1 掌握TCP与UDP协议原理 2 掌握套接字通信原理 2 掌握TCP套接字服务器端与客户端通信方法 二 实验基本要求 1 学习TCP与UDP协议原理 2 掌握TCP套接字服务器端与客户端
  • QT重载keyPress焦点问题

    最近项目上需要用到键盘上的快捷键 xff0c 就重载了键盘的按下事件 xff0c 以为万事大吉 实际界面上有很多控件 xff0c 导致如果鼠标点击了其中一个不能接收焦点的控件 xff0c 就不知道焦点传到了什么地方 上网查大致两种思路 xf
  • QT实现地图或图片的细节图(抓取图片的细节,放大图片)

    最近由于项目上的要求 xff0c 需要实现一个细节图 xff0c 就是一个矩形框中加载一个大图 xff0c 右下或者左下方有一个小矩形框 xff0c 可以加载全图 xff0c 并显示大矩形框中图片在全图的位置 xff0c 有点拗口 xff0
  • centos7 搭建vtk7.1.1+Qt开发环境+运行编译工程

    一 CMAKE安装 vtk必须用cmake编译 xff0c 但是 xff0c 由于高版本的cmake没有支持qt5的gui xff0c 所以选择低版本的 xff0c 但是低版本的必须得依赖于qt4 xff0c 而qt4相较于qt5 xff0
  • centos搭建vtk开发环境

    一 OpenGL3 0 vtk有个硬性要求就是OpenGL3 0及以上版本 xff0c 由于笔者此前使用的是centos7 xff0c 照着网上的教程配置OpenGL xff0c 但是之后glxinfo grep OpenGL发现openg
  • 读取ugrid格式文件

    include lt iostream gt include lt vector gt include lt string gt include lt fstream gt using namespace std int main int