Renamed shadowless to cast shadow.

This commit is contained in:
Leonardo Zide 2023-09-02 10:40:52 -07:00
parent 9648dbb977
commit 080a418e1b
7 changed files with 61 additions and 45 deletions

View file

@ -3136,6 +3136,19 @@ void lcModel::SetLightColor(lcLight* Light, const lcVector3& Color)
UpdateAllViews(); UpdateAllViews();
} }
void lcModel::SetLightCastShadow(lcLight* Light, bool CastShadow)
{
if (Light->GetCastShadow() == CastShadow)
return;
Light->SetCastShadow(CastShadow);
Light->UpdatePosition(mCurrentStep);
SaveCheckpoint(tr("Changing Light Shadow"));
gMainWindow->UpdateSelectedObjects(false);
UpdateAllViews();
}
void lcModel::SetLightName(lcLight* Light, const QString &Name) void lcModel::SetLightName(lcLight* Light, const QString &Name)
{ {
if (Light->GetName() == Name) if (Light->GetName() == Name)

View file

@ -370,6 +370,7 @@ public:
void SetLightType(lcLight* Light, lcLightType LightType); void SetLightType(lcLight* Light, lcLightType LightType);
void SetLightColor(lcLight* Light, const lcVector3& Color); void SetLightColor(lcLight* Light, const lcVector3& Color);
void SetLightCastShadow(lcLight* Light, bool CastShadow);
void SetLightName(lcLight* Light, const QString& Name); void SetLightName(lcLight* Light, const QString& Name);
void UpdateLight(lcLight* Light, const lcLightProperties Props, int Property); void UpdateLight(lcLight* Light, const lcLightProperties Props, int Property);

View file

@ -42,9 +42,7 @@ lcLight::lcLight(const lcVector3& Position, const lcVector3& TargetPosition, lcL
} }
mPOVRayLight = false; mPOVRayLight = false;
mShadowless = false;
mEnableCutoff = false; mEnableCutoff = false;
mColor = lcVector3(1.0f, 1.0f, 1.0f);
mAttenuation = lcVector3(1.0f, 0.0f, 0.0f); mAttenuation = lcVector3(1.0f, 0.0f, 0.0f);
mLightFactor[0] = LightType == lcLightType::Directional ? 11.4f : 0.25f; mLightFactor[0] = LightType == lcLightType::Directional ? 11.4f : 0.25f;
mLightFactor[1] = LightType == lcLightType::Area ? 0.25f : LightType == lcLightType::Spot ? 0.150f : 0.0f; mLightFactor[1] = LightType == lcLightType::Area ? 0.25f : LightType == lcLightType::Spot ? 0.150f : 0.0f;
@ -108,7 +106,7 @@ void lcLight::SaveLDraw(QTextStream& Stream) const
if (mPOVRayLight) if (mPOVRayLight)
Stream << QLatin1String("0 !LEOCAD LIGHT POV_RAY") << LineEnding; Stream << QLatin1String("0 !LEOCAD LIGHT POV_RAY") << LineEnding;
if (mShadowless) if (!mCastShadow)
Stream << QLatin1String("0 !LEOCAD LIGHT SHADOWLESS") << LineEnding; Stream << QLatin1String("0 !LEOCAD LIGHT SHADOWLESS") << LineEnding;
if (mPositionKeys.GetSize() > 1) if (mPositionKeys.GetSize() > 1)
@ -485,7 +483,7 @@ bool lcLight::ParseLDrawLine(QTextStream& Stream)
} }
else if (Token == QLatin1String("SHADOWLESS")) else if (Token == QLatin1String("SHADOWLESS"))
{ {
mShadowless = true; mCastShadow = false;
} }
else if ((Token == QLatin1String("POWER_KEY")) || (Token == QLatin1String("STRENGTH_KEY"))) else if ((Token == QLatin1String("POWER_KEY")) || (Token == QLatin1String("STRENGTH_KEY")))
mSpotExponentKeys.LoadKeysLDraw(Stream); mSpotExponentKeys.LoadKeysLDraw(Stream);
@ -609,9 +607,6 @@ void lcLight::UpdateLight(lcStep Step, lcLightProperties Props, int Property)
mLightSpecular = Props.mLightSpecular; mLightSpecular = Props.mLightSpecular;
mLightSpecularKeys.ChangeKey(mLightSpecular, Step, false); mLightSpecularKeys.ChangeKey(mLightSpecular, Step, false);
break; break;
case LC_LIGHT_SHADOWLESS:
mShadowless = Props.mShadowless;
break;
case LC_LIGHT_EXPONENT: case LC_LIGHT_EXPONENT:
if (Props.mPOVRayLight) if (Props.mPOVRayLight)
{ {
@ -877,6 +872,11 @@ void lcLight::SetColor(const lcVector3& Color, lcStep Step, bool AddKey)
mColorKeys.ChangeKey(Color, Step, AddKey); mColorKeys.ChangeKey(Color, Step, AddKey);
} }
void lcLight::SetCastShadow(bool CastShadow)
{
mCastShadow = CastShadow;
}
void lcLight::InsertTime(lcStep Start, lcStep Time) void lcLight::InsertTime(lcStep Start, lcStep Time)
{ {
mPositionKeys.InsertTime(Start, Time); mPositionKeys.InsertTime(Start, Time);

View file

@ -48,7 +48,6 @@ enum lcLightProperty
LC_LIGHT_FACTOR, LC_LIGHT_FACTOR,
LC_LIGHT_DIFFUSE, LC_LIGHT_DIFFUSE,
LC_LIGHT_SPECULAR, LC_LIGHT_SPECULAR,
LC_LIGHT_SHADOWLESS,
LC_LIGHT_EXPONENT, LC_LIGHT_EXPONENT,
LC_LIGHT_AREA_GRID, LC_LIGHT_AREA_GRID,
LC_LIGHT_SPOT_SIZE, LC_LIGHT_SPOT_SIZE,
@ -71,7 +70,6 @@ struct lcLightProperties
float mSpotTightness; float mSpotTightness;
float mSpotSize; float mSpotSize;
bool mEnableCutoff; bool mEnableCutoff;
bool mShadowless;
bool mPOVRayLight; bool mPOVRayLight;
int mLightShape; int mLightShape;
}; };
@ -323,6 +321,13 @@ public:
return mColor; return mColor;
} }
void SetCastShadow(bool CastShadow);
bool GetCastShadow() const
{
return mCastShadow;
}
void SetName(const QString& Name) void SetName(const QString& Name)
{ {
mName = Name; mName = Name;
@ -352,7 +357,6 @@ public:
props.mSpotSize = mSpotSize; props.mSpotSize = mSpotSize;
props.mPOVRayLight = mPOVRayLight; props.mPOVRayLight = mPOVRayLight;
props.mEnableCutoff = mEnableCutoff; props.mEnableCutoff = mEnableCutoff;
props.mShadowless = mShadowless;
props.mAreaGrid = mAreaGrid; props.mAreaGrid = mAreaGrid;
props.mLightShape = mLightShape; props.mLightShape = mLightShape;
return props; return props;
@ -367,13 +371,12 @@ public:
lcVector2 mLightFactor; lcVector2 mLightFactor;
lcVector2 mAreaGrid; lcVector2 mAreaGrid;
lcVector2 mAreaSize; lcVector2 mAreaSize;
bool mAngleSet; bool mAngleSet;
bool mSpotBlendSet; bool mSpotBlendSet;
bool mSpotCutoffSet; bool mSpotCutoffSet;
bool mHeightSet; bool mHeightSet;
bool mEnableCutoff; bool mEnableCutoff;
bool mPOVRayLight; bool mPOVRayLight;
bool mShadowless;
float mLightDiffuse; float mLightDiffuse;
float mLightSpecular; float mLightSpecular;
float mSpotSize; float mSpotSize;
@ -385,8 +388,23 @@ public:
QString mName; QString mName;
protected: protected:
lcVector3 mColor; void DrawPointLight(lcContext* Context) const;
void DrawSpotLight(lcContext* Context) const;
void DrawDirectionalLight(lcContext* Context) const;
void DrawAreaLight(lcContext* Context) const;
float SetupLightMatrix(lcContext* Context) const;
void DrawSphere(lcContext* Context, float Radius) const;
void DrawCylinder(lcContext* Context, float Radius, float Height) const;
void DrawTarget(lcContext* Context, float TargetDistance) const;
void DrawCone(lcContext* Context, float TargetDistance) const;
quint32 mState;
lcLightType mLightType;
lcVector3 mColor = lcVector3(1.0f, 1.0f, 1.0f);
bool mCastShadow = true;
int mLightShape;
lcObjectKeyArray<lcVector3> mPositionKeys; lcObjectKeyArray<lcVector3> mPositionKeys;
lcObjectKeyArray<lcVector3> mTargetPositionKeys; lcObjectKeyArray<lcVector3> mTargetPositionKeys;
lcObjectKeyArray<lcVector3> mUpVectorKeys; lcObjectKeyArray<lcVector3> mUpVectorKeys;
@ -402,19 +420,4 @@ protected:
lcObjectKeyArray<float> mSpotFalloffKeys; lcObjectKeyArray<float> mSpotFalloffKeys;
lcObjectKeyArray<float> mSpotExponentKeys; lcObjectKeyArray<float> mSpotExponentKeys;
lcObjectKeyArray<float> mSpotTightnessKeys; lcObjectKeyArray<float> mSpotTightnessKeys;
void DrawPointLight(lcContext* Context) const;
void DrawSpotLight(lcContext* Context) const;
void DrawDirectionalLight(lcContext* Context) const;
void DrawAreaLight(lcContext* Context) const;
float SetupLightMatrix(lcContext* Context) const;
void DrawSphere(lcContext* Context, float Radius) const;
void DrawCylinder(lcContext* Context, float Radius, float Height) const;
void DrawTarget(lcContext* Context, float TargetDistance) const;
void DrawCone(lcContext* Context, float TargetDistance) const;
quint32 mState;
lcLightType mLightType;
int mLightShape;
}; };

