protected override DocumentNode CreateValue(BaseFrameworkElement source) { ImageBrushNode imageBrush; this.newGeometryElement = GeometryCreationHelper3D.ConvertImageTo3D(this.DesignerContext.ActiveSceneViewModel, source, source.Name + "Model", out imageBrush); return(imageBrush.DocumentNode); }
public Primitive3DTimelineItem(TimelineItemManager timelineItemManager, GeometryModel3DElement element) : base(timelineItemManager, (Base3DElement)element) { }
private static SceneElement PasteElement(SceneViewModel viewModel, SceneElement element, List <PasteCommand.DelayedElementTranslationInfo> elementsToTranslateLater, ISceneInsertionPoint insertionPoint) { SceneNodeIDHelper sceneNodeIdHelper = new SceneNodeIDHelper(viewModel, (SceneNode)insertionPoint.SceneNode.StoryboardContainer); SceneElement element1 = (SceneElement)null; using (viewModel.ForceBaseValue()) { PasteCommand.StripStoryboardsAndTriggers(element); PasteCommand.StripExtraNamespaces(element); BaseFrameworkElement frameworkElement = element as BaseFrameworkElement; if (frameworkElement != null || element is DataGridColumnNode) { if (!(insertionPoint.SceneElement is Viewport3DElement) && !(insertionPoint.SceneElement is Base3DElement)) { if (insertionPoint.CanInsert((ITypeId)element.Type)) { if (!PlatformTypes.FrameworkTemplate.IsAssignableFrom((ITypeId)insertionPoint.SceneElement.Type) && (!PlatformTypes.UserControl.Equals((object)insertionPoint.SceneElement.Type) || insertionPoint.SceneElement.DocumentNode.DocumentRoot.RootNode != insertionPoint.SceneElement.DocumentNode)) { if (element.Name != null) { string validCopiedElementId = sceneNodeIdHelper.GetValidCopiedElementID((SceneNode)element, element.Name); sceneNodeIdHelper.SetLocalName((SceneNode)element, validCopiedElementId); } sceneNodeIdHelper.FixNameConflicts((SceneNode)element); } if (viewModel.DesignerContext.PrototypingService != null) { viewModel.DesignerContext.PrototypingService.ProcessElementBeforeInsertion(insertionPoint, element); } insertionPoint.Insert((SceneNode)element); if (element.GetLocalValue(DesignTimeProperties.LayoutRectProperty) != null && frameworkElement != null) { elementsToTranslateLater.Add(new PasteCommand.DelayedElementTranslationInfo(frameworkElement)); } element1 = element; } } else if (element.TargetType == typeof(Image)) { GeometryModel3DElement geometryModel3Delement = GeometryCreationHelper3D.ConvertImageTo3D(viewModel, frameworkElement, element.Name); IChildContainer3D childContainer3D = insertionPoint.SceneElement as IChildContainer3D; if (childContainer3D != null) { childContainer3D.AddChild(viewModel, (Base3DElement)geometryModel3Delement); element1 = (SceneElement)geometryModel3Delement; } } } else { Base3DElement child; if ((child = element as Base3DElement) != null) { if (child.Name != null) { string validCopiedElementId = sceneNodeIdHelper.GetValidCopiedElementID((SceneNode)child, child.Name); sceneNodeIdHelper.SetLocalName((SceneNode)child, validCopiedElementId); } DependencyPropertyReferenceStep propertyReferenceStep = insertionPoint.Property as DependencyPropertyReferenceStep; if (propertyReferenceStep != null && propertyReferenceStep.DependencyProperty == ModelVisual3D.ContentProperty) { Model3DElement model3Delement = BaseElement3DCoercionHelper.CoerceToModel3D(viewModel, (SceneElement)child); if (model3Delement != null) { insertionPoint.Insert((SceneNode)model3Delement); element1 = (SceneElement)model3Delement; } } else { IChildContainer3D childContainer3D = insertionPoint.SceneElement as IChildContainer3D; if (childContainer3D != null) { element1 = childContainer3D.AddChild(viewModel, child); } } } } if (element1 != null) { if (!(viewModel.ActiveEditingContainer is FrameworkTemplateElement)) { PasteCommand.StripTemplateBindings(element1); } } } return(element1); }
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); }