首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >CGAL::Surface_mesh_parameterization:按原来的顺序将顶点写为off

CGAL::Surface_mesh_parameterization:按原来的顺序将顶点写为off
EN

Stack Overflow用户
提问于 2019-02-06 05:36:23
回答 1查看 560关注 0票数 0

我试图修改CGAL-4.13/examples/Surface_mesh_parameterization/lscm.cpp,以便生成的off文件中顶点的顺序与输入文件中的顺序相同。

更新:示例

获取具有以下简单内容的文件input.off

代码语言:javascript
运行
AI代码解释
复制
OFF
4 2 0
-0.9310345 0.4333333 0 
-1 0.4333333 0 
-0.9310345 0.5 0 
-1 0.5 0 
3 1 0 2
3 2 3 1

当我从CGAL调用标准lscm

代码语言:javascript
运行
AI代码解释
复制
/path/to/CGAL-4.13-build/examples/Surface_mesh_parameterization/lscm input.off

我获得了包含coords.off

代码语言:javascript
运行
AI代码解释
复制
OFF
4 2 0
-1 0.5 0
-0.931034 0.5 0
-0.931034 0.433333 0
-1 0.433333 0
3 3 2 1
3 1 0 3

uvmap.off

代码语言:javascript
运行
AI代码解释
复制
OFF
4 2 0
-0.0166567 0.982769 0
1 1 0
1.01666 0.0172311 0
0 0 0
3 3 2 1
3 1 0 3

文件coords.offuvmap.off以相同的顺序包含顶点及其参数对(与input.off中的不同)。相反,我希望uvmap.off中的参数按与input.off对应的顺序排列。特别是,我希望uvmap.off看起来像这样:

代码语言:javascript
运行
AI代码解释
复制
OFF
4 2 0
1.01666 0.0172311 0
0 0 0
1 1 0
-0.0166567 0.982769 0
3 1 0 2
3 2 3 1

基本上,这使得coords.off变得多余,因为我可以在它的角色中使用input.off

解决方案的努力

据我所知,通过使用6个参数(而不是4个参数)调用output_uvmap_to_off(...) (这两个版本都可以在CGAL-4.13/include/CGAL/Surface_mesh_parameterization/IO/File_off.h中找到),这是可能的。由于其中一个参数是VertexIndexMap,我可能也应该使用

代码语言:javascript
运行
AI代码解释
复制
CGAL::Surface_mesh_parameterization::LSCM_parameterizer_3< TriangleMesh_, BorderParameterizer_, SolverTraits_ >::parameterize(...)

而不是

代码语言:javascript
运行
AI代码解释
复制
CGAL::Surface_mesh_parameterization::parameterize(...)

在示例中使用。

下面是一个很小的例子(不是很好用)。它是从lscm.cpp派生出来的,但为了保持简洁,我抛弃了很多东西。

代码语言:javascript
运行
AI代码解释
复制
#include <CGAL/Simple_cartesian.h>
#include <CGAL/Surface_mesh.h>
#include <CGAL/boost/graph/Seam_mesh.h>
#include <CGAL/Surface_mesh_parameterization/IO/File_off.h>
#include <CGAL/Surface_mesh_parameterization/parameterize.h>
#include <CGAL/Surface_mesh_parameterization/Two_vertices_parameterizer_3.h>
#include <CGAL/Surface_mesh_parameterization/LSCM_parameterizer_3.h>
#include <CGAL/Polygon_mesh_processing/measure.h>
#include <boost/foreach.hpp>
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>

typedef CGAL::Simple_cartesian<double>      Kernel;
typedef Kernel::Point_2                     Point_2;
typedef Kernel::Point_3                     Point_3;
typedef CGAL::Surface_mesh<Kernel::Point_3> SurfaceMesh;
typedef boost::graph_traits<SurfaceMesh>::edge_descriptor SM_edge_descriptor;
typedef boost::graph_traits<SurfaceMesh>::halfedge_descriptor SM_halfedge_descriptor;
typedef boost::graph_traits<SurfaceMesh>::vertex_descriptor SM_vertex_descriptor;
typedef SurfaceMesh::Property_map<SM_halfedge_descriptor, Point_2> UV_pmap;
typedef SurfaceMesh::Property_map<SM_edge_descriptor, bool> Seam_edge_pmap;
typedef SurfaceMesh::Property_map<SM_vertex_descriptor, bool> Seam_vertex_pmap;
typedef CGAL::Seam_mesh<SurfaceMesh, Seam_edge_pmap, Seam_vertex_pmap> Mesh;
typedef boost::graph_traits<Mesh>::vertex_descriptor vertex_descriptor;
typedef boost::graph_traits<Mesh>::halfedge_descriptor halfedge_descriptor;
typedef boost::graph_traits<Mesh>::face_descriptor face_descriptor;

