mirror of
https://github.com/leozide/leocad
synced 2025-01-15 15:40:48 +01:00
Update to leozide/master
This commit is contained in:
parent
3c3da579c5
commit
511aaf7dd4
15 changed files with 4 additions and 956 deletions
|
@ -1369,13 +1369,6 @@ const lcCommand gCommands[] =
|
||||||
QT_TRANSLATE_NOOP("Status", "Add a new minifig to the model"),
|
QT_TRANSLATE_NOOP("Status", "Add a new minifig to the model"),
|
||||||
""
|
""
|
||||||
},
|
},
|
||||||
// LC_PIECE_TRAIN_TRACK_WIZARD
|
|
||||||
{
|
|
||||||
QT_TRANSLATE_NOOP("Action", "Piece.TrainTrackSystemWizard"),
|
|
||||||
QT_TRANSLATE_NOOP("Menu", "Train track network wizard..."),
|
|
||||||
QT_TRANSLATE_NOOP("Status", "Add a new train track network to the model"),
|
|
||||||
"Ctrl+T"
|
|
||||||
},
|
|
||||||
// LC_PIECE_ARRAY
|
// LC_PIECE_ARRAY
|
||||||
{
|
{
|
||||||
QT_TRANSLATE_NOOP("Action", "Piece.Array"),
|
QT_TRANSLATE_NOOP("Action", "Piece.Array"),
|
||||||
|
|
|
@ -211,7 +211,6 @@ enum lcCommandId
|
||||||
LC_PIECE_ROTATE_PLUSZ,
|
LC_PIECE_ROTATE_PLUSZ,
|
||||||
LC_PIECE_ROTATE_MINUSZ,
|
LC_PIECE_ROTATE_MINUSZ,
|
||||||
LC_PIECE_MINIFIG_WIZARD,
|
LC_PIECE_MINIFIG_WIZARD,
|
||||||
LC_PIECE_TRAIN_TRACK_WIZARD,
|
|
||||||
LC_PIECE_ARRAY,
|
LC_PIECE_ARRAY,
|
||||||
LC_PIECE_VIEW_SELECTED_MODEL,
|
LC_PIECE_VIEW_SELECTED_MODEL,
|
||||||
LC_PIECE_MOVE_SELECTION_TO_MODEL,
|
LC_PIECE_MOVE_SELECTION_TO_MODEL,
|
||||||
|
|
|
@ -557,7 +557,6 @@ void lcMainWindow::CreateMenus()
|
||||||
PieceMenu->addAction(mActions[LC_PIECE_PAINT_SELECTED]);
|
PieceMenu->addAction(mActions[LC_PIECE_PAINT_SELECTED]);
|
||||||
PieceMenu->addAction(mActions[LC_PIECE_ARRAY]);
|
PieceMenu->addAction(mActions[LC_PIECE_ARRAY]);
|
||||||
PieceMenu->addAction(mActions[LC_PIECE_MINIFIG_WIZARD]);
|
PieceMenu->addAction(mActions[LC_PIECE_MINIFIG_WIZARD]);
|
||||||
PieceMenu->addAction(mActions[LC_PIECE_TRAIN_TRACK_WIZARD]);
|
|
||||||
PieceMenu->addAction(mActions[LC_PIECE_RESET_PIVOT_POINT]);
|
PieceMenu->addAction(mActions[LC_PIECE_RESET_PIVOT_POINT]);
|
||||||
PieceMenu->addAction(mActions[LC_PIECE_REMOVE_KEY_FRAMES]);
|
PieceMenu->addAction(mActions[LC_PIECE_REMOVE_KEY_FRAMES]);
|
||||||
PieceMenu->addSeparator();
|
PieceMenu->addSeparator();
|
||||||
|
@ -2987,11 +2986,6 @@ void lcMainWindow::HandleCommand(lcCommandId CommandId)
|
||||||
ActiveModel->ShowMinifigDialog();
|
ActiveModel->ShowMinifigDialog();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LC_PIECE_TRAIN_TRACK_WIZARD:
|
|
||||||
if (ActiveModel)
|
|
||||||
ActiveModel->ShowTrainTrackSystemDialog();
|
|
||||||
break;
|
|
||||||
|
|
||||||
case LC_PIECE_ARRAY:
|
case LC_PIECE_ARRAY:
|
||||||
if (ActiveModel)
|
if (ActiveModel)
|
||||||
ActiveModel->ShowArrayDialog();
|
ActiveModel->ShowArrayDialog();
|
||||||
|
|
|
@ -15,11 +15,9 @@
|
||||||
#include "pieceinf.h"
|
#include "pieceinf.h"
|
||||||
#include "lc_view.h"
|
#include "lc_view.h"
|
||||||
#include "minifig.h"
|
#include "minifig.h"
|
||||||
#include "traintracksystem.h"
|
|
||||||
#include "lc_arraydialog.h"
|
#include "lc_arraydialog.h"
|
||||||
#include "lc_qselectdialog.h"
|
#include "lc_qselectdialog.h"
|
||||||
#include "lc_minifigdialog.h"
|
#include "lc_minifigdialog.h"
|
||||||
#include "lc_traintracksystemdialog.h"
|
|
||||||
#include "lc_groupdialog.h"
|
#include "lc_groupdialog.h"
|
||||||
#include "lc_qeditgroupsdialog.h"
|
#include "lc_qeditgroupsdialog.h"
|
||||||
#include "lc_qpropertiesdialog.h"
|
#include "lc_qpropertiesdialog.h"
|
||||||
|
@ -4718,44 +4716,6 @@ void lcModel::SetMinifig(const lcMinifig& Minifig)
|
||||||
SetSelectionAndFocus(Pieces, nullptr, 0, false);
|
SetSelectionAndFocus(Pieces, nullptr, 0, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
void lcModel::ShowTrainTrackSystemDialog()
|
|
||||||
{
|
|
||||||
lcTrainTrackSystemDialog Dialog(gMainWindow);
|
|
||||||
|
|
||||||
if (Dialog.exec() != QDialog::Accepted)
|
|
||||||
return;
|
|
||||||
|
|
||||||
gMainWindow->GetActiveView()->MakeCurrent();
|
|
||||||
|
|
||||||
lcGroup* Group = AddGroup(tr("TrainTrackSystem #"), nullptr);
|
|
||||||
|
|
||||||
std::vector<lcPiece* > trackSystemPieces = Dialog.mTrainTrackSystem->GetPieces();
|
|
||||||
for (lcPiece* Piece : trackSystemPieces)
|
|
||||||
{
|
|
||||||
Piece->SetGroup(Group);
|
|
||||||
AddPiece(Piece);
|
|
||||||
Piece->UpdatePosition(mCurrentStep);
|
|
||||||
}
|
|
||||||
|
|
||||||
gMainWindow->UpdateTimeline(false, false);
|
|
||||||
SaveCheckpoint(tr("Train track system"));
|
|
||||||
}
|
|
||||||
|
|
||||||
void lcModel::SetTrainTrackSystem(const std::vector<lcPiece*>& Pieces)
|
|
||||||
{
|
|
||||||
DeleteModel();
|
|
||||||
|
|
||||||
std::vector<lcObject*> mPieces;
|
|
||||||
mPieces.reserve(Pieces.size());
|
|
||||||
|
|
||||||
for (lcPiece* Piece : Pieces)
|
|
||||||
{
|
|
||||||
AddPiece(Piece);
|
|
||||||
Piece->UpdatePosition(1);
|
|
||||||
mPieces.emplace_back(Piece);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void lcModel::SetPreviewPieceInfo(PieceInfo* Info, int ColorIndex)
|
void lcModel::SetPreviewPieceInfo(PieceInfo* Info, int ColorIndex)
|
||||||
{
|
{
|
||||||
DeleteModel();
|
DeleteModel();
|
||||||
|
|
|
@ -250,7 +250,6 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetMinifig(const lcMinifig& Minifig);
|
void SetMinifig(const lcMinifig& Minifig);
|
||||||
void SetTrainTrackSystem(const std::vector<lcPiece*>& Pieces);
|
|
||||||
void SetPreviewPieceInfo(PieceInfo* Info, int ColorIndex);
|
void SetPreviewPieceInfo(PieceInfo* Info, int ColorIndex);
|
||||||
|
|
||||||
void Cut();
|
void Cut();
|
||||||
|
@ -374,7 +373,6 @@ public:
|
||||||
void ShowSelectByNameDialog();
|
void ShowSelectByNameDialog();
|
||||||
void ShowArrayDialog();
|
void ShowArrayDialog();
|
||||||
void ShowMinifigDialog();
|
void ShowMinifigDialog();
|
||||||
void ShowTrainTrackSystemDialog();
|
|
||||||
void UpdateInterface();
|
void UpdateInterface();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
|
@ -147,23 +147,6 @@ void lcPartSelectionListModel::SetCategory(int CategoryIndex)
|
||||||
SetFilter(mFilter);
|
SetFilter(mFilter);
|
||||||
}
|
}
|
||||||
|
|
||||||
void lcPartSelectionListModel::SetParts(std::vector<PieceInfo*> partsList)
|
|
||||||
{
|
|
||||||
beginResetModel();
|
|
||||||
|
|
||||||
ReleaseThumbnails();
|
|
||||||
mParts.clear();
|
|
||||||
|
|
||||||
mParts.resize(partsList.size());
|
|
||||||
for (unsigned long PartIdx = 0; PartIdx < partsList.size(); PartIdx++) {
|
|
||||||
mParts[PartIdx].Info = partsList[PartIdx];
|
|
||||||
}
|
|
||||||
|
|
||||||
endResetModel();
|
|
||||||
|
|
||||||
SetFilter(mFilter);
|
|
||||||
}
|
|
||||||
|
|
||||||
void lcPartSelectionListModel::SetModelsCategory()
|
void lcPartSelectionListModel::SetModelsCategory()
|
||||||
{
|
{
|
||||||
beginResetModel();
|
beginResetModel();
|
||||||
|
@ -531,14 +514,6 @@ void lcPartSelectionListView::SetCategory(lcPartCategoryType Type, int Index)
|
||||||
setCurrentIndex(mListModel->index(0, 0));
|
setCurrentIndex(mListModel->index(0, 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
void lcPartSelectionListView::SetParts(std::vector<PieceInfo*> partsList)
|
|
||||||
{
|
|
||||||
mListModel->SetParts(partsList);
|
|
||||||
|
|
||||||
if(mListModel->rowCount()>0)
|
|
||||||
setCurrentIndex(mListModel->index(0, 0));
|
|
||||||
}
|
|
||||||
|
|
||||||
void lcPartSelectionListView::SetCurrentPart(PieceInfo* Info)
|
void lcPartSelectionListView::SetCurrentPart(PieceInfo* Info)
|
||||||
{
|
{
|
||||||
QModelIndex Index = mListModel->GetPieceInfoIndex(Info);
|
QModelIndex Index = mListModel->GetPieceInfoIndex(Info);
|
||||||
|
|
|
@ -117,7 +117,6 @@ public:
|
||||||
void ToggleColorLocked();
|
void ToggleColorLocked();
|
||||||
void ToggleListMode();
|
void ToggleListMode();
|
||||||
void SetCategory(int CategoryIndex);
|
void SetCategory(int CategoryIndex);
|
||||||
void SetParts(std::vector<PieceInfo*> partsList);
|
|
||||||
void SetModelsCategory();
|
void SetModelsCategory();
|
||||||
void SetPaletteCategory(int SetIndex);
|
void SetPaletteCategory(int SetIndex);
|
||||||
void SetCurrentModelCategory();
|
void SetCurrentModelCategory();
|
||||||
|
@ -156,7 +155,6 @@ public:
|
||||||
void startDrag(Qt::DropActions SupportedActions) override;
|
void startDrag(Qt::DropActions SupportedActions) override;
|
||||||
|
|
||||||
void SetCategory(lcPartCategoryType Type, int Index);
|
void SetCategory(lcPartCategoryType Type, int Index);
|
||||||
void SetParts(std::vector<PieceInfo*> partsList);
|
|
||||||
void SetCurrentPart(PieceInfo* Info);
|
void SetCurrentPart(PieceInfo* Info);
|
||||||
|
|
||||||
PieceInfo* GetCurrentPart() const
|
PieceInfo* GetCurrentPart() const
|
||||||
|
|
|
@ -1,224 +0,0 @@
|
||||||
#include "lc_traintracksystemdialog.h"
|
|
||||||
#include "ui_lc_traintracksystemdialog.h"
|
|
||||||
#include "lc_viewwidget.h"
|
|
||||||
#include "lc_mainwindow.h"
|
|
||||||
#include "pieceinf.h"
|
|
||||||
#include "lc_view.h"
|
|
||||||
#include "piece.h"
|
|
||||||
#include "camera.h"
|
|
||||||
#include "lc_partselectionwidget.h"
|
|
||||||
|
|
||||||
lcTrainTrackSystemDialog::lcTrainTrackSystemDialog(QWidget* Parent)
|
|
||||||
: QDialog(Parent), ui(new Ui::lcTrainTrackSystemDialog)
|
|
||||||
{
|
|
||||||
|
|
||||||
gMainWindow->SetTool(lcTool::Pan);
|
|
||||||
|
|
||||||
editor_state = LC_TTS_STATE_INSERT;
|
|
||||||
|
|
||||||
ui->setupUi(this);
|
|
||||||
|
|
||||||
QGridLayout* PreviewLayout = new QGridLayout(ui->trainTrackSystemFrame);
|
|
||||||
PreviewLayout->setContentsMargins(0, 0, 0, 0);
|
|
||||||
|
|
||||||
mTrainTrackSystem = new TrainTrackSystem();
|
|
||||||
SetInitialTrainTrackSystem();
|
|
||||||
mView = new lcView(lcViewType::View, mTrainTrackSystem->GetModel());
|
|
||||||
|
|
||||||
lcViewWidget* ViewWidget = new lcViewWidget(nullptr, mView);
|
|
||||||
ViewWidget->setMinimumWidth(1600);
|
|
||||||
|
|
||||||
connect(ViewWidget, &lcViewWidget::mousePressOnPiece, this, &lcTrainTrackSystemDialog::mousePressOnPiece);
|
|
||||||
connect(ViewWidget, &lcViewWidget::mouseRelease, this, &lcTrainTrackSystemDialog::mouseRelease);
|
|
||||||
|
|
||||||
PreviewLayout->addWidget(ViewWidget);
|
|
||||||
|
|
||||||
mView->MakeCurrent();
|
|
||||||
|
|
||||||
QGridLayout* PartSelector = new QGridLayout(ui->partSelector);
|
|
||||||
PartSelector->setContentsMargins(0, 0, 0, 0);
|
|
||||||
|
|
||||||
mPartsWidget = new lcPartSelectionListView(nullptr, nullptr);
|
|
||||||
PartSelector->addWidget(mPartsWidget);
|
|
||||||
|
|
||||||
mPartsWidget->SetParts(mTrainTrackSystem->getTrackTypes());
|
|
||||||
|
|
||||||
mView->GetCamera()->SetViewpoint(lcVector3(0.0f, 0.0f, 90.0f));
|
|
||||||
mView->ZoomExtents();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
lcTrainTrackSystemDialog::~lcTrainTrackSystemDialog()
|
|
||||||
{
|
|
||||||
delete mTrainTrackSystem;
|
|
||||||
delete ui;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void lcTrainTrackSystemDialog::mousePressOnPiece(lcPiece* pieceClickedOn) {
|
|
||||||
|
|
||||||
if(pieceClickedOn != nullptr) {
|
|
||||||
|
|
||||||
if(mTrainTrackSystem->findTrackTypeByString(pieceClickedOn->mPieceInfo->mFileName) == -1) {
|
|
||||||
|
|
||||||
PieceInfo* piecePartlistInf = mPartsWidget->GetCurrentPart();
|
|
||||||
|
|
||||||
insertTrackType = mTrainTrackSystem->findTrackTypeByString(piecePartlistInf->mFileName);
|
|
||||||
|
|
||||||
if(selectedFromTrackSection == nullptr) {
|
|
||||||
|
|
||||||
std::vector<TrainTrackSection*> trackSections = mTrainTrackSystem->GetTrackSections();
|
|
||||||
int found_con_no = 0;
|
|
||||||
|
|
||||||
for(TrainTrackSection* trackSection : trackSections) {
|
|
||||||
found_con_no = trackSection->FindConnectionNumber(pieceClickedOn->GetRotationCenter());
|
|
||||||
if(found_con_no != -1) {
|
|
||||||
selectedFromTrackSection = trackSection;
|
|
||||||
selectedFromConnectionNo = found_con_no;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(selectedFromTrackSection != nullptr) {
|
|
||||||
|
|
||||||
selectedToConnectionNo = 0;
|
|
||||||
newSectionInserted = true;
|
|
||||||
mTrainTrackSystem->addTrackSection(selectedFromTrackSection, selectedFromConnectionNo, insertTrackType, selectedToConnectionNo);
|
|
||||||
mTrainTrackSystem->SetModel();
|
|
||||||
mView->Redraw();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
|
|
||||||
if(mTrainTrackSystem->deleteTrackSection(pieceClickedOn) == true) {
|
|
||||||
mTrainTrackSystem->SetModel();
|
|
||||||
mView->Redraw();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void lcTrainTrackSystemDialog::mouseRelease() {
|
|
||||||
selectedFromTrackSection = nullptr;
|
|
||||||
newSectionInserted = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void lcTrainTrackSystemDialog::keyPressEvent(QKeyEvent *event) {
|
|
||||||
|
|
||||||
if(selectedFromTrackSection == nullptr) {
|
|
||||||
|
|
||||||
lcModel* activeModel = mView->GetActiveModel();
|
|
||||||
const std::vector<std::unique_ptr<lcPiece>>& Pieces = activeModel->GetPieces();
|
|
||||||
for (const std::unique_ptr<lcPiece>& Piece : Pieces) {
|
|
||||||
if (Piece->IsFocused()) {
|
|
||||||
|
|
||||||
std::vector<TrainTrackSection*> trackSections = mTrainTrackSystem->GetTrackSections();
|
|
||||||
int found_con_no = 0;
|
|
||||||
|
|
||||||
for(TrainTrackSection* trackSection : trackSections) {
|
|
||||||
found_con_no = trackSection->FindConnectionNumber(Piece->GetRotationCenter());
|
|
||||||
if(found_con_no != -1) {
|
|
||||||
selectedFromTrackSection = trackSection;
|
|
||||||
selectedFromConnectionNo = found_con_no;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(selectedFromTrackSection != nullptr) {
|
|
||||||
bool updateSection = true;
|
|
||||||
switch(event->key()) {
|
|
||||||
case Qt::Key_S: {
|
|
||||||
insertTrackType = LC_TTS_STRAIGHT;
|
|
||||||
selectedToConnectionNo = 0;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case Qt::Key_C: {
|
|
||||||
insertTrackType = LC_TTS_CURVED;
|
|
||||||
selectedToConnectionNo = 0;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case Qt::Key_X: {
|
|
||||||
insertTrackType = LC_TTS_CROSS;
|
|
||||||
selectedToConnectionNo = 0;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case Qt::Key_L: {
|
|
||||||
insertTrackType = LC_TTS_LEFT_BRANCH;
|
|
||||||
selectedToConnectionNo = 0;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case Qt::Key_R: {
|
|
||||||
insertTrackType = LC_TTS_RIGHT_BRANCH;
|
|
||||||
selectedToConnectionNo = 0;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case Qt::Key_Right: {
|
|
||||||
if(newSectionInserted == true) {
|
|
||||||
std::vector<TrainTrackSection*> trackSections = mTrainTrackSystem->GetTrackSections();
|
|
||||||
TrainTrackSection* newTrackSection = trackSections[trackSections.size() - 1];
|
|
||||||
|
|
||||||
selectedToConnectionNo++;
|
|
||||||
if(selectedToConnectionNo >= newTrackSection->GetNoOfConnections())
|
|
||||||
selectedToConnectionNo = 0;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case Qt::Key_Insert: {
|
|
||||||
selectedFromTrackSection = nullptr;
|
|
||||||
selectedFromConnectionNo = -1;
|
|
||||||
newSectionInserted = false;
|
|
||||||
insertTrackType = LC_TTS_STRAIGHT;
|
|
||||||
selectedToConnectionNo = 0;
|
|
||||||
updateSection = false;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
default: {
|
|
||||||
updateSection = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(updateSection == true) {
|
|
||||||
|
|
||||||
if(newSectionInserted == true) {
|
|
||||||
std::vector<TrainTrackSection*>* trackSections = mTrainTrackSystem->GetTrackSectionsPtr();
|
|
||||||
trackSections->erase(trackSections->begin() + trackSections->size() - 1);
|
|
||||||
}
|
|
||||||
mTrainTrackSystem->addTrackSection(selectedFromTrackSection, selectedFromConnectionNo, insertTrackType, selectedToConnectionNo);
|
|
||||||
mTrainTrackSystem->SetModel();
|
|
||||||
mView->Redraw();
|
|
||||||
newSectionInserted = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void lcTrainTrackSystemDialog::SetInitialTrainTrackSystem()
|
|
||||||
{
|
|
||||||
int colorIndex = 8;
|
|
||||||
int mCurrentStep = 1;
|
|
||||||
mTrainTrackSystem->setColorIndex(colorIndex);
|
|
||||||
mTrainTrackSystem->setCurrentStep(mCurrentStep);
|
|
||||||
mTrainTrackSystem->addFirstTrackSection(lcMatrix44Identity(),LC_TTS_STRAIGHT); //Idx: 0
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,62 +0,0 @@
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include "traintracksystem.h"
|
|
||||||
#include "lc_partselectionwidget.h"
|
|
||||||
|
|
||||||
class lcQColorPicker;
|
|
||||||
|
|
||||||
enum LC_TTS_EDITOR_STATES {
|
|
||||||
LC_TTS_STATE_INSERT,
|
|
||||||
LC_TTS_STATE_ROTATE,
|
|
||||||
LC_TTS_STATE_NUMITEMS
|
|
||||||
};
|
|
||||||
|
|
||||||
namespace Ui
|
|
||||||
{
|
|
||||||
class lcTrainTrackSystemDialog;
|
|
||||||
}
|
|
||||||
|
|
||||||
class lcTrainTrackSystemDialog : public QDialog
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
|
|
||||||
public:
|
|
||||||
explicit lcTrainTrackSystemDialog(QWidget* Parent);
|
|
||||||
~lcTrainTrackSystemDialog();
|
|
||||||
|
|
||||||
//MinifigWizard* mMinifigWizard;
|
|
||||||
TrainTrackSystem* mTrainTrackSystem;
|
|
||||||
|
|
||||||
public slots:
|
|
||||||
void mousePressOnPiece(lcPiece* piece);
|
|
||||||
void mouseRelease();
|
|
||||||
|
|
||||||
protected:
|
|
||||||
|
|
||||||
Ui::lcTrainTrackSystemDialog* ui;
|
|
||||||
|
|
||||||
//void mousePressEvent(QMouseEvent* Event) override;
|
|
||||||
|
|
||||||
//bool eventFilter(QObject* Object, QEvent* Event) override;'
|
|
||||||
void keyPressEvent(QKeyEvent *event) override;
|
|
||||||
|
|
||||||
|
|
||||||
enum LC_TTS_EDITOR_STATES editor_state;
|
|
||||||
|
|
||||||
lcView* mView;
|
|
||||||
|
|
||||||
|
|
||||||
private:
|
|
||||||
|
|
||||||
lcPartSelectionListView* mPartsWidget;
|
|
||||||
TrainTrackSection* selectedFromTrackSection = nullptr;
|
|
||||||
int selectedFromConnectionNo = -1;
|
|
||||||
bool newSectionInserted = false;
|
|
||||||
enum LC_TTS_TYPES insertTrackType;
|
|
||||||
int selectedToConnectionNo = 0;
|
|
||||||
|
|
||||||
enum LC_TTS_TYPES selectedTrackTypeId;
|
|
||||||
|
|
||||||
void SetInitialTrainTrackSystem();
|
|
||||||
|
|
||||||
};
|
|
|
@ -1,86 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<ui version="4.0">
|
|
||||||
<class>lcTrainTrackSystemDialog</class>
|
|
||||||
<widget class="QDialog" name="lcTrainTrackSystemDialog">
|
|
||||||
<property name="geometry">
|
|
||||||
<rect>
|
|
||||||
<x>0</x>
|
|
||||||
<y>0</y>
|
|
||||||
<width>2000</width>
|
|
||||||
<height>1000</height>
|
|
||||||
</rect>
|
|
||||||
</property>
|
|
||||||
<property name="windowTitle">
|
|
||||||
<string>Train track system Wizard</string>
|
|
||||||
</property>
|
|
||||||
<layout class="QVBoxLayout" name="verticalLayout">
|
|
||||||
<item>
|
|
||||||
<widget class="QSplitter" name="splitter">
|
|
||||||
<property name="sizePolicy">
|
|
||||||
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
|
|
||||||
<horstretch>0</horstretch>
|
|
||||||
<verstretch>0</verstretch>
|
|
||||||
</sizepolicy>
|
|
||||||
</property>
|
|
||||||
<property name="orientation">
|
|
||||||
<enum>Qt::Horizontal</enum>
|
|
||||||
</property>
|
|
||||||
<widget class="QFrame" name="partSelector">
|
|
||||||
<property name="sizePolicy">
|
|
||||||
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
|
||||||
<horstretch>1</horstretch>
|
|
||||||
<verstretch>0</verstretch>
|
|
||||||
</sizepolicy>
|
|
||||||
</property>
|
|
||||||
|
|
||||||
<property name="frameShape">
|
|
||||||
<enum>QFrame::NoFrame</enum>
|
|
||||||
</property>
|
|
||||||
<property name="frameShadow">
|
|
||||||
<enum>QFrame::Plain</enum>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
<widget class="QFrame" name="trainTrackSystemFrame">
|
|
||||||
<property name="sizePolicy">
|
|
||||||
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
|
||||||
<horstretch>1</horstretch>
|
|
||||||
<verstretch>0</verstretch>
|
|
||||||
</sizepolicy>
|
|
||||||
</property>
|
|
||||||
<property name="frameShape">
|
|
||||||
<enum>QFrame::NoFrame</enum>
|
|
||||||
</property>
|
|
||||||
<property name="frameShadow">
|
|
||||||
<enum>QFrame::Plain</enum>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="QDialogButtonBox" name="buttonBox">
|
|
||||||
<property name="orientation">
|
|
||||||
<enum>Qt::Horizontal</enum>
|
|
||||||
</property>
|
|
||||||
<property name="standardButtons">
|
|
||||||
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</widget>
|
|
||||||
<resources/>
|
|
||||||
<connections>
|
|
||||||
<connection>
|
|
||||||
<sender>buttonBox</sender>
|
|
||||||
<signal>accepted()</signal>
|
|
||||||
<receiver>lcTrainTrackSystemDialog</receiver>
|
|
||||||
<slot>accept()</slot>
|
|
||||||
</connection>
|
|
||||||
<connection>
|
|
||||||
<sender>buttonBox</sender>
|
|
||||||
<signal>rejected()</signal>
|
|
||||||
<receiver>lcTrainTrackSystemDialog</receiver>
|
|
||||||
<slot>reject()</slot>
|
|
||||||
</connection>
|
|
||||||
</connections>
|
|
||||||
</ui>
|
|
|
@ -11,8 +11,6 @@
|
||||||
#include "lc_mesh.h"
|
#include "lc_mesh.h"
|
||||||
#include "lc_profile.h"
|
#include "lc_profile.h"
|
||||||
#include "lc_previewwidget.h"
|
#include "lc_previewwidget.h"
|
||||||
#include "pieceinf.h"
|
|
||||||
#include "object.h"
|
|
||||||
|
|
||||||
lcViewWidget::lcViewWidget(QWidget* Parent, lcView* View)
|
lcViewWidget::lcViewWidget(QWidget* Parent, lcView* View)
|
||||||
: QOpenGLWidget(Parent), mView(View)
|
: QOpenGLWidget(Parent), mView(View)
|
||||||
|
@ -130,24 +128,10 @@ void lcViewWidget::mousePressEvent(QMouseEvent* MouseEvent)
|
||||||
|
|
||||||
switch (MouseEvent->button())
|
switch (MouseEvent->button())
|
||||||
{
|
{
|
||||||
case Qt::LeftButton: {
|
case Qt::LeftButton:
|
||||||
|
mView->OnLeftButtonDown();
|
||||||
//Emit piece, if the button is pressed on a piece
|
|
||||||
lcObjectSection ObjectSection = mView->FindObjectUnderPointer(false, false);
|
|
||||||
lcObject* Object = ObjectSection.Object;
|
|
||||||
|
|
||||||
if (Object)
|
|
||||||
{
|
|
||||||
if (Object->IsPiece())
|
|
||||||
{
|
|
||||||
lcPiece* Piece = (lcPiece*)Object;
|
|
||||||
emit mousePressOnPiece(Piece);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
mView->OnLeftButtonDown();
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
case Qt::MiddleButton:
|
case Qt::MiddleButton:
|
||||||
mView->OnMiddleButtonDown();
|
mView->OnMiddleButtonDown();
|
||||||
break;
|
break;
|
||||||
|
@ -171,9 +155,7 @@ void lcViewWidget::mousePressEvent(QMouseEvent* MouseEvent)
|
||||||
|
|
||||||
void lcViewWidget::mouseReleaseEvent(QMouseEvent* MouseEvent)
|
void lcViewWidget::mouseReleaseEvent(QMouseEvent* MouseEvent)
|
||||||
{
|
{
|
||||||
emit mouseRelease();
|
float DeviceScale = GetDeviceScale();
|
||||||
|
|
||||||
float DeviceScale = GetDeviceScale();
|
|
||||||
|
|
||||||
mView->SetMousePosition(MouseEvent->x() * DeviceScale, mView->GetHeight() - MouseEvent->y() * DeviceScale - 1);
|
mView->SetMousePosition(MouseEvent->x() * DeviceScale, mView->GetHeight() - MouseEvent->y() * DeviceScale - 1);
|
||||||
mView->SetMouseModifiers(MouseEvent->modifiers());
|
mView->SetMouseModifiers(MouseEvent->modifiers());
|
||||||
|
|
|
@ -13,10 +13,6 @@ public:
|
||||||
|
|
||||||
QSize sizeHint() const override;
|
QSize sizeHint() const override;
|
||||||
|
|
||||||
signals:
|
|
||||||
void mousePressOnPiece(lcPiece* piece);
|
|
||||||
void mouseRelease();
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
float GetDeviceScale() const
|
float GetDeviceScale() const
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,365 +0,0 @@
|
||||||
#include "piece.h"
|
|
||||||
#include "traintracksystem.h"
|
|
||||||
#include "lc_model.h"
|
|
||||||
#include "lc_application.h"
|
|
||||||
#include "lc_library.h"
|
|
||||||
#include <QString>
|
|
||||||
|
|
||||||
TrainTrackConnectionPoint::TrainTrackConnectionPoint(float angle, float x, float y) {
|
|
||||||
this->angle = angle;
|
|
||||||
xy_coordinate.x = x;
|
|
||||||
xy_coordinate.y = y;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void TrainTrackType::Load(lcPiecesLibrary* Library, char const* filename) {
|
|
||||||
pieceInfo = Library->FindPiece(filename, nullptr, false, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
void TrainTrackType::AddConnection(TrainTrackConnectionPoint *connectionPoint) {
|
|
||||||
connectionPoints.push_back(connectionPoint);
|
|
||||||
}
|
|
||||||
|
|
||||||
TrainTrackConnectionPoint* TrainTrackType::GetConnection(int index) {
|
|
||||||
return connectionPoints[index];
|
|
||||||
}
|
|
||||||
|
|
||||||
std::vector<TrainTrackConnectionPoint *>& TrainTrackType::GetConnections() {
|
|
||||||
return connectionPoints;
|
|
||||||
}
|
|
||||||
|
|
||||||
int TrainTrackType::GetNoOfConnections() {
|
|
||||||
return connectionPoints.size();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
TrainTrackSection::TrainTrackSection(TrainTrackType *trackType, enum LC_TTS_TYPES trackTypeId, lcMatrix44 location, int mCurrentStep, int mColorIndex) {
|
|
||||||
this->trackType = trackType;
|
|
||||||
this->trackTypeId = trackTypeId;
|
|
||||||
this->location = location;
|
|
||||||
this->mCurrentStep = mCurrentStep;
|
|
||||||
this->mColorIndex = mColorIndex;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
lcMatrix44 TrainTrackSection::GetConnectionLocation(int connectionNo) {
|
|
||||||
|
|
||||||
lcMatrix44 mat44;
|
|
||||||
lcMatrix44 matOffset;
|
|
||||||
|
|
||||||
TrainTrackConnectionPoint* connection = trackType->GetConnections()[connectionNo];
|
|
||||||
|
|
||||||
mat44 = lcMatrix44Identity();
|
|
||||||
mat44 = lcMatrix44RotationZ(LC_DTOR * connection->angle);
|
|
||||||
|
|
||||||
matOffset = lcMatrix44Identity();
|
|
||||||
matOffset.SetTranslation(lcVector3(connection->xy_coordinate.x, connection->xy_coordinate.y,0));
|
|
||||||
|
|
||||||
matOffset = lcMul(mat44, matOffset);
|
|
||||||
|
|
||||||
return lcMul(matOffset,location);
|
|
||||||
}
|
|
||||||
|
|
||||||
int TrainTrackSection::GetNoOfConnections() {
|
|
||||||
return trackType->GetNoOfConnections();
|
|
||||||
}
|
|
||||||
|
|
||||||
int TrainTrackSection::FindConnectionNumber(lcVector3 v3searchLocation) {
|
|
||||||
float precisionErrorNumber = 0.001;
|
|
||||||
|
|
||||||
lcMatrix44 matOffset;
|
|
||||||
|
|
||||||
for(int con_no = 0; con_no < trackType->GetNoOfConnections(); con_no++) {
|
|
||||||
|
|
||||||
lcMatrix44 matSelection = GetConnectionLocation(con_no);
|
|
||||||
|
|
||||||
matOffset = lcMatrix44Identity();
|
|
||||||
matOffset.SetTranslation(lcVector3(-10, 0, 8));
|
|
||||||
|
|
||||||
lcVector3 v3Selection = lcMul(matOffset,matSelection).GetTranslation();
|
|
||||||
|
|
||||||
if(abs(v3Selection.x - v3searchLocation.x) < precisionErrorNumber &&
|
|
||||||
abs(v3Selection.y - v3searchLocation.y) < precisionErrorNumber &&
|
|
||||||
abs(v3Selection.z - v3searchLocation.z) < precisionErrorNumber)
|
|
||||||
{
|
|
||||||
return con_no;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const char* TrainTrackSystem::mTrackTypeFilenames[LC_TTS_NUMITEMS] =
|
|
||||||
{
|
|
||||||
"74746.dat", // LC_TTS_STRAIGHT,
|
|
||||||
"74747.dat", // LC_TTS_CURVED,
|
|
||||||
"32087.dat", // LC_TTS_CROSS,
|
|
||||||
"2861c04.dat", // LC_TTS_LEFT_BRANCH,
|
|
||||||
"2859c04.dat" // LC_TTS_RIGHT_BRANCH
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
TrainTrackSystem::TrainTrackSystem()
|
|
||||||
: mModel(new lcModel(QString(), nullptr, false))
|
|
||||||
{
|
|
||||||
lcPiecesLibrary* Library = lcGetPiecesLibrary();
|
|
||||||
|
|
||||||
float xHalfBendOff = sin(LC_DTOR * 11.25) * 800;
|
|
||||||
float yHalfBendOff = ((cos(LC_DTOR * 11.25) * 800) - 800);
|
|
||||||
|
|
||||||
float x_left_branch = 320 + 320 + 0 + (-(sin(LC_DTOR * 22.5)*800));
|
|
||||||
float y_left_branch = 0 + 0 + 320 + ((cos(LC_DTOR * 22.5)*800)-800);
|
|
||||||
|
|
||||||
float x_right_branch = 320 + 320 + 0 + (-(sin(LC_DTOR * 22.5)*800));
|
|
||||||
float y_right_branch = 0 + 0 - 320 - ((cos(LC_DTOR * 22.5)*800)-800);
|
|
||||||
|
|
||||||
TrainTrackType *trackType;
|
|
||||||
|
|
||||||
trainTrackTypes.reserve(LC_TTS_NUMITEMS);
|
|
||||||
|
|
||||||
// straight
|
|
||||||
trackType = new TrainTrackType();
|
|
||||||
trackType->Load(Library,mTrackTypeFilenames[LC_TTS_STRAIGHT]);
|
|
||||||
trackType->AddConnection(new TrainTrackConnectionPoint(0,160,0));
|
|
||||||
trackType->AddConnection(new TrainTrackConnectionPoint(180,-160,0));
|
|
||||||
trainTrackTypes[LC_TTS_STRAIGHT] = trackType;
|
|
||||||
|
|
||||||
// curved
|
|
||||||
trackType = new TrainTrackType();
|
|
||||||
trackType->Load(Library,mTrackTypeFilenames[LC_TTS_CURVED]);
|
|
||||||
trackType->AddConnection(new TrainTrackConnectionPoint(-11.25,xHalfBendOff,yHalfBendOff));
|
|
||||||
trackType->AddConnection(new TrainTrackConnectionPoint(-168.75,-xHalfBendOff,yHalfBendOff));
|
|
||||||
trainTrackTypes[LC_TTS_CURVED] = trackType;
|
|
||||||
|
|
||||||
// Crossing
|
|
||||||
trackType = new TrainTrackType();
|
|
||||||
trackType->Load(Library,mTrackTypeFilenames[LC_TTS_CROSS]);
|
|
||||||
trackType->AddConnection(new TrainTrackConnectionPoint(0,160,0));
|
|
||||||
trackType->AddConnection(new TrainTrackConnectionPoint(90,0,160));
|
|
||||||
trackType->AddConnection(new TrainTrackConnectionPoint(180,-160,0));
|
|
||||||
trackType->AddConnection(new TrainTrackConnectionPoint(-90,0,-160));
|
|
||||||
trainTrackTypes[LC_TTS_CROSS] = trackType;
|
|
||||||
|
|
||||||
// Left branch
|
|
||||||
trackType = new TrainTrackType();
|
|
||||||
trackType->Load(Library,mTrackTypeFilenames[LC_TTS_LEFT_BRANCH]);
|
|
||||||
trackType->AddConnection(new TrainTrackConnectionPoint(0,320,0));
|
|
||||||
trackType->AddConnection(new TrainTrackConnectionPoint(22.50,x_left_branch,y_left_branch));
|
|
||||||
trackType->AddConnection(new TrainTrackConnectionPoint(180,-320,0));
|
|
||||||
trainTrackTypes[LC_TTS_LEFT_BRANCH] = trackType;
|
|
||||||
|
|
||||||
// Right branch
|
|
||||||
trackType = new TrainTrackType();
|
|
||||||
trackType->Load(Library,mTrackTypeFilenames[LC_TTS_RIGHT_BRANCH]);
|
|
||||||
trackType->AddConnection(new TrainTrackConnectionPoint(0,320,0));
|
|
||||||
trackType->AddConnection(new TrainTrackConnectionPoint(180,-320,0));
|
|
||||||
trackType->AddConnection(new TrainTrackConnectionPoint(-22.50,x_right_branch,y_right_branch));
|
|
||||||
trainTrackTypes[LC_TTS_RIGHT_BRANCH] = trackType;
|
|
||||||
|
|
||||||
// Create map for lookup track type by name
|
|
||||||
for(int i = 0; i < LC_TTS_NUMITEMS; i++) trackTypesByName.insert({mTrackTypeFilenames[i], static_cast<LC_TTS_TYPES>(i)});
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
TrainTrackSystem::~TrainTrackSystem() {}
|
|
||||||
|
|
||||||
void TrainTrackSystem::setColorIndex(int mColorIndex) {
|
|
||||||
this->mColorIndex = mColorIndex;
|
|
||||||
}
|
|
||||||
|
|
||||||
void TrainTrackSystem::setCurrentStep(int mCurrentStep) {
|
|
||||||
this->mCurrentStep = mCurrentStep;
|
|
||||||
}
|
|
||||||
|
|
||||||
void TrainTrackSystem::addFirstTrackSection(lcMatrix44 position, enum LC_TTS_TYPES trackTypeId) {
|
|
||||||
TrainTrackType* trainTrackType = trainTrackTypes[trackTypeId];
|
|
||||||
trackSections.push_back(new TrainTrackSection(trainTrackType, trackTypeId,position, mCurrentStep, mColorIndex));
|
|
||||||
}
|
|
||||||
|
|
||||||
void TrainTrackSystem::addTrackSection(int fromTrackSectionIdx, int fromTrackSectionConnectionIdx, enum LC_TTS_TYPES toTrackType, int toTrackTypeConnectionIdx)
|
|
||||||
{
|
|
||||||
TrainTrackSection* fromTrackSection = trackSections[fromTrackSectionIdx];
|
|
||||||
TrainTrackType* fromTrack = trainTrackTypes[fromTrackSection->trackTypeId];
|
|
||||||
TrainTrackConnectionPoint * fromConnectIdx = fromTrack->GetConnection(fromTrackSectionConnectionIdx);
|
|
||||||
TrainTrackType* toTrack = trainTrackTypes[toTrackType];
|
|
||||||
TrainTrackConnectionPoint * toConnectIdx = toTrack->GetConnection(toTrackTypeConnectionIdx);
|
|
||||||
|
|
||||||
lcMatrix44 currentLocation = fromTrackSection->location;
|
|
||||||
lcMatrix44 mat44;
|
|
||||||
lcMatrix44 matOffset;
|
|
||||||
|
|
||||||
// calculate position on exiting connection point
|
|
||||||
mat44 = lcMatrix44Identity();
|
|
||||||
mat44 = lcMatrix44RotationZ(LC_DTOR * fromConnectIdx->angle);
|
|
||||||
|
|
||||||
matOffset = lcMatrix44Identity();
|
|
||||||
matOffset.SetTranslation(lcVector3(fromConnectIdx->xy_coordinate.x, fromConnectIdx->xy_coordinate.y,0));
|
|
||||||
|
|
||||||
matOffset = lcMul(mat44, matOffset);
|
|
||||||
|
|
||||||
currentLocation = lcMul(matOffset,currentLocation);
|
|
||||||
|
|
||||||
// calculate position on entering new track section
|
|
||||||
mat44 = lcMatrix44Identity();
|
|
||||||
mat44 = lcMatrix44RotationZ(LC_DTOR * (180 - toConnectIdx->angle));
|
|
||||||
|
|
||||||
matOffset = lcMatrix44Identity();
|
|
||||||
matOffset.SetTranslation(lcVector3(-toConnectIdx->xy_coordinate.x, -toConnectIdx->xy_coordinate.y,0));
|
|
||||||
|
|
||||||
matOffset = lcMul(matOffset,mat44);
|
|
||||||
|
|
||||||
currentLocation = lcMul(matOffset,currentLocation);
|
|
||||||
|
|
||||||
trackSections.push_back(new TrainTrackSection(toTrack, toTrackType,currentLocation, mCurrentStep, mColorIndex));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void TrainTrackSystem::addTrackSection(TrainTrackSection* fromTrackSection, int fromTrackSectionConnectionIdx, enum LC_TTS_TYPES toTrackType, int toTrackTypeConnectionIdx)
|
|
||||||
{
|
|
||||||
TrainTrackType* fromTrack = trainTrackTypes[fromTrackSection->trackTypeId];
|
|
||||||
TrainTrackConnectionPoint * fromConnectIdx = fromTrack->GetConnection(fromTrackSectionConnectionIdx);
|
|
||||||
TrainTrackType* toTrack = trainTrackTypes[toTrackType];
|
|
||||||
TrainTrackConnectionPoint * toConnectIdx = toTrack->GetConnection(toTrackTypeConnectionIdx);
|
|
||||||
|
|
||||||
lcMatrix44 currentLocation = fromTrackSection->location;
|
|
||||||
lcMatrix44 mat44;
|
|
||||||
lcMatrix44 matOffset;
|
|
||||||
|
|
||||||
// calculate position on exiting connection point
|
|
||||||
mat44 = lcMatrix44Identity();
|
|
||||||
mat44 = lcMatrix44RotationZ(LC_DTOR * fromConnectIdx->angle);
|
|
||||||
|
|
||||||
matOffset = lcMatrix44Identity();
|
|
||||||
matOffset.SetTranslation(lcVector3(fromConnectIdx->xy_coordinate.x, fromConnectIdx->xy_coordinate.y,0));
|
|
||||||
|
|
||||||
matOffset = lcMul(mat44, matOffset);
|
|
||||||
|
|
||||||
currentLocation = lcMul(matOffset,currentLocation);
|
|
||||||
|
|
||||||
// calculate position on entering new track section
|
|
||||||
mat44 = lcMatrix44Identity();
|
|
||||||
mat44 = lcMatrix44RotationZ(LC_DTOR * (180 - toConnectIdx->angle));
|
|
||||||
|
|
||||||
matOffset = lcMatrix44Identity();
|
|
||||||
matOffset.SetTranslation(lcVector3(-toConnectIdx->xy_coordinate.x, -toConnectIdx->xy_coordinate.y,0));
|
|
||||||
|
|
||||||
matOffset = lcMul(matOffset,mat44);
|
|
||||||
|
|
||||||
currentLocation = lcMul(matOffset,currentLocation);
|
|
||||||
|
|
||||||
trackSections.push_back(new TrainTrackSection(toTrack, toTrackType,currentLocation, mCurrentStep, mColorIndex));
|
|
||||||
}
|
|
||||||
|
|
||||||
bool TrainTrackSystem::deleteTrackSection(lcPiece* piece)
|
|
||||||
{
|
|
||||||
float precisionErrorNumber = 0.001;
|
|
||||||
lcVector3 vec3PieceDel = piece->GetRotationCenter();
|
|
||||||
|
|
||||||
for(unsigned long i = 0; i < trackSections.size(); i++) {
|
|
||||||
|
|
||||||
lcVector3 vec3PieceCur = trackSections[i]->location.GetTranslation();
|
|
||||||
|
|
||||||
if(abs(vec3PieceDel.x - vec3PieceCur.x) < precisionErrorNumber &&
|
|
||||||
abs(vec3PieceDel.y - vec3PieceCur.y) < precisionErrorNumber &&
|
|
||||||
abs(vec3PieceDel.z - vec3PieceCur.z) < precisionErrorNumber)
|
|
||||||
{
|
|
||||||
trackSections.erase(trackSections.begin() + i);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::vector<PieceInfo *> TrainTrackSystem::getTrackTypes()
|
|
||||||
{
|
|
||||||
std::vector<PieceInfo*> trackTypes;
|
|
||||||
for(int i = 0; i < LC_TTS_NUMITEMS; i++) {
|
|
||||||
trackTypes.push_back(trainTrackTypes[i]->pieceInfo);
|
|
||||||
}
|
|
||||||
return trackTypes;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::vector<TrainTrackSection*> TrainTrackSystem::GetTrackSections()
|
|
||||||
{
|
|
||||||
return trackSections;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::vector<TrainTrackSection*>* TrainTrackSystem::GetTrackSectionsPtr()
|
|
||||||
{
|
|
||||||
return &trackSections;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::vector<lcPiece*> TrainTrackSystem::GetPieces()
|
|
||||||
{
|
|
||||||
std::vector<lcPiece*> pieces;
|
|
||||||
PieceInfo* pieceInfo;
|
|
||||||
|
|
||||||
lcPiecesLibrary* Library = lcGetPiecesLibrary();
|
|
||||||
PieceInfo* pieceInfoSel = Library->FindPiece("3023.dat", nullptr, false, false);
|
|
||||||
|
|
||||||
TrainTrackSection* trackSection;
|
|
||||||
lcPiece* piece;
|
|
||||||
|
|
||||||
for(unsigned long i = 0; i < trackSections.size(); i++)
|
|
||||||
{
|
|
||||||
trackSection = trackSections[i];
|
|
||||||
pieceInfo = trainTrackTypes[trackSection->trackTypeId]->pieceInfo;
|
|
||||||
piece = new lcPiece(pieceInfo);
|
|
||||||
piece->Initialize(trackSection->location, trackSection->mCurrentStep);
|
|
||||||
piece->SetColorIndex(trackSection->mColorIndex);
|
|
||||||
pieces.push_back(piece);
|
|
||||||
|
|
||||||
// Add 1 x 2 plate on each connecton point, for detect selection
|
|
||||||
lcMatrix44 mat44;
|
|
||||||
lcMatrix44 matOffset;
|
|
||||||
|
|
||||||
for(int con_no = 0; con_no < trackSection->GetNoOfConnections(); con_no++)
|
|
||||||
{
|
|
||||||
mat44 = trackSection->GetConnectionLocation(con_no);
|
|
||||||
|
|
||||||
matOffset = lcMatrix44Identity();
|
|
||||||
matOffset.SetTranslation(lcVector3(-10, 0, 8));
|
|
||||||
|
|
||||||
mat44 = lcMul(matOffset,mat44);
|
|
||||||
|
|
||||||
matOffset = lcMatrix44Identity();
|
|
||||||
matOffset = lcMatrix44RotationZ(LC_DTOR * 90);
|
|
||||||
|
|
||||||
mat44 = lcMul(matOffset,mat44);
|
|
||||||
|
|
||||||
piece = new lcPiece(pieceInfoSel);
|
|
||||||
piece->Initialize(mat44, trackSection->mCurrentStep);
|
|
||||||
piece->SetColorIndex(trackSection->mColorIndex);
|
|
||||||
//pieces.Add(piece);
|
|
||||||
pieces.push_back(piece);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return pieces;
|
|
||||||
}
|
|
||||||
|
|
||||||
lcModel* TrainTrackSystem::GetModel()
|
|
||||||
{
|
|
||||||
std::vector<lcPiece*> trackSystem = this->GetPieces();
|
|
||||||
mModel->SetTrainTrackSystem(trackSystem);
|
|
||||||
return mModel.get();
|
|
||||||
}
|
|
||||||
|
|
||||||
void TrainTrackSystem::SetModel()
|
|
||||||
{
|
|
||||||
std::vector<lcPiece*> trackSystem = this->GetPieces();
|
|
||||||
mModel->SetTrainTrackSystem(trackSystem);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
LC_TTS_TYPES TrainTrackSystem::findTrackTypeByString(const char *tracktypeName)
|
|
||||||
{
|
|
||||||
std::string str_search = tracktypeName;
|
|
||||||
std::map<std::string ,LC_TTS_TYPES>::iterator search = trackTypesByName.find(str_search);
|
|
||||||
if (search != trackTypesByName.end()) {
|
|
||||||
return search->second;
|
|
||||||
}
|
|
||||||
return static_cast<LC_TTS_TYPES>(-1);
|
|
||||||
}
|
|
|
@ -1,105 +0,0 @@
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include "lc_library.h"
|
|
||||||
#include <vector>
|
|
||||||
#include <map>
|
|
||||||
#include <string>
|
|
||||||
#include <memory>
|
|
||||||
|
|
||||||
|
|
||||||
enum LC_TTS_TYPES {
|
|
||||||
LC_TTS_STRAIGHT,
|
|
||||||
LC_TTS_CURVED,
|
|
||||||
LC_TTS_CROSS,
|
|
||||||
LC_TTS_LEFT_BRANCH,
|
|
||||||
LC_TTS_RIGHT_BRANCH,
|
|
||||||
LC_TTS_NUMITEMS
|
|
||||||
};
|
|
||||||
|
|
||||||
class TrainTrackConnectionPoint {
|
|
||||||
public:
|
|
||||||
TrainTrackConnectionPoint(float angle, float x, float y);
|
|
||||||
float angle;
|
|
||||||
lcVector2 xy_coordinate;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
class TrainTrackType {
|
|
||||||
public:
|
|
||||||
|
|
||||||
void Load(lcPiecesLibrary* Library, char const* filename);
|
|
||||||
void AddConnection(TrainTrackConnectionPoint *connectionPoint);
|
|
||||||
TrainTrackConnectionPoint *GetConnection(int index);
|
|
||||||
|
|
||||||
//lcArray<TrainTrackConnectionPoint *>& GetConnections();
|
|
||||||
std::vector<TrainTrackConnectionPoint *>& GetConnections();
|
|
||||||
PieceInfo* pieceInfo;
|
|
||||||
int GetNoOfConnections();
|
|
||||||
private:
|
|
||||||
char const* filename;
|
|
||||||
//lcArray<TrainTrackConnectionPoint *> connectionPoints;
|
|
||||||
std::vector<TrainTrackConnectionPoint *> connectionPoints;
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
class TrainTrackSection {
|
|
||||||
public:
|
|
||||||
TrainTrackSection(TrainTrackType *trackType, enum LC_TTS_TYPES trackTypeId, lcMatrix44 location, int mCurrentStep, int mColorIndex);
|
|
||||||
lcMatrix44 GetConnectionLocation(int connectionNo);
|
|
||||||
int GetNoOfConnections();
|
|
||||||
int FindConnectionNumber(lcVector3 searchLocation);
|
|
||||||
TrainTrackType *trackType;
|
|
||||||
enum LC_TTS_TYPES trackTypeId;
|
|
||||||
lcMatrix44 location;
|
|
||||||
int mCurrentStep;
|
|
||||||
int mColorIndex;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
class TrainTrackSystem
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
TrainTrackSystem();
|
|
||||||
~TrainTrackSystem();
|
|
||||||
void setColorIndex(int colorIndex);
|
|
||||||
void setCurrentStep(int mCurrentStep);
|
|
||||||
|
|
||||||
void addFirstTrackSection(lcMatrix44 position, enum LC_TTS_TYPES trackTypeId);
|
|
||||||
void addTrackSection(int fromTrackSectionIdx, int fromTrackSectionConnectionIdx, enum LC_TTS_TYPES toTrackType, int toTrackTypeConnectionIdx);
|
|
||||||
void addTrackSection(TrainTrackSection* fromTrackSection, int fromTrackSectionConnectionIdx, enum LC_TTS_TYPES toTrackType, int toTrackTypeConnectionIdx);
|
|
||||||
bool deleteTrackSection(lcPiece* piece);
|
|
||||||
|
|
||||||
//lcArray<PieceInfo*> getTrackTypes();
|
|
||||||
std::vector<PieceInfo *> getTrackTypes();
|
|
||||||
|
|
||||||
//lcArray<TrainTrackSection*> GetTrackSections();
|
|
||||||
std::vector<TrainTrackSection *> GetTrackSections();
|
|
||||||
//lcArray<TrainTrackSection*>* GetTrackSectionsPtr();
|
|
||||||
std::vector<TrainTrackSection *>* GetTrackSectionsPtr();
|
|
||||||
|
|
||||||
//lcArray<lcPiece* > GetPieces();
|
|
||||||
std::vector<lcPiece *> GetPieces();
|
|
||||||
|
|
||||||
lcModel* GetModel();
|
|
||||||
void SetModel();
|
|
||||||
LC_TTS_TYPES findTrackTypeByString(const char *tracktypeName);
|
|
||||||
private:
|
|
||||||
|
|
||||||
//lcArray<TrainTrackType*> trainTrackTypes;
|
|
||||||
std::vector<TrainTrackType *> trainTrackTypes;
|
|
||||||
|
|
||||||
static const char* mTrackTypeFilenames[LC_TTS_NUMITEMS];
|
|
||||||
//lcArray<TrainTrackSection*> trackSections;
|
|
||||||
std::vector<TrainTrackSection *> trackSections;
|
|
||||||
|
|
||||||
int mColorIndex;
|
|
||||||
int mCurrentStep;
|
|
||||||
|
|
||||||
std::unique_ptr<lcModel> mModel;
|
|
||||||
|
|
||||||
std::map<std::string ,LC_TTS_TYPES> trackTypesByName;
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -170,7 +170,6 @@ SOURCES += \
|
||||||
common/image.cpp \
|
common/image.cpp \
|
||||||
common/light.cpp \
|
common/light.cpp \
|
||||||
common/minifig.cpp \
|
common/minifig.cpp \
|
||||||
common/traintracksystem.cpp \
|
|
||||||
common/object.cpp \
|
common/object.cpp \
|
||||||
common/piece.cpp \
|
common/piece.cpp \
|
||||||
common/pieceinf.cpp \
|
common/pieceinf.cpp \
|
||||||
|
@ -204,7 +203,6 @@ SOURCES += \
|
||||||
common/lc_mesh.cpp \
|
common/lc_mesh.cpp \
|
||||||
common/lc_meshloader.cpp \
|
common/lc_meshloader.cpp \
|
||||||
common/lc_minifigdialog.cpp \
|
common/lc_minifigdialog.cpp \
|
||||||
common/lc_traintracksystemdialog.cpp \
|
|
||||||
common/lc_model.cpp \
|
common/lc_model.cpp \
|
||||||
common/lc_modellistdialog.cpp \
|
common/lc_modellistdialog.cpp \
|
||||||
common/lc_objectproperty.cpp \
|
common/lc_objectproperty.cpp \
|
||||||
|
@ -245,7 +243,6 @@ HEADERS += \
|
||||||
common/image.h \
|
common/image.h \
|
||||||
common/light.h \
|
common/light.h \
|
||||||
common/minifig.h \
|
common/minifig.h \
|
||||||
common/traintracksystem.h \
|
|
||||||
common/object.h \
|
common/object.h \
|
||||||
common/piece.h \
|
common/piece.h \
|
||||||
common/pieceinf.h \
|
common/pieceinf.h \
|
||||||
|
@ -281,7 +278,6 @@ HEADERS += \
|
||||||
common/lc_mesh.h \
|
common/lc_mesh.h \
|
||||||
common/lc_meshloader.h \
|
common/lc_meshloader.h \
|
||||||
common/lc_minifigdialog.h \
|
common/lc_minifigdialog.h \
|
||||||
common/lc_traintracksystemdialog.h \
|
|
||||||
common/lc_model.h \
|
common/lc_model.h \
|
||||||
common/lc_modellistdialog.h \
|
common/lc_modellistdialog.h \
|
||||||
common/lc_objectproperty.h \
|
common/lc_objectproperty.h \
|
||||||
|
@ -329,7 +325,6 @@ FORMS += \
|
||||||
common/lc_categorydialog.ui \
|
common/lc_categorydialog.ui \
|
||||||
common/lc_groupdialog.ui \
|
common/lc_groupdialog.ui \
|
||||||
common/lc_minifigdialog.ui \
|
common/lc_minifigdialog.ui \
|
||||||
common/lc_traintracksystemdialog.ui \
|
|
||||||
common/lc_modellistdialog.ui \
|
common/lc_modellistdialog.ui \
|
||||||
common/lc_pagesetupdialog.ui \
|
common/lc_pagesetupdialog.ui \
|
||||||
common/lc_partpalettedialog.ui
|
common/lc_partpalettedialog.ui
|
||||||
|
|
Loading…
Reference in a new issue