三维CAD建模——基于半边数据结构的基本欧拉操作建模

本文介绍了作者在高老师的三维CAD建模课程中,如何使用半边数据结构和欧拉操作实现带洞模型的建模。重点讲述了欧拉操作的五个基本操作:mvsf、mev、mef、kemr和kfmrh,并提供了代码实现。通过这些操作,可以创建包含不同形状洞口的三维模型。
摘要由CSDN通过智能技术生成

三维CAD建模——基于半边数据结构的基本欧拉操作建模(elar, B_REP)

 

 (欧拉操作  三维CAD建模课 三维CAD建模 高曙明老师  渲染框架 brep 带洞 带柄 B_REP brep elar 扫成 扫成操作)

今年选了高老师的三维CAD建模课,zju选了这课应该就知道最后要做一个程序作业——基于半边数据结构的基本欧拉操作实现建模。要求必须建带有洞的模型。

 (欧拉操作  三维CAD建模课 三维CAD建模 高署明老师  渲染框架 brep 带洞 带柄 B_REP brep elar 扫成 扫成操作)

3.3 欧拉操作的选择(6维空间的5维超平面)

 

v    e     f     h   r    s     Operator

 

1    1     0    0   0    0       mev

0    1     1    0   0    0       mef

1    0     1    0   0    1       mvfs

0   -1     0    0   1    0       kemr

0    0    -1   1    1    0      kfmrh

 

mvsf:生成含有一个点的面,包括一个空环,并且构成一个新的体

mev:生成一个新的点e2,连接该点到已有点v1,构造一条新的边

mef:连接面f1上的两个点v1,v2,生成一条新边e,并产生一个新面

kemr:删除一条边e,生成该边某一邻面上的新的内环

kfmrh:删除与面f1相接触的一个面f2,生成面f1上的一个内环,并形成体上的一个通孔

 

主要就是实现这五个欧拉操作就可以了。

下面主要是记录下我在作业中半边数据结构以及基本欧拉操作的实现。

 

#ifndef __HALF_EDGE_STRUCTURE__
#define __HALF_EDGE_STRUCTURE__

#include <stdlib.h>

struct Solid;
struct Face;
struct Loop;
struct HalfEdge;
struct Vertex;
struct Edge;

struct Solid
{
	int id;
	Face *faces; // list of all faces to construct this solid
	Edge *edges; // list of all edges to construct this solid->to build the frame
	Solid *next;
	Solid *pre;

	int vnum;//the count of all vertexs
	int fnum;//the count of all faces
	int lnum;//the count of all loops


	Solid() : id(0), faces(NULL), edges(NULL), next(NULL), pre(NULL), fnum(0), vnum(0), lnum(0){}
};

struct Face
{
	int id;
	Solid *solid; // the solid which the face belong to
	Loop *out_lp; // out loop of the face--construct the face
	Loop *inner_lp;//inner_lp of the face--inner loop
	Face *next;
	Face *pre;
	int innum;//the count of inner loops

	Face() : id(0), solid(NULL), out_lp(NULL), next(NULL), pre(NULL), inner_lp(NULL), innum(0){}
};

struct Loop
{
	int id;
	HalfEdge *halfedges; // list of all halfeges to construct this loop 
	Face *face; // the face that constructed by this loop
	Loop *next;
	Loop *pre;

	Loop() : id(0), halfedges(NULL), face(NULL), next(NULL), pre(NULL){}
};

struct Edge
{
	HalfEdge *half_l; //the edge's left halfedge
	HalfEdge *half_r; //the edge's right halfedge
	Edge *next;
	Edge *pre;

	Edge() : half_l(NULL), half_r(NULL), next(NULL), pre(NULL){}
};

struct HalfEdge
{
	Edge *edge; //this halfedge belong to which edge
	Vertex *sv; //the start vertex of this h
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值