自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(68)
  • 资源 (5)
  • 收藏
  • 关注

原创 opencascade实现一些刀具路径规划方法

学习opencascade,通过输入零件的内、外边界轮廓环(红色标出),实现一些常见刀具加工路径算法(绿色标出)。

2022-06-12 12:03:46 1418 5

原创 基于opencascade+qt开发简易的加工刀具轨迹

借鉴基于opencascade开发的开源CAD/CAM/CAE软件FreeCAD,HeeksCAM等尝试生成三轴零件的加工刀具轨迹。偏置刀具轨迹生成:zigzag刀具轨迹生成:螺旋刀具轨迹生成:轮廓刀具轨迹生成:在此基础上,后续需要结合加工参数,生成连接刀具轨迹,以及细节处理。...

2022-06-08 18:12:56 1865 9

原创 opencascade建立回转实体

opencascade建立回转实体以球刀刀具为例,通过线->环->面->体,一步步建立刀具实体。 Standard_Real radius=5; Standard_Real length=75; gp_Pnt oPnt(0, 0, 0); //回转环的关键点 gp_Vec v(1, 0, 0); gp_Pnt ePnt(radius, 0, radius); gp_Pnt linPnt1(radius, 0, length); gp_Pnt linPnt2(

2021-07-12 21:42:46 403 3

原创 MFC绘制任意B样条曲面

MFC绘制任意B样条曲面黑色为控制点形成的控制点网,红色为绘制的3*2次B样条曲面参考《计算几何算法与实现》–孔令德给定,u、v方向的控制点数与坐标及次数,根据Hartely-Judd法计算控制节点,根据de-Boor递推公式绘制曲面;完整的绘制类代码如下#pragma once#include"P3.h"class CBSplineSurface{public: CBSplineSurface(void); ~CBSplineSurface(void); void Initia

2021-06-19 16:52:42 858

原创 创建二维动态数组

创建二维动态数组创建n*m的动态二维数组: int** P2=new int* [n]; //行定义 for(int i=0; i<n; i++) P2[i]=new int[m]; //列定义使用完后需要释放内存 //释放动态数组P2 if(P2!=NULL) { for(int i=0; i<n; i++) { delete[]P2[i]; P2[i]=NULL; } delete[]P2; P2=NULL; }...

2021-06-18 20:51:59 365

原创 B样条插入节点

B样条插入节点插入节点前插入非重复节点插入重复节点通过插入新节点,可以提高B样条的局部修改性。插入一个节点后,需要重新计算节点分布及新控制点,以三次样条绘制为例,绘制上述形状:#pragma once#include"P2.h"class Knot_Insertion_BSpline{public: Knot_Insertion_BSpline(void); ~Knot_Insertion_BSpline(void);public: //计算基函数 double Ba

2021-06-18 15:37:40 1124 1

原创 MFC绘制高次B样条曲线

MFC绘制高次B样条曲线随着B样条的绘制次数越高,曲线连续性越高,光滑性越好,但是逼近程度变差,局部性质变差,工程中一般使用2、3次B样条。图示为1-8次的B样条曲线,红色依次加深,次数依次升高。参考《计算几何算法与实现》–孔令德实现代码:#pragma once#include"P2.h"class High_Level_BSpline{public: High_Level_BSpline(void); ~High_Level_BSpline(void);public: /

2021-06-17 17:25:44 823 2

原创 重节点对B样条曲线的影响

