// 顺时针旋转90度, 根据边界范围旋转完成后自行调整图形位置 void Tetris::rotate(int min_x, int max_x, int min_y, int max_y) { if (key < 0) { return; } int maxX = min_x, minX = max_x, maxY = min_y, minY = max_y; // TODO 越界处理 for (int i = 0; i < 4; i++) { BYTE x = positions[i].x, y = positions[i].y; positions[i].x = y - positions[key].y + positions[key].x; positions[i].y = positions[key].x + positions[key].y - x; } getMaxMin(minX, maxX, minY, maxY); // 越界纠正 if (maxX > max_x) { changeX(max_x - maxX); } if (minX < min_x) { changeX(min_x - minX); } if (maxY > max_y) { changeY(max_y - maxY); } if (minY < min_y) { changeY(min_y - minY); } }
int Viewfinder::qt_metacall(QMetaObject::Call _c, int _id, void **_a) { _id = QWidget::qt_metacall(_c, _id, _a); if (_id < 0) return _id; if (_c == QMetaObject::InvokeMetaMethod) { switch (_id) { case 0: processFrames((*reinterpret_cast< int(*)>(_a[1]))); break; case 1: processFrame(); break; case 2: toggleCube(); break; case 3: toggleGourd(); break; case 4: paintCube(); break; case 5: paintGourd(); break; case 6: changeX(); break; case 7: changeY(); break; case 8: changeZ(); break; case 9: rotateX(); break; case 10: rotateY(); break; case 11: rotateZ(); break; case 12: plus(); break; case 13: minus(); break; case 14: openDirectory(); break; default: ; } _id -= 15; } return _id; }
void CPPositionPlugin::configDialog() { bool reactivate = false; enum MessageFlags newMessageFlags; positionConfigDialog *dialog = new positionConfigDialog(topic, ui->label->isVisible(), ui->label->text(), messageFlags); if(!dialog->exec()) return; if(topic != dialog->topicedit->text()) { topic = dialog->topicedit->text(); settings->setValue(uuid.toString() + "/Topic", topic); reactivate = true; } newMessageFlags = (enum MessageFlags)(dialog->typebox->itemData(dialog->typebox->currentIndex()).toInt() | (dialog->stampedcheck->isChecked() ? MessageStamped : MessageNone ) | (dialog->withcovcheck->isChecked() ? MessageWithCov : MessageNone )); if(newMessageFlags != messageFlags) reactivate = true; messageFlags = newMessageFlags; settings->setValue(uuid.toString() + "/Type", (int)messageFlags); if (reactivate) { emit changeX("N/A"); emit changeY("N/A"); emit changeZ("N/A"); activateNodelet(true); } if(ui->label->isVisible() != dialog->slabelcheck->isChecked()) { ui->label->setVisible(dialog->slabelcheck->isChecked()); settings->setValue(uuid.toString() + "/ShowLabel", dialog->slabelcheck->isChecked()); } if(ui->label->text() != dialog->labeledit->text()) { emit changeLabel(dialog->labeledit->text()); settings->setValue(uuid.toString() + "/Label", dialog->labeledit->text()); } }
void CPPositionPlugin::displayValues(double x, double y, double z) { emit changeX(QString::number(x, 'f', 4)); emit changeY(QString::number(y, 'f', 4)); emit changeZ(QString::number(z, 'f', 4)); }
// 向下移动 void Tetris::down() { changeX(1); }