Перетаскиваемые изображения на 3D-поверхности - PullRequest
0 голосов
/ 22 февраля 2010

Я создаю 3D-программу в WPF на C #. Я хотел бы переместить изображения, которые размещены на трехмерной поверхности. В моем случае они расположены на площади. Проблема в том, когда я пытаюсь переместить изображение, другое изображения меняют свои размеры. Я пытался установить контрастность, но проблема в том, что изображения и холст помещаются в 3D.

Есть ли у кого-нибудь идеи, как избавиться от этой проблемы?

Часть кода wpf:

    <Viewport2DVisual3D
  Material="{StaticResource visualHostMaterial}" 
  Geometry="{StaticResource squareMeshFrontRight}">
        <Canvas Grid.Row="1" HorizontalAlignment="Center" 
        VerticalAlignment="Center" x:Name="ImageHolder"  >
            <Image Canvas.Left="36" MouseWheel="Img_MouseWheel" MouseMove="Img_MouseMove" 
           MouseDown="Img_MouseDown" MouseUp="Img_MouseUp" Panel.ZIndex="0" 
           Cursor="Hand" Canvas.Top="33" Height="150" Width="150" Source="sketch.jpg" 
           x:Name="Img" HorizontalAlignment="Center" VerticalAlignment="Center" MinWidth="60" MinHeight="60" MaxWidth="60" MaxHeight="60">
            </Image>
            <Image Canvas.Left="341" MouseWheel="Img_MouseWheel" MouseMove="Img_MouseMove" 
           MouseDown="Img_MouseDown" MouseUp="Img_MouseUp" Panel.ZIndex="0" 
           Cursor="Hand" Canvas.Top="22" Height="72" Width="77" Source="GreenSquare.jpg" 
           x:Name="Img2">
            </Image>
        </Canvas>
    </Viewport2DVisual3D>

Методы, используемые для перемещения imga:

    Point p;
    Image tmpImg;

    private void Img_MouseMove(object sender, MouseEventArgs e)
    {
        tmpImg = sender as Image;
        Point x = e.GetPosition(ImageHolder);

        if (e.LeftButton == MouseButtonState.Pressed)
        {
            Canvas.SetLeft(tmpImg, Canvas.GetLeft(tmpImg) + (x.X - p.X));

            Canvas.SetTop(tmpImg, Canvas.GetTop(tmpImg) + (x.Y - p.Y));
        }
        p = x;
    }

    private void Img_MouseDown(object sender, MouseButtonEventArgs e)
    {
        tmpImg = sender as Image;
        tmpImg.CaptureMouse();
        p = e.GetPosition(ImageHolder);
    }

    private void Img_MouseUp(object sender, MouseButtonEventArgs e)
    {
        tmpImg = sender as Image;
        tmpImg.ReleaseMouseCapture();
    }

1 Ответ

0 голосов
/ 23 февраля 2010

Я перемещаю изображения в 3d, используя анимированный контроль, а не пользовательское перетаскивание, но я уверен, что механизм их перемещения будет таким же.

Во-первых, просто убедитесь, что внешний холст не имеет автоматического размера или что-то странное, установите фиксированную ширину / высоту.

и с настройкой положения изображений в Viewport2DVisual3D я использовал RenderTransform на изображении, чтобы установить его в новом положении.

веселит Anton

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...