#ifndef PKM3D_H
#define PKM3D_H #include"kinematics.h"
#include"Inventor/Qt/viewers/SoQtExaminerViewer.h"
#include"Inventor/SoInput.h"
#include"Inventor/Qt/SoQt.h"
#include"Inventor/nodes/SoSeparator.h"
#include"Inventor/nodes/SoTransform.h"
#include"Inventor/nodes/SoRotationXYZ.h"
#include"Inventor/nodes/SoRotation.h"
#include"Inventor/nodes/SoTransform.h" #include<QWidget> class pkm3d
{
public:
pkm3d(QWidget *parent); SoQtExaminerViewer *Viewer; ///splane
SoInput mySplane,myBottom; SoInput myX,myY,myObj;
//SoTransform* Y_Pos0;//X轴对刀点,到达x轴对刀点按钮触发////////////////////////////////////
SoTransform* Y_form;//x轴移动,放定时器///////////////////////////////////////
SoTransform* Obj_form;//y轴移动 //支链4
SoInput myR4,myLeg4;
SoRotationXYZ *R4_Rot;//R4转动
SoTransform* Leg4_form;//Leg4滑动 //支链3
SoInput myR3,myLeg3;
SoRotationXYZ *R3_Rot;//R3转动
SoTransform* Leg3_form;//Leg3滑动 //支链2
SoInput myU2;
SoRotationXYZ *U2_Rot;//U2转动 //支链1
SoInput myU1;
SoRotationXYZ *U1_Rot;//U1转动 ///mplane
SoInput myMplane; SoRotation *Mplane_Rotp;
SoRotation *Mplane_Rott;
SoTransform* Mplane_form; //支链4
SoInput myS42,myS4;
SoRotationXYZ *S4_Rot;//S4转动
SoRotationXYZ *S42_Rot;//S41转动 //支链3
SoInput myS3,myS32;
SoRotationXYZ *S3_Rot;//S3转动
SoRotationXYZ *S32_Rot;//S31转动 //支链1
SoInput myLeg1;
SoRotationXYZ *Leg1_Rot;//Leg2转动 SoInput myU12;
SoTransform *U12_form;//U12移动 //支链2
SoInput myLeg2;
SoRotationXYZ *Leg2_Rot;//Leg2转动 SoInput myU22;
SoTransform *U22_form;//U22移动 private: SoSeparator *rootSplane;
SoSeparator *Splane;
SoSeparator *rootBottom;
SoTransform* bottom_Pos;
SoSeparator *Bottom;
SoSeparator *rootX;
SoTransform* X_Pos;
SoSeparator *X;
SoSeparator *rootY;
SoTransform* Y_Pos;
SoSeparator *Y;
SoSeparator *rootObj;
SoTransform* Obj_Pos;
SoSeparator *Obj;
SoSeparator *rootR4;
SoSeparator *R4;
SoTransform* R4_Pos1;
SoRotationXYZ *R4_Pos2;
SoSeparator *rootLeg4;
SoSeparator *Leg4;
SoSeparator *rootR3;
SoSeparator *R3;
SoTransform* R3_Pos1;
SoRotationXYZ *R3_Pos2;
SoSeparator *rootLeg3;
SoSeparator *Leg3;
SoSeparator *rootU2;
SoSeparator *U2;
SoTransform* U2_Pos;
SoSeparator *rootU1;
SoSeparator *U1;
SoTransform* U1_Pos;
SoSeparator *rootMplane;
SoSeparator *Mplane;
SoSeparator *rootLeg1;
SoSeparator *Leg1;
SoTransform *Leg1_Pos;
SoSeparator *rootU12;
SoSeparator *U12;
SoRotationXYZ *U12_Pos;
SoSeparator *rootLeg2;
SoSeparator *Leg2;
SoTransform *Leg2_Pos1;
SoRotationXYZ *Leg2_Pos2;
SoSeparator *rootU22;
SoSeparator *U22;
SoRotationXYZ *U22_Pos;
SoSeparator *rootS32;
SoSeparator *S32;
SoTransform* S32_Pos;
SoSeparator *rootS3;
SoSeparator *S3;
SoSeparator *rootS42;
SoSeparator *S42;
SoTransform* S42_Pos;
SoSeparator *rootS4;
SoSeparator *S4; }; #endif // PKM3D_H
#include "pkm3d.h"

