mirror of
https://github.com/leozide/leocad
synced 2024-12-27 21:58:37 +01:00
Updated camera properties widget.
This commit is contained in:
parent
8eec5756c1
commit
bef0df8874
2 changed files with 212 additions and 31 deletions
|
@ -110,48 +110,116 @@ void lcPropertiesWidget::FloatChanged()
|
||||||
|
|
||||||
lcModel* Model = gMainWindow->GetActiveModel();
|
lcModel* Model = gMainWindow->GetActiveModel();
|
||||||
lcPiece* Piece = dynamic_cast<lcPiece*>(mFocusObject);
|
lcPiece* Piece = dynamic_cast<lcPiece*>(mFocusObject);
|
||||||
|
lcCamera* Camera = dynamic_cast<lcCamera*>(mFocusObject);
|
||||||
lcLight* Light = dynamic_cast<lcLight*>(mFocusObject);
|
lcLight* Light = dynamic_cast<lcLight*>(mFocusObject);
|
||||||
float Value = lcParseValueLocalized(Widget->text());
|
float Value = lcParseValueLocalized(Widget->text());
|
||||||
|
|
||||||
// todo: mouse drag
|
// todo: mouse drag
|
||||||
|
|
||||||
if (Index == PropertyIndex::ObjectPositionX || Index == PropertyIndex::ObjectPositionY || Index == PropertyIndex::ObjectPositionZ)
|
if (Piece || Light)
|
||||||
{
|
{
|
||||||
lcVector3 Center;
|
if (Index == PropertyIndex::ObjectPositionX || Index == PropertyIndex::ObjectPositionY || Index == PropertyIndex::ObjectPositionZ)
|
||||||
lcMatrix33 RelativeRotation;
|
{
|
||||||
Model->GetMoveRotateTransform(Center, RelativeRotation);
|
lcVector3 Center;
|
||||||
lcVector3 Position = Center;
|
lcMatrix33 RelativeRotation;
|
||||||
|
Model->GetMoveRotateTransform(Center, RelativeRotation);
|
||||||
|
lcVector3 Position = Center;
|
||||||
|
|
||||||
if (Index == PropertyIndex::ObjectPositionX)
|
if (Index == PropertyIndex::ObjectPositionX)
|
||||||
Position[0] = Value;
|
Position[0] = Value;
|
||||||
else if (Index == PropertyIndex::ObjectPositionY)
|
else if (Index == PropertyIndex::ObjectPositionY)
|
||||||
Position[1] = Value;
|
Position[1] = Value;
|
||||||
else if (Index == PropertyIndex::ObjectPositionZ)
|
else if (Index == PropertyIndex::ObjectPositionZ)
|
||||||
Position[2] = Value;
|
Position[2] = Value;
|
||||||
|
|
||||||
lcVector3 Distance = Position - Center;
|
lcVector3 Distance = Position - Center;
|
||||||
|
|
||||||
Model->MoveSelectedObjects(Distance, Distance, false, true, true, true);
|
Model->MoveSelectedObjects(Distance, Distance, false, true, true, true);
|
||||||
|
}
|
||||||
|
else if (Index == PropertyIndex::ObjectRotationX || Index == PropertyIndex::ObjectRotationY || Index == PropertyIndex::ObjectRotationZ)
|
||||||
|
{
|
||||||
|
lcVector3 InitialRotation(0.0f, 0.0f, 0.0f);
|
||||||
|
|
||||||
|
if (Piece)
|
||||||
|
InitialRotation = lcMatrix44ToEulerAngles(Piece->mModelWorld) * LC_RTOD;
|
||||||
|
else if (Light)
|
||||||
|
InitialRotation = lcMatrix44ToEulerAngles(Light->GetWorldMatrix()) * LC_RTOD;
|
||||||
|
|
||||||
|
lcVector3 Rotation = InitialRotation;
|
||||||
|
|
||||||
|
if (Index == PropertyIndex::ObjectRotationX)
|
||||||
|
Rotation[0] = Value;
|
||||||
|
else if (Index == PropertyIndex::ObjectRotationY)
|
||||||
|
Rotation[1] = Value;
|
||||||
|
else if (Index == PropertyIndex::ObjectRotationZ)
|
||||||
|
Rotation[2] = Value;
|
||||||
|
|
||||||
|
Model->RotateSelectedObjects(Rotation - InitialRotation, true, false, true, true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (Index == PropertyIndex::ObjectRotationX || Index == PropertyIndex::ObjectRotationY || Index == PropertyIndex::ObjectRotationZ)
|
|
||||||
|
if (Camera)
|
||||||
{
|
{
|
||||||
lcVector3 InitialRotation(0.0f, 0.0f, 0.0f);
|
if (Index == PropertyIndex::CameraPositionX || Index == PropertyIndex::CameraPositionY || Index == PropertyIndex::CameraPositionZ)
|
||||||
|
{
|
||||||
|
lcVector3 Center = Camera->mPosition;
|
||||||
|
lcVector3 Position = Center;
|
||||||
|
|
||||||
if (Piece)
|
if (Index == PropertyIndex::CameraPositionX)
|
||||||
InitialRotation = lcMatrix44ToEulerAngles(Piece->mModelWorld) * LC_RTOD;
|
Position[0] = Value;
|
||||||
else if (Light)
|
else if (Index == PropertyIndex::CameraPositionY)
|
||||||
InitialRotation = lcMatrix44ToEulerAngles(Light->GetWorldMatrix()) * LC_RTOD;
|
Position[1] = Value;
|
||||||
|
else if (Index == PropertyIndex::CameraPositionZ)
|
||||||
|
Position[2] = Value;
|
||||||
|
|
||||||
lcVector3 Rotation = InitialRotation;
|
lcVector3 Distance = Position - Center;
|
||||||
|
|
||||||
if (Index == PropertyIndex::ObjectRotationX)
|
Model->MoveSelectedObjects(Distance, Distance, false, false, true, true);
|
||||||
Rotation[0] = Value;
|
}
|
||||||
else if (Index == PropertyIndex::ObjectRotationY)
|
else if (Index == PropertyIndex::CameraTargetX || Index == PropertyIndex::CameraTargetY || Index == PropertyIndex::CameraTargetZ)
|
||||||
Rotation[1] = Value;
|
{
|
||||||
else if (Index == PropertyIndex::ObjectRotationZ)
|
lcVector3 Center = Camera->mTargetPosition;
|
||||||
Rotation[2] = Value;
|
lcVector3 Position = Center;
|
||||||
|
|
||||||
Model->RotateSelectedObjects(Rotation - InitialRotation, true, false, true, true);
|
if (Index == PropertyIndex::CameraTargetX)
|
||||||
|
Position[0] = Value;
|
||||||
|
else if (Index == PropertyIndex::CameraTargetY)
|
||||||
|
Position[1] = Value;
|
||||||
|
else if (Index == PropertyIndex::CameraTargetZ)
|
||||||
|
Position[2] = Value;
|
||||||
|
|
||||||
|
lcVector3 Distance = Position - Center;
|
||||||
|
|
||||||
|
Model->MoveSelectedObjects(Distance, Distance, false, false, true, true);
|
||||||
|
}
|
||||||
|
else if (Index == PropertyIndex::CameraUpX || Index == PropertyIndex::CameraUpY || Index == PropertyIndex::CameraUpZ)
|
||||||
|
{
|
||||||
|
lcVector3 Center = Camera->mUpVector;
|
||||||
|
lcVector3 Position = Center;
|
||||||
|
|
||||||
|
if (Index == PropertyIndex::CameraUpX)
|
||||||
|
Position[0] = Value;
|
||||||
|
else if (Index == PropertyIndex::CameraUpY)
|
||||||
|
Position[1] = Value;
|
||||||
|
else if (Index == PropertyIndex::CameraUpZ)
|
||||||
|
Position[2] = Value;
|
||||||
|
|
||||||
|
lcVector3 Distance = Position - Center;
|
||||||
|
|
||||||
|
Model->MoveSelectedObjects(Distance, Distance, false, false, true, true);
|
||||||
|
}
|
||||||
|
else if (Index == PropertyIndex::CameraFOV)
|
||||||
|
{
|
||||||
|
Model->SetCameraFOV(Camera, Value);
|
||||||
|
}
|
||||||
|
else if (Index == PropertyIndex::CameraNear)
|
||||||
|
{
|
||||||
|
Model->SetCameraZNear(Camera, Value);
|
||||||
|
}
|
||||||
|
else if (Index == PropertyIndex::CameraFar)
|
||||||
|
{
|
||||||
|
Model->SetCameraZFar(Camera, Value);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -262,6 +330,40 @@ void lcPropertiesWidget::AddStepNumberProperty(PropertyIndex Index, const QStrin
|
||||||
mLayoutRow++;
|
mLayoutRow++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void lcPropertiesWidget::StringChanged()
|
||||||
|
{
|
||||||
|
QLineEdit* Widget = qobject_cast<QLineEdit*>(sender());
|
||||||
|
PropertyIndex Index = GetWidgetIndex(Widget);
|
||||||
|
|
||||||
|
if (Index == PropertyIndex::Count)
|
||||||
|
return;
|
||||||
|
|
||||||
|
lcModel* Model = gMainWindow->GetActiveModel();
|
||||||
|
lcCamera* Camera = dynamic_cast<lcCamera*>(mFocusObject);
|
||||||
|
|
||||||
|
if (!Model || !Camera)
|
||||||
|
return;
|
||||||
|
|
||||||
|
QString Text = Widget->text();
|
||||||
|
|
||||||
|
if (Index == PropertyIndex::CameraName)
|
||||||
|
{
|
||||||
|
Model->SetCameraName(Camera, Text);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void lcPropertiesWidget::UpdateString(PropertyIndex Index, const QString& Text)
|
||||||
|
{
|
||||||
|
QLineEdit* Widget = qobject_cast<QLineEdit*>(mPropertyWidgets[static_cast<int>(Index)]);
|
||||||
|
|
||||||
|
if (Widget)
|
||||||
|
{
|
||||||
|
QSignalBlocker Blocker(Widget);
|
||||||
|
|
||||||
|
Widget->setText(Text);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void lcPropertiesWidget::AddStringProperty(PropertyIndex Index, const QString& Text, const QString& ToolTip)
|
void lcPropertiesWidget::AddStringProperty(PropertyIndex Index, const QString& Text, const QString& ToolTip)
|
||||||
{
|
{
|
||||||
AddLabel(Text, ToolTip);
|
AddLabel(Text, ToolTip);
|
||||||
|
@ -269,6 +371,8 @@ void lcPropertiesWidget::AddStringProperty(PropertyIndex Index, const QString& T
|
||||||
QLineEdit* Widget = new QLineEdit(this);
|
QLineEdit* Widget = new QLineEdit(this);
|
||||||
Widget->setToolTip(ToolTip);
|
Widget->setToolTip(ToolTip);
|
||||||
|
|
||||||
|
connect(Widget, &QLineEdit::editingFinished, this, &lcPropertiesWidget::StringChanged);
|
||||||
|
|
||||||
mLayout->addWidget(Widget, mLayoutRow, 2);
|
mLayout->addWidget(Widget, mLayoutRow, 2);
|
||||||
mCurrentCategory->Widgets.push_back(Widget);
|
mCurrentCategory->Widgets.push_back(Widget);
|
||||||
|
|
||||||
|
@ -277,6 +381,38 @@ void lcPropertiesWidget::AddStringProperty(PropertyIndex Index, const QString& T
|
||||||
mLayoutRow++;
|
mLayoutRow++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void lcPropertiesWidget::StringListChanged(int Value)
|
||||||
|
{
|
||||||
|
QComboBox* Widget = qobject_cast<QComboBox*>(sender());
|
||||||
|
PropertyIndex Index = GetWidgetIndex(Widget);
|
||||||
|
|
||||||
|
if (Index == PropertyIndex::Count)
|
||||||
|
return;
|
||||||
|
|
||||||
|
lcModel* Model = gMainWindow->GetActiveModel();
|
||||||
|
lcCamera* Camera = dynamic_cast<lcCamera*>(mFocusObject);
|
||||||
|
|
||||||
|
if (!Model || !Camera)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (Index == PropertyIndex::CameraType)
|
||||||
|
{
|
||||||
|
Model->SetCameraOrthographic(Camera, Value == 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void lcPropertiesWidget::UpdateStringList(PropertyIndex Index, int ListIndex)
|
||||||
|
{
|
||||||
|
QComboBox* Widget = qobject_cast<QComboBox*>(mPropertyWidgets[static_cast<int>(Index)]);
|
||||||
|
|
||||||
|
if (Widget)
|
||||||
|
{
|
||||||
|
QSignalBlocker Blocker(Widget);
|
||||||
|
|
||||||
|
Widget->setCurrentIndex(ListIndex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void lcPropertiesWidget::AddStringListProperty(PropertyIndex Index, const QString& Text, const QString& ToolTip, const QStringList& Strings)
|
void lcPropertiesWidget::AddStringListProperty(PropertyIndex Index, const QString& Text, const QString& ToolTip, const QStringList& Strings)
|
||||||
{
|
{
|
||||||
AddLabel(Text, ToolTip);
|
AddLabel(Text, ToolTip);
|
||||||
|
@ -284,11 +420,8 @@ void lcPropertiesWidget::AddStringListProperty(PropertyIndex Index, const QStrin
|
||||||
QComboBox* Widget = new QComboBox(this);
|
QComboBox* Widget = new QComboBox(this);
|
||||||
Widget->setToolTip(ToolTip);
|
Widget->setToolTip(ToolTip);
|
||||||
Widget->addItems(Strings);
|
Widget->addItems(Strings);
|
||||||
// int value = Item->data(0, PropertyValueRole).toInt();
|
|
||||||
|
|
||||||
// updateColorEditor(editor, value);
|
connect(Widget, qOverload<int>(&QComboBox::currentIndexChanged), this, &lcPropertiesWidget::StringListChanged);
|
||||||
|
|
||||||
// connect(editor, SIGNAL(clicked()), this, SLOT(slotColorButtonClicked()));
|
|
||||||
|
|
||||||
mLayout->addWidget(Widget, mLayoutRow, 2);
|
mLayout->addWidget(Widget, mLayoutRow, 2);
|
||||||
mCurrentCategory->Widgets.push_back(Widget);
|
mCurrentCategory->Widgets.push_back(Widget);
|
||||||
|
@ -663,6 +796,50 @@ void lcPropertiesWidget::SetCameraLayout()
|
||||||
void lcPropertiesWidget::SetCamera(lcObject* Focus)
|
void lcPropertiesWidget::SetCamera(lcObject* Focus)
|
||||||
{
|
{
|
||||||
SetCameraLayout();
|
SetCameraLayout();
|
||||||
|
|
||||||
|
lcCamera* Camera = dynamic_cast<lcCamera*>(Focus);
|
||||||
|
mFocusObject = Camera;
|
||||||
|
|
||||||
|
lcVector3 Position(0.0f, 0.0f, 0.0f);
|
||||||
|
lcVector3 Target(0.0f, 0.0f, 0.0f);
|
||||||
|
lcVector3 UpVector(0.0f, 0.0f, 0.0f);
|
||||||
|
bool Ortho = false;
|
||||||
|
float FoV = 60.0f;
|
||||||
|
float ZNear = 1.0f;
|
||||||
|
float ZFar = 100.0f;
|
||||||
|
QString Name;
|
||||||
|
|
||||||
|
if (Camera)
|
||||||
|
{
|
||||||
|
Position = Camera->mPosition;
|
||||||
|
Target = Camera->mTargetPosition;
|
||||||
|
UpVector = Camera->mUpVector;
|
||||||
|
|
||||||
|
Ortho = Camera->IsOrtho();
|
||||||
|
FoV = Camera->m_fovy;
|
||||||
|
ZNear = Camera->m_zNear;
|
||||||
|
ZFar = Camera->m_zFar;
|
||||||
|
Name = Camera->GetName();
|
||||||
|
}
|
||||||
|
|
||||||
|
UpdateString(PropertyIndex::CameraName, Name);
|
||||||
|
UpdateStringList(PropertyIndex::CameraType, Ortho ? 1 : 0);
|
||||||
|
|
||||||
|
UpdateFloat(PropertyIndex::CameraFOV, FoV);
|
||||||
|
UpdateFloat(PropertyIndex::CameraNear, ZNear);
|
||||||
|
UpdateFloat(PropertyIndex::CameraFar, ZFar);
|
||||||
|
|
||||||
|
UpdateFloat(PropertyIndex::CameraPositionX, Position[0]);
|
||||||
|
UpdateFloat(PropertyIndex::CameraPositionY, Position[1]);
|
||||||
|
UpdateFloat(PropertyIndex::CameraPositionZ, Position[2]);
|
||||||
|
|
||||||
|
UpdateFloat(PropertyIndex::CameraTargetX, Target[0]);
|
||||||
|
UpdateFloat(PropertyIndex::CameraTargetY, Target[1]);
|
||||||
|
UpdateFloat(PropertyIndex::CameraTargetZ, Target[2]);
|
||||||
|
|
||||||
|
UpdateFloat(PropertyIndex::CameraUpX, UpVector[0]);
|
||||||
|
UpdateFloat(PropertyIndex::CameraUpY, UpVector[1]);
|
||||||
|
UpdateFloat(PropertyIndex::CameraUpZ, UpVector[2]);
|
||||||
}
|
}
|
||||||
|
|
||||||
void lcPropertiesWidget::SetLightLayout(lcLightType LightType, lcLightAreaShape LightAreaShape)
|
void lcPropertiesWidget::SetLightLayout(lcLightType LightType, lcLightAreaShape LightAreaShape)
|
||||||
|
|
|
@ -17,6 +17,8 @@ protected slots:
|
||||||
void CategoryStateChanged(bool Expanded);
|
void CategoryStateChanged(bool Expanded);
|
||||||
void FloatChanged();
|
void FloatChanged();
|
||||||
void StepNumberChanged();
|
void StepNumberChanged();
|
||||||
|
void StringChanged();
|
||||||
|
void StringListChanged(int Index);
|
||||||
void PieceColorButtonClicked();
|
void PieceColorButtonClicked();
|
||||||
void PieceColorChanged(int ColorIndex);
|
void PieceColorChanged(int ColorIndex);
|
||||||
void PieceIdButtonClicked();
|
void PieceIdButtonClicked();
|
||||||
|
@ -106,6 +108,8 @@ protected:
|
||||||
|
|
||||||
void UpdateFloat(PropertyIndex Index, float Value);
|
void UpdateFloat(PropertyIndex Index, float Value);
|
||||||
void UpdateStepNumber(PropertyIndex Index, lcStep Step, lcStep Min, lcStep Max);
|
void UpdateStepNumber(PropertyIndex Index, lcStep Step, lcStep Min, lcStep Max);
|
||||||
|
void UpdateString(PropertyIndex Index, const QString& Text);
|
||||||
|
void UpdateStringList(PropertyIndex Index, int ListIndex);
|
||||||
void UpdatePieceColor(PropertyIndex Index, int ColorIndex);
|
void UpdatePieceColor(PropertyIndex Index, int ColorIndex);
|
||||||
void UpdatePieceId(PropertyIndex Index, const QString& Name);
|
void UpdatePieceId(PropertyIndex Index, const QString& Name);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue