生成一个Cylinder
简介
用到了上一个博客的,AddPolygon。
生成的是一个筒状物体。
代码
// CreateCylinder.cpp: 定义控制台应用程序的入口点。
//
//#include "stdafx.h"
#include <iostream>
#include "AddPolygon.h"
#include <OpenMesh/Core/IO/MeshIO.hh>
#include <OpenMesh/Core/Mesh/TriMesh_ArrayKernelT.hh>
#include<cmath>
MyMesh* CreateCylinder(int edge, double height) {
MyMesh * cylinder = new MyMesh;
MyMesh::VertexHandle * top = AddPolygon(*cylinder, edge, height / 2, true);
MyMesh::VertexHandle * bottom = AddPolygon(*cylinder, edge, -height / 2, false);
for (int i = 0; i < edge; i++) {
int next = (i + 1) % edge;
std::vector<MyMesh::VertexHandle>face_vhandles;
face_vhandles.push_back(bottom[i]);
face_vhandles.push_back(top[next]);
face_vhandles.push_back(top[i]);
(*cylinder).add_face(face_vhandles);
face_vhandles.clear();
face_vhandles.push_back(bottom[i]);
face_vhandles.push_back(bottom[next]);
face_vhandles.push_back(top[next]);
(*cylinder).add_face(face_vhandles);
}
return cylinder;
}
int main()
{
cout << "Please input edge(int) height(double): \n";
int edge;
double height;
cin >> edge >> height;
MyMesh * mesh = CreateCylinder(edge, height);
try
{
if (!OpenMesh::IO::write_mesh(*mesh, "output4 .off")) {
std::cerr << "Cannot write mesh to file ' output4 .off ' " << std::endl;
return 1;
}
}
catch (std::exception&x) {
std::cerr << x.what() << std::endl;
return 1;
}
return 0;
}
生成一个Cylinder的更多相关文章
- 用php生成一个excel文件(原理)
1.我们用php来生成一个excel文档来讲述其原理: excel2007里面的文档目录组成部分为: 2.我们使用ZipArchive()方法来生成一个简易的excel文件. 使用方法: 3.代码如下 ...
- js生成一个不重复的ID的函数的进化之路
在MongoDB中的ObjectID,可以理解为是一个不会重复的ID,这里有个链接http://blog.csdn.net/xiamizy/article/details/41521025感兴趣可以去 ...
- 动态生成一个设定好特殊样式的Tlabel,快速生成代码
动态生成一个设定好特殊样式的Tlabel,快速生成代码: 1.自己先在可视化界面设定一个Label,像这样: 2.选择label,快捷键ctrl+C 复制,粘贴带代码编辑器去,会生成一段这样的窗体代码 ...
- 【代码笔记】iOS-通过颜色来生成一个纯色图片
一,效果图. 二,代码. RootViewController.m - (void)viewDidLoad { [super viewDidLoad]; // Do any additional se ...
- C# 如何生成一个时间戳
在程序中,常常会用到时间戳,如何生成一个时间戳呢? /// <summary> /// 获取时间戳 /// </summary> /// <returns>< ...
- ZeroMQ接口函数之 :zmq_curve_keypair - 生成一个新的CURVE 密钥对
ZeroMQ 官方地址 :http://api.zeromq.org/4-0:zmq_curve_keypair zmq_curve_keypair(3) ØMQ Manual - ØMQ/4.1.0 ...
- Bitmap文件格式+生成一个BMP文件
Bitmap的文件格式: #define UINT16 unsigned short #define DWORD unsigned int #define WORD short #define LON ...
- 今天网站后台登录页面需要生成一个二维码,然后在手机app上扫描这个二维码,实现网站登录的效果及其解决方案如下
要实现二维码登录,需要解决2个技术,1.需要js websocket 与后台php实现长连接技术 2.实现二维码生成技术 要实现这个功能第二个算是比较简单,只需要下载一个php的二维码生成器即可,但要 ...
- ORACLE 生成一个随机数
ORACLE 如何产生一个随机数:DBMS_RANDOM--1.小数( 0 ~ 1) select dbms_random.value from dual ; --2.指定范围内的小数 ( 0 ~ 1 ...
- C# Emit动态代理生成一个实体对象
/// <summary> /// 使用Emit动态代理收集实体信息 /// </summary> /// <typeparam name="T"&g ...
随机推荐
- jmeter csv变量随机取值的方法
默认的CSV文件取值是按照顺序从第一行开始取值的,需要随机取值,可安装扩张插件实现 首先安装插件 下载第一个:https://jmeter-plugins.org/downloads/old/ 下载第 ...
- ThinkPHP 中闭包在数组查询条件中的深度应用
一.闭包与数组条件的协同原理 在 ThinkPHP 的查询体系中,数组条件是构建查询逻辑的核心载体.当数组条件的值为闭包(Closure)时,框架会自动将其解析为动态子查询生成器,实现运行时按需构建 ...
- Vue(10)——Vue组件二(data选项、局部组件、组件通信)
Vue组件二--data选项.局部组件.组件通信 data选项 data选项用于储存组件数据 与实例data差别 必须存储在有返回值的函数当中 数据设置在返回值对象里 1.方式一 data:funct ...
- OpenStack 全套搭建部署指南(基于 Kolla-Ansible)
一.环境准备 1. 硬件要求 控制节点:至少 4 核 CPU,8GB 内存,100GB 磁盘(推荐 SSD). 计算节点:根据虚拟机需求调整,建议 8 核 CPU,16GB 内存,200GB+ 磁盘. ...
- mysql开启关闭服务
windows: net start mysql net stop mysql centos: --开启服务 service mysqld start --关闭服务 service mysqld st ...
- HarmonyOS NEXT开发实战教程—淘宝搜索页
今天忙里偷闲,分享一个淘宝搜索页实现过程,先上效果图: 界面部分比较简单,大体分为导航栏.历史搜索.猜你想搜和热搜榜几个部分,历史搜索采用用户首选项进行存储数据. 导航栏部分相关代码如下: Flex( ...
- C#之清除已经注册的事件
private static void DealA(object sender, UnhandledExceptionEventArgs e) { Console.WriteLine($"E ...
- ASP.NET Core Minimal API之optional route parameter with default value and optional route parameter
public static void Main(string[] args) { var builder = WebApplication.CreateBuilder(args); var app = ...
- 踩坑之MySQL安装及修改初始密码
不得不说,mysql client的安装及改初始密码步骤多,繁琐,坑也不少,下面就总结下安装流程及遇到的那些坑(Windows): 1.安装 安装地址:https://dev.mysql.com/do ...
- C#之可访问性约束(可访问性不一致)
C# 语言中的有些构造要求某个类型至少与某个成员或其他类型具有同样的可访问性 (at least as accessible as).如果 T 的可访问域是 M 可访问域的超集,我们就说类型 T 至少 ...