![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
kemiisto |
![]() ![]()
Сообщение
#1
|
![]() Студент ![]() Группа: Участник Сообщений: 27 Регистрация: 5.9.2009 Из: Осло, Норвегия Пользователь №: 1054 Спасибо сказали: 2 раз(а) Репутация: ![]() ![]() ![]() |
Здравствуйте!
Если у кого-нибудь найдётся минутка-другая, посмотрите проектик. Исходники тут. Я не стал убирать *.dll и *.a от QGLViewer'а и инклюды от QGLViewer'а и Eigen'а. Так чтоб под Windows собиралось "из коробки"... Я первый раз пишу на ++ и проект только-только начинается. Так что там много методов-пустышек и "говнокода". ![]() Собственно, беда такая. Есть у нас класс (молекула)
В Render::Viewer попытка использовать экземпляр этого класса
Попытка не совсем успешная. Когда отрабатывает конструктор Chemistry::Molecule, все 3 списка инициализируются. ![]() При попытке добавить атом в Render::Viewer::mousePressEvent в самом начале ставим точку останова: ![]() Вот. Куда то пропал incidenceMatrix_. Куда? А самое интересное. Если в объявлении поменять местами скажем так:
то на точке останова не будет уже chemistryBonds_. То есть получается: кто первым объявлен (первым инициализируется в конструкторе), тот куда-то пропадает. Немного побегал дебагом. Список портится внутри void Render::Viewer::updateMolecule(). До вызова updateGL() всё отлично, после <internal error>. А это метод (точнее слот) QGLViewer'а. Мыслей больше нет. ![]() |
|
|
Litkevich Yuriy |
![]()
Сообщение
#2
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
В отладчике не смотрел, воткнул qDebug в Chemistry::Molecule::Molecule(const Chemistry::Molecule& chemistryMolecule)
запустил программу, открыл пример H2O, в консоль напечаталось:Цитата Internal debug: initializeGL() is called in QGLViewer constructor. (выделил для удобства)chemistryAtoms_ (0x54659f8, 0x62d1f00, 0x62dafa0, 0x62cf9d8, 0x6315cb0, 0x62cfd6 8, 0x62d1ac8, 0x62cefe0, 0x62c1298, 0x62ce8c0, 0x6305a58, 0x62cf610, 0x62d07f0, 0x62d1cf0, 0x62d2668, 0x62d2010, 0x62d2480, 0x62d4f48, 0x62d1918, 0x62d1450, 0x6 2cfb88, 0x62cff78, 0x62d04f8, 0x62d06e0) chemistryBonds_ (0x62ca5b8, 0x6315ec8, 0x62cc1d8, 0x62ce218, 0x62d0f80, 0x631f36 0, 0x62b6f88, 0x62b6db8, 0x6315258, 0x546a2c0, 0x546b2d8, 0x63159a8, 0x63152b8, 0x54659e0, 0x631f9d0, 0x62fffc8, 0x546aca8, 0x631f950, 0x631f990, 0x631f9e8, 0x6 31f5d0, 0x631fa78, 0x62b2ee8, 0x62b90c8, 0x631f540) incidenceMatrix_ ((0x62ca5b8, 0x6315ec8, 0x62cc1d8) , (0x62ce218, 0x62d0f80) , (0x631f360, 0x62b6f88, 0x62b6db8) , (0x6315258, 0x546a2c0, 0x546b2d8) , (0x62 ca5b8, 0x63159a8, 0x63152b8) , (0x62ce218, 0x631f360, 0x63159a8) , (0x6315ec8, 0x62d0f80, 0x54659e0) , (0x6315258, 0x63152b8, 0x631f9d0) , (0x62b6f88, 0x546 a2c0, 0x62fffc8) , (0x546b2d8, 0x546aca8, 0x631f950, 0x631f990) , (0x62b6db8, 0x631f9e8, 0x631f5d0, 0x631fa78) , (0x62cc1d8, 0x62b2ee8, 0x62b90c8, 0x631f540) , (0x631f9d0) , (0x62fffc8) , (0x54659e0) , (0x546aca8) , (0x631f950) , ( 0x631f990) , (0x631f9e8) , (0x631f5d0) , (0x631fa78) , (0x62b2ee8) , (0x62b 90c8) , (0x631f540) ) charge_ 0 Т.е. неинициализированных значений нет. Может помогалка для отладчика (в Креаторе) глючит? П.С. Малекула прикольно крутится, надо будет разобратся с такими штуками |
|
|
kemiisto |
![]()
Сообщение
#3
|
![]() Студент ![]() Группа: Участник Сообщений: 27 Регистрация: 5.9.2009 Из: Осло, Норвегия Пользователь №: 1054 Спасибо сказали: 2 раз(а) Репутация: ![]() ![]() ![]() |
Litkevich Yuriy, спасибо, что не бросаете в беде!
![]() Может помогалка для отладчика (в Креаторе) глючит? Хм... Врядли. Оно падает при попытке добавить атом в Render::Viewer::mousePressEvent. Сначала импортируем молекулу, потом пытаемся добавить атом. Доходит до
идёт в else веточку и падает на addAtom(). Или чуть ниже на updateMolecule(). Так как к этому моменту один из QList в составе Chemistry::Molecule "побит". Бъётся при updateGL(). Какой - зависит от порядка объявления. Вот... |
|
|
Litkevich Yuriy |
![]()
Сообщение
#4
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
kemiisto |
![]()
Сообщение
#5
|
![]() Студент ![]() Группа: Участник Сообщений: 27 Регистрация: 5.9.2009 Из: Осло, Норвегия Пользователь №: 1054 Спасибо сказали: 2 раз(а) Репутация: ![]() ![]() ![]() |
объясни как это в программе сделать (куда кликать?). OK. Сначала Job - Dalton Input. Выбираем последовательно H2O.dal, затем, скажем, caffeine.mol. Видим молекулу. Справа в тулбоксе переходим на вкладку Add. Жмакаем внутри вьювера по пустому месту (мимо атомов). Должен добавится атом (пока прям в начало координат). Но... =( |
|
|
Litkevich Yuriy |
![]()
Сообщение
#6
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
kemiisto |
![]()
Сообщение
#7
|
![]() Студент ![]() Группа: Участник Сообщений: 27 Регистрация: 5.9.2009 Из: Осло, Норвегия Пользователь №: 1054 Спасибо сказали: 2 раз(а) Репутация: ![]() ![]() ![]() |
Добавился, а соединения между атомами исчезли Ага. Такое тоже возможно. Портится список, объявленный первым в Chemistry::Molecule. Сейчас это список связей (QList<Chemistry::Bond*> chemistryBonds_;). Он не обязательно становится недоступным (<internal error>). Иногда оттуда просто исчезают элементы, иногда их там становится бесконечно много. Как бы то ни было, портится список. ![]() |
|
|
kwisp |
![]()
Сообщение
#8
|
![]() астарожна ынтжинэр ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: ![]() ![]() ![]() |
kemiisto,
то что кто первый в объявлении класса тот и "портится" это вполне возможно где то в программе на память "наступил". ПС. тоже интересно не могу проект открыть чего то архив сопротивляется. ![]() |
|
|
Litkevich Yuriy |
![]()
Сообщение
#9
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
kwisp |
![]()
Сообщение
#10
|
![]() астарожна ынтжинэр ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: ![]() ![]() ![]() |
kemiisto,
вот так не стоит писать.. в этом конструкторе каждый лист создается по 2 раза(если лист имеет конструктор по умолчанию без аргументов). не знаю, может с оператором присваивания у тебя в классе не лады ты во вьюер устанавливаешь молекулу в setMolecul(...) т.е. chemistryMolecul_ у тебя уже инициализирован конструктором по умолчанию в конструкторе вьюера( листы пустые там). ну попробуй так
Сообщение отредактировал kwisp - 5.9.2009, 19:58 |
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 2.6.2025, 8:55 |