void ezQtPropertyGridWidget::SetSelection(const ezDeque<const ezDocumentObject*>& selection, const char* szIncludeProperties, const char* szExcludeProperties) { ezQtScopedUpdatesDisabled _(this); ClearSelection(); m_Selection = selection; if (m_Selection.IsEmpty()) return; { ezHybridArray<ezPropertySelection, 8> Items; Items.Reserve(m_Selection.GetCount()); for (const auto* sel : m_Selection) { ezPropertySelection s; s.m_pObject = sel; Items.PushBack(s); } const ezRTTI* pCommonType = ezQtPropertyWidget::GetCommonBaseType(Items); m_pTypeWidget = new ezQtTypeWidget(m_pContent, this, GetObjectAccessor(), pCommonType, szIncludeProperties, szExcludeProperties); m_pTypeWidget->SetSelection(Items); m_pContentLayout->insertWidget(0, m_pTypeWidget, 0); } }
void ezNonUniformBoxManipulatorAdapter::Update() { m_Gizmo.SetVisible(m_bManipulatorIsVisible); ezObjectAccessorBase* pObjectAccessor = GetObjectAccessor(); const ezNonUniformBoxManipulatorAttribute* pAttr = static_cast<const ezNonUniformBoxManipulatorAttribute*>(m_pManipulatorAttr); if (pAttr->HasSixAxis()) { const float fNegX = pObjectAccessor->Get<float>(m_pObject, GetProperty(pAttr->GetNegXProperty())); const float fPosX = pObjectAccessor->Get<float>(m_pObject, GetProperty(pAttr->GetPosXProperty())); const float fNegY = pObjectAccessor->Get<float>(m_pObject, GetProperty(pAttr->GetNegYProperty())); const float fPosY = pObjectAccessor->Get<float>(m_pObject, GetProperty(pAttr->GetPosYProperty())); const float fNegZ = pObjectAccessor->Get<float>(m_pObject, GetProperty(pAttr->GetNegZProperty())); const float fPosZ = pObjectAccessor->Get<float>(m_pObject, GetProperty(pAttr->GetPosZProperty())); m_Gizmo.SetSize(ezVec3(fNegX, fNegY, fNegZ), ezVec3(fPosX, fPosY, fPosZ)); } else { const float fSizeX = pObjectAccessor->Get<float>(m_pObject, GetProperty(pAttr->GetSizeXProperty())); const float fSizeY = pObjectAccessor->Get<float>(m_pObject, GetProperty(pAttr->GetSizeYProperty())); const float fSizeZ = pObjectAccessor->Get<float>(m_pObject, GetProperty(pAttr->GetSizeZProperty())); m_Gizmo.SetSize(ezVec3(fSizeX, fSizeY, fSizeZ) * 0.5f, ezVec3(fSizeX, fSizeY, fSizeZ) * 0.5f, true); } m_Gizmo.SetTransformation(GetObjectTransform()); }
void ezDirectionVisualizerAdapter::Update() { m_Gizmo.SetVisible(m_bVisualizerIsVisible); const ezDirectionVisualizerAttribute* pAttr = static_cast<const ezDirectionVisualizerAttribute*>(m_pVisualizerAttr); if (!pAttr->GetColorProperty().IsEmpty()) { ezObjectAccessorBase* pObjectAccessor = GetObjectAccessor(); ezVariant value; pObjectAccessor->GetValue(m_pObject, GetProperty(pAttr->GetColorProperty()), value); EZ_ASSERT_DEBUG(value.IsValid() && value.CanConvertTo<ezColor>(), "Invalid property bound to ezDirectionVisualizerAttribute 'color'"); m_Gizmo.SetColor(value.ConvertTo<ezColor>()); } }
void ezSphereVisualizerAdapter::Update() { m_Gizmo.SetVisible(m_bVisualizerIsVisible); ezObjectAccessorBase* pObjectAccessor = GetObjectAccessor(); const ezSphereVisualizerAttribute* pAttr = static_cast<const ezSphereVisualizerAttribute*>(m_pVisualizerAttr); m_Scale = 1.0f; if (!pAttr->GetRadiusProperty().IsEmpty()) { ezVariant value; pObjectAccessor->GetValue(m_pObject, GetProperty(pAttr->GetRadiusProperty()), value); EZ_ASSERT_DEBUG(value.IsValid() && value.CanConvertTo<float>(), "Invalid property bound to ezSphereVisualizerAttribute 'radius'"); m_Scale = value.ConvertTo<float>(); } if (!pAttr->GetColorProperty().IsEmpty()) { ezVariant value; pObjectAccessor->GetValue(m_pObject, GetProperty(pAttr->GetColorProperty()), value); EZ_ASSERT_DEBUG(value.IsValid() && value.CanConvertTo<ezColor>(), "Invalid property bound to ezSphereVisualizerAttribute 'color'"); m_Gizmo.SetColor(value.ConvertTo<ezColor>()); } m_vPositionOffset = pAttr->m_vOffset; if (!pAttr->GetOffsetProperty().IsEmpty()) { ezVariant value; pObjectAccessor->GetValue(m_pObject, GetProperty(pAttr->GetOffsetProperty()), value); EZ_ASSERT_DEBUG(value.IsValid() && value.CanConvertTo<ezVec3>(), "Invalid property bound to ezSphereVisualizerAttribute 'offset'"); m_vPositionOffset += value.ConvertTo<ezVec3>(); } }
void ezDirectionVisualizerAdapter::UpdateGizmoTransform() { const ezDirectionVisualizerAttribute* pAttr = static_cast<const ezDirectionVisualizerAttribute*>(m_pVisualizerAttr); float fScale = pAttr->m_fScale; if (!pAttr->GetLengthProperty().IsEmpty()) { ezObjectAccessorBase* pObjectAccessor = GetObjectAccessor(); ezVariant value; pObjectAccessor->GetValue(m_pObject, GetProperty(pAttr->GetLengthProperty()), value); EZ_ASSERT_DEBUG(value.IsValid() && value.CanConvertTo<float>(), "Invalid property bound to ezDirectionVisualizerAttribute 'length'"); fScale *= value.ConvertTo<float>(); } const ezQuat axisRotation = GetBasisRotation(ezBasisAxis::PositiveX, pAttr->m_Axis); ezTransform t; t.m_qRotation = axisRotation; t.m_vScale = ezVec3(fScale); t.m_vPosition = axisRotation * ezVec3(fScale, 0, 0); m_Gizmo.SetTransformation(GetObjectTransform() * t); }
void ezCameraVisualizerAdapter::Update() { const ezCameraVisualizerAttribute* pAttr = static_cast<const ezCameraVisualizerAttribute*>(m_pVisualizerAttr); ezObjectAccessorBase* pObjectAccessor = GetObjectAccessor(); float fNearPlane = 1.0f; float fFarPlane = 10.0f; ezInt32 iMode = 0; if (!pAttr->GetModeProperty().IsEmpty()) { ezVariant value; pObjectAccessor->GetValue(m_pObject, GetProperty(pAttr->GetModeProperty()), value); EZ_ASSERT_DEBUG(value.IsValid() && value.CanConvertTo<ezInt32>(), "Invalid property bound to ezCameraVisualizerAttribute 'mode'"); iMode = value.ConvertTo<ezInt32>(); } if (!pAttr->GetNearPlaneProperty().IsEmpty()) { ezVariant value; pObjectAccessor->GetValue(m_pObject, GetProperty(pAttr->GetNearPlaneProperty()), value); EZ_ASSERT_DEBUG(value.IsValid() && value.CanConvertTo<float>(), "Invalid property bound to ezCameraVisualizerAttribute 'near plane'"); fNearPlane = value.ConvertTo<float>(); } if (!pAttr->GetFarPlaneProperty().IsEmpty()) { ezVariant value; pObjectAccessor->GetValue(m_pObject, GetProperty(pAttr->GetFarPlaneProperty()), value); EZ_ASSERT_DEBUG(value.IsValid() && value.CanConvertTo<float>(), "Invalid property bound to ezCameraVisualizerAttribute 'far plane'"); fFarPlane = value.ConvertTo<float>(); } if (iMode == ezCameraMode::OrthoFixedHeight || iMode == ezCameraMode::OrthoFixedWidth) { float fDimensions = 1.0f; if (!pAttr->GetOrthoDimProperty().IsEmpty()) { ezVariant value; pObjectAccessor->GetValue(m_pObject, GetProperty(pAttr->GetOrthoDimProperty()), value); EZ_ASSERT_DEBUG(value.IsValid() && value.CanConvertTo<float>(), "Invalid property bound to ezCameraVisualizerAttribute 'ortho dim'"); fDimensions = value.ConvertTo<float>(); } { const float fRange = fFarPlane - fNearPlane; m_LocalTransformFrustum.m_qRotation.SetIdentity(); m_LocalTransformFrustum.m_vScale.Set(fRange, fDimensions, fDimensions); m_LocalTransformFrustum.m_vPosition.Set(fNearPlane + fRange * 0.5f, 0, 0); } m_BoxGizmo.SetVisible(m_bVisualizerIsVisible); m_FrustumGizmo.SetVisible(false); m_NearPlaneGizmo.SetVisible(false); m_FarPlaneGizmo.SetVisible(false); m_LocalTransformNearPlane.SetIdentity(); m_LocalTransformFarPlane.SetIdentity(); } else { float fFOV = 45.0f; if (!pAttr->GetFovProperty().IsEmpty()) { ezVariant value; pObjectAccessor->GetValue(m_pObject, GetProperty(pAttr->GetFovProperty()), value); EZ_ASSERT_DEBUG(value.IsValid() && value.CanConvertTo<float>(), "Invalid property bound to ezCameraVisualizerAttribute 'fov'"); fFOV = value.ConvertTo<float>(); } { const float fAngleScale = ezMath::Tan(ezAngle::Degree(fFOV) * 0.5f); const float fFrustumScale = ezMath::Min(fFarPlane, 10.0f); const float fFarPlaneScale = ezMath::Min(fFarPlane, 9.0f); ; // indicate whether the shown far plane is the actual distance, or just the maximum visualization distance m_FarPlaneGizmo.SetColor(fFarPlane > 9.0f ? ezColor::DodgerBlue : ezColor::PaleVioletRed); m_LocalTransformFrustum.m_qRotation.SetIdentity(); m_LocalTransformFrustum.m_vScale.Set(fFrustumScale, fAngleScale * fFrustumScale, fAngleScale * fFrustumScale); m_LocalTransformFrustum.m_vPosition.Set(0, 0, 0); m_LocalTransformNearPlane.m_qRotation.SetFromAxisAndAngle(ezVec3(0, 1, 0), ezAngle::Degree(90)); m_LocalTransformNearPlane.m_vScale.Set(fAngleScale * fNearPlane, fAngleScale * fNearPlane, 1); m_LocalTransformNearPlane.m_vPosition.Set(fNearPlane, 0, 0); m_LocalTransformFarPlane.m_qRotation.SetFromAxisAndAngle(ezVec3(0, 1, 0), ezAngle::Degree(90)); m_LocalTransformFarPlane.m_vScale.Set(fAngleScale * fFarPlaneScale, fAngleScale * fFarPlaneScale, 1); m_LocalTransformFarPlane.m_vPosition.Set(fFarPlaneScale, 0, 0); } m_BoxGizmo.SetVisible(false); m_FrustumGizmo.SetVisible(m_bVisualizerIsVisible); m_NearPlaneGizmo.SetVisible(m_bVisualizerIsVisible); m_FarPlaneGizmo.SetVisible(m_bVisualizerIsVisible); } }