View file

@ -2174,7 +2174,7 @@ bool Project::ExportPOVRay(const QString& FileName)
const lcVector3& Location = Light->mPosition; const lcVector3& Location = Light->mPosition;
const QString LightName = QString(Light->mName).replace(" ","_"); const QString LightName = QString(Light->mName).replace(" ","_");
LightType = Light->GetLightType(); LightType = Light->GetLightType();
Shadowless = static_cast<int>(Light->mShadowless); Shadowless = Light->GetCastShadow() ? 0 : 1;
LightColor = Light->GetColor(); LightColor = Light->GetColor();
Power = Light->mPOVRayExponent; Power = Light->mPOVRayExponent;
switch(LightType) switch(LightType)

View file

@ -686,16 +686,15 @@ void lcQPropertiesTree::slotToggled(bool Value)
if (Light) if (Light)
{ {
lcLightProperties Props = Light->GetLightProperties();
if (Item == lightEnableCutoff) if (Item == lightEnableCutoff)
{ {
lcLightProperties Props = Light->GetLightProperties();
Props.mEnableCutoff = Value; Props.mEnableCutoff = Value;
Model->UpdateLight(Light, Props, LC_LIGHT_USE_CUTOFF); Model->UpdateLight(Light, Props, LC_LIGHT_USE_CUTOFF);
} }
else if (Item == lightShadowless) else if (Item == mLightCastShadowItem)
{ {
Props.mShadowless = Value; Model->SetLightCastShadow(Light, Value);
Model->UpdateLight(Light, Props, LC_LIGHT_SHADOWLESS);
} }
} }
} }
@ -1197,7 +1196,7 @@ void lcQPropertiesTree::SetEmpty()
lightSpotSize = nullptr; lightSpotSize = nullptr;
lightShape = nullptr; lightShape = nullptr;
lightFormat = nullptr; lightFormat = nullptr;
lightShadowless = nullptr; mLightCastShadowItem = nullptr;
lightAreaGridRows = nullptr; lightAreaGridRows = nullptr;
lightAreaGridColumns = nullptr; lightAreaGridColumns = nullptr;
lightSpotFalloff = nullptr; lightSpotFalloff = nullptr;
@ -1449,7 +1448,7 @@ void lcQPropertiesTree::SetLight(lcObject* Focus)
float Exponent = 0.0f; float Exponent = 0.0f;
bool EnableCutoff = false; bool EnableCutoff = false;
bool POVRayLight = false; bool POVRayLight = false;
bool Shadowless = false; bool CastShadow = true;
PropertyType TargetProperty = PropertyFloat; PropertyType TargetProperty = PropertyFloat;
PropertyType SpotSizeProperty = PropertyFloatLightSpotSize; PropertyType SpotSizeProperty = PropertyFloatLightSpotSize;
lcVector3 Position(0.0f, 0.0f, 0.0f); lcVector3 Position(0.0f, 0.0f, 0.0f);
@ -1466,7 +1465,7 @@ void lcQPropertiesTree::SetLight(lcObject* Focus)
FormatIndex = static_cast<int>(POVRayLight); FormatIndex = static_cast<int>(POVRayLight);
Format = POVRayLight ? QLatin1String("POVRay") : QLatin1String("Blender"); Format = POVRayLight ? QLatin1String("POVRay") : QLatin1String("Blender");
Shadowless = Light->mShadowless; CastShadow = Light->GetCastShadow();
Position = Light->mPosition; Position = Light->mPosition;
Target = Light->mTargetPosition; Target = Light->mTargetPosition;
Color = lcQColorFromVector3(Light->GetColor()); Color = lcQColorFromVector3(Light->GetColor());
@ -1578,8 +1577,8 @@ void lcQPropertiesTree::SetLight(lcObject* Focus)
mLightNameItem = addProperty(mLightAttributesItem, tr("Name"), PropertyString); mLightNameItem = addProperty(mLightAttributesItem, tr("Name"), PropertyString);
mLightTypeItem = addProperty(mLightAttributesItem, tr("Type"), PropertyStringList); mLightTypeItem = addProperty(mLightAttributesItem, tr("Type"), PropertyStringList);
mLightColorItem = addProperty(mLightAttributesItem, tr("Color"), PropertyColor); mLightColorItem = addProperty(mLightAttributesItem, tr("Color"), PropertyColor);
mLightCastShadowItem = addProperty(mLightAttributesItem, tr("Cast Shadows"), PropertyBool);
lightShadowless = addProperty(mLightAttributesItem, tr("Cast Shadows"), PropertyBool);
lightExponent = addProperty(mLightAttributesItem, ExponentLabel, PropertyFloat); lightExponent = addProperty(mLightAttributesItem, ExponentLabel, PropertyFloat);
if ((LightType == lcLightType::Point || LightType == lcLightType::Directional) && !POVRayLight) if ((LightType == lcLightType::Point || LightType == lcLightType::Directional) && !POVRayLight)
@ -1691,8 +1690,8 @@ void lcQPropertiesTree::SetLight(lcObject* Focus)
mLightTypeItem->setText(1, lcLight::GetLightTypeString(LightType)); mLightTypeItem->setText(1, lcLight::GetLightTypeString(LightType));
mLightTypeItem->setData(0, PropertyValueRole, static_cast<int>(LightType)); mLightTypeItem->setData(0, PropertyValueRole, static_cast<int>(LightType));
lightShadowless->setCheckState(1, Shadowless ? Qt::Checked : Qt::Unchecked); mLightCastShadowItem->setCheckState(1, CastShadow ? Qt::Checked : Qt::Unchecked);
lightShadowless->setData(0, PropertyValueRole, Shadowless); mLightCastShadowItem->setData(0, PropertyValueRole, CastShadow);
lightExponent->setText(1, lcFormatValueLocalized(Exponent)); lightExponent->setText(1, lcFormatValueLocalized(Exponent));
lightExponent->setData(0, PropertyValueRole, Exponent); lightExponent->setData(0, PropertyValueRole, Exponent);

View file

@ -149,7 +149,7 @@ protected:
QTreeWidgetItem* lightFactorB; QTreeWidgetItem* lightFactorB;
QTreeWidgetItem* mLightNameItem; QTreeWidgetItem* mLightNameItem;
QTreeWidgetItem* lightFormat; QTreeWidgetItem* lightFormat;
QTreeWidgetItem* lightShadowless; QTreeWidgetItem* mLightCastShadowItem;
QTreeWidgetItem* lightAreaGridRows; QTreeWidgetItem* lightAreaGridRows;
QTreeWidgetItem* lightAreaGridColumns; QTreeWidgetItem* lightAreaGridColumns;
QTreeWidgetItem* lightSpotFalloff; QTreeWidgetItem* lightSpotFalloff;