crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

6 страниц V  « < 2 3 4 5 6 >  
Ответить в данную темуНачать новую тему
Kagami
  опции профиля:
сообщение 7.9.2009, 20:13
Сообщение #31


Старейший участник
****

Группа: Участник
Сообщений: 601
Регистрация: 2.2.2009
Пользователь №: 523

Спасибо сказали: 101 раз(а)




Репутация:   9  


Кстати, а на предупреждения компилятора никто не смотрел? Может в них собака зарыта?
Раскрывающийся текст
Цитата
Sources/Render/RenderAtom.cpp: In member function ‘const QString& Render::Atom::label() const’:
Sources/Render/RenderAtom.cpp:164: warning: returning reference to temporary
Sources/File/FileDal.cpp: In member function ‘bool File::Dal::hasParametre(const QString&, const QString&, const QString&)’:
Sources/File/FileDal.cpp:156: warning: comparison is always true due to limited range of data type
Sources/File/FileDal.cpp:159: warning: comparison is always true due to limited range of data type
Sources/File/FileDal.cpp:162: warning: comparison is always true due to limited range of data type
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 7.9.2009, 20:19
Сообщение #32


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


я не помню. потому что поставил на сборку и ушел обедать.
поэтому не видел процесса сборки.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Kagami
  опции профиля:
сообщение 7.9.2009, 20:32
Сообщение #33


Старейший участник
****

Группа: Участник
Сообщений: 601
Регистрация: 2.2.2009
Пользователь №: 523

Спасибо сказали: 101 раз(а)




Репутация:   9  


У меня вроде все работает и ничего не падает. Атом в центр координат добавляется. Кстати, в молекуле сразу после импорта одной связи нету.

P.S. Для сборки под дебианом пришлось поставить QGLViewer
Цитата
$ sudo apt-get install libqglviewer-qt4-dev

