diff --git a/README.md b/README.md index e69de29..458f5c9 100644 --- a/README.md +++ b/README.md @@ -0,0 +1,98 @@ +# Calc3D by Risen +Калькулятор Calc3D by Risen предназначен для быстрой оценки стоимости печати на 3D принтере, +исходя из стоимости пластика, веса, тарифа электроэнергии и прочего... + +## Содержание +- [Формула расчета](#формула-расчета) +- [Как скачать](#как-скачать) +- [FAQ](#faq) +- [Зачем это всё](#почему-я-решил-реализовать-этот-проект?) +- [Команда проекта](#команда-проекта) +- [Лицензия](#лицензия) +- +## Формула расчета + +``` +S = ((p/1000*t/60*h)+(md*d*st/mk)+(a+post))*x+mod +``` +где +``` + S - стоимость печати, руб. + + p - мощность принтера, Вт + + t - время печати, мин. + + h - тариф на электроэнергию, кВт/ч + + md - вес детали, гр. + + d - множитель отбраковки. + + st - стоимость катушки пластика, руб. + + mk - вес пластика в катушке, гр. + + a - амортизация принтера, руб. + + post - стоимость постобработки, руб. + + х - количество печатаемых дубликатов, шт. + + mod - стоимость моделирования, руб +``` + + +## Как скачать +Переходим в раздел "Релизы" по это ссылке: [релизы](https://git.risenhome.xyz/risen/Calc3D_by_Risen/releases) + +Качаем последнюю версию, настраиваем свои параметры и пользуемся. + + +## FAQ +Раздел в процессе написания + +## Почему я решил реализовать этот проект? +Не нашел в интернете таких калькуляторов офлайн. Решил сделать для себя, заодно потренироваться в программировании. + + +## Команда проекта +Вы можете написать мне в личку в телеграм, если у Вас есть каие-то вопросы по работе калькулятора. + +- [Risen (Colin Robinson)](tg://resolve?domain=RisenYT) — разработчик-любитель + +## Лицензия +MIT +``` +Copyright (c) <2024> + +Данная лицензия разрешает лицам, получившим копию данного программного обеспечения и сопутствующей документации +(далее — Программное обеспечение), безвозмездно использовать Программное обеспечение без ограничений, включая +неограниченное право на использование, копирование, изменение, слияние, публикацию, распространение, сублицензирование +и/или продажу копий Программного обеспечения, а также лицам, которым предоставляется данное Программное обеспечение, +при соблюдении следующих условий: + +Указанное выше уведомление об авторском праве и данные условия должны быть включены во все копии или значимые части +данного Программного обеспечения. + +ДАННОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ЯВНО ВЫРАЖЕННЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, +ВКЛЮЧАЯ ГАРАНТИИ ТОВАРНОЙ ПРИГОДНОСТИ, СООТВЕТСТВИЯ ПО ЕГО КОНКРЕТНОМУ НАЗНАЧЕНИЮ И ОТСУТСТВИЯ НАРУШЕНИЙ, +НО НЕ ОГРАНИЧИВАЯСЬ ИМИ. НИ В КАКОМ СЛУЧАЕ АВТОРЫ ИЛИ ПРАВООБЛАДАТЕЛИ НЕ НЕСУТ ОТВЕТСТВЕННОСТИ ПО КАКИМ-ЛИБО ИСКАМ, +ЗА УЩЕРБ ИЛИ ПО ИНЫМ ТРЕБОВАНИЯМ, В ТОМ ЧИСЛЕ, ПРИ ДЕЙСТВИИ КОНТРАКТА, ДЕЛИКТЕ ИЛИ ИНОЙ СИТУАЦИИ, +ВОЗНИКШИМ ИЗ-ЗА ИСПОЛЬЗОВАНИЯ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ИЛИ ИНЫХ ДЕЙСТВИЙ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ. +``` +``` +Copyright (c) <2024> + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, +and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED +TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE +OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.``` \ No newline at end of file diff --git a/setts.py b/setts.py deleted file mode 100644 index e389deb..0000000 --- a/setts.py +++ /dev/null @@ -1,174 +0,0 @@ -import json -import PySimpleGUI as Sgi -import gettext -import os - -from texts import amortization_calc, new_sets -from lists import themes_list, lang_list, currency_list - - -def language(): - with open(os.path.expanduser('setts.json')) as file: - old_data = json.load(file) - if old_data['settings']["locale"] == 'English': - locale = 'en_US' - else: - locale = 'ru_RU' - return locale - - -lang = gettext.translation('locale', localedir='locale', languages=[language()]) -lang.install() -_ = lang.gettext - - -def currency_setts(): - with open('setts.json') as file: - old_data = json.load(file) - try: - if old_data['settings']["currency"] == 'руб.': - currency = 'руб.' - elif old_data['settings']["currency"] == '$': - currency = '$' - else: - currency = '€' - - except KeyError: - if old_data['settings']["locale"] == "рус.": - currency = 'руб.' - else: - currency = '$' - return currency - - -def window_setts(): - with open('setts.json') as file: - old_data = json.load(file) - theme = old_data["settings"]["theme"] - p = old_data["settings"]["p"] - h = old_data["settings"]["h"] - d = old_data["settings"]["d"] - st = old_data["settings"]["st"] - mk = old_data["settings"]["mk"] - a = old_data["settings"]["a"] - locale = old_data['settings']["locale"] - try: - currency = old_data['settings']["currency"] - except KeyError: - currency = "руб." - try: - spi = old_data["settings"]["spi"] - except KeyError: - Sgi.popup_ok(new_sets) - spi = 0 - try: - marg = old_data["settings"]["marge"] - except KeyError: - marg = 0 - - layout1 = [ - [Sgi.Text(_("ВНИМАНИЕ! Перед установкой параметра\n'Коэффициент выбраковки' прочитайте раздел\n" - "Help, с описанием формулы расчета!\n"), text_color="red")], - [Sgi.Text(_('Мощность принтера, Вт')), Sgi.Push(), Sgi.InputText(p, size=(10, 10), justification='right')], - [Sgi.Text(_('Тариф электроэнергии, кВт/ч')), Sgi.Push(), - Sgi.InputText(h, size=(10, 10), justification='right')], - [Sgi.Text(_('Коэффициент выбраковки')), Sgi.Push(), Sgi.InputText(d, size=(10, 10), justification='right')], - [Sgi.Text(_('Стоимость катушки, ')+f'{currency_setts()}'), Sgi.Push(), - Sgi.InputText(st, size=(10, 10), justification='right')], - [Sgi.Text(_('Вес катушки, гр.')), Sgi.Push(), - Sgi.Combo(['225', '250', '450', '500', '750', '850', '1000', '2250', - '2500'], size=(8, 20), default_value=mk)], - [Sgi.Text(_('Наценка, %.')), Sgi.Push(), Sgi.InputText(marg, size=(10, 10), justification='right')], - [Sgi.Text('')] - ] - layout2 = [ - [Sgi.Text(_('Стоимость вашего принтера, ')+f'{currency_setts()}'), Sgi.Push(), Sgi.InputText(a, size=(10, 10), - justification='right')], - [Sgi.Text(_('Срок полезного использования, лет.')), Sgi.Push(), Sgi.InputText(spi, size=(10, 10), - justification='right')], - [Sgi.Text('_' * 45)], [Sgi.Text(amortization_calc)], - [Sgi.Text('')] - ] - layout3 = [ - [Sgi.Text(_('Оформление'))], - [Sgi.Text(_("Выбор темы")), Sgi.Push(), Sgi.Combo(themes_list, size=(20, 20), default_value=theme)], - [Sgi.Text(_("Язык")), Sgi.Push(), Sgi.Combo(lang_list, size=(20, 20), default_value=locale)], - [Sgi.Text(_("Валюта")), Sgi.Push(), Sgi.Combo(currency_list, size=(20, 20), default_value=currency_setts())], - ] - - tab_group = [ - [Sgi.TabGroup( - [[Sgi.Tab(_('Основные настройки'), layout1), Sgi.Tab(_('Амортизация'), layout2), - Sgi.Tab(_('Оформление'), layout3)]] - ), [Sgi.Push(), Sgi.Button(_('Применить'))]]] - - window = Sgi.Window(_("Настройки"), tab_group, modal=True) - while True: - event, values = window.read() - if event == _('Применить'): - if values[8] == theme: - new_theme = theme - else: - new_theme = values[8] - if values[9] == locale: - new_locale = locale - else: - new_locale = values[9] - if values[10] == currency: - new_currency = currency - else: - new_currency = values[10] - if values[0] == p: - new_p = p - else: - new_p = values[0] - if values[1] == h: - new_h = h - else: - new_h = values[1].replace(',', '.') - if values[2] == d: - new_d = d - else: - new_d = values[2].replace(',', '.') - if values[3] == st: - new_st = st - else: - new_st = values[3] - if values[4] == mk: - new_mk = mk - else: - new_mk = values[4] - if values[5] == marg: - new_marg = marg - else: - new_marg = values[5].replace(',', '.') - if values[6] == a: - new_a = a - else: - new_a = values[6] - if values[7] == spi: - new_spi = spi - else: - new_spi = values[7] - - with open('setts.json', 'w') as file: - data = {"settings": {"theme": new_theme, - "p": new_p, - "h": new_h, - "d": new_d, - "st": new_st, - "mk": new_mk, - "a": new_a, - "spi": new_spi, - "marge": new_marg, - "locale": new_locale, - "currency": new_currency - - } - } - json.dump(data, file, indent=2) - - window.close() - - if event == "Exit" or event == Sgi.WIN_CLOSED: - break