Пример #1
0
 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());
                 }
             }
         }
     }
 }
Пример #2
0
 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);
 }
Пример #3
0
        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();
            }
        }
Пример #4
0
        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);
        }