sprintf (cbuf, "%0.4f %0.4f %0.4f %0.4f %0.4f %0.4f", arm_sy, arm_sp, arm_ep, arm_wp, arm_wy, arm_wr);
oapiWriteScenario_string (scn, "ARM_STATUS", cbuf);
void RMSSystem::UpdateEECamView() const
{
if(oapiCameraInternal()) {
// calculate rotation angle for EE cam
VECTOR3 dir = arm_tip[1]-arm_tip[0];
// if camera is pointing straight up or down, make it slightly offset from (0,1,0) vector
if(Eq(dotp(dir, _V(0, -1, 0)), 1.0, 1e-4)) dir = _V(1.74532924314e-4, -0.999999984769, 0.0);
else if(Eq(dotp(dir, _V(0, 1, 0)), 1.0, 1e-4)) dir = _V(1.74532924314e-4, 0.999999984769, 0.0);
VECTOR3 orbiter_cam_rot = crossp(crossp(dir, _V(0, 1, 0)), dir);
orbiter_cam_rot /= length(orbiter_cam_rot);
if(orbiter_cam_rot.y < 0) orbiter_cam_rot = -orbiter_cam_rot;
double angle = SignedAngle(orbiter_cam_rot, arm_tip[2]-arm_tip[0], dir);
//sprintf_s(oapiDebugString(), 255, "Rot Vec: %f %f %f dir: %f %f %f dot_prod: %f Angle: %f %f", orbiter_cam_rot.x, orbiter_cam_rot.y, orbiter_cam_rot.z, dir.x, dir.y, dir.z, dot_prod, angle, angle*DEG);
//sprintf_s(oapiDebugString(), 255, "Rot Vec: %f %f %f cam dir: %f %f %f dir: %f %f %f Angle: %f %f length: %f", orbiter_cam_rot.x, orbiter_cam_rot.y, orbiter_cam_rot.z, arm_tip[2].x-arm_tip[0].x, arm_tip[2].y-arm_tip[0].y, arm_tip[2].z-arm_tip[0].z, dir.x, dir.y, dir.z, angle, angle*DEG, length(dir));
//sprintf_s(oapiDebugString(), 255, "dot_prod: %f Angle: %f %f", dot_prod, angle, angle*DEG);
STS()->SetCameraOffset(STS()->GetOrbiterCoGOffset()+arm_tip[4]+RMS_MESH_OFFSET);
//STS()->SetCameraDefaultDirection (arm_tip[1]-arm_tip[0], 0.0);
STS()->SetCameraDefaultDirection (dir, angle);
oapiCameraSetCockpitDir(0.0, 0.0);
}
}
SetCameraDefaultDirection (dir, angle);
What I don't get is this:
Because is SetCameraDefaultDirection (VECTOR);Code:SetCameraDefaultDirection (dir, angle);
/**
* \brief Set the default camera direction and tilt angle for internal (cockpit) view.
* \param cd new default direction in vessel coordinates
* \param tilt camera tilt angle around the default direction [rad]
* \note This function allows to set the camera tilt angle in addition to the default
* direction.
* \note By default, the default direction is (0,0,1), i.e. forward, and the tilt
* angle is 0 (upright).
* \note The supplied direction vector must be normalised to length 1.
* \note The tilt angle should be in the range [-Pi,+Pi]
* \note Calling this function automatically sets the current actual view direction to
* the default direction.
* \sa SetCameraDefaultDirection(const VECTOR3&)const, GetCameraDefaultDirection
*/
void SetCameraDefaultDirection (const VECTOR3 &cd, double tilt) const;
Thanks. I will see if I can get it to work in mine
I guess I may need to include #include <UltraMath.h> My just has math
if (CAM == 6){//elbow view
VECTOR3 dir = camRMSElbowLoc[1] - camRMSElbowLoc[0];
if (Eq(dotp(dir, _V(0, -1, 0)), 1.0, 1e-4)) dir = _V(1.74532924314e-4, -0.999999984769, 0.0);
else if (Eq(dotp(dir, _V(0, 1, 0)), 1.0, 1e-4)) dir = _V(1.74532924314e-4, 0.999999984769, 0.0);
VECTOR3 orbiter_cam_rot = crossp(crossp(dir, _V(0, 1, 0)), dir);
orbiter_cam_rot /= length(orbiter_cam_rot);
if (orbiter_cam_rot.y < 0) orbiter_cam_rot = -orbiter_cam_rot;
double angle = SignedAngle(orbiter_cam_rot, camRMSElbowLoc[2] - camRMSElbowLoc[0], dir);
SetCameraDefaultDirection(dir, angle);
SetCameraOffset(camRMSElbowLoc[0]);
oapiCameraSetCockpitDir(0.0, 0.0);
sprintf_s(oapiDebugString(), 255, "Rot Vec: %f %f %f cam dir: %f %f %f dir: %f %f %f Angle: %f %f length: %f", orbiter_cam_rot.x, orbiter_cam_rot.y, orbiter_cam_rot.z, camRMSElbowLoc[1].x - camRMSElbowLoc[0].x, camRMSElbowLoc[2].y - camRMSElbowLoc[0].y, camRMSElbowLoc[2].z - camRMSElbowLoc[0].z, dir.x, dir.y, dir.z, angle, angle*DEG, length(dir));
}
Thanks. But the camera view and attachment are different, rightJust an FYI. You don't have the EE lined up correctly for capture.
Not really since the camera is hard mounted to the end effector. The end effector camera is what the crew uses to align the EE with the grapple fixture on the target. The grapple fixture has a black&white alignment aid mounted right above it which is used to ensure proper alignment for capture.Thanks. But the camera view and attachment are different, right
Yes, you need to have the EE rotated so that the pin of the alignment aid looks like a 2D white dot inside the center circle. If you can see the black shaft, you're not aligned. This screenshot shows a proper alignment: https://www.dropbox.com/s/wvrbqj9we10z3gc/EE_OBSS_aligned.jpg?dl=0Oh. so more like this:
I might add cross hairs.
Not sure about the clipping though
So on the OBSS maybe when I attach I need to be rotated? To grab an item I have distance only should I have must have the correct angle also?
if (cameraView == ACTIVE_LEE) {
// draw crosshairs
// grapple target pin has diameter of 0.375 inches and is 4 inches long
const double GRAPPLE_PIN_RADIUS = (0.5*0.375 / 12.0) / MPS2FPS;
const double DIST_TO_PIN = (LEE_POS.z - LEE2_CAM_POS.z) - (4.0 / 12.0) / MPS2FPS; // distance from camera to grapple target pin
int pinSize = round(hps->Scale*DEG*atan(GRAPPLE_PIN_RADIUS / DIST_TO_PIN)); // angular size of grapple target pin when EE is aligned with grapple fixture
skp->Line(hps->CX - pinSize, hps->CY, hps->CX - pinSize - hps->Markersize, hps->CY);
skp->Line(hps->CX + pinSize, hps->CY, hps->CX + pinSize + hps->Markersize, hps->CY);
skp->Line(hps->CX, hps->CY - pinSize, hps->CX, hps->CY - pinSize - hps->Markersize);
skp->Line(hps->CX, hps->CY + pinSize, hps->CX, hps->CY + pinSize + hps->Markersize);
SaveAnimation(pRMS_ep_anim);
DiscInPort JointSelect[6], DirectDrivePlus, DirectDriveMinus;
DiscInPort RHCInput[3], THCInput[3];
DiscInPort RMSMode[12];
DiscInPort RMSCoarseRateCMD;
Error 59 error LNK2001: unresolved external symbol "union VECTOR3 __cdecl RotateVector(union VECTOR3 const &,double,union VECTOR3 const &)" (?RotateVector@@YA?ATVECTOR3@@ABT1@N0@Z) C:\Orbiter2016\Orbitersdk\samples\SPACESHUTTLE2016RMSSS\Atlantis.obj SPACESHUTTLE2016RMS2
void Atlantis::CalculateVectors()
{
// work forward through joints and update vectors
arm_ee_dir = _V(1, 0, 0);
arm_ee_rot = RotateVectorX(_V(0, 0, 1), -joint_angle[SHOULDER_ROLL]); // should probably be -joint_angle[SR]
//arm_ee_rot = _V(0, 0, 1);
arm_ee_pos = _V(SR_SY_DIST, 0, 0) + arm_ee_rot*SY_SP_VERT_DIST;
// handle SY joint; get new direction, than translate EE pos to compensate for horizontal offset between booms
arm_ee_dir = RotateVector(arm_ee_rot, RAD*joint_angle[SHOULDER_YAW], arm_ee_dir);
VECTOR3 rot_cross_dir = crossp(arm_ee_rot, arm_ee_dir); // pitch joints rotate around this vector
arm_ee_pos -= rot_cross_dir*LEE_OFFSET;
// handle 3 pitch joints
arm_ee_dir = RotateVector(rot_cross_dir, RAD*joint_angle[SHOULDER_PITCH], arm_ee_dir);
arm_ee_pos += arm_ee_dir*SP_EP_DIST;
arm_ee_dir = RotateVector(rot_cross_dir, RAD*joint_angle[ELBOW_PITCH], arm_ee_dir);
arm_ee_pos += arm_ee_dir*EP_WP_DIST;
arm_ee_dir = RotateVector(rot_cross_dir, RAD*joint_angle[WRIST_PITCH], arm_ee_dir);
arm_ee_rot = RotateVector(rot_cross_dir, RAD*(joint_angle[SHOULDER_PITCH] + joint_angle[ELBOW_PITCH] + joint_angle[WRIST_PITCH]), arm_ee_rot);
arm_ee_pos -= arm_ee_rot*WP_WY_DIST;
// wrist yaw
arm_ee_dir = RotateVector(arm_ee_rot, RAD*joint_angle[WRIST_YAW], arm_ee_dir);
arm_ee_pos += arm_ee_dir*WY_EE_DIST;
// wrist roll
arm_ee_rot = RotateVector(arm_ee_dir, RAD*joint_angle[WRIST_ROLL], arm_ee_rot);
VECTOR3 old_arm_ee_pos = arm_tip[0] - SR_JOINT;
old_arm_ee_pos = _V(old_arm_ee_pos.z, old_arm_ee_pos.x, -old_arm_ee_pos.y);
}
#define STRICT 1
#define ORBITER_MODULE
#include "Atlantis.h"
#include "PlBayOp.h"
//#include "AscentAP.h"
#include "DlgCtrl.h"
#include "meshres.h"
#include "meshresods.h"
#include "RMS2meshres.h"
#include "meshres_vc_hi.h"
#include "resource.h"
#include <stdio.h>
#include <fstream>
#include <UltraMath.h>
Error 63 error LNK2001: unresolved external symbol "public: void __thiscall Atlantis::RotateVector(union VECTOR3 const &,union VECTOR3 const &,union VECTOR3 &)" (?RotateVector@Atlantis@@QAEXABTVECTOR3@@0AAT2@@Z) C:\Orbiter2016\Orbitersdk\samples\SPACESHUTTLE2016RMSSS\Atlantis.obj SPACESHUTTLE2016RMS2
Error 59 error LNK2001: unresolved external symbol "public: void __thiscall Atlantis::GetRotMatrixZ(double,union MATRIX3 &)" (?GetRotMatrixZ@Atlantis@@QAEXNAATMATRIX3@@@Z) C:\Orbiter2016\Orbitersdk\samples\SPACESHUTTLE2016RMSSS\Atlantis.obj SPACESHUTTLE2016RMS2
Error 60 error LNK2001: unresolved external symbol "public: void __thiscall Atlantis::GetRotMatrixY(double,union MATRIX3 &)" (?GetRotMatrixY@Atlantis@@QAEXNAATMATRIX3@@@Z) C:\Orbiter2016\Orbitersdk\samples\SPACESHUTTLE2016RMSSS\Atlantis.obj SPACESHUTTLE2016RMS2
Error 61 error LNK2001: unresolved external symbol "public: void __thiscall Atlantis::GetRotMatrixX(double,union MATRIX3 &)" (?GetRotMatrixX@Atlantis@@QAEXNAATMATRIX3@@@Z) C:\Orbiter2016\Orbitersdk\samples\SPACESHUTTLE2016RMSSS\Atlantis.obj SPACESHUTTLE2016RMS2
Error 62 error LNK2001: unresolved external symbol "public: union VECTOR3 __thiscall Atlantis::RotateVector(union VECTOR3 const &,double,union VECTOR3 const &)" (?RotateVector@Atlantis@@QAE?ATVECTOR3@@ABT2@N0@Z) C:\Orbiter2016\Orbitersdk\samples\SPACESHUTTLE2016RMSSS\Atlantis.obj SPACESHUTTLE2016RMS2
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
</ItemGroup>
<ItemGroup>
<ClCompile Include="Atlantis.cpp" />
<ClCompile Include="Common.cpp" />
<ClCompile Include="PlBayOp.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\include\UltraMath.h" />
<ClInclude Include="..\Common\Dialog\Graph.h" />
<ClInclude Include="..\Common\Dialog\TabDlg.h" />
<ClInclude Include="Atlantis.h" />
<ClInclude Include="Graph.h" />
<ClInclude Include="meshres.h" />
<ClInclude Include="meshresods.h" />
<ClInclude Include="meshres_vc_hi.h" />
<ClInclude Include="PlBayOp.h" />
<ClInclude Include="resource.h" />
<ClInclude Include="RMS2meshres.h" />
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="Atlantis.rc" />
</ItemGroup>
<ItemGroup>
<Library Include="DlgCtrl.lib" />
</ItemGroup>
<ItemGroup>
<Image Include="..\Bitmaps\tkbk_label.bmp" />
<Image Include="down.ico" />
<Image Include="ico00001.ico" />
<Image Include="ico00002.ico" />
<Image Include="ico00003.ico" />
<Image Include="ico00004.ico" />
<Image Include="icon1.ico" />
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectName>SPACESHUTTLE2016RMS2</ProjectName>
<ProjectGuid>{1A57C099-C6AF-43A7-8899-83608A6FF011}</ProjectGuid>
<RootNamespace>SPACESHUTTLERMS</RootNamespace>
<Keyword>Win32Proj</Keyword>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<PlatformToolset>v120</PlatformToolset>
<CharacterSet>MultiByte</CharacterSet>
<WholeProgramOptimization>true</WholeProgramOptimization>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<PlatformToolset>v120</PlatformToolset>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>12.0.21005.1</_ProjectFileVersion>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<OutDir>..\..\..\Modules\</OutDir>
<IntDir>$(Configuration)\</IntDir>
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<OutDir>..\..\..\Modules\SPACESHUTTLE2016RMS2.dll</OutDir>
<IntDir>..\</IntDir>
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>C:\ORBITER2016\Orbitersdk\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;E3VIP_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>true</MinimalRebuild>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
<PrecompiledHeader />
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>EditAndContinue</DebugInformationFormat>
</ClCompile>
<Link>
<AdditionalDependencies>orbiter.lib;orbitersdk.lib;libUltra.lib;gdi32.lib;user32.lib</AdditionalDependencies>
<OutputFile>..\..\Modules\Spaceshuttlerms2.dll</OutputFile>
<AdditionalLibraryDirectories>..\lib;..\libUltra\lib</AdditionalLibraryDirectories>
<IgnoreSpecificDefaultLibraries>libcmt;libcmtd</IgnoreSpecificDefaultLibraries>
<GenerateDebugInformation>true</GenerateDebugInformation>
<RandomizedBaseAddress>false</RandomizedBaseAddress>
<DataExecutionPrevention>
</DataExecutionPrevention>
<IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<Optimization>MaxSpeed</Optimization>
<IntrinsicFunctions>true</IntrinsicFunctions>
<AdditionalIncludeDirectories>c:\orbiter2016\Orbitersdk\include;C:\Orbiter2016\Orbitersdk\include\libUltra;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;E3VIP_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<FunctionLevelLinking>true</FunctionLevelLinking>
<PrecompiledHeader />
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
</ClCompile>
<Link>
<AdditionalDependencies>orbiter.lib;orbitersdk.lib;libUltra.lib;gdi32.lib;user32.lib</AdditionalDependencies>
<OutputFile>..\..\Modules\SPACESHUTTLE2016RMS2.dll</OutputFile>
<AdditionalLibraryDirectories>C:\Orbiter2016\Orbitersdk\lib;..\lib;..\libUltra\lib</AdditionalLibraryDirectories>
<IgnoreSpecificDefaultLibraries>libcmt;libcmtd</IgnoreSpecificDefaultLibraries>
<RandomizedBaseAddress>false</RandomizedBaseAddress>
<DataExecutionPrevention>
</DataExecutionPrevention>
</Link>
</ItemDefinitionGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>
1>------ Build started: Project: libUltra, Configuration: Release Win32 ------
1> ValveManager.cpp
1> libUltra_2013.vcxproj -> C:\Orbiter2016\Orbitersdk\samples\libUltra\./lib\libUltra.lib
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
Error 61 error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MD_DynamicRelease' doesn't match value 'MT_StaticRelease' in Atlantis.obj C:\Orbiter2016\Orbitersdk\samples\SPACESHUTTLE2016RMSSS\libUltra.lib(UltraMath.obj) SPACESHUTTLE2016RMS2
Error 66 error LNK2005: "double __cdecl linterp(double,double,double,double,double)" (?linterp@@YANNNNNN@Z) already defined in libUltra.lib(UltraMath.obj) C:\Orbiter2016\Orbitersdk\samples\SPACESHUTTLE2016RMSSS\* CIL library *(* CIL module *) SPACESHUTTLE2016RMS2
Error 67 error LNK1169: one or more multiply defined symbols found C:\Orbiter2016\Orbitersdk\Modules\SPACESHUTTLE2016RMS2.dll SPACESHUTTLE2016RMS2
if (!Eq(THCInput, _V(0.0, 0.0, 0.0), 0.0001) || !Eq(RHCInput, _V(0.0, 0.0, 0.0))) {
VECTOR3 EETrans, newDir, newRot;
if (RefFrame == BASE_FRAME) {
EETrans = THCInput;
RotateVector(arm_ee_dir, _V(RHCInput.data[ROLL], RHCInput.data[PITCH], RHCInput.data[YAW]), newDir);
RotateVector(arm_ee_rot, _V(RHCInput.data[ROLL], RHCInput.data[PITCH], RHCInput.data[YAW]), newRot);
}
else if (RefFrame == EE_FRAME) {
//EETrans = _V(THCInput.x*arm_ee_dir.x, THCInput.y*arm_ee_dir.y, THCInput.z*arm_ee_dir.z);
EETrans = arm_ee_dir*THCInput.x + arm_ee_rot*THCInput.z + crossp(arm_ee_rot, arm_ee_dir)*THCInput.y;
}
}
/*
VECTOR3 y_axis = crossp(arm_ee_rot, arm_ee_dir);
MATRIX3 RotMatrix = _M(arm_ee_dir.x, y_axis.x, arm_ee_rot.x,
arm_ee_dir.y, y_axis.y, arm_ee_rot.y,
arm_ee_dir.z, y_axis.z, arm_ee_rot.z);
//MATRIX3 RotMatrix = RotationMatrix(arm_ee_dir, , arm_ee_rot);
MATRIX3 RotMatrixRoll, RotMatrixPitch, RotMatrixYaw;
GetRotMatrixX(RHCInput.data[ROLL], RotMatrixRoll);
GetRotMatrixY(RHCInput.data[PITCH], RotMatrixPitch);
GetRotMatrixZ(RHCInput.data[YAW], RotMatrixYaw);
RotMatrix = mul(RotMatrix, RotMatrixPitch);
RotMatrix = mul(RotMatrix, RotMatrixYaw);
RotMatrix = mul(RotMatrix, RotMatrixRoll);
newDir = _V(RotMatrix.m11, RotMatrix.m21, RotMatrix.m31);
newRot = _V(RotMatrix.m13, RotMatrix.m23, RotMatrix.m33);
}
MoveEE(arm_ee_pos + EETrans, newDir, newRot, simdt);
}
//if(!Eq(THCInput, _V(0.0, 0.0, 0.0), 0.01)) MoveEE(arm_ee_pos+RotateVectorZ(EETrans, joint_angle[SHOULDER_ROLL]), arm_ee_dir, arm_ee_rot);
Error 60 error LNK2001: unresolved external symbol "void __cdecl RotateVector(union VECTOR3 const &,union VECTOR3 const &,union VECTOR3 &)" (?RotateVector@@YAXABTVECTOR3@@0AAT1@@Z) C:\Orbiter2016\Orbitersdk\samples\SPACESHUTTLE2016RMSSS\Atlantis.obj 1 1 SPACESHUTTLE2016RMS2
RotateVector(arm_ee_dir, _V(RHCInput.data[ROLL], RHCInput.data[PITCH], RHCInput.data[YAW]), newDir);
RotateVector(arm_ee_rot, _V(RHCInput.data[ROLL], RHCInput.data[PITCH], RHCInput.data[YAW]), newRot);
VECTOR3 RotateVector(const VECTOR3 &Axis, double radAngle, const VECTOR3 &v);
/**
* Rotates vector around specified Euler angles in XYZ order
*/
void RotateVector(const VECTOR3 &Initial, const VECTOR3 &Angles, VECTOR3 &Result);
/**
* Returns Euler angles (in radians); Pitch=X axis, Yaw=Y axis, Roll=Z axis
*/
RotateVector(arm_ee_dir, _V(RHCInput.data[ROLL], RHCInput.data[PITCH], RHCInput.data[YAW]), newDir);
Error 60 error LNK2001: unresolved external symbol "public: void __thiscall Atlantis::RotateVector(union VECTOR3 const &,union VECTOR3 const &,union VECTOR3 &)" (?RotateVector@Atlantis@@QAEXABTVECTOR3@@0AAT2@@Z) C:\Orbiter2016\Orbitersdk\samples\SPACESHUTTLE2016RMSSS\Atlantis.obj 1 1 SPACESHUTTLE2016RMS2
VECTOR3 RotateVector(const VECTOR3 &Axis, double radAngle, const VECTOR3 &v);
/**
* Rotates vector around specified Euler angles in XYZ order
*/
void RotateVector(const VECTOR3 &Initial, const VECTOR3 &Angles, VECTOR3 &Result);