Example #1
0
        public void CreateImageBrushResource(ResourceContainer container, IProjectItem item)
        {
            SceneViewModel viewModel         = container.ViewModel;
            string         resourceReference = item.GetResourceReference(viewModel.Document.DocumentReference);
            ImageBrushNode imageBrushNode    = (ImageBrushNode)viewModel.CreateSceneNode(PlatformTypes.ImageBrush);

            imageBrushNode.Source = resourceReference;
            using (SceneEditTransaction editTransaction = viewModel.CreateEditTransaction(StringTable.UndoUnitPaste, false))
            {
                IType type = viewModel.ProjectContext.ResolveType(PlatformTypes.ImageBrush);
                new CreateResourceModel(viewModel, viewModel.DesignerContext.ResourceManager, type.RuntimeType, (Type)null, (string)null, container.Node as SceneElement, (SceneNode)null, CreateResourceModel.ContextFlags.None)
                {
                    KeyString = Path.GetFileNameWithoutExtension(resourceReference)
                }.CreateResource(imageBrushNode.DocumentNode, (IPropertyId)null, -1);
                editTransaction.Commit();
            }
        }
        public static GeometryModel3DElement ConvertImageTo3D(SceneViewModel viewModel, BaseFrameworkElement imageElement, string newName, out ImageBrushNode imageBrush)
        {
            imageBrush = (ImageBrushNode)viewModel.CreateSceneNode(typeof(ImageBrush));
            string    uri = ((ImageElement)imageElement).Uri;
            SceneNode valueAsSceneNode = imageElement.GetLocalValueAsSceneNode(ImageElement.SourceProperty);

            if (valueAsSceneNode != null)
            {
                imageBrush.ImageSource = viewModel.GetSceneNode(valueAsSceneNode.DocumentNode.Clone(viewModel.Document.DocumentContext));
            }
            double      num         = 1.0;
            double      imageWidth  = 1.0;
            double      imageHeight = 1.0;
            double      width       = 1.0;
            double      height      = 1.0;
            Stretch     stretch     = Stretch.Fill;
            ImageSource imageSource;

            if (imageElement.Visual != null)
            {
                Rect computedTightBounds = imageElement.GetComputedTightBounds();
                num         = computedTightBounds.Width / computedTightBounds.Height;
                imageWidth  = computedTightBounds.Width;
                imageHeight = computedTightBounds.Height;
                imageSource = imageElement.GetComputedValue(ImageElement.SourceProperty) as ImageSource;
                stretch     = (Stretch)imageElement.GetComputedValue(ImageElement.StretchProperty);
            }
            else
            {
                imageSource = imageElement.GetLocalOrDefaultValue(ImageElement.SourceProperty) as ImageSource;
                object localOrDefaultValue = imageElement.GetLocalOrDefaultValue(ImageElement.StretchProperty);
                if (localOrDefaultValue is Stretch)
                {
                    stretch = (Stretch)localOrDefaultValue;
                }
            }
            if (imageSource != null)
            {
                width  = imageSource.Width;
                height = imageSource.Height;
            }
            imageBrush.SetValue(TileBrushNode.StretchProperty, (object)stretch);
            if (stretch == Stretch.None)
            {
                double x = 0.0;
                double y = 0.0;
                if (imageWidth > width)
                {
                    x = (imageWidth - width) / 2.0;
                }
                if (imageHeight > height)
                {
                    y = (imageHeight - height) / 2.0;
                }
                imageBrush.SetValue(TileBrushNode.ViewportUnitsProperty, (object)BrushMappingMode.Absolute);
                imageBrush.SetValue(TileBrushNode.ViewportProperty, (object)new Rect(x, y, width, height));
            }
            GeometryModel3D geometryModel3D = new GeometryModel3D();

            geometryModel3D.Geometry = (Geometry3D)GeometryCreationHelper3D.CreateSubdividedQuad(9, 20.0 * num, 20.0, imageWidth, imageHeight);
            GeometryModel3DElement geometryModel3Delement = (GeometryModel3DElement)viewModel.CreateSceneNode((object)geometryModel3D);

            geometryModel3Delement.Name             = SceneNodeIDHelper.ToCSharpID(newName);
            geometryModel3Delement.DesignTimeBounds = geometryModel3D.Bounds;
            DiffuseMaterialNode diffuseMaterialNode = (DiffuseMaterialNode)viewModel.CreateSceneNode(typeof(DiffuseMaterial));

            diffuseMaterialNode.Brush       = (SceneNode)imageBrush;
            geometryModel3Delement.Material = (MaterialNode)diffuseMaterialNode;
            BitmapImageNode bitmapImageNode = imageBrush.ImageSource as BitmapImageNode;

            if (bitmapImageNode != null && uri != null)
            {
                bitmapImageNode.SetValue(BitmapImageNode.UriSourceProperty, (object)new Uri(uri, UriKind.RelativeOrAbsolute));
            }
            return(geometryModel3Delement);
        }