LINUX.ORG.RU

Обмен опытом использования САПР SolveSpace

 , ,


6

5

В этой теме предлагаю обмениваться опытом использования свободной 2D/3D САПР SolveSpace а также ссылками на ее обсуждение на других ресурсах.

Сайт/Website - http://solvespace.com

История изменений/Changelog - https://github.com/solvespace/solvespace/blob/master/CHANGELOG.md

Стабильная версия - SolveSpace 2.3 (../tree/2.x)

Версия в разработке - SolveSpace 3.0 (../tree/master)

Форки:

Примеры:

Вот некоторые интерестные ссылки:

.

★★★★
Ответ на: комментарий от atsym

У тебя же есть судя по всему в этом опыт, ссылки же кинул мне как делать пакет ) У тебя есть бинарник с ресурсами, а вот тебе ссылка где что должно лежать: https://drive.google.com/file/d/0B36uBX3gRq2lZTMwTnNjUmlwQUk/view?usp=sharing Нашел это в build/ Плюс slvs.h: https://drive.google.com/file/d/0B36uBX3gRq2ldkZMZTdUWHJ5a0U/view?usp=sharing

foror ★★ ()
Последнее исправление: foror (всего исправлений: 2)
Ответ на: комментарий от foror

ссылки же кинул мне как делать пакет )

Да ладно? Впрочем, предположим что я сделаю пакет на основе твоего билда, но что делать потом, когда нужно будет делать свежую 'ночнушку'?

В идеале было бы хорошо настроить с помощью OBS автоматическую сборку, наподобии той, которая используется для LeoCAD

http://download.opensuse.org/repositories/home:/pbartfai/

Я конечно попытаюсь заарканить @pbartfai для помощи, но судя повсему, только ты знаешь нормальный сценарий для компилятора

atsym ★★★★ ()
Последнее исправление: atsym (всего исправлений: 3)
Ответ на: комментарий от atsym

Напиши bash-скрипт, который будет собирать deb/rpm (на твой вкус) из build/bin и build/res + slvs.h (все файлы я тебе кинул). Пути я поправлю если нужно. И могу делать сборки, когда тебе нужно.

foror ★★ ()
Ответ на: комментарий от foror

Погоди, чет «Unable to create a GL context» вываливается вместо канвасов

http://hnng.moe/f/T7g

Может что доустановить надо? Ты сможешь сделать сборку на чистом xUbuntu 16.04/LinuxMint 18.1?

atsym ★★★★ ()
Последнее исправление: atsym (всего исправлений: 1)
Ответ на: комментарий от atsym

Кстати, а вот эти вещи скопировал?

/usr/local/lib/libslvs.so.3.0
/usr/local/lib/libslvs.so.1
/usr/local/lib/libslvs.so
/usr/local/include/slvs.h
foror ★★ ()
Ответ на: комментарий от foror

Да, вроде.

А вот эти две 'либы' - это симлинки на /usr/local/lib/libslvs.so.3.0?

/usr/local/lib/libslvs.so.1
/usr/local/lib/libslvs.so

atsym ★★★★ ()
Ответ на: комментарий от foror

Перенёс и эти либы (наверное они там и должны быть, а то я их сначала в bin бросал)

/usr/local/lib/libdxfrw.a
/usr/local/lib/libsolvespace-core.a
/usr/local/lib/libsolvespace-headless.a

В результате канвас все так же пуст («Unable to create a GL context»), но выхлоп немного поменял коды

mint@mint-SR58P ~ $ /usr/local/bin/solvespace

( solvespace:4825): glibmm-CRITICAL **:
unhandled exception (type Glib::Error) in sognal handler:
domain: gdk-gl-error-quark
code  : 0
what  : Unable to create a GL context

( solvespace:4825): glibmm-CRITICAL **:
unhandled exception (type Glib::Error) in sognal handler:
domain: gdk-gl-error-quark
code  : 0
what  : Unable to create a GL context

SolveSpace!

atsym ★★★★ ()
Ответ на: комментарий от atsym

Запустилось на 16.04.3, поругалась на отсутствие libspnav.so.0. На apt из live cd не было в списке пакетов для установки. Скопировал со своей убунты и всё заработало.

Перед этим скопировал solvespace-resources в /usr/share/local/solvespace А сам solvespace просто запустил из ~/Downloads/bin

foror ★★ ()
Ответ на: комментарий от atsym

The error-messages were as-per another forum-post : 'Unable to create a GL context'

(solvespace:21615): glibmm-CRITICAL **: 
unhandled exception (type Glib::Error) in signal handler: 
domain: gdk-gl-error-quark 
code : 0 
what : Unable to create a GL context 

Hitting the search engine led me to an uncomfortable truth : trapped in poverty, with old Intel hardware, unable to go beyond OpenGL v2, the current version does not support me. :o(

http://solvespace.com/forum.pl?action=viewthread&parent=1830&tt=14969...

foror ★★ ()
Последнее исправление: foror (всего исправлений: 1)
Ответ на: комментарий от foror

Как собрать SolveSpace с OpenGL1.x для Linux?

Тоесть опять всё упирается в необходимость сборки с поддержкой OpenGL 1.x, тобишь в 'говняный' GTK+ 3...

Надо как-то отвязать SolveSpace от GTK+ 3, в пользу Qt или GTK+ 2 (есть идея об заимствовании mlib из AzPainter, но знаний по переносу на неё ноль)

https://github.com/solvespace/solvespace/issues/17#issuecomment-319708063

atsym ★★★★ ()
Последнее исправление: atsym (всего исправлений: 3)
Ответ на: комментарий от foror

Ну, что теперь делать? Ты увидел в том трэде хоть какое-то решение данной проблемы?

atsym ★★★★ ()
Ответ на: комментарий от atsym

В том треде не увидел, но решение проблемы есть https://www.avito.ru/rossiya/nastolnye_kompyutery?pmax=3000&pmin=0&s=... смотри как минимум третье поколение intel https://en.wikipedia.org/wiki/Intel_Core#Ivy_Bridge_.283rd_gen.29_microarchit...

foror ★★ ()
Последнее исправление: foror (всего исправлений: 1)
Ответ на: комментарий от foror

Железо не обновляемо.

Есть варианты решить эту проблему на программном уровне? Смена GUI/тулкита может решить эту проблему?

atsym ★★★★ ()
Последнее исправление: atsym (всего исправлений: 1)
Ответ на: комментарий от atsym

Смена GUI/тулкита может решить эту проблему?

Может быть, но тот кто этим будет заниматься проще тебе 50 баксов перечислить на системник, чем страдать подобной херней.

foror ★★ ()
Ответ на: комментарий от foror

Звучит, конечно,заманчиво, и возможно я сделаю попытку получить 'donate'.

Но хотелось бы именно смены тулкита (форка в крайнем случае) из-за очевыдных проблем...

atsym ★★★★ ()

Обновил шапку топика

Вроде более-менее упорядочил уже всё. Позже ещё наведу порядок в ссылках на туториалы

atsym ★★★★ ()
Ответ на: комментарий от atsym

http://www.ebay.com/itm/Asus-P8H61-M-LX3-Plus-LGA-1155-Intel-H61-DDR3-Motherb...

http://www.ebay.com/itm/Intel-Core-i3-2100-3-1GHz-Dual-Core-LGA-1155-/3226278... Хотя лучше взять что-нибудь из 3-го поколения http://www.ebay.com/itm/Intel-i3-3220-CPU-Prozessor-2x-3-30GHz-LGA-1155-/2921...

В 66 баксов можно уложиться. Половину суммы могу подкинуть.

foror ★★ ()
Последнее исправление: foror (всего исправлений: 2)
Ответ на: комментарий от atsym

Кстати, можешь попробовать софтверный рендеринг включить https://superuser.com/questions/106056/force-software-based-opengl-rendering

LIBGL_ALWAYS_SOFTWARE=1 solvespace

У меня запустилось, LIBGL_ALWAYS_SOFTWARE=1 glxinfo выдаёт OpenGL version string: 3.0 Mesa 17.0.7

foror ★★ ()
Последнее исправление: foror (всего исправлений: 2)
Ответ на: комментарий от foror

mint@mint-SR58P ~ $ LIBGL_ALWAYS_SOFTWARE=1 /usr/local/bin/solvespace

Попробую завтра, сейчас не у ПК.

В 66 баксов можно уложиться. Половину суммы могу подкинуть.

Надо подумать, я не могу так сразу ответить на данное предложение.

atsym ★★★★ ()
Последнее исправление: atsym (всего исправлений: 1)

В общем я снова потыкал, так как статью обещал... вот мои вопросы(ниже тут большая простыня).

У меня собрана версия из git solvespace с офф сайта, говорите если что-то не то, я должен собрать, там форк или какую-то особую версию.

Значит основная фишка геометрический решатель.

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

Теперь интересное это конструкции http://solvespace.com/linkage.pl а это вот реализация китайцами Итак видим каркас на точки которого нанизаны детали собственно уже интересно, но это чисто геометрические решатели поэтому эвольвентное зацепление, трение, касание... какой нибудь мальтийский крест не сделаешь(но не слышал чтобы в опенсорсе что-то было).

Теперь вопросы:

Рисую треугольник фиксирую одну точку, делаю одну сторону горизонтальной. Указываю все размеры.

Раздел Анализ выбираю точку для отслеживания(почему одну, непонятно). Выбираю размер который будет изменятся, начальный, конечный, шаг, запускаю... потом записываю трасировку в файл, почему на каждый шаг он записывает 4 значения с одной точки?

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

Могу ли я каждый шаг заставить проверять механизм на пересечение твердых тел, может с помощью API ??

Там вообще есть древовидная структура вложенных объектов, там линия в эскиз, эскиз в 3d ? А то оно все подряд идет одно за другим.

Не совсем понял можно ли напрямую поменять положение точки в линии?

P.S. Примеры работ https://vimeo.com/161012508 Отрезной нож https://vimeo.com/195753127 Дельта принтер.

DR_SL ★★★★ ()
Последнее исправление: DR_SL (всего исправлений: 1)
Ответ на: комментарий от DR_SL

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

Траекторию точки можно экспортировать в CSV (обычно сразу же по завершению операции трасирования всплывает окно с предложением сохранить как CSV). Воспроизвести реконструкцию движения на основе траектории точки в SolveSpace (пока ещё) невозможно!

Там вообще есть древовидная структура вложенных объектов, там линия в эскиз, эскиз в 3d ? А то оно все подряд идет одно за другим.

Полноценной древовидной структуры в SolveSpace нет - пока-что структура работает как «каждая предыдющая группа является родителем для следующей группы». Но идея полноценной древовидной структуры уже витает в воздухе

https://github.com/solvespace/solvespace/issues/80

Но с если использовать нестандартные методики, то некое подобие древовидной структуры можно организовать, но отображаться в окне «Property browser» оно будет как линейная структура.

Не совсем понял можно ли напрямую поменять положение точки в линии?

Не совсем ясная постановка задачи. В SolveSpace можно прицепить точку на линию/отрезок как на продольную ось и потом двигать вдоль этой линии как хочешь.

P.S.: возможно, EvilSpirit сможет более развёрнуто ответить на эти вопросы, и на те, на которые я в этом комменте ответа не дал.

atsym ★★★★ ()
Последнее исправление: atsym (всего исправлений: 2)
Ответ на: комментарий от DR_SL

Итак видим каркас на точки которого нанизаны детали собственно уже интересно, но это чисто геометрические решатели поэтому эвольвентное зацепление, трение, касание... какой нибудь мальтийский крест не сделаешь(но не слышал чтобы в опенсорсе что-то было).

Для этого нужны физические симуляторы механизмов (CAE?): V-REP (частично open-source) и MORSE (форк Blender Game Engine). Есть и другие подобные симуляторы, но эти два наиболее известные, которые связаны с open-source и являются кросс-платформенными программами с GUI'ями

Если надо, то могу накидать ссылок по теме подобных симуляторов.

atsym ★★★★ ()
Последнее исправление: atsym (всего исправлений: 2)
Ответ на: комментарий от DR_SL

крепление происходит совпадением базисов плоскостей и совпадением точек, если кто расскажет что интересней послушаю.

Кроме привязки по точкам можно организовывать привязки по углу между двумя элементами/линиями/нормалями принадлежащими двум разным деталям в «режиме 3d» или в режиме «сборки» (можно также использовать паралельность или перпендикулярность между этими элементами). Есть и другие, так сказать, пока ещё не задокументированые варианты.

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

Вот на скорую руку смоделил «6DoF манипулятор» (типа промышленного робота «KUKA»)

http://hnng.moe/f/T7X

Хочу доработать его на этой неделе

atsym ★★★★ ()
Последнее исправление: atsym (всего исправлений: 1)
Ответ на: комментарий от atsym

Не совсем ясная постановка задачи. В SolveSpace можно прицепить точку на линию/отрезок как на продольную ось и потом двигать вдоль этой линии как хочешь.

Ну не знаю сначала подумал а вдруг у человека координаты линий конструкции есть, но тут экспорт есть из dxf , должно помочь.

Проблема вот какая , не могу с помощью шагового приращения, заставить точку вращаться на 360 градусов, будь то изменение угла или длинны отрезка, получается только на пол оборота да ещё и ошибку выдает в качестве угла.

Для этого нужны физические симуляторы механизмов (CAE?) Если надо, то могу накидать ссылок по теме подобных симуляторов.

Неплохо было бы. Можно в личку если не хочется захламлять тему.

Ещё вопрос наверное к EvilSpirit , на чем(софт) Вы проверяли ваш STEP экспорт, двумерных объектов?

DR_SL ★★★★ ()
Ответ на: комментарий от DR_SL

Ещё вопрос наверное к EvilSpirit , на чем(софт) Вы проверяли ваш STEP экспорт, двумерных объектов?

Я открывал в SolidWorks и STP Viewer, но делал это всего пару раз, просто посмотреть, как работает. Вроде было норм.

EvilSpirit ()
Ответ на: комментарий от DR_SL

Проблема вот какая , не могу с помощью шагового приращения, заставить точку вращаться на 360 градусов, будь то изменение угла или длинны отрезка, получается только на пол оборота да ещё и ошибку выдает в качестве угла.

Лучше руками крути, step dimension не сможет сделать все хорошо, до тех пор, пока мы не введем возможность задавать углы 0..360 (-180..180)

EvilSpirit ()
Ответ на: комментарий от DR_SL

Ну не знаю сначала подумал а вдруг у человека координаты линий конструкции есть, но тут экспорт есть из dxf , должно помочь.

В SolveSpace нет понятия «вставка по координатам». Это характерно только для САПР'ов с поддержкой текстовых коммад/скриптов. Эту фичу уже не раз просили реализовать в SolveSpace, но пока-что данный, функционал отсутствует.

На данный момент конструирование в SolveSpace реализуется только через GUI

atsym ★★★★ ()
Последнее исправление: atsym (всего исправлений: 1)
Ответ на: Роботы & Roboarm + OpenHardware от atsym

А есть годные проекты рук на Расперипи? Хочется много места под программы, не экономить на спичках, хочется сменные насадки с разным назначением и сменой рода деятельности, с разными языками программирования, баловаться чтобы и не волноваться что место закончится.

Chelobaka ★★★ ()
Ответ на: комментарий от EvilSpirit

Угол/Поворот на ~ 360° в SolveSpace

Лучше руками крути, step dimension не сможет сделать все хорошо, до тех пор, пока мы не введем возможность задавать углы 0..360 (-180..180)

Да, я уже создал issue по этому поводу

https://github.com/solvespace/solvespace/issues/82

DR_SL, но если очень надо уже сейчас, то у меня есть парочка нестандартных решений, позволяющих сделать угол/повоот на ~ 360°. Вот скрины:

  • в SolveSpace 2.x и выше - путём привязки длинны (почти) замкнутой дуги к длинне линии: http://hnng.moe/f/T9d
  • в SolveSpace 3.x с поддержкой «RANGE» - путём связки двух углов, размер каждого из которых колеблется в диапазоне 0.01°..179.99°: http://hnng.moe/f/T9c

Красным выделены те «constraints» для которых и надо производить «Step Dimension».

СКАЧАТЬ ДАННЫЕ ПРИМЕРЫ (файлы SLVS и скрины одним архивом):

http://hnng.moe/f/T9e

atsym ★★★★ ()
Последнее исправление: atsym (всего исправлений: 4)
Ответ на: комментарий от Chelobaka

А мы что?

А вы пока подождите пока я завершу модель «6DoF robot arm»

www.linux.org.ru/forum/science/12756903?cid=13590799

Как только завершу выложу скриншот, и там в «Скриншотах» потом обсудим вопросы проектирования (возможно и печати/сборки) роботов.

atsym ★★★★ ()
Ответ на: Угол/Поворот на ~ 360° в SolveSpace от atsym

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

Нет параллельных плоскостей.. а это несколько нервирует. Ну и концентрического ограничения как в freecad в ванили или нет. Видимо 3,0 надо тыкать.

Пока я собрал диафрагму

P.S. Напиши про динамические решатели(особенно те что пробовал) из моего гугления меня выкидывает на альтернативный freecad

DR_SL ★★★★ ()
Ответ на: комментарий от DR_SL

Напиши про динамические решатели (особенно те что пробовал)

Ты имеешь ввиду «ranged constrains»? Не совсем понял что ты имеешь ввиду под «динамический.

Нет параллельных плоскостей

Ну, скажем так, они есть в SolveSpace. Тут лучше будет если ты даш мне простенкое ТЗ (опиши задание) в котором эти параллельные плоскости есть - тогда попробую наваять примеров.

Так... в общем при компоновке предметов в 3d было очень неудобно, совпадение базисов это вот прям все три вектора.

Условно да, но на самом деле можно и крутить потом один относительно другого. Можешь дать скрин с проблеммой с которой ты столкнулся?

А параллельные оси не всегда работают как нужно

Не понял, в чём вопрос? Скрины можешь дать?

atsym ★★★★ ()
Последнее исправление: atsym (всего исправлений: 2)
Ответ на: комментарий от EvilSpirit

Вот здесь ranged constraints можно использовать

Зачем? В этом механизме (диафрагма) все детали и связки жёсткие, и поэтому нет необходимости использовать «ranged».

Единственное (возможное) применение «ranged» разве что для симуляции столкновения лепестков диафрагмы. Но, это уже можно сказать 'нестандартное' решение.

Жаль что в SolveSpace (пока-что) нет стандартного способа симуляции столкновений поверхностей.

atsym ★★★★ ()
Последнее исправление: atsym (всего исправлений: 4)
Ответ на: комментарий от atsym

Единственное (возможное) применение «ranged» разве что для симуляции столкновения лепестков диафрагмы. Но, это уже можно сказать 'нестандартное' решение.

Вот именно для этого и нужно.

Жаль что в SolveSpace (пока-что) нет стандартного способа симуляции столкновений поверхностей.

ожидать, что это появится в ближайшие годы не стоит. не стоит также заводить на это issue на github (на всякий случай, если не ясно выражаюсь - реализация этой фичи по сложности с нуля составляет примерно сложность реализации всего SolveSpace). Если брать стороннюю библиотеку - быстрее, но таких библиотек нет (на самом деле это лишь предположение). Если брать просто игровую физику - то это скорее всего бесполезно чуть более, чем полностью, ввиду результата, который будет физически неверным, создавая лишь ложное представление о том, как будет работать механизм, заставляя конструкторов создавать механизмы, неспособные работать в реальности и тратить свое время. Поэтому для симуляции столкновений использование ranged_constraints - это способ, который будет работать стабильно и точно. Как только появится возможность заводить свои параметры и связывать их выражениями, вводимыми в значения констрейнов, можно будет делать любые передачи, например, шестерни, кулачковые механизмы, нелинейные движения, да хоть волновой редуктор, где каждый элемент будет крутиться как положено. Но это только с дополнительными доработками, в виде углов 0-360, и даже углов >360. Да, да, можешь возрадоваться, это тот случай, когда я вынужден признать, что фича была закрыта «спрожога», но это только в моем понимании, поскольку я примерно представляю, какие фичи на что завязаны, и как их можно использовать, потому что это было по факту реализовано.

EvilSpirit ()
Ответ на: комментарий от EvilSpirit

какие фичи как можно использовать

В принципе-то, я тоже знаю как можно использовать в 'нестандартный' способ существующие на данный момент фичи (примеры некоторых моих решений уже выкладывал и в этом топике, и на официальном форуме SolveSpace). У меня полно разных недокументированных методов работы в SolveSpace.

И в связи с этим понимаю как можно было бы объеденить/скомбинировать некоторые функции для того чтобы реализовать дополнительный функциноал в SolveSpace. Но я это понимаю на уровне логики программы и алгоритмов (+ знание геометрии, черчения и теормеха тоже помогают 'выкручиваться' в связи с нехваткой некоторого функционала в SolveSpace)

К сожалению в программировании C/C++ я не очень...

atsym ★★★★ ()
Последнее исправление: atsym (всего исправлений: 1)
Ответ на: комментарий от atsym

примеры некоторых моих решений уже выкладывал и в этом топике, и на официальном форуме SolveSpace

Это не очень эффективно. Ты тратишь столько сил и нервов на то, чтобы писать ишью в разных опенсорс проектах, считая, что так ты делаешь огромную полезную работу, потом пытаешься выдавать это за достижение. Я вижу, ты хочешь помочь проекту, но если ты делаешь действительно что-то на SolveSpace, я настоятельно тебе рекомендую вложить свою энергию во что-то, что сможет принести реальную пользу проекту (написание документации, туториалов по нестандартным подходам работы в SolveSpace). Таким образом, ты получишь возможность легко продвигать и обосновывать фичреквесты. Например, ссылка на видео, где ты в определенный момент мог бы применить фичу, но ее еще нет, или статья на хабре или reddit, где ты пишешь, что вот в этом моменте очень не хватает вот этого. Тогда тебе не нужно будет писать issue, мы будем читать твой блог и будет очевидно, что в ходе реального применения это неоспоримо-необходимая функциональность. Так это вот я к чему: ты пишешь столько текста, к тому же на английском, так может ты начнешь уже не просто переписываться с нами на форумах, а вносить реальный вклад в проект, делая статьи, которые помогали бы продвигать SolveSpace. Ведь проблема сейчас не в фичах, проблема в том, что SolveSpace (как говорят) хорош, но им никто не пользуется. Мне не очень интересно будет продолжать над ним работу, если это останется так.

EvilSpirit ()
Ответ на: комментарий от atsym

К сожалению в программировании C/C++ я не очень...

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

Если я правильно понимаю, это твоя работа: https://github.com/solvespace/solvespace/issues/143 Так какого фига вот здесь https://www.google.ru/search?q=Solvespace&newwindow=1&source=lnms&amp... эта картинка еще не топе? Даже моя картинка https://habrahabr.ru/post/324160/ из этой стати выше.

Я понимаю, это не метрика. Но если ты сделал такое в SolveSpace, об этом должны знать все

EvilSpirit ()
Ответ на: комментарий от EvilSpirit

и даже углов >360

Для углов свыше 360° я настоятельно рекомендую разделить функции «угол» и «вращение» (потомум как 'загибов' на угол свыше 360° нет, это уже больше относится к поворотам/вращениям в кинематике)

https://github.com/solvespace/solvespace/issues/82#issuecomment-253706567

atsym ★★★★ ()
Последнее исправление: atsym (всего исправлений: 1)
Ответ на: комментарий от EvilSpirit

Вот именно поэтому нужно стремиться к тому, чтобы делать то, в чем ты действительно хорош

САПР'ы и техническое 3D моделиование - это моя тема, так что в чём, в чём, а в этой сфере я таки плаваю ;-P

а не пытаться подсказывать нам технологии, библиотеки и методы программирования.

То что я не разбираюсь (пока-что) в C/C++ не означает что я не разбираюсь в программировании, 3D моделировании, форматах файлов и т.д. Не стоит меня недооценивать ;-)

О методах программирования я вроде никаких issue и не создавал. Если неправ, ткни носом - будем разбирать что к чему.

atsym ★★★★ ()
Последнее исправление: atsym (всего исправлений: 1)
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)