private void ApplyRelativeTransform_Execute() { if (!(this.ComponentType != (Type)null) || !this.IsRelativeTransform || this.ObjectSet.RepresentativeSceneNode == null) { return; } SelectionManagerPerformanceHelper.MeasurePerformanceUntilPipelinePostSceneUpdate(this.designerContext.SelectionManager, PerformanceEvent.EditSingleTransformProperty); using (SceneEditTransaction editTransaction = this.ObjectSet.ViewModel.CreateEditTransaction(StringTable.UndoUnitTransformPaneRelativeTransform)) { LocalValueObjectSet localValueObjectSet = (LocalValueObjectSet)this.PropertyLookup.ActiveObjectSet; foreach (SceneNode sceneNode in this.ObjectSet.Objects) { object currentTransform; if (this.PropertyLookup.TransformType == TransformType.Transform2D) { if (this.PropertyLookup.IsCompositeSupported) { currentTransform = sceneNode.GetComputedValue(this.TransformProperty.Reference); if (currentTransform != null && !PlatformTypes.CompositeTransform.IsAssignableFrom((ITypeId)this.ObjectSet.ProjectContext.GetType(currentTransform.GetType()))) { currentTransform = (object)null; } } else { currentTransform = sceneNode.GetComputedValueAsWpf(this.TransformProperty.Reference); } } else { currentTransform = sceneNode.GetComputedValue(this.TransformProperty.Reference); } object valueToSet = this.ApplyRelativeTransform(localValueObjectSet.LocalValue, currentTransform); if (sceneNode is Base2DElement && this.TransformProperty.Reference.LastStep.Equals((object)Base2DElement.RenderTransformProperty) && sceneNode.IsSet(Base2DElement.RenderTransformOriginProperty).Equals((object)PropertyState.Unset)) { sceneNode.SetValueAsWpf(Base2DElement.RenderTransformOriginProperty, (object)new Point(0.5, 0.5)); } switch (this.PropertyLookup.TransformType) { case TransformType.Transform2D: if (this.PropertyLookup.IsCompositeSupported) { sceneNode.SetValue(this.TransformProperty.Reference, valueToSet); break; } sceneNode.SetValueAsWpf(this.TransformProperty.Reference, (object)((ICanonicalTransform)valueToSet).TransformGroup); break; case TransformType.Transform3D: sceneNode.SetValue(this.TransformProperty.Reference, (object)((CanonicalTransform3D)valueToSet).ToTransform()); break; case TransformType.PlaneProjection: sceneNode.SetValue(this.TransformProperty.Reference, valueToSet); break; } } editTransaction.Commit(); } }
public TransformPropertyLookup(SceneNodeProperty transformProperty, TransformType transformType) { this.transformProperty = transformProperty; this.transformType = transformType; this.sceneNodeObjectSet = transformProperty.SceneNodeObjectSet; this.platformSupportsCompositeTransform = this.sceneNodeObjectSet.ProjectContext != null && this.sceneNodeObjectSet.ProjectContext.PlatformMetadata != null && this.sceneNodeObjectSet.ProjectContext.PlatformMetadata.IsCapabilitySet(PlatformCapability.SupportsCompositeTransform); this.designerContext = this.sceneNodeObjectSet.DesignerContext; this.localTransformObjectSet = new LocalValueObjectSet(this.CreateDefaultRelativeTransform(), this.sceneNodeObjectSet.DesignerContext, this.sceneNodeObjectSet.ProjectContext); this.localTransformPropertyCache = new Dictionary <string, PropertyReferenceProperty>(); this.sceneNodePropertyCache = new Dictionary <string, PropertyReferenceProperty>(); }
protected void TransformEditor_SelectionChanged(object sender, SelectionChangedEventArgs e) { if (this.IsRelativeTransform && !this.CurrentTabSupportsRelativeMode) { this.IsRelativeTransform = false; } if (!this.IsRelativeTransform) { return; } LocalValueObjectSet localValueObjectSet = this.PropertyLookup.ActiveObjectSet as LocalValueObjectSet; if (localValueObjectSet == null) { return; } localValueObjectSet.LocalValue = this.PropertyLookup.CreateDefaultRelativeTransform(); this.PropertyLookup.RecacheProperties(); }