pkm3d::pkm3d(QWidget *parent)
{
QWidget *lhy = SoQt::init(""); Viewer = new SoQtExaminerViewer(parent); rootSplane = new SoSeparator;
rootSplane->ref(); ///静
Splane = new SoSeparator;
mySplane.openFile("splane.wrl");
Splane=SoDB::readAll(&mySplane);
Splane->ref(); rootSplane->addChild(Splane); ////bottom
rootBottom = new SoSeparator;
rootBottom->ref();
Bottom = new SoSeparator;
myBottom.openFile("bottom.wrl");
Bottom=SoDB::readAll(&myBottom);
Bottom->ref(); //bottom位置
bottom_Pos = new SoTransform;
bottom_Pos->translation.setValue(0, -0.635f,0); Splane->addChild(rootBottom);
rootBottom->addChild(bottom_Pos);
rootBottom->addChild(Bottom); ////X
rootX = new SoSeparator;
rootX->ref();
X = new SoSeparator;
myX.openFile("x.wrl");
X = SoDB::readAll(&myX);
X->ref(); //X位置
X_Pos = new SoTransform;
X_Pos->translation.setValue(0, 0.052f,0); Bottom->addChild(rootX);
rootX->addChild(X_Pos);
rootX->addChild(X); ////Y导轨,,实际是x轴移动
rootY = new SoSeparator;
rootY->ref();
Y = new SoSeparator;
myY.openFile("y.wrl");
Y = SoDB::readAll(&myY);
Y->ref(); //Y位置
Y_Pos = new SoTransform;
Y_Pos->translation.setValue(0, 0.064f,0); // //Y对刀原点位置
// Y_Pos0 = new SoTransform;
// Y_Pos0->translation.setValue(0, 0.064f,0); //Y的移动
Y_form = new SoTransform;
//Y_form->translation.setValue(0, 0.064f,0); X->addChild(rootY);
rootY->addChild(Y_Pos);
rootY->addChild(Y_form);
rootY->addChild(Y); ////obj
rootObj = new SoSeparator;
rootObj->ref();
Obj = new SoSeparator;
myObj.openFile("obj.wrl");
Obj = SoDB::readAll(&myObj);
Obj->ref(); //Obj位置
Obj_form = new SoTransform;
Obj_form->translation.setValue(0, 0,0); //Obj移动,,,y轴移动
Obj_form = new SoTransform;
//Obj_form->translation.setValue(0, 0.052f,0); Y->addChild(rootObj);
rootObj->addChild(Obj_form);
rootObj->addChild(Obj); ///支链4
//R4
rootR4 = new SoSeparator;
rootR4->ref();
myR4.openFile("r4.wrl");
R4=SoDB::readAll(&myR4);
R4->ref();
//R4位置
R4_Pos1 = new SoTransform;
R4_Pos1->translation.setValue(0, 0, -0.18f);
R4_Pos2 = new SoRotationXYZ;
R4_Pos2->axis = SoRotationXYZ::Y;
R4_Pos2->angle = -3.1415926535;
//R4转动轴
R4_Rot = new SoRotationXYZ;
R4_Rot->axis = SoRotationXYZ::X;
R4_Rot->angle = 0; Splane->addChild(rootR4);
rootR4->addChild(R4_Pos1);
rootR4->addChild(R4_Pos2);
rootR4->addChild(R4_Rot);
rootR4->addChild(R4); //Leg4
rootLeg4 = new SoSeparator;
rootLeg4->ref();
myLeg4.openFile("leg4.wrl");
Leg4=SoDB::readAll(&myLeg4);
Leg4->ref();
//Leg4位置 //Leg4移动
Leg4_form = new SoTransform;
Leg4_form->translation.setValue(0, -0.208f, 0); rootR4->addChild(rootLeg4);
rootLeg4->addChild(Leg4_form);
rootLeg4->addChild(Leg4); ///////////3支链
//R4
rootR3 = new SoSeparator;
rootR3->ref();
myR4.openFile("r3.wrl");
R3=SoDB::readAll(&myR4);
R3->ref();
//R3位置
R3_Pos1 = new SoTransform;
R3_Pos1->translation.setValue(0, 0, 0.18f);
R3_Pos2 = new SoRotationXYZ;
R3_Pos2->axis = SoRotationXYZ::Y;
R3_Pos2->angle = 0;
//R3转动轴
R3_Rot = new SoRotationXYZ;
R3_Rot->axis = SoRotationXYZ::X;
R3_Rot->angle = 0; Splane->addChild(rootR3);
rootR3->addChild(R3_Pos1);
rootR3->addChild(R3_Pos2);
rootR3->addChild(R3_Rot);
rootR3->addChild(R3); //Leg3
rootLeg3 = new SoSeparator;
rootLeg3->ref();
myLeg3.openFile("leg3.wrl");
Leg3=SoDB::readAll(&myLeg3);
Leg3->ref();
//Leg3位置 //Leg3移动
Leg3_form = new SoTransform;
Leg3_form->translation.setValue(0, -0.208f, 0); rootR3->addChild(rootLeg3);
rootLeg3->addChild(Leg3_form);
rootLeg3->addChild(Leg3); ///支链2
//U2
rootU2 = new SoSeparator;
rootU2->ref();
myU2.openFile("u2.wrl");
U2=SoDB::readAll(&myU2);
U2->ref();
//U2位置
U2_Pos = new SoTransform;
U2_Pos->translation.setValue(-0.18f, 0, 0);
//U2转动轴
U2_Rot = new SoRotationXYZ;
U2_Rot->axis = SoRotationXYZ::X;
//U2_Rot->angle = 1; Splane->addChild(rootU2);
rootU2->addChild(U2_Pos);
rootU2->addChild(U2_Rot);
rootU2->addChild(U2); ///支链1
//U1
rootU1 = new SoSeparator;
rootU1->ref();
myU1.openFile("u1.wrl");
U1=SoDB::readAll(&myU1);
U1->ref();
//U1位置
U1_Pos = new SoTransform;
U1_Pos->translation.setValue(0.18f, 0, 0);
//U1转动轴
U1_Rot = new SoRotationXYZ;
U1_Rot->axis = SoRotationXYZ::X;
//U1_Rot->angle = 1; Splane->addChild(rootU1);
rootU1->addChild(U1_Pos);
rootU1->addChild(U1_Rot);
rootU1->addChild(U1); ///动平台
rootMplane = new SoSeparator;
rootMplane->ref();
myMplane.openFile("mmplane.wrl");
Mplane=SoDB::readAll(&myMplane);
Mplane->ref();
//mpanle移动和转动
Mplane_form = new SoTransform;
//Mplane_form->translation.setValue(0,-0.3f, 0 );
Mplane_Rotp = new SoRotation;
//Mplane_Rotp->axis = SoRotationXYZ::Z;
//Mplane_Rotp->angle = -0.4f;//初始psi
Mplane_Rott = new SoRotation;
//Mplane_Rott->axis = SoRotationXYZ::X;
//Mplane_Rott->angle = 0.4f;//初始theta rootSplane->addChild(rootMplane);
rootMplane->addChild(Mplane_form);
rootMplane->addChild(Mplane_Rotp);
rootMplane->addChild(Mplane_Rott);
rootMplane->addChild(Mplane); ////支链1 //Leg1
rootLeg1 = new SoSeparator;
rootLeg1->ref();
myLeg1.openFile("leg11.wrl");
Leg1=SoDB::readAll(&myLeg1);
Leg1->ref();
//Leg1位置
Leg1_Pos = new SoTransform;
Leg1_Pos->translation.setValue(0.12f,0, 0 ); //Leg1转动
Leg1_Rot = new SoRotationXYZ;
Leg1_Rot->axis = SoRotationXYZ::Z;
//Leg1_Rot->angle = 0; rootMplane->addChild(rootLeg1);
rootLeg1->addChild(Leg1_Pos);
rootLeg1->addChild(Leg1_Rot);
rootLeg1->addChild(Leg1); //U12
rootU12 = new SoSeparator;
rootU12->ref();
myU12.openFile("U12.wrl");
U12=SoDB::readAll(&myU12);
U12->ref();
//U12位置
U12_Pos = new SoRotationXYZ;
U12_Pos->axis = SoRotationXYZ::Y;
U12_Pos->angle = 3.1415926535; //U12移动
U12_form = new SoTransform;
U12_form->translation.setValue(0,0.18f, 0); rootLeg1->addChild(rootU12);
rootU12->addChild(U12_Pos);
rootU12->addChild(U12_form);
rootU12->addChild(U12); ////支链2 //Leg2
rootLeg2 = new SoSeparator;
rootLeg2->ref();
myLeg2.openFile("leg22.wrl");
Leg2=SoDB::readAll(&myLeg2);
Leg2->ref();
//Leg2位置
Leg2_Pos1 = new SoTransform;
Leg2_Pos1->translation.setValue(-0.12f,0, 0 );
Leg2_Pos2 = new SoRotationXYZ;
Leg2_Pos2->axis = SoRotationXYZ::Y;
Leg2_Pos2->angle = 3.1415926535; //Leg2转动
Leg2_Rot = new SoRotationXYZ;
Leg2_Rot->axis = SoRotationXYZ::Z;
//Leg2_Rot->angle = 0.4; rootMplane->addChild(rootLeg2);
rootLeg2->addChild(Leg2_Pos1);
rootLeg2->addChild(Leg2_Pos2);
rootLeg2->addChild(Leg2_Rot);
rootLeg2->addChild(Leg2); //U22
rootU22 = new SoSeparator;
rootU22->ref();
myU22.openFile("U22.wrl");
U22=SoDB::readAll(&myU22);
U22->ref();
//U22位置
U22_Pos = new SoRotationXYZ;
U22_Pos->axis = SoRotationXYZ::Y;
U22_Pos->angle = 3.1415926535; //U12移动
U22_form = new SoTransform;
U22_form->translation.setValue(0,0.18f, 0); rootLeg2->addChild(rootU22);
rootU22->addChild(U22_Pos);
rootU22->addChild(U22_form);
rootU22->addChild(U22); ////支链3
//S32
rootS32 = new SoSeparator;
rootS32->ref();
myS32.openFile("s32.wrl");
S32=SoDB::readAll(&myS32);
S32->ref();
//U2位置
S32_Pos = new SoTransform;
S32_Pos->translation.setValue(0, 0, 0.12f);
//U1转动轴
S32_Rot = new SoRotationXYZ;
S32_Rot->axis = SoRotationXYZ::X;
S32_Rot->angle = 0.5; Mplane->addChild(rootS32);
rootS32->addChild(S32_Pos);
rootS32->addChild(S32_Rot);
rootS32->addChild(S32); //S3
rootS3 = new SoSeparator;
rootS3->ref();
myS3.openFile("s3.wrl");
S3=SoDB::readAll(&myS3);
S3->ref();
//S3位置 //S3转动轴
S3_Rot = new SoRotationXYZ;
S3_Rot->axis = SoRotationXYZ::Z;
S3_Rot->angle = 0.5; rootS32->addChild(rootS3);
rootS3->addChild(S3_Rot);
rootS3->addChild(S3); ////支链4
//S42
rootS42 = new SoSeparator;
rootS42->ref();
myS42.openFile("s42.wrl");
S42=SoDB::readAll(&myS42);
S42->ref();
//U2位置
S42_Pos = new SoTransform;
S42_Pos->translation.setValue(0, 0,-0.12f);
//U1转动轴
S42_Rot = new SoRotationXYZ;
S42_Rot->axis = SoRotationXYZ::X;
S42_Rot->angle = 0.5; Mplane->addChild(rootS42);
rootS42->addChild(S42_Pos);
rootS42->addChild(S42_Rot);
rootS42->addChild(S42); //S4
rootS4 = new SoSeparator;
rootS4->ref();
myS4.openFile("s4.wrl");
S4=SoDB::readAll(&myS4);
S4->ref();
//S4位置 //S4转动轴
S4_Rot = new SoRotationXYZ;
S4_Rot->axis = SoRotationXYZ::Z;
//S4_Rot->angle = 0.5; rootS42->addChild(rootS4);
rootS4->addChild(S4_Rot);
rootS4->addChild(S4); Viewer->setSceneGraph(rootSplane);
Viewer->show();
//SoQt::mainLoop(); }

3D运动类申明与实现的更多相关文章

  1. WPF 3D 常用类(1)

    原文:WPF 3D 常用类(1) 几何数据相关类 Geometry3D 抽象类, 用于定义物体的几何数据, 可用于计算HitTest和BoundingBox MeshGeometry3D Geomet ...

  2. 第六章:3D向量类

    第一节:类接口的设计 1.好的类在设计之前首先要回答下列问题:“这些类将包含哪些数据?”,“这个类将提供什么样的操作?”,“在哪些数据上执行操作?”. 我们已经知道我们要设计的是3D向量类,用来存储x ...

  3. 最佳运动类APP-Keep设计与欣赏

    运动类APP是大家手机中必备的一款软件.如果说谁手机里没有任何涉及运动类APP,那只能说真的与时代脱轨了.近些年随着物质生活条件的改善,人们开始越来越重视自己的身体,所以也越来越多的人会进行身体锻炼. ...

  4. 3D教育类小图标_三维立体学习类icon图标素材

    3D教育类小图标_三维立体学习类icon图标素材

  5. Unity 3D Time 类

    Time   class in UnityEngine Description The interface to get time information from Unity. Static Var ...

  6. Unity3D 之3D游戏角色控制器运动

    3D运动,绑定了人形控制器后的一个简单的运动方法. using UnityEngine; using System.Collections; public class PlayerMove : Mon ...

  7. iOS控件之UIResponder类

    iOS控件之UIResponder类 在iOS中UIResponder类是专门用来响应用户的操作处理各种事件的,我们知道UIApplication.UIView.UIViewController这几个 ...

  8. 【翻译】西川善司的「实验做出的游戏图形」「GUILTY GEAR Xrd -SIGN-」中实现的「纯卡通动画的实时3D图形」的秘密,后篇

    http://www.4gamer.net/games/216/G021678/20140714079/     连载第2回的本回,  Arc System Works开发的格斗游戏「GUILTY G ...

  9. css3 3d 与案例分析

    作者:魔洁 聊到3d那我们就先聊聊空间维度,首先一维,比如一条线就是一个一维空间,连点成线在这个空间里这些点只能前进后退,二维空间就是一个平面,这时点不仅可以前进后退还可以左右移动,3维空间也可以说是 ...

随机推荐

  1. IaaS、PaaS、SaaS、DaaS都是什么?现在怎么样了?终于有人讲明白了

    导读:本文将详细科普云计算的概念.云服务的发展现状,并逐一介绍各种云服务模式(IaaS.PaaS.SaaS.DaaS),建议收藏! 作者:阿里云智能-全球技术服务部来源:大数据DT(ID:bigdat ...

  2. 看完这篇,保证让你真正明白:分布式系统的CAP理论、CAP如何三选二

    引言 CAP 理论,相信很多人都听过,它是指: 一个分布式系统最多只能同时满足一致性(Consistency).可用性(Availability)和分区容错性(Partition tolerance) ...

  3. [leetcode72]166. Fraction to Recurring Decimal手动实现除法

    让人火大的一道题,特殊情况很多 不过也学到了: java中int类型的最大值的绝对值比最小值的绝对值小1 int最小值的绝对值还是负的,除以-1也是 这种时候最好转为long类型进行处理 long n ...

  4. Codefroces 1328E Tree Querie(dfs序)

    Codefroces 1328E Tree Querie 题目 给出一棵1为根,n个节点的树,每次询问\(k_i\) 个节点,问是否存在这样一条路径: 从根出发,且每个节点在这条路径上或者距离路径的距 ...

  5. Erlang那些事儿第3回之我是函数(fun),万物之源MFA

    Erlang代码到处都是模式匹配,这把屠龙刀可是Erlang的看家本领.独家绝学,之前在<Erlang那些事儿第1回之我是变量,一次赋值永不改变>文章提到过,Erlang一切皆是模式匹配. ...

  6. RPC框架从0到10

    RPC(Remote Procedure Call) 从单机走向分布式,产生了很多分布式的通信方式 最古老也是最有效,并且永不过时的,TCP/UDP的二进制传输,事实上所有的通信方式归根结底都是TCP ...

  7. UML第二次结对作业

    |作业要求|https://edu.cnblogs.com/campus/fzzcxy/2018SE1/homework/11250| | ---------- | ----------------- ...

  8. Lesson_strange_words4

    mount on 安装 arc 弧 actuator 马达,致动器:调节器 roughly 大致,大约 radially 径向,放射状 stepper 步进机 motor 电机,发动机 sequent ...

  9. Ts有限状态机

    ts版本的有限状态机 最近做小游戏要做切换人物状态,花点时间写了一个有限状态机,使用语言为Ts,也可改成自己的语言 按照目前的逻辑,这个可以继续横向扩展,某些做流程管理 先上预览图 Fsm:状态机类 ...

  10. LeetCode682 棒球比赛

    题目描述: 你现在是棒球比赛记录员.给定一个字符串列表,每个字符串可以是以下四种类型之一:1.整数(一轮的得分):直接表示您在本轮中获得的积分数.2. "+"(一轮的得分):表示本 ...