public static Viewport3DElement GetEnclosingViewportForModelVisual3D(SceneViewModel sceneViewModel, ModelVisual3DElement modelVisual3D)
        {
            Viewport3DElement viewport3Delement = (Viewport3DElement)sceneViewModel.CreateSceneNode(PlatformTypes.Viewport3D);

            viewport3Delement.SetValueAsWpf(Viewport3DElement.ClipToBoundsProperty, (object)true);
            Camera perspectiveCamera = Helper3D.CreateEnclosingPerspectiveCamera(45.0, 4.0 / 3.0, modelVisual3D.DesignTimeBounds, 0.8);

            viewport3Delement.Camera = (CameraElement)sceneViewModel.CreateSceneNode((object)perspectiveCamera);
            ModelVisual3DElement modelVisual3Delement = (ModelVisual3DElement)sceneViewModel.CreateSceneNode(PlatformTypes.ModelVisual3D);

            modelVisual3Delement.Name = "World";
            viewport3Delement.Children.Add((Visual3DElement)modelVisual3Delement);
            AmbientLightElement ambientLightElement = (AmbientLightElement)sceneViewModel.CreateSceneNode(PlatformTypes.AmbientLight);

            ambientLightElement.SetValueAsWpf(LightElement.ColorProperty, (object)Color.FromRgb((byte)127, (byte)127, (byte)127));
            ambientLightElement.Name = "AmbientLight";
            modelVisual3Delement.Children.Add((Visual3DElement)GeometryCreationHelper3D.CreateModelVisual3DContainer((Model3DElement)ambientLightElement, sceneViewModel));
            DirectionalLightElement directionalLightElement = (DirectionalLightElement)sceneViewModel.CreateSceneNode(PlatformTypes.DirectionalLight);

            directionalLightElement.SetValueAsWpf(LightElement.ColorProperty, (object)Color.FromRgb((byte)63, (byte)63, (byte)63));
            directionalLightElement.SetValueAsWpf(DirectionalLightElement.DirectionProperty, (object)new Vector3D(0.0, 0.0, -1.0));
            directionalLightElement.SetValueAsWpf(Model3DElement.TransformProperty, (object)new TranslateTransform3D(0.0, 0.0, 3.0));
            directionalLightElement.Name = "DirectionalLight";
            modelVisual3Delement.Children.Add((Visual3DElement)GeometryCreationHelper3D.CreateModelVisual3DContainer((Model3DElement)directionalLightElement, sceneViewModel));
            modelVisual3Delement.Children.Add((Visual3DElement)modelVisual3D);
            return(viewport3Delement);
        }
Example #2
0
 private bool CanUngroupAs3D(SceneElement element)
 {
     if (!Model3DGroupElement.GetIsGroup((SceneNode)element))
     {
         return(ModelVisual3DElement.GetIsGroup(element));
     }
     return(true);
 }
Example #3
0
        private void AddModel3DContainerToViewport(Viewport3DElement viewport, Model3DElement model)
        {
            ModelVisual3DElement modelVisual3Delement = (ModelVisual3DElement)this.DesignerContext.ActiveSceneViewModel.CreateSceneNode(typeof(ModelVisual3D));

            modelVisual3Delement.Name    = model.Name + "Container";
            modelVisual3Delement.Content = (SceneNode)model;
            viewport.Children.Add((Visual3DElement)modelVisual3Delement);
        }
        private static ModelVisual3DElement CreateModelVisual3DContainer(Model3DElement model3DElement, SceneViewModel sceneViewModel)
        {
            ModelVisual3DElement modelVisual3Delement = (ModelVisual3DElement)sceneViewModel.CreateSceneNode(PlatformTypes.ModelVisual3D);

            modelVisual3Delement.Content = (SceneNode)model3DElement;
            modelVisual3Delement.Name    = (model3DElement.Name ?? "") + "Container";
            return(modelVisual3Delement);
        }
Example #5
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);
        }
Example #6
0
        protected virtual IList <SceneElement> AddToDocumentInternal(string importedFilePath, SceneElement element, ISceneInsertionPoint insertionPoint, SceneViewModel sceneViewModel, SceneEditTransaction undoTransaction)
        {
            List <SceneElement> list              = new List <SceneElement>();
            SceneElement        sceneElement      = insertionPoint.SceneElement;
            Viewport3DElement   viewport3Delement = sceneElement as Viewport3DElement;

            if (viewport3Delement != null || sceneElement is Base3DElement)
            {
                if (element.TargetType == typeof(Image))
                {
                    string[] strArray = importedFilePath.Split('.');
                    string   newName  = strArray.Length <= 1 || strArray[0] == null ? "Image" : strArray[0];
                    element = (SceneElement)GeometryCreationHelper3D.ConvertImageTo3D(sceneViewModel, (BaseFrameworkElement)element, newName);
                }
                IChildContainer3D childContainer3D = sceneElement as IChildContainer3D;
                if (ModelVisual3DElement.ContentProperty.Equals((object)insertionPoint.Property))
                {
                    element = (SceneElement)BaseElement3DCoercionHelper.CoerceToModel3D(sceneViewModel, element);
                    if (element != null)
                    {
                        list.Add(element);
                        insertionPoint.Insert((SceneNode)element);
                    }
                }
                else if (childContainer3D != null)
                {
                    Base3DElement child = (Base3DElement)element;
                    list.Add(childContainer3D.AddChild(sceneViewModel, child));
                    if (viewport3Delement != null && viewport3Delement.Camera == null)
                    {
                        ModelVisual3DElement modelVisual3Delement = element as ModelVisual3DElement;
                        Camera camera;
                        if (modelVisual3Delement != null)
                        {
                            Rect computedTightBounds = viewport3Delement.GetComputedTightBounds();
                            camera = Helper3D.CreateEnclosingPerspectiveCamera(45.0, computedTightBounds.Width / computedTightBounds.Height, modelVisual3Delement.DesignTimeBounds, 0.8);
                        }
                        else
                        {
                            camera = (Camera) new PerspectiveCamera(new Point3D(0.0, 0.0, -5.0), new Vector3D(0.0, 0.0, 1.0), new Vector3D(0.0, 1.0, 0.0), 45.0);
                        }
                        viewport3Delement.Camera = (CameraElement)sceneViewModel.CreateSceneNode((object)camera);
                    }
                }
            }
            else
            {
                ModelVisual3DElement modelVisual3D = element as ModelVisual3DElement;
                if (modelVisual3D != null)
                {
                    Viewport3DElement forModelVisual3D = GeometryCreationHelper3D.GetEnclosingViewportForModelVisual3D(sceneViewModel, modelVisual3D);
                    list.Add((SceneElement)forModelVisual3D);
                    insertionPoint.Insert((SceneNode)forModelVisual3D);
                }
                else if (insertionPoint.CanInsert((ITypeId)element.Type))
                {
                    list.Add(element);
                    insertionPoint.Insert((SceneNode)element);
                }
            }
            return((IList <SceneElement>)list);
        }
Example #7
0
 public ModelVisual3DTimelineItem(TimelineItemManager timelineItemManager, ModelVisual3DElement element)
     : base(timelineItemManager, (Base3DElement)element)
 {
 }
        internal static void InsertElement(SceneViewModel sceneViewModel, Base3DElement parent, SceneNode child, int?insertAt)
        {
            Model3DGroupElement  model3DgroupElement  = parent as Model3DGroupElement;
            ModelVisual3DElement modelVisual3Delement = parent as ModelVisual3DElement;
            Model3DElement       model3Delement1      = child as Model3DElement;
            Visual3DElement      visual3Delement      = child as Visual3DElement;

            if (modelVisual3Delement != null)
            {
                if (visual3Delement != null)
                {
                    if (insertAt.HasValue)
                    {
                        modelVisual3Delement.Children.Insert(insertAt.Value, visual3Delement);
                    }
                    else
                    {
                        modelVisual3Delement.Children.Add(visual3Delement);
                    }
                }
                else
                {
                    if (model3Delement1 == null)
                    {
                        return;
                    }
                    modelVisual3Delement.Content = (SceneNode)model3Delement1;
                }
            }
            else
            {
                if (model3DgroupElement == null)
                {
                    return;
                }
                if (visual3Delement != null)
                {
                    Model3DElement model3Delement2 = BaseElement3DCoercionHelper.CoerceToModel3D(sceneViewModel, (SceneElement)visual3Delement);
                    if (insertAt.HasValue)
                    {
                        model3DgroupElement.Children.Insert(insertAt.Value, model3Delement2);
                    }
                    else
                    {
                        model3DgroupElement.Children.Add(model3Delement2);
                    }
                }
                else
                {
                    if (model3Delement1 == null)
                    {
                        return;
                    }
                    if (insertAt.HasValue)
                    {
                        model3DgroupElement.Children.Insert(insertAt.Value, model3Delement1);
                    }
                    else
                    {
                        model3DgroupElement.Children.Add(model3Delement1);
                    }
                }
            }
        }