private void ApplyRelativeTransformToElements(IEnumerable targetElements, PropertyReference reference, IApplyRelativeTransform transformModel) { foreach (SceneNode sceneNode in targetElements) { SceneElement sceneElement = sceneNode as SceneElement; if (sceneElement != null) { if (sceneElement is BaseFrameworkElement && sceneElement.IsSet(Base2DElement.RenderTransformOriginProperty) == PropertyState.Unset) { sceneElement.SetValueAsWpf(Base2DElement.RenderTransformOriginProperty, (object)new Point(0.5, 0.5)); } object computedValueAsWpf = sceneElement.GetComputedValueAsWpf(reference); object obj = transformModel.ApplyRelativeTransform(computedValueAsWpf); CanonicalTransform canonicalTransform = obj as CanonicalTransform; if (canonicalTransform != (CanonicalTransform)null) { sceneElement.SetValue(reference, canonicalTransform.GetPlatformTransform(sceneElement.Platform.GeometryHelper)); } else { CanonicalTransform3D canonicalTransform3D = obj as CanonicalTransform3D; if (canonicalTransform3D != (CanonicalTransform3D)null) { sceneElement.SetValue(reference, (object)canonicalTransform3D.ToTransform()); } } } } }
public object ApplyRelativeTransform(object transform) { if (transform != null) { Transform transform1 = transform as Transform; if (transform1 != null) { CanonicalTransform canonicalTransform = new CanonicalTransform(transform1); Point center = canonicalTransform.Center; canonicalTransform.ApplyScale(new Vector(1.0, 1.0) - this.ComponentVector * 2.0, canonicalTransform.Center, center); canonicalTransform.RotationAngle = -canonicalTransform.RotationAngle; Vector skew = canonicalTransform.Skew; canonicalTransform.Skew = new Vector(-skew.X, -skew.Y); return((object)canonicalTransform); } Transform3D transform2 = transform as Transform3D; if (transform2 != null) { CanonicalTransform3D canonicalTransform3D = new CanonicalTransform3D(transform2); Point3D center = canonicalTransform3D.Center; Vector3D scale = new Vector3D(1.0, 1.0, 1.0) - this.ComponentVector3D * 2.0; canonicalTransform3D.ApplyScale(scale, center); canonicalTransform3D.RotationAngles = -canonicalTransform3D.RotationAngles; return((object)canonicalTransform3D); } } return((object)Transform.Identity); }
protected void FlipElements(BasisComponent basisComponent, string description) { SceneElementSelectionSet elementSelectionSet = this.SceneViewModel.ElementSelectionSet; PropertyReference propertyReference = (PropertyReference)null; foreach (SceneElement sceneElement in elementSelectionSet.Selection) { if (sceneElement is BaseFrameworkElement || sceneElement is StyleNode) { propertyReference = new PropertyReference((ReferenceStep)sceneElement.ProjectContext.ResolveProperty(Base2DElement.RenderTransformProperty)); break; } if (sceneElement is Base3DElement) { propertyReference = new PropertyReference((ReferenceStep)sceneElement.ProjectContext.ResolveProperty((sceneElement as Base3DElement).TransformPropertyId)); break; } } if (propertyReference == null) { return; } using (SceneEditTransaction editTransaction = this.SceneViewModel.CreateEditTransaction(description)) { foreach (SceneElement sceneElement in elementSelectionSet.Selection) { object computedValueAsWpf = sceneElement.GetComputedValueAsWpf(propertyReference); object obj = new ReflectTransform(basisComponent).ApplyRelativeTransform(computedValueAsWpf); CanonicalTransform canonicalTransform = obj as CanonicalTransform; if (canonicalTransform != (CanonicalTransform)null) { sceneElement.SetValue(propertyReference, canonicalTransform.GetPlatformTransform(sceneElement.Platform.GeometryHelper)); if (sceneElement.IsSet(Base2DElement.RenderTransformOriginProperty) == PropertyState.Unset) { sceneElement.SetValueAsWpf(Base2DElement.RenderTransformOriginProperty, (object)new Point(0.5, 0.5)); } } else { CanonicalTransform3D canonicalTransform3D = obj as CanonicalTransform3D; if (canonicalTransform3D != (CanonicalTransform3D)null) { sceneElement.SetValue(propertyReference, (object)canonicalTransform3D.ToTransform()); } } } editTransaction.Commit(); } }
private SceneNode[] Ungroup(Base3DElement group) { SceneElement parentElement = group.ParentElement; Matrix3D matrix3D = group.Transform.Value; Model3DGroupElement model3DgroupElement = group as Model3DGroupElement; ModelVisual3DElement modelVisual3Delement1 = group as ModelVisual3DElement; int index1 = 0; bool flag = false; if (model3DgroupElement != null) { index1 = model3DgroupElement.Children.Count; } else if (modelVisual3Delement1 != null) { index1 = modelVisual3Delement1.Children.Count; flag = modelVisual3Delement1.Model3DContent != null; } Base3DElement[] base3DelementArray = new Base3DElement[index1 + (flag ? true : false)]; Matrix3D[] matrix3DArray = new Matrix3D[index1 + (flag ? true : false)]; if (model3DgroupElement != null) { for (int index2 = 0; index2 < model3DgroupElement.Children.Count; ++index2) { base3DelementArray[index2] = (Base3DElement)model3DgroupElement.Children[index2]; } } else if (modelVisual3Delement1 != null) { for (int index2 = 0; index2 < modelVisual3Delement1.Children.Count; ++index2) { base3DelementArray[index2] = (Base3DElement)modelVisual3Delement1.Children[index2]; } if (flag) { base3DelementArray[index1] = (Base3DElement)modelVisual3Delement1.Model3DContent; matrix3DArray[index1] = modelVisual3Delement1.Transform.Value; } } for (int index2 = 0; index2 < index1; ++index2) { Base3DElement base3Delement = base3DelementArray[index2]; matrix3DArray[index2] = base3Delement.Transform.Value; } using (this.SceneViewModel.ForceBaseValue()) { int insertAt = group.GetCollectionContainer().IndexOf((SceneNode)group); if (group.ParentElement is Base3DElement) { this.SceneViewModel.AnimationEditor.DeleteAllAnimationsInSubtree(group.ParentElement); } else { this.SceneViewModel.AnimationEditor.DeleteAllAnimationsInSubtree((SceneElement)group); } this.SceneViewModel.RemoveElement((SceneNode)group); for (int index2 = index1 - 1; index2 >= 0; --index2) { Base3DElement base3Delement = base3DelementArray[index2]; base3Delement.Remove(); CanonicalTransform3D canonicalTransform3D = new CanonicalTransform3D(matrix3DArray[index2] * matrix3D); base3Delement.Transform = (Transform3D)canonicalTransform3D.ToTransform(); if (parentElement is Base3DElement) { GroupCommandHelpers.InsertElement(this.SceneViewModel, (Base3DElement)parentElement, (SceneNode)base3Delement, new int?(insertAt)); } else { GroupCommandHelpers.InsertElement(parentElement, (SceneNode)base3Delement, insertAt); } } if (flag) { ModelVisual3DElement modelVisual3Delement2 = parentElement as ModelVisual3DElement; base3DelementArray[index1].Remove(); CanonicalTransform3D canonicalTransform3D = new CanonicalTransform3D(matrix3DArray[index1] * matrix3D); base3DelementArray[index1].Transform = (Transform3D)canonicalTransform3D.ToTransform(); ModelVisual3DElement modelVisual3Delement3 = (ModelVisual3DElement)this.SceneViewModel.CreateSceneNode(typeof(ModelVisual3D)); modelVisual3Delement2.Children.Add((Visual3DElement)modelVisual3Delement3); modelVisual3Delement3.Content = (SceneNode)base3DelementArray[index1]; } } return((SceneNode[])base3DelementArray); }