namespace SMP = CGAL::Surface_mesh_parameterization;

int main(int argc, char** argv)
{
  std::ifstream in_mesh((argc>1) ? argv[1] : "data/lion.off");
  if(!in_mesh){
    std::cerr << "Error: problem loading the input data" << std::endl;
    return EXIT_FAILURE;
  }

  SurfaceMesh sm;
  in_mesh >> sm;

  Seam_edge_pmap seam_edge_pm = sm.add_property_map<SM_edge_descriptor, bool>("e:on_seam", false).first;
  Seam_vertex_pmap seam_vertex_pm = sm.add_property_map<SM_vertex_descriptor, bool>("v:on_seam", false).first;

  Mesh mesh(sm, seam_edge_pm, seam_vertex_pm);
  UV_pmap uv_pm = sm.add_property_map<SM_halfedge_descriptor, Point_2>("h:uv").first;

  halfedge_descriptor bhd = CGAL::Polygon_mesh_processing::longest_border(mesh, CGAL::Polygon_mesh_processing::parameters::all_default()).first;

  typedef SMP::Two_vertices_parameterizer_3<Mesh>                Border_parameterizer;
  typedef SMP::LSCM_parameterizer_3<Mesh, Border_parameterizer>  Parameterizer;

  // Here's where the big changes start.
  SurfaceMesh::Property_map<SM_halfedge_descriptor, int> vimap = sm.add_property_map<SM_halfedge_descriptor, int>("h:vi").first;
  SurfaceMesh::Property_map<SM_halfedge_descriptor, bool> vpmap = sm.add_property_map<SM_halfedge_descriptor, bool>("h:vp").first;
  Parameterizer parameterizer;
  parameterizer.parameterize(mesh, bhd, uv_pm, vimap, vpmap);

  const char* uvmap_file = "uvmap.off";
  std::ofstream uvmap_out(uvmap_file);
  SMP::IO::output_uvmap_to_off(mesh,sm.vertices(),sm.faces(),uv_pm,vimap,uvmap_out);

  return EXIT_SUCCESS;
}

这不编译,抱怨在File_off.h的第131行上需要进行转换。

实际问题

  • vimap是否正确初始化?
  • 这是朝着我的目标,以同样的顺序写顶点的合理方向吗?
  • 如果是,如何将正确的参数传递给output_uvmap_to_off(...)?例如,它请求一个VertexContainer,而我提供了一个Vertex_range (因此产生了编译错误,我想)。我是应该按照建议的这里这里收集顶点,还是有更优雅的方法?
  • 如果没有,什么是正确的行动方针?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-27 08:03:52

下面的问题回答了这个问题。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54554910

复制
相关文章
WPF中的StackPanel、WrapPanel、DockPanel
默认,由上到下显示各控件。控件在未定义的前提下,宽度为StackPanel的宽度,高度自动适应控件中内容的高度
全栈程序员站长
2022/09/15
2K0
WPF快速入门系列(1)——WPF布局概览
  关于WPF早在一年前就已经看过《深入浅出WPF》这本书,当时看完之后由于没有做笔记,以至于我现在又重新捡起来并记录下学习的过程,本系列将是一个WPF快速入门系列,主要介绍WPF中主要的几个不同的特性,如依赖属性、命令、路由事件等。