и подправить файл проекта
linux-g++ {
  DESTDIR = Binaries/Linux
  LIBS *= -L/usr/lib -lqglviewer-qt4
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kemiisto
  опции профиля:
сообщение 7.9.2009, 21:02
Сообщение #34


Студент
*

Группа: Участник
Сообщений: 27
Регистрация: 5.9.2009
Из: Осло, Норвегия
Пользователь №: 1054

Спасибо сказали: 2 раз(а)




Репутация:   0  


Цитата(Kagami @ 7.9.2009, 19:32) *
Кстати, в молекуле сразу после импорта одной связи нету.

Это бага. Я её уже отловил.

Должно быть так:
void Render::Viewer::updateRenderBonds()
{
  renderBondsList_.clear();
  for (quint16 i = 0; i < chemistryMolecule_.bondsCount(); ++i)
  {
    Render::Bond renderBond(chemistryMolecule_.chemistryBond(i));
    addBond(renderBond);
  }
}

а было i < chemistryMolecule_.bondsCount() - 1.

Надо отучать себя от for'а. Но никак не могу заставить себя... :blush2:

Забавно. У меня на Mac OS атом сразу добавляется, а на Windows - нет. Но тут надо возится и с OpenGL...

Всем помогающим огромное спасибо.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kemiisto
  опции профиля:
сообщение 8.9.2009, 18:30
Сообщение #35


Студент
*

Группа: Участник
Сообщений: 27
Регистрация: 5.9.2009
Из: Осло, Норвегия
Пользователь №: 1054

Спасибо сказали: 2 раз(а)




Репутация:   0  


:help:

Ну, я практически локализовал баг. Но абсолютно не понимаю, как такое происходит. Я реорганизовал код, объединил классы, ... И вот, что происходит. Импорт молекулы проходит нормально (я добавил небольшую молекулку воды для удобства отладки).

Потом мы пытаемся добавить атом. Он добавляется в список атомов. Начинается перерисовка списков отображения OpenGL. Доходит до формирования списка связей - метод GLuint Render::Viewer::makeSticks(Quality quality):
{
  GLuint list = glGenLists(1);
  glNewList(list, GL_COMPILE);
  {
    QListIterator<Render::Bond> i(molecule_.bondsList_);
    while (i.hasNext())
    {
      i.next().draw(quality);
    }
  }
  glEndList();
  return list;
}

Создаём итератор и поехали! Списко атомов, связей пока ещё не попорчены. Вызываем метод draw для первой связи. Оказываемся внутри void Render::Bond::draw(Quality quality) const. Как в начале метода, так и в конце списки живы.

Возвращаемся обратно в makeSticks(). Списки по-прежнему живы. Снова заходим в draw()... И получаем epic fail! В списках какой-то мусор! :o:

Если будет у кого минутка, посмотрите, пожалуйста...

Архив.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 8.9.2009, 19:08
Сообщение #36


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


Цитата(kemiisto @ 8.9.2009, 19:30) *
:help:


В конструкторе и операторе копирования в циклах не нужно вычитать единицу, у тебя же условие <.
Раскрывающийся текст

Render::Molecule::Molecule(const Render::Molecule& chemistryMolecule) :
    atomsList_(chemistryMolecule.atomsList_),
    bondsList_(chemistryMolecule.bondsList_),
    incidenceMatrix_(chemistryMolecule.incidenceMatrix_),
    charge_(chemistryMolecule.charge_)
{
  for (quint16 i = 0; i < atomsCount(); ++i)
  {
    atomsList_[i].molecule_ = this;
  }
  for (quint16 i = 0; i < bondsCount(); ++i)
  {
    bondsList_[i].molecule_ = this;
  }
}

Render::Molecule& Render::Molecule::operator=(const Render::Molecule& molecule)
{
  if (this != &molecule)
  {
    atomsList_ = QList<Render::Atom>(molecule.atomsList_);
    bondsList_ = QList<Render::Bond>(molecule.bondsList_);
    incidenceMatrix_ = IncidenceMatrix(molecule.incidenceMatrix_);
    charge_ = molecule.charge_;
  }
  for (quint16 i = 0; i < atomsCount(); ++i)
  {
    atomsList_[i].molecule_ = this;
  }
  for (quint16 i = 0; i < bondsCount(); ++i)
  {
    bondsList_[i].molecule_ = this;
  }
  return *this;
}

//
// Стоит проверять index на предмет выхода за пределы списка
//

const Render::Atom& Render::Molecule::atom(quint16 index) const
{
  Q_ASSERT( index < atomsList_.size() );
  return atomsList_.at(index);
}

const Render::Bond& Render::Molecule::bond(quint16 index) const
{
  Q_ASSERT( index < boundsList_.size() );
  return bondsList_.at(index);
}

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 8.9.2009, 19:11
Сообщение #37


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


я подозре\ваю что у второго атома в списке не валидный указатель на molecule_.
где атом получает указатель на молекулу?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 8.9.2009, 19:15
Сообщение #38


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


Цитата(kwisp @ 8.9.2009, 20:11) *
я подозре\ваю что у второго атома в списке не валидный указатель на molecule_.
где атом получает указатель на молекулу?

Смотри конструктор и оператор копирования.... ;)
Предполагаю, такие штучки с циклами можно ожидать и в других местах.
kemiisto, проверь другие циклы на предмет < count() -1.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 8.9.2009, 19:16
Сообщение #39


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


[Дубль.]
[Блин, почему такие ошибки с редактированием сообщения происходят, приходиться по несколько раз сообщения набирать :unsure: ]

Сообщение отредактировал BRE - 8.9.2009, 19:18
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kemiisto
  опции профиля:
сообщение 8.9.2009, 19:27
Сообщение #40


Студент
*

Группа: Участник
Сообщений: 27
Регистрация: 5.9.2009
Из: Осло, Норвегия
Пользователь №: 1054

Спасибо сказали: 2 раз(а)




Репутация:   0  


Цитата(BRE @ 8.9.2009, 18:08) *
В конструкторе и операторе копирования в циклах не нужно вычитать единицу, у тебя же условие <.

Тьфу ты. Опять на теже грабли. :blush:
За Q_ASSERT тоже спасибо.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

6 страниц V  « < 2 3 4 5 6 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 7.7.2025, 8:59