视频地址:
http://blob:https://www.bilibili.com/569b84b9-49a6-4cdd-a84d-8bdfa43291dc
http://blob:https://www.bilibili.com/1318a076-ff92-495a-b42e-2823b2f6f4bb
http://blob:https://www.bilibili.com/c565b5db-03ef-4aef-ba1c-9ae45aa6f8d5
1.在SolidWorks中建模
2.抽象结构
3.编写一个计算模型
首先建立一套几何结构的类,方便模型计算
然后写一个模型,利用这些几何类计算。使用了VTK库,负责导入Stl文件,根据计算结果实时更新模型姿态。
#ifndef MYDELTA_H
#define MYDELTA_H
#include"myRobotModel.h"
#include"myTrackPoints.h"
#include<QObject>
#include<QThread>
#include"myLeg.h"
#include"myArm.h"
#include"myHand.h"
#include"myActor.h"
class myVTKWidget;
class vtkRenderer;
class vtkAxesActor;
class myRobotModel;
class vtkTextActor;
class myArrowPlane;
class myDelta: public QThread
{
Q_OBJECT
public:
explicit myDelta(myVTKWidget *parent);
~myDelta()override;
void run() override; //线程中加载模型
vtkRenderer *Render(); //返回renderer
void setDragState(int state); //是否在拖拽
myRobotModel getModel()const; //获取当前显示的模型
void updateFromUser(); //来自用户拖动更新
void updateFromMotion(const myRobotModel &model); //来自机械运动更新
enum DragState {
NoneDrag,
Waiting,
Moving
};
signals:
void signalProgress(int value); //反馈文件加载进度
private:
myActor *m_frame; //框架
myActor *m_base; //电机座
myArm *m_arm[3]; //手臂
myLeg *m_leg[6]; //支腿
myHand *m_hand; //手
myTrackPoints m_track; //轨迹线
myArrowPlane *m_arrow[4];
vtkTextActor *m_text; //文本显示
myRobotModel m_model; //当前模型
myVTKWidget *m_parent; //父类
vtkRenderer *m_render; //渲染器
private:
void update(); //更新模型
void createFrame(); //创建框架
void createBase(); //创建电机座
void createArms(); //创建手臂
void createLegs(); //创建支腿
void createHand(); //创建手
void createFileName(const char *from, char *to); //将本地文件名字转成绝对路径
private slots:
void startThread(); //开启线程
};
#endif // MYDELTA_H
4.使用QVTKOpenGLWidget类显示
使用了之前开源的交互样式,操作习惯模仿SolidWorks.