zls365
2020/11/10
3K0
WPF快速入门系列(1)——WPF布局概览
Cocos Creator 源码解读:siblingIndex 与 zIndex
节点(cc.Node)作为 Cocos Creator 引擎中最基本的单位,所有组件都需要依附在节点上。
陈皮皮
2021/08/04
2.7K0
Cocos Creator 源码解读:siblingIndex 与 zIndex
节点(cc.Node)作为 Cocos Creator 引擎中最基本的单位,所有组件都需要依附在节点上。
陈皮皮
2022/03/29
1.5K0
Cocos Creator 源码解读:siblingIndex 与 zIndex
C# Grid StackPanel DockPanel WrapPanel
为了加深大家对Grid布局的印象,我们这里加入控件来展示效果。 下面在每个单元格都加入子控件
全栈程序员站长
2022/09/15
6820
C# Grid StackPanel DockPanel WrapPanel
CocosCreator基础教程—从zIndex开始(1)
从Cocos2d-x/lua/js过来的老鸟们肯定发现了,在CocosCreator属性检查器中Node节点竟然没有zIndex属性。
张晓衡
2019/09/11
2K0
CocosCreator基础教程—从zIndex开始(1)
在 SwiftUI 中用 zIndex 调整视图显示顺序
本文将对 SwiftUI 的 zIndex 修饰符做以介绍,包括:使用方法、zIndex 的作用域、通过 zIndex 避免动画异常、为什么 zIndex 需要设置稳定的值以及在多种布局容器内使用 zIndex 等内容。
东坡肘子
2022/07/28
1.8K0
在 SwiftUI 中用 zIndex 调整视图显示顺序
WPF面板布局介绍Grid、StackPanel、DockPanel、WrapPanel
为了加深大家对Grid布局的印象,我们这里加入控件来展示效果。 下面在每个单元格都加入子控件
全栈程序员站长
2022/09/15
2K0
C#学习笔记——窗口停靠控件WeifenLuo.WinFormsUI.Docking使用
DockPanelSuite是托管在GitHub上的一个开源项目,使用在WinForms上,是一个简单、美观的界面组件。其中weiFenLuo.winFormsUI.Docking.dll较为人熟知,它是DockPanel Suite的一个类库,可以实现类似VS的窗口停靠、悬浮、自动隐藏等功能,同时能够保存窗体布局为XML文件,启动时加载XML配置文件还原布局。DockPanelSuite还包含有多种VS主题,能够自由切换变换风格。
vv彭
2021/06/10
8K0
C#学习笔记——窗口停靠控件WeifenLuo.WinFormsUI.Docking使用
【愚公系列】2023年10月 WPF控件专题 DockPanel控件详解
WPF控件是Windows Presentation Foundation(WPF)中的基本用户界面元素。它们是可视化对象,可以用来创建各种用户界面。WPF控件可以分为两类:原生控件和自定义控件。
愚公搬代码
2023/10/04
6430
WPF 制作留言板
留言板实例: <Window x:Class="WpfApp1.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
zls365
2020/11/10
4.9K0
WPF 制作留言板
WPF中的布局方式
3.WarpPanel:在一系列可换行的行中放置元素;在水平方向上,WarpPanel面板从左向右放置条目,然后在随后的行中放置元素;在垂直方向上,WarpPanel面板在自上而下的列中放置元素,并使用附加的列放置剩余的条目:
全栈程序员站长
2022/09/14
1.7K0
WPF中的布局方式
[C#]模拟实现Visual Stduio工具栏动态效果--扩展控件DocKPanel
weiFenLuo.winFormsUI.Docking.dll是开源项目DockPanel Suite的一个类库,可以实现像Visual Studio的窗口停靠、拖拽等功能。
静默虚空
2022/05/07
8480
c#——开源控件——WeifenLuo.WinFormsUI.Docking
本篇介绍Winform程序开发中的布局界面的设计,介绍如何在我的共享软件中使用布局控件"WeifenLuo.WinFormsUI.Docking"。
vv彭
2022/05/09
2.5K0
c#——开源控件——WeifenLuo.WinFormsUI.Docking
用WPF做一个简易浏览器
本文讲述如何用WPF写一个简易的浏览器。首先介绍WPF的特点和基础,然后展示如何利用XAML和代码创建一个简单的浏览器。最后,讲述如何实现地址栏的自动补全和更改地址栏的URL功能。
乐百川
2018/01/09
3.6K0
用WPF做一个简易浏览器
[C#]解决第三方控件引起的"类型Universe无法解析程序集"问题
原文链接:http://blog.csdn.net/humanking7/article/details/51099285
祥知道
2020/03/10
1.1K0
WPF ListView CellTemplate Border---设置ListView单元格的边框
1. 先看图片 2. 这是styleresource;应该还能精简掉很多; dd <Window.Resources> <Color x:Key="WindowColor">#FFE8EDF9</Color> <Color x:Key="ContentAreaColorLight">#FFC5CBF9</Color> <Color x:Key="ContentAreaColorDark">#FF7381F9</Color> <Co
liulun
2022/05/09
1.7K0
WPF  ListView  CellTemplate  Border---设置ListView单元格的边框
谈谈数据绑定
就是说,数据绑定是用来给视图层和业务逻辑层建立连接的,把业务逻辑的数据变化体现到视图的展示上面去,反之亦然。其实质,不妨这样理解,就是将数据对象序列化并传递给视图的过程。
四火
2022/07/18
8740
谈谈数据绑定
学习使用Wpf开源的文本编辑器—smithhtmleditor
前言 本文主要介绍使用Wpf文本编辑器——smithhtmleditor。 编辑器使用 首先新建一个项目WpfEditor。 然后到Codeplex下载smithhtmleditor。 下载地址:ht
Kiba518
2021/10/15
2K0
WPF依赖属性的正确学习方法
我在学习WPF的早期,对依赖属性理解一直都非常的不到位,其恶果就是,我每次在写依赖属性的时候,需要翻过去的代码来复制黏贴。
Kiba518
2019/07/25
2K0
WPF依赖属性的正确学习方法

相似问题

Dockpanel中的TextBlock和图像

32

调用DockPanel文档中的方法

14

更改zIndex中的HighChart

21

WPF ContentControl将ZIndex设置为子ZIndex

12

在DockPanel中填充StackPanel

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文