History

Switching nudge to cut/paste implementation. Preliminary.

LionTurtle committed 13 years ago

Commit d9657891 parent 59943dc5 files · +58 −39Browse files

Unified · Split

5 files
  1. interface/src/Application.cpp +44 −14
  2. interface/src/Menu.cpp +2 −7
  3. interface/src/Util.cpp +11 −13
  4. interface/src/Util.h +1 −1
  5. libraries/voxels/src/VoxelTree.h +0 −4
interface/src/Application.cpp+44−14
@@ -1287,22 +1287,52 @@ void Application::pasteVoxels() { · 1286 unmodified lines
12871287
12881288 void Application::nudgeVoxels() {
12891289 if (Menu::getInstance()->isOptionChecked(MenuOption::VoxelNudgeMode)) {
1290+ cutVoxels();
1291+ unsigned char* calculatedOctCode = NULL;
12901292 VoxelNode* selectedNode = _voxels.getVoxelAt(_mouseVoxel.x, _mouseVoxel.y, _mouseVoxel.z, _mouseVoxel.s);
12911293
1294+ // Recurse the clipboard tree, where everything is root relative, and send all the colored voxels to
1295+ // the server as an set voxel message, this will also rebase the voxels to the new location
1296+ SendVoxelsOperationArgs args;
1297+
1298+ // we only need the selected voxel to get the newBaseOctCode, which we can actually calculate from the
1299+ // voxel size/position details. If we don't have an actual selectedNode then use the mouseVoxel to create a
1300+ // target octalCode for where the user is pointing.
12921301 if (selectedNode) {
1293− // glPushMatrix();
1294− // glScalef(TREE_SCALE, TREE_SCALE, TREE_SCALE);
1295− // renderNudgeGrid(_mouseVoxel.x, _mouseVoxel.y, _mouseVoxel.z, _mouseVoxel.s);
1296− // glPopMatrix();
1297− qDebug("UnNudged xyz: %f, %f, %f\n", _mouseVoxel.x, _mouseVoxel.y, _mouseVoxel.z);
1302+ args.newBaseOctCode = selectedNode->getOctalCode();
1303+ } else {
1304+ args.newBaseOctCode = calculatedOctCode = pointToVoxel(_mouseVoxel.x, _mouseVoxel.y, _mouseVoxel.z, _mouseVoxel.s);
1305+ }
1306+
1307+ _sharedVoxelSystem.getTree()->recurseTreeWithOperation(sendVoxelsOperation, &args);
1308+ glm::vec3 nudgeVec(0.25 * _mouseVoxel.s, 0.25 * _mouseVoxel.s, 0.25 * _mouseVoxel.s);
1309+ _voxels.getVoxelTree()->nudgeSubTree(selectedNode, nudgeVec, _voxelEditSender);
12981310
1299− // nudge the node
1300− // glm::vec3 nudgeVec(_mouseVoxel.s, _mouseVoxel.s, _mouseVoxel.s);
1301− // glm::vec3 nudgeVec(0.5 * _mouseVoxel.s, 0.5 * _mouseVoxel.s, 0.5 * _mouseVoxel.s);
1302− glm::vec3 nudgeVec(0.25 * _mouseVoxel.s, 0.25 * _mouseVoxel.s, 0.25 * _mouseVoxel.s);
1303− _voxels.getVoxelTree()->nudgeSubTree(selectedNode, nudgeVec, _voxelEditSender);
1311+ if (_sharedVoxelSystem.getTree() != &_clipboard) {
1312+ _sharedVoxelSystem.killLocalVoxels();
1313+ _sharedVoxelSystem.changeTree(&_clipboard);
1314+ }
1315+
1316+ _voxelEditSender.flushQueue();
1317+
1318+ if (calculatedOctCode) {
1319+ delete[] calculatedOctCode;
13041320 }
13051321 }
1322+
1323+
1324+
1325+ // VoxelNode* selectedNode = _voxels.getVoxelAt(_mouseVoxel.x, _mouseVoxel.y, _mouseVoxel.z, _mouseVoxel.s);
1326+
1327+ // if (selectedNode) {
1328+ // qDebug("UnNudged xyz: %f, %f, %f\n", _mouseVoxel.x, _mouseVoxel.y, _mouseVoxel.z);
1329+
1330+ // // nudge the node
1331+ // // glm::vec3 nudgeVec(_mouseVoxel.s, _mouseVoxel.s, _mouseVoxel.s);
1332+ // // glm::vec3 nudgeVec(0.5 * _mouseVoxel.s, 0.5 * _mouseVoxel.s, 0.5 * _mouseVoxel.s);
1333+ // glm::vec3 nudgeVec(0.25 * _mouseVoxel.s, 0.25 * _mouseVoxel.s, 0.25 * _mouseVoxel.s);
1334+ // _voxels.getVoxelTree()->nudgeSubTree(selectedNode, nudgeVec, _voxelEditSender);
1335+ // }
13061336 }
13071337
13081338 void Application::setListenModeNormal() {
@@ -2278,10 +2308,10 @@ void Application::displaySide(Camera& whichCamera) { · 969 unmodified lines
22782308 glPushMatrix();
22792309 glScalef(TREE_SCALE, TREE_SCALE, TREE_SCALE);
22802310 if (Menu::getInstance()->isOptionChecked(MenuOption::VoxelNudgeMode)) {
2281− VoxelNode* selectedNode = _voxels.getVoxelAt(_nudgeVoxel.x, _nudgeVoxel.y, _nudgeVoxel.z, _nudgeVoxel.s);
2282− if (selectedNode) {
2283− renderNudgeGrid(_nudgeVoxel.x, _nudgeVoxel.y, _nudgeVoxel.z, _nudgeVoxel.s);
2284− }
2311+ // VoxelNode* selectedNode = _voxels.getVoxelAt(_nudgeVoxel.x, _nudgeVoxel.y, _nudgeVoxel.z, _nudgeVoxel.s);
2312+ // if (selectedNode) {
2313+ renderNudgeGrid(_nudgeVoxel.x, _nudgeVoxel.y, _nudgeVoxel.z, _nudgeVoxel.s);
2314+ // }
22852315 } else {
22862316 renderMouseVoxelGrid(_mouseVoxel.x, _mouseVoxel.y, _mouseVoxel.z, _mouseVoxel.s);
22872317 }
interface/src/Menu.cpp+2−7
@@ -108,6 +108,7 @@ Menu::Menu() : · 107 unmodified lines
108108 addActionToQMenuAndActionHash(editMenu, MenuOption::CutVoxels, Qt::CTRL | Qt::Key_X, appInstance, SLOT(cutVoxels()));
109109 addActionToQMenuAndActionHash(editMenu, MenuOption::CopyVoxels, Qt::CTRL | Qt::Key_C, appInstance, SLOT(copyVoxels()));
110110 addActionToQMenuAndActionHash(editMenu, MenuOption::PasteVoxels, Qt::CTRL | Qt::Key_V, appInstance, SLOT(pasteVoxels()));
111+ addActionToQMenuAndActionHash(editMenu, MenuOption::NudgeVoxels, Qt::CTRL | Qt::Key_N, appInstance, SLOT(nudgeVoxels()));
111112
112113 addDisabledActionAndSeparator(editMenu, "Physics");
113114 addCheckableActionToQMenuAndActionHash(editMenu, MenuOption::Gravity, Qt::SHIFT | Qt::Key_G, true);
@@ -132,7 +133,7 @@ Menu::Menu() : · 18 unmodified lines
132133 QAction* colorVoxelMode = addCheckableActionToQMenuAndActionHash(toolsMenu, MenuOption::VoxelColorMode, Qt::Key_B);
133134 _voxelModeActionsGroup->addAction(colorVoxelMode);
134135
135− QAction* nudgeVoxelMode = addCheckableActionToQMenuAndActionHash(voxelMenu, MenuOption::VoxelNudgeMode, Qt::Key_N);
136+ QAction* nudgeVoxelMode = addCheckableActionToQMenuAndActionHash(toolsMenu, MenuOption::VoxelNudgeMode, Qt::Key_N);
136137 _voxelModeActionsGroup->addAction(nudgeVoxelMode);
137138
138139 QAction* selectVoxelMode = addCheckableActionToQMenuAndActionHash(toolsMenu, MenuOption::VoxelSelectMode, Qt::Key_O);
@@ -180,12 +181,6 @@ Menu::Menu() : · 41 unmodified lines
180181 appInstance,
181182 SLOT(setFullscreen(bool)));
182183 addCheckableActionToQMenuAndActionHash(viewMenu, MenuOption::FirstPerson, Qt::Key_P, true);
183− addActionToQMenuAndActionHash(voxelMenu, MenuOption::ExportVoxels, Qt::CTRL | Qt::Key_E, appInstance, SLOT(exportVoxels()));
184− addActionToQMenuAndActionHash(voxelMenu, MenuOption::ImportVoxels, Qt::CTRL | Qt::Key_I, appInstance, SLOT(importVoxels()));
185− addActionToQMenuAndActionHash(voxelMenu, MenuOption::CutVoxels, Qt::CTRL | Qt::Key_X, appInstance, SLOT(cutVoxels()));
186− addActionToQMenuAndActionHash(voxelMenu, MenuOption::CopyVoxels, Qt::CTRL | Qt::Key_C, appInstance, SLOT(copyVoxels()));
187− addActionToQMenuAndActionHash(voxelMenu, MenuOption::PasteVoxels, Qt::CTRL | Qt::Key_V, appInstance, SLOT(pasteVoxels()));
188− addActionToQMenuAndActionHash(voxelMenu, MenuOption::NudgeVoxels, Qt::CTRL | Qt::Key_N, appInstance, SLOT(nudgeVoxels()));
189184
190185 addActionToQMenuAndActionHash(viewMenu,
191186 MenuOption::IncreaseAvatarSize,
interface/src/Util.cpp+11−13
@@ -414,28 +414,26 @@ void renderMouseVoxelGrid(const float& mouseVoxelX, const float& mouseVoxelY, co · 413 unmodified lines
414414 glEnd();
415415 }
416416
417−void renderNudgeGrid(const float& mouseVoxelX, const float& mouseVoxelY, const float& mouseVoxelZ, const float& mouseVoxelS) {
418− glm::vec3 origin = glm::vec3(mouseVoxelX, mouseVoxelY, mouseVoxelZ);
417+void renderNudgeGrid(const float& voxelX, const float& voxelY, const float& voxelZ, const float& voxelS) {
418+ glm::vec3 origin = glm::vec3(voxelX, voxelY, voxelZ);
419419
420420 glLineWidth(1.0);
421421
422422 const int GRID_DIMENSIONS = 4;
423423 glBegin(GL_LINES);
424424
425− for (int i = 0; i <= GRID_DIMENSIONS; i++) {
426− for (int j = -GRID_DIMENSIONS / 2; j <= GRID_DIMENSIONS / 2; j++) {
427− glm::vec3 xColor(0.0, 0.6, 0.0);
428− glColor3fv(&xColor.x);
425+ for (int xz = - (GRID_DIMENSIONS / 2); xz <= GRID_DIMENSIONS / 2 + 1; xz++) {
426+ glm::vec3 xColor(0.0, 0.6, 0.0);
427+ glColor3fv(&xColor.x);
429428
430− glVertex3f(origin.x + GRID_DIMENSIONS * mouseVoxelS, i * mouseVoxelS, origin.z + j * mouseVoxelS);
431− glVertex3f(origin.x - GRID_DIMENSIONS * mouseVoxelS, i * mouseVoxelS, origin.z + j * mouseVoxelS);
429+ glVertex3f(origin.x + GRID_DIMENSIONS * voxelS, 0, origin.z + xz * voxelS);
430+ glVertex3f(origin.x - (GRID_DIMENSIONS - 1) * voxelS, 0, origin.z + xz * voxelS);
432431
433− glm::vec3 zColor(0.0, 0.0, 0.6);
434− glColor3fv(&zColor.x);
432+ glm::vec3 zColor(0.0, 0.0, 0.6);
433+ glColor3fv(&zColor.x);
435434
436− glVertex3f(origin.x + j * mouseVoxelS, i * mouseVoxelS, origin.z + GRID_DIMENSIONS * mouseVoxelS);
437− glVertex3f(origin.x + j * mouseVoxelS, i * mouseVoxelS, origin.z - GRID_DIMENSIONS * mouseVoxelS);
438− }
435+ glVertex3f(origin.x + xz * voxelS, 0, origin.z + GRID_DIMENSIONS * voxelS);
436+ glVertex3f(origin.x + xz * voxelS, 0, origin.z - (GRID_DIMENSIONS - 1) * voxelS);
439437 }
440438 glEnd();
441439 }
interface/src/Util.h+1−1
@@ -61,7 +61,7 @@ void renderGroundPlaneGrid(float size, float impact); · 60 unmodified lines
6161
6262 void renderMouseVoxelGrid(const float& mouseVoxelX, const float& mouseVoxelY, const float& mouseVoxelZ, const float& mouseVoxelS);
6363
64−void renderNudgeGrid(const float& mouseVoxelX, const float& mouseVoxelY, const float& mouseVoxelZ, const float& mouseVoxelS);
64+void renderNudgeGrid(const float& voxelX, const float& voxelY, const float& voxelZ, const float& voxelS);
6565
6666 void renderCollisionOverlay(int width, int height, float magnitude);
6767
libraries/voxels/src/VoxelTree.h+0−4
@@ -190,10 +190,6 @@ public: · 189 unmodified lines
190190 void recurseNodeWithOperationDistanceSorted(VoxelNode* node, RecurseVoxelTreeOperation operation,
191191 const glm::vec3& point, void* extraData);
192192
193− void recurseTreeWithOperationDistanceSortedTimed(PointerStack* stackOfNodes, long allowedTime,
194− RecurseVoxelTreeOperation operation,
195− const glm::vec3& point, void* extraData);
196−
197193 void nudgeSubTree(VoxelNode* nodeToNudge, const glm::vec3& nudgeAmount, VoxelEditPacketSender& voxelEditSender);
198194
199195 signals: