Skip to content

Commit c335ea4

Browse files
author
tpat
committed
Replaced movement with rotation
1 parent 91ec533 commit c335ea4

File tree

5 files changed

+29
-3
lines changed

5 files changed

+29
-3
lines changed

src/Externals/spire/es-general/comp/Transform.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ struct Transform
2121
transform[3].z = pos.z;
2222
}
2323

24-
glm::vec3 getPosition()
24+
glm::vec3 getPosition() const
2525
{
2626
return glm::vec3(transform[3].x, transform[3].y, transform[3].z);
2727
}

src/Graphics/Datatypes/GeometryImpl.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,7 @@ namespace SCIRun {
272272

273273
void setColorMap(const std::string& name) { mColorMap = name; }
274274
boost::optional<std::string> colorMap() const { return mColorMap; }
275+
glm::vec3 origin;
275276
private:
276277
VBOList mVBOs; ///< Array of vertex buffer objects.
277278
IBOList mIBOs; ///< Array of index buffer objects.

src/Interface/Modules/Render/ES/SRInterface.cc

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
#include <gl-platform/GLPlatform.hpp>
3232
#include <Interface/Modules/Render/UndefiningX11Cruft.h>
3333
#include <QtOpenGL/QGLWidget>
34+
#include <glm/gtx/transform.hpp>
3435

3536
#include <Interface/Modules/Render/ES/SRInterface.h>
3637
#include <Interface/Modules/Render/ES/SRCamera.h>
@@ -370,6 +371,7 @@ namespace SCIRun {
370371

371372
//a map from selection id to name
372373
std::map<uint32_t, std::string> selMap;
374+
std::map<uint32_t, glm::vec3> originMap;
373375
std::vector<uint64_t> entityList;
374376

375377
//modify and add each object to draw
@@ -378,6 +380,7 @@ namespace SCIRun {
378380
std::string objectName = obj->uniqueID();
379381
uint32_t selid = getSelectIDForName(objectName);
380382
selMap.insert(std::make_pair(selid, objectName));
383+
originMap.insert(std::make_pair(selid, obj->origin));
381384
glm::vec4 selCol = getVectorForID(selid);
382385

383386
// Add vertex buffer objects.
@@ -574,7 +577,10 @@ namespace SCIRun {
574577
{
575578
auto it = selMap.find(value);
576579
if (it != selMap.end())
580+
{
577581
mSelected = it->second;
582+
mSelectedOrigin = originMap.find(value)->second;
583+
}
578584
}
579585
//release and restore fbo
580586
fboMan->unbindFBO();
@@ -647,13 +653,28 @@ namespace SCIRun {
647653
float zNear = mCamera->getZNear();
648654
float vDepth = 1.0/(ssDepth * (1.0/zFar - 1.0/zNear) + 1.0/zNear);
649655

650-
glm::vec4 transVec = glm::vec4(glm::vec3(spos - mSelectedPos) * glm::vec3(vDepth , vDepth, 1.0), 0.0f);
656+
glm::vec3 transVec = glm::vec3(spos - mSelectedPos) * glm::vec3(vDepth , vDepth, 1.0);
651657
mWidgetTransform = gen::Transform();
652-
mWidgetTransform.setPosition((glm::inverse(cam->data.projIV) * transVec).xyz());
658+
glm::vec3 transProjVec = glm::vec3(glm::inverse(cam->data.projIV) * glm::vec4(transVec, 0.0f)).xyz();
653659

654660
spire::CerealHeap<gen::Transform>* contTrans = mCore.getOrCreateComponentContainer<gen::Transform>();
655661
std::pair<const gen::Transform*, size_t> component = contTrans->getComponent(mSelectedID);
656662

663+
// Translate origin to center
664+
glm::vec3 newPos = -mSelectedOrigin;
665+
mWidgetTransform.setPosition(newPos);
666+
667+
// Rotate
668+
glm::vec3 viewVec = (cam->data.projIV * glm::vec4(0.0, 0.0, 1.0, 0.0)).xyz();
669+
glm::vec3 rotAxis = glm::cross(glm::normalize(viewVec), transVec);
670+
glm::mat4 rot = glm::rotate(glm::length(transVec), rotAxis);
671+
mWidgetTransform.transform = rot * mWidgetTransform.transform;
672+
673+
// Translate back to world space
674+
mWidgetTransform.transform[3][0] += mSelectedOrigin[0];
675+
mWidgetTransform.transform[3][1] += mSelectedOrigin[1];
676+
mWidgetTransform.transform[3][2] += mSelectedOrigin[2];
677+
657678
if (component.first != nullptr)
658679
contTrans->modifyIndex(mWidgetTransform, component.second, 0);
659680
}

src/Interface/Modules/Render/ES/SRInterface.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -316,6 +316,7 @@ namespace SCIRun {
316316

317317
std::string mSelected {}; // Current selection
318318
glm::vec4 mSelectedPos {};
319+
glm::vec3 mSelectedOrigin {};
319320
gen::Transform mWidgetTransform {};
320321

321322
size_t mScreenWidth {640}; // Screen width in pixels.

src/Modules/Legacy/Visualization/ShowAndEditDipoles.cc

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -656,6 +656,9 @@ void ShowAndEditDipoles::createDipoleWidget(BBox& bbox, Point& pos, Vector dir,
656656
bbox,
657657
resolution_)));
658658
}
659+
glm::vec3 origin = glm::vec3(bmin.x(), bmin.y(), bmin.z());
660+
for(int i = 0; i < 1 + 3*show_as_vector; i++)
661+
(*pointWidgets_[widget_num])[i]->origin = origin;
659662
}
660663

661664
GeometryHandle ShowAndEditDipoles::addLines()

0 commit comments

Comments
 (0)