Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> this is not variable 
:(
    Опции темы
ANTON_AL
Дата 28.8.2008, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 292
Регистрация: 27.1.2007

Репутация: нет
Всего: нет



Доброго дня!

Имеется вот такая XAML разметка:
Код

<Window
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"    
    xmlns:inter3D="clr-namespace:_3DTools;assembly=3DTools"
    x:Class="Sticker.Window1"
    x:Name="Window"
    Title="Window1"
    WindowStyle="None" AllowsTransparency="True" Background="#00000000">
    
    <Window.Resources>
        <MeshGeometry3D x:Key="planeMesh" Positions="-1,-1,0 1,-1,0 1,1,0 -1,1,0" TextureCoordinates="0,1, 1,1, 1,0, 0,0" TriangleIndices="0 1 2 0 2 3"/>
    </Window.Resources>

    <Grid x:Name="LayoutRoot" Width="Auto" Height="Auto">
        <Button Name="btnChange" VerticalAlignment="Top" Height="59" Content="Rotate" Margin="227,290,253,0" FontSize="14" Click="on_btnChange_Click"/>
    </Grid>
</Window>





Внутри обработчика нажатия на кнопку пытаюсь изменить геометрию mesh'а, описанного в ресурсах. Этот код работает как надо.
Код

private void on_btnChange_Click( object sender, RoutedEventArgs e )
{
    System.Windows.Media.Media3D.MeshGeometry3D mesh = this.Resources["planeMesh"] as System.Windows.Media.Media3D.MeshGeometry3D;
    System.Windows.Media.Media3D.Point3DCollection points = mesh.Positions;

    System.Windows.Media.Media3D.Point3D p = points[0];
    p.X -= 1;
    points[0] = p;
}



Если переписываю этот код чуть покороче . . .
Код

private void on_btnChange_Click( object sender, RoutedEventArgs e )
{
    System.Windows.Media.Media3D.MeshGeometry3D mesh = this.Resources["planeMesh"] as System.Windows.Media.Media3D.MeshGeometry3D;
    System.Windows.Media.Media3D.Point3DCollection points = mesh.Positions;
    
    points[0].X -= 1; //Ошибка
}


. . . то компилятор ругается
Код

Error    1    Cannot modify the return value of 'System.Windows.Media.Media3D.Point3DCollection.this[int]' because it is not a variable



Посмотрев на реализацию Point3DCollection, нашел, что он производный от шаблонного интерфейса IList<Point3D> и реализует один из его индексаторов (вроде так это называется, ибо я пришел в .NET из C++)
Код

public sealed class Point3DCollection : Freezable, IFormattable, IList, ICollection, IList<Point3D>, ICollection<Point3D>, IEnumerable<Point3D>, IEnumerable
{
    . . .
    . . .
    public Point3D this[int index] { get; set; }
    . . .
    . . .
}



Всё вроде правильно, но что ему не нравится ?

Это сообщение отредактировал(а) ANTON_AL - 28.8.2008, 11:23
PM MAIL   Вверх
QryStaL
Дата 28.8.2008, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Intellectual feast
**


Профиль
Группа: Участник
Сообщений: 914
Регистрация: 30.11.2005

Репутация: 14
Всего: 32



Point3D это структура, а с ними нельзя работать подобным образом. Кроме того, они передаются по значению, так что смысла в "кратком варианте" нет.


--------------------
I don't need a reason being who I am...
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0657 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.