重节点对B样条曲线的影响左图为均匀B样条曲线;中图为端节点K+1次重复,中间节点均匀,曲线过端点;右图为端节点K+1次重复,中间节点k次重复,为分段bezier曲线。参考《计算几何算法与实现》–孔令德节点矢量与控制点分别设置如下,进行绘制:/*----------------------------------------------------input : function: 初始化节点与控制点-------------------------------------------

2021-06-17 16:33:09 1444 3

原创 Hartley-Judd计算非均匀B样条节点矢量

Hartley-Judd计算非均匀B样条节点矢量在前面的文章介绍了用里森菲尔德法分别计算奇次和偶次B样条节点矢量,但是这种方法与实际情况存在出入,Hartley-Judd计算法与曲线的次数无关,可以采用统一的计算公式。理论公式、代码参考《计算几何算法与实现》–孔令德其代码实现为:/*----------------------------------------------------input : function:哈特利-贾德法计算非均匀节点----------------------

2021-06-17 15:43:46 1273

原创 MFC绘制非均匀B样条

MFC绘制非均匀B样条非均匀二次样条非均匀五次样条B样条曲线一共有四种类型,分别为,均匀、准均匀、分段Bezier和非均匀,前面三种均是非均匀的特例,在绘制非均匀B样条时,需要首先计算节点,有里森菲尔德法和哈德利-贾德法。下面介绍里森菲尔德法绘制B样条曲线,该方法根据次数的奇偶,分开来对待计算节点矢量,实现代码如下:/*----------------------------------------------------input : function:里森菲尔德法计算奇次非均匀节点

2021-06-16 16:12:58 521 1

原创 MFC用B样条绘制分段Bezier曲线

MFC用B样条绘制分段Bezier曲线将几何连续的分段多项式曲线统一采用B样条表示,是实现数据的统一管理。实现方式为将端节点重复度设置为K+1,内节点重复度设置为K,且控制点点个数减1的值为K的整数倍。修改绘制代码的控制点与节点为:n=6, k=3; //节点初始化 knot[0]=0.0, knot[1]=0.0, knot[2]=0.0; knot[3]=0.0, knot[4]=0.5, knot[5]=0.5; knot[6]=0.5, knot[7]=1.0, knot[8]=1

2021-06-16 11:07:05 765

原创 MFC绘制二次、三次准均匀B样条曲线

MFC绘制二次、三次准均匀B样条曲线二次准均匀B样条曲线三次准均匀B样条曲线节点矢量在两端K+1次重复,即可以使得B样条的端点具有Bezier曲线端点的性质。参考之前的文章,将控制点与节点分别修改为:n=5, k=2; //节点初始化 knot[0]=0, knot[1]=0, knot[2]=0; knot[3]=1/4.0, knot[4]=2/4.0, knot[5]=3/4.0; knot[6]=1, knot[7]=1, knot[8]=1;

2021-06-16 10:32:25 1295

原创 重控制点绘制特殊形状的曲线

重控制点绘制特殊形状的曲线三控制点共线,曲线切于直线四控制点共线,曲线包含一段直线非端点控制点K次重复,曲线出现尖角端点控制点K次重复,曲线通过端点可以通过重控制点或者重节点来生成特殊形状的,其中重控制点会破坏B样条的统一性,使用较少,下面通过修改控制点的重复度,来生成特殊的形状。参考上一篇文章,将控制点与节点分别修改如下,即可生成上图的曲线 n=5, k=3; //节点初始化 knot[0]=-3/3.0, knot[1]=-2/3.0, knot[2]=-1/3.0;

2021-06-15 23:52:03 198

原创 MFC绘制三次均匀B样条曲线

MFC绘制三次均匀B样条曲线基于de-Boor-Cox公式,实现B样条的绘制。参考《计算几何算法与实现》–孔令德节点矢量与控制点设置为://节点初始化 knot[0]=-3/3.0, knot[1]=-2/3.0, knot[2]=-1/3.0; knot[3]=0.0, knot[4]=1/3.0, knot[5]=2/3.0; knot[6]=1.0, knot[7]= 4/3.0, knot[8]= 5/3.0; knot[9]=6/3.0; //控制点初始化 P

2021-06-15 22:41:43 1258 1

原创 MFC绘制二次均匀B样条曲线

MFC绘制二次均匀B样条曲线B样条具有比Bezier更好的局部修改性与凸包性,引入了节点与控制点一起控制曲线的生成,下面以二次均匀B样条的绘制为例,进行代码实现。参考《计算几何算法与实现》–孔令德新建MFC单文档程序,添加类Quadratic_BSpline,用来绘制曲线;#pragma once#include"P2.h"class Quadratic_BSpline{public: Quadratic_BSpline(void); ~Quadratic_BSpline(void)

2021-06-15 21:56:24 1284 1

原创 opencascade绘制实体消影线

opencascade绘制实体消影线如图,利用opencascade绘制出给定视角的齿轮的消隐线;OCC提供了两种算法,来绘制消隐线,帮助文档介绍如下:算法建立过程:给出实现代码:void occInitialize::getOutLine(){ //获取鼠标选中模型的那个对象 TopoDS_Shape detectShape = m_context->DetectedShape(); //进行模型网格离散化 BRepMesh_IncrementalMesh aMesh

2021-06-11 15:01:07 1098 1

原创 (opencascade中)C++命名、编程规范

C++命名、编程规范一、通用命名规则1、驼峰命名法2、函数的命名3、变量的命名4、函数的参数命名5、类的成员变量命名6、全局变量的命名7、局部变量的命名8、避免使用虚拟名称9、参考代码规范二、格式规范1、符号之间的“空格”运用2、指针的声明和引用3、单独代码块的注释4、函数体分隔5、代码块分布6、与常量的比较表达式7、语句对齐8、代码的注释9、return的时机10、头文件的包含三、文档规范1、在for()之前声明变量2、避免在if()语句中使用非0条件3、成员变量初始化顺序4、代码示例良好的代码编程命名

2021-06-10 16:38:48 525 2

原创 opencascade简单形状的轮廓面偏置生成

opencascade简单形状的轮廓面偏置生成针对一些简单的形状,可以利用OCC中的函数直接生成其轮廓面的偏置形状 BRepOffsetAPI_MakeOffsetShape aShapeMaker1; //aShapeMaker1.PerformByJoin(input,30,0.01);//第一种生成方式 aShapeMaker1.PerformBySimple(input, 20);//第二种生成方式,input为输入的TopoDS_Shape形状 TopoDS_Shape offs

2021-06-09 15:04:13 1593

原创 opencascade视图中设置视方体

opencascade视图中设置视方体主流CAD\CAM软件中为我们提供了零件的视方体,OCC作为功能较完善的开源三维造型库,也为我们提供了接口。涉及类:设置代码为: Handle(AIS_ViewCube) H_AisViewCube = new AIS_ViewCube(); m_context->SetDisplayMode(AIS_Shaded, true); //设置显示模式为阴影 H_AisViewCube->SetBoxSideLabel(V3d_Xpos

2021-06-08 20:48:19 1364 5

原创 opencascade建立零件的轮廓包围盒

opencascade建立零件的轮廓包围盒通过OCC中的投影,求交及B样条拟合等操作的结合,可以简单生成零件的轮廓偏置包围盒;BRepProj_Projection//投影BRepAlgoAPI_Section//求交GeomAPI_Interpolate//插值拟合

2021-06-07 14:32:42 1311 6

原创 opencascade设置零件的观察视角

opencascade设置零件的观察视角俯视图:左视图:正视图:观察的一般方向有前、后、左、右、上和下,在occ中均为我们提供了,除此之外还有其他更多的观察方向:涉及的类与函数为:为我们提供了如下的枚举方向:参考occ的demo,代码设置为:void CSelectionDialog::OnTopView() { myActiveView->SetProj(V3d_Zpos); OnDisplay(true);}void CSelectionDialog::

2021-06-05 15:36:58 827

原创 opencascade获取面的法向

opencascade获取面的法向导入任意零件,获取零件的拓扑面的法向,如红色线条所示。注意:当拓扑面与几何面方向不一致时,我们需要将方向反转,保证准确//遍历零件的面for (TopExp_Explorer e(workpiece, TopAbs_FACE); e.More(); e.Next()) { TopoDS_Face aFace = TopoDS::Face(e.Current()); //拓扑面和几何曲面的方向相反时反转 if (aFace.Orientation()

2021-06-04 21:19:54 2739 7

原创 opencascade绘制B样条插值曲线

opencascade绘制B样条插值曲线opencascade提供了B样条曲线曲面的绘制方法,涉及的类有下面以绘制B样条插值曲线为例: QVector<gp_Pnt> points; points.push_back(gp_Pnt(0,0,1)); points.push_back(gp_Pnt(0,1,1)); points.push_back(gp_Pnt(1,2,1)); points.push_back(gp_Pnt(1,3,1)); int

2021-06-03 14:46:34 1465

原创 MFC绘制有理柱面和圆锥面

MFC绘制有理柱面和圆锥面上面四幅图为分别从正视图和斜二测视图绘制的1/4柱面和圆锥面绘制类如下:#pragma once#include"P3.h"#include"P2.h"#include"math.h"#define ROUND(h) int(h+0.5)/************************************************** *function:绘制柱面,圆锥面,用有理2*1次Bezier曲线绘制**********************

2021-06-01 21:57:09 454 1

原创 MFC绘制双有理Bezier曲面

MFC绘制双有理Bezier曲面双有理Bezier曲面可以精确表示任意二次曲面,如球面、柱面及圆锥面等,下面给出1/8球面的绘制类。#pragma once#include"P3.h"#include"P2.h"#include"math.h"#define ROUND(h) int(h+0.5)/************************************************** *function:绘制1/8球面片,双有理二次Bezier曲线绘制

2021-06-01 15:51:48 495

原创 MFC二次有理Bezier曲线升阶

MFC二次有理Bezier曲线升阶升阶前:升阶后:升阶计算的核心代码:void RationalElevation::DrawDegreeElevationCurve(CP2 *P,CDC*pDC)//升阶后的点计算{ double weight[3];//升阶前的三个权因子 weight[0]=1.0,weight[1]=sqrt(2.0)/2,weight[2]=1.0; double Weight[4];//升阶后的四个权因子 CP2 V[4];//升阶后的控制点 for(i

2021-05-31 23:28:20 262

原创 MFC有理二次Bezier曲线精确拟合圆

MFC有理二次Bezier曲线精确拟合圆见蓝色线条,相比较与Bezier曲线,有理Bezier曲线可以精确拟合圆等二次线条。控制点的赋值为: int r=200;//圆的半径 point[0][0].x=r, point[0][0].y=0;//第一象限控制点 point[0][1].x=r, point[0][1].y=r; point[0][2].x=0, point[0][2].y=r; point[1][0].x=0, point[1][0].y=r;//第二象限控制点 poin

2021-05-31 22:22:31 643

原创 MFC有理二次Bezier曲线绘制

MFC有理二次Bezier曲线绘制非有理Bezier曲线曲线无法精确表示所有的二次曲线和二次曲面,引入了有理Bezier曲线曲面,来精确表示。如图,通过控制权重,可以获取不同的二次有理Bezier曲线(蓝色线条),虚线为非有理Bezier曲线,作为对照。理论与算法参考《计算几何算法与实现》–孔令德代码实现如下:#pragma once#include"P2.h"#include"math.h"#define ROUND(h) int(h+0.5)class RationalQuad

2021-05-31 17:04:40 1007

原创 MFC绘制犹他茶壶

MFC绘制犹他茶壶用Bezier曲线、曲面来拼接犹他茶壶数据与代码参考***《计算几何算法与实现》–孔令德***茶壶体由两段Bezier曲线旋转而成茶壶盖子由两段Bezier曲线旋转而成茶壶底部由两段Bezier曲线旋转而成茶壶手柄由四片Bezier曲面片拼接而成茶壶嘴部由四片Bezier曲面片拼接而成成果图实现代码:在上一篇工程的基础上,添加绘制犹他茶壶的类#pragma once#include "P3.h"#include"Revolution.h"#incl

2021-05-28 22:32:26 3356 2

原创 MFC绘制旋转Bezier曲面

MFC绘制旋转Bezier曲面给出一条Bezier曲线,通过旋转64个控制点,4个曲面片,绘制出一个完整曲面已知四个控制点:(50,100)(150,70)(120,-30)(90,-80)理论与代码参考《计算几何算法与实现》–孔令德下面给出核心代码,在上篇文章的项目基础上,继续添加旋转类CRevolution#pragma once#include"P2.h"#include"P3.h"#include"Patch.h"#include"BicubicBezierPatch.h"#i

2021-05-28 16:35:46 865

原创 MFC绘制Bezier曲面拼接圆

MFC绘制Bezier曲面拼接圆理论算法与代码参考《计算几何算法与实现》–孔令德下面给出绘制代码:1、在上一篇文章的代码基础上,继续进行添加,地址链接2、添加描述曲面片的数据类CPatch#pragma onceclass CPatch{public: CPatch(void); ~CPatch(void);public: int pNumber;//表面顶点数 int pIndex[4][4];//表面顶点索引号};#include "StdAfx.h"#inclu

2021-05-27 19:55:37 547

原创 MFC绘制Bezier曲面

MFC绘制Bezier曲面理论推导参考及代码参考:《计算几何算法与实现》–孔令德下面给出具体代码建立过程:1、新建MFC单文档项目;2、添加二维点类CP2,与三维点类CP3,并在其中进行相关运算符的重载;#pragma once//为了避免按照x和y方向进行重复运算,重载运算对象class CP2{public: CP2(void); ~CP2(void); CP2(double x,double y); friend CP2 operator+(const CP2&p0

2021-05-26 17:02:30 1490 1

原创 opencascade获取四元数、旋转矩阵和欧拉角

opencascade获取四元数、旋转矩阵和欧拉角如图,计算结果与PowerMill中的结果进行对照在opencascade中当我们想要获取两个坐标轴之间的旋转关系时,如旋转矩阵、旋转四元数以及欧拉角等可以按照如下步骤进行:void angleTest(gp_Ax3 FromSystem, gp_Ax3 ToSystem)//变换前后的坐标系{ gp_Trsf trsf; trsf.SetTransformation(FromSystem, ToSystem); gp_Quaternion

2021-05-25 23:15:37 999

原创 Bezier曲线的拼接

Bezier曲线的拼接使用四条三次Bezier曲线段逼近圆:1、新建MFC项目;2、添加二维点类CP2#pragma once//为了避免按照x和y方向进行重复运算,重载运算对象class CP2{public: CP2(void); ~CP2(void); CP2(double x,double y); friend CP2 operator+(const CP2&p0,const CP2&p1);//运算符重载 friend CP2 operator-(con

2021-05-25 20:33:17 791

原创 德卡斯特(deCasteljau)递推公式绘制Bezier曲线

德卡斯特(deCasteljau)递推公式绘制Bezier曲线德卡斯特递推算法比使用定义算法绘图简单了很多,已经成为绘制Bezier曲线的标准算法;参考上一篇文章添加下面代码: CP2 PP[4][4];//德卡斯特递推数组 void deCasteljau(double t);//德卡斯特递推计算 void DrawdeCasteljauBezier(CDC*pDC);//绘制德卡斯特曲线void CdrawBezierCurveView::deCasteljau(double t){

2021-05-25 10:50:14 1400

原创 MFC绘制Bezier曲线

MFC绘制Bezier曲线参考《计算几何算法与实现》–孔令德绘制的Bezier曲线次数为3,四个控制节点1、添加二维点类#pragma once//为了避免按照x和y方向进行重复运算,重载运算对象class CP2{public: CP2(void); ~CP2(void); CP2(double x,double y); friend CP2 operator+(const CP2&p0,const CP2&p1);//运算符重载 friend CP2 oper

2021-05-24 17:07:58 4361 11

原创 C++如何获取一段代码运行的时间

C++如何获取一段代码运行的时间 DWORD start_time = GetTickCount(); //开始计时 //代码块 DWORD end_time = GetTickCount(); //结束计时 cout << "The all run time is:" << (end_time - start_time) / 1000.0 << "s!" << endl; //输出时间...

2021-05-21 22:22:09 314

转载 opencascade如何用一个面裁剪另外一个面(2)

opencascade如何用一个面裁剪另外一个面(2)原文链接void split_plane_by_plane(TopoDS_Shape tool_face, TopoDS_Shape object_tool){ // Build section by the split plane for the cylinder. BRepAlgoAPI_Section aSection(object_tool, tool_face, Standard_False); aSection.Com

2021-05-21 22:02:29 730

原创 opencascade如何用一个面裁剪另外一个面

opencascade如何用一个面裁剪另外一个面void trim_plane_by_plane_2(TopoDS_Shape aS1, TopoDS_Shape aS2){ BRepAlgoAPI_Section sec(aS1, aS2, false); sec.ComputePCurveOn1(true); sec.Approximation(true); sec.Build(); TopoDS_Shape aInterCurve = sec.Shape()

2021-05-21 21:58:26 847

原创 MFC绘制三次参数样条

MFC绘制三次参数样条三次样条不具有几何不变性,所以引入了三次参数样条曲线。参考《计算几何算法与实现》–孔令德1、添加二维点类;#pragma once//为了避免按照x和y方向进行重复运算,重载运算对象class CP2{public: CP2(void); ~CP2(void); CP2(double x,double y); friend CP2 operator+(const CP2&p0,const CP2&p1);//运算符重载 friend CP2

2021-05-21 15:59:34 286 1

MFC绘制双三次Bezier曲面DrawSewBezier.zip

MFC绘制双三次Bezier曲面DrawSewBezier.zip

2021-05-26

双缓冲球体线框绘制drawSphere.zip

使用双缓冲机制绘制中心位于窗口客户区中心的立方体线框模型,使用方向键旋转立方体,观察立方体的三维形状。

2021-05-17

可以链接到MFC中的OpenGL.zip

可以链接到MFC中的OpenGL库

2021-05-15

OpenCascade中文帮助文档.pdf

opencascade中文帮助文档免费下载

2021-04-29

opencascade-使用指南教学提纲.pdf

简要的介绍了opencascade涉及的几个模块内容,试合初学者阅读学习

2021-04-29

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除