Проблемы с проектом после обновления до High Sierra


#21

Наоборот, для layer который не должен уйти.


#22

Думаю что SegmentedControl ни при чём.


#23

Огромное спасибо! Великолепно ! :grinning:

Вы спасли мою нервную систему! Сделал так в @IBAction :

tableOfSelectedBands.reloadData()
for each in gelImageAnalysis.arrayOfSelectedRectangles
 {
       each.zPosition = 100.0
 }

#24

Может быть так что некий дефолтный порядок расположения слоев в по оси Z поменялся и поэтому слои которые были раньше впереди в Sierra теперь позади в High Sierra, или это все же какой то баг в работе check box и reloadData() которые в Sierra работали по другому ?


#25

Сложно сказать как работает reloadData() за кадром (можно только предположить), точно скажу что Z позицию нужно было сразу задавать и это не баг, и вообще лучше не искать баги там где их нет :slight_smile:


#26

Ok. Одним багом в моей голове меньше, буду знать теперь про обязательное задание Z позиции не полагаясь на дефолтное исполнение системой. .

Ради интереса, а почему по разному работают check box и segmented control в рисовании сетки. И там и там выбираются два состояния, рисовать сетку или убрать ее, код внутри двух условий один и тот же как для check box так и для segmented control

segmented control - рисует поверх фото

@IBAction func turnOnOffGridForCellsCounting(_ sender: AnyObject)
{
    if sender.selectedSegment == 0
    {
        gelImageAnalysis.drawNet(grid: gelImageAnalysis.grid, color: colorForGridChoose.color, numberOfRows: 10, numberOfColumns: 10, lineWidth: 1.0, lineDashPattern: [1,1])
    }
    if sender.selectedSegment == 1
    {
        gelImageAnalysis.grid.removeFromSuperlayer()
    }
}

check box - рисует под фото

@IBAction func actionNetForCellsCounting(_ sender: AnyObject)
{
    if sender.state == .on
    {
        gelImageAnalysis.drawNet(grid: gelImageAnalysis.grid, color: colorForGridChoose.color, numberOfRows: 10, numberOfColumns: 10, lineWidth: 1.0, lineDashPattern: [1,1])
    }
    else if sender.state == .off
    {
        gelImageAnalysis.grid.removeFromSuperlayer()
    }
    
}

#27

Предполагаю что check box и segmented control по разному перерисовываются, возможно при обновлении своего состояния задевают слои superview и в каком нибудь методе layout слои переставляются местами, не зная их реализацию можно только фантазировать :slight_smile:


#28

Две проблемы решены.

Может и третья не такая сложная и нужно задать правильное положение камеры вместо дефолтного создаваемой системой при открытии сцены ? Или я опять что то упускаю из вида ?


#29

Попробовал задать камеру следующим образом

    let camera = SCNCamera ()
    let cameraNode = SCNNode ()
    cameraNode.camera = camera
    cameraNode.position = SCNVector3Make(0, 0, 160)
    cameraNode.camera?.zFar = 1000

Сцены представляют собой молекулы белка где атомы это шарики и связи цилиндры. Модель рисуется после парсинга текстового файла в котором указаны позиции атомов. Как пример ниже строка из файла и позиции XYZ я пометил звездочками

ATOM   2818  CA  GLN C 194      **30.901**   **3.425**   **9.499**  1.00 21.59           C  

В отличие от дефолтной камеры, теперь молекулы вращаются вокруг центра симметрии. Но опять же как оказалось не всегда для некоторых файлов. Кроме того что неудобно так это позиция самих молекул варьируется по глубине, то ближе к экрану то дальше в глубину. Для дефолтной камеры все молекулы, т.е молекулы из разных файлов всегда в одной и той же глубине от экрана, что очень удобно. Но как я и написал в исходном посте, вращение имеет место относительно какого то края молекулы, не относительно центра симметрии для данной молекулы.

В общем оба варианта неудовлетворительны. Как сделать чтобы молекулы при открытии файлов всегда были на одном и том же удалении от экрана как в случае дефолтной камеры?

Или проще каким то образом поменять центр вращения в дефолтной камере?


#30

Решил проблему. Отказываемся от дефолтной камеры и пишем свою. Для свой камеры пришлось написать код для подсчета минимумов и максимумов координат XYZ всех атомов молекул и исходя из этих значений задать позицию камеры.

Вывод в High Sierra и просто Sierra по разному дефолтно реализуются: рисование по глубине CAShapeLayer относительно других слоев, и кроме того используются разные центры симметрии в дефолтной камере для SCNView.

Это конечно не баг, но это такие изменения которые портят нервную системы по умолчанию. Удобно пользоваться дефолтными объектами, но приходится прописывать все explicitly это как самому размечать текст или просто воспользоваться текстовым редактором.


#31

Очень интересно посмотреть над чем Вы так усердно работаете :slight_smile:


#32

Пишу программу для использования в молекулярной биологии. Т.е. для анализа днк, рнк, белков (туда же входит viewer для просмотра трехмерных структур белка), фото гелей и разные калькуляторы.
Она должна иметь больше возможностей чем например эта
http://biologylabs.utah.edu/jorgensen/wayned/ape/
и меньше чем эта платная
https://www.geneious.com/r11/whats-new/

В общем хороший такой челендж. C полного моего нуля в программировании и полного нуля в использовании уже существующих библиотек на swift для молекулярной биологии. На Java например, на которой написана платная программа по ссылке выше, есть большая free библиотека для молекулярной биологии, на питоне и перле тоже такие есть. На objectiveC тоже есть, но если free то бедная и старая, если не free не знаю, но судя по наличию программ для мака где то есть приватные библиотеки.

Основная мотивация возникла из раздражения работой стандартных программ как например первая free по ссылке выше. Alignment последовательностей белков и днк работает согласно алгоритму который на мой взгляд для днк и белков искуственен в большой степени
https://en.wikipedia.org/wiki/Needleman–Wunsch_algorithm.
Есть другой подход основанный на словах
https://en.wikipedia.org/wiki/BLAST,
но он используется в специальных задачах поиска в базах данных. Возникла идея сделать свой alignment алгоритм. Написал его ну и потом затянуло и теперь программа разрастается. Пока не закончил. Интерфейс тоже меняется. Когда закончу обязательно покажу на форуме.

Огромное спасибо за этот форум, всяческая моральная поддержка его создателям. Мне как начавшему заниматься программированием в свободное от работы время, в смысле совсем свободное :slight_smile:, очень помогают ответы на мои вопросы !

Спасибо Вам Иван за различные видео уроки. Хотя я и не делаю ничего для iOS только для мака, они бывают весьма полезны !


#33

Вообще здорово :slight_smile:

Да программирование все таки пересекается, так что все в порядке :slight_smile:
Я очень часто вижу, что Вы сами на свои вопросы отвечаете, просто круто!

Я очень рад, что Вы с нами :slight_smile: