Как стать автором
Обновить

Сказ о том, как один программист себе мебель из ДСП на PHP программировал

Уровень сложностиСредний
Время на прочтение19 мин
Количество просмотров16K
Всего голосов 81: ↑80 и ↓1+103
Комментарии45

Комментарии 45

Eсть же программа pro100 - которая и для частника (сам делал в ней мебель на всю квартиру) и для небольших фирм ок...

Наверное, проблема во мне) я эту программу пробовал много лет назад, тогда не зашло

PRO100 сейчас не продается на территории РФ, а цена вроде как была от 20К руб./мес. или от 60К руб. до 130К руб. за лицензию. Демо-версия не позволяет печатать/сохранять проекты если что.

Работал раньше с ней (4 и 5 версия) лет пять назад. Для эскизов — самое то, быстро/красиво. Но вот напрямую в производство/раскрой выхлоп из этой программы (или, не дай Бог, чужие проекты) без проверки с калькулятором и карандашом я никогда бы не отправил.

ниужели в ней столько багов?

Дело не в багах, а в прокладке между монитором и креслом (при мне увольняли конструктора, который доверял всему, что эта программа выдавала по его же кривым проектам). Сама программа (я про 4 или 5 версию, т.к. с 6 не работал) рассчитана на то, что проекты может составлять любой без особой подготовки просто «тяхая мЫшей» при подгонке деталей.

Отсюда самые частые косяки — деталь меньше (недотянули) или больше (перетянули, при неправильном пересечении деталей их размер можно сделать каким угодно), еще возможны варианты с неправильной толщиной (18мм вместо 16) и неправильной ориентацией (рисунка) ламината.

Самый злостный косяк, который я встречал, когда из этой программы отправили размеры фасадов на производство в другой город без учета зазоров и пр. Если корпуса еще в собственном цехе могут перепроверить перед раскроем и переделают, то фасады приедут ровно такие, какие заказывали :) А тут проблема такая — один неправильный фасад → перезаказывай весь комплект, т.к. даже мизерное отличие в тоне будет резать глаз заказчику.

Плюсом ко всему никакого учета кромок, фасок и пазов в тех версиях не было.

Но повторюсь, для салонов/дизайнеров (где точность ±50мм простительна и нужна просто красивая картинка без лишних сложностей) эта программа лучше, чем более тяжеловесные аналоги. Хотя лично я, будучи конструктором, ее использовал чисто для эскизов, а деталировку для карт кроя считал вручную или в Exel с последующей перегонкой в Cutting2 (ну это когда на Базис-Мебельщик контора еще не разорилась).

Дополню еще немного о том, почему мне удобней делать все это кодом. Потому, что когда я начинаю проектировать, я не всегда знаю заранее, что должно быть на выходе, нужно посмотреть покрутить, делать много изменений (особенно когда делаешь не только для себя, но и с кем-то надо согласовать, особенно, если это женщина). И вот взять тумбу из примера статьи и внезапно, что если сделать не 5 ящиков, а 4, но побольше? В этих всех программах обычно, надо выделять ящик, удалять его, пропорционально изменять размер других. А у меня просто убрать одну "*," и все посчитается само:
$boxes = split_vertical($box, "*,*,*,*", 16);

И все, вот их 4
И все, вот их 4

А теперь что если нижние два ящика объединить в 1?

Вот так:
$boxes = split_vertical($box, "50%,*,*", 16);

А что если внезапно нужна тумба побольше и пошире, с двумя большими ящиками и двумя маленькими (это уже комод теперь). Просто поменять 2 строчки:
$box = box(800, 1200, 600);

...

$boxes = split_vertical($box, "400,400,*,*", 16);

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

Ну, главное, результат есть, руки более чем прямые) А так, как то сложно выглядит. Не проще ли было запустить SketchUp?)) В свое время ремонт квартиры проектировал в связке SketchUp -> blender -> UE4 -> HTC Vive. Стены, мебель схематично по размерам - в скетче, материалы-текстуры, подгонки моделей - блендер; освещение, запуск ВР режиме - анриал. Был забавный момент - в анриале можно выставить свет в соответствии с географией и временем, я выставил по панорамной фотке, которую юзал для вида за окном, и почему-то в двух комнатах получился разный по яркости свет, в одной было прямо сильно темнее. Думал артефакт, а в реальности так и оказалось - сыграл козырек балкона при определенном положении солнца.

Что на выходе в SketchUp будет? Если только ренедер, для планирования ремонта - да, хорош, но для проектирования мебели со множеством деталей маловато будет.

Pro100 (выше уже назвали, и вроде я как раз в нем после переезда много лет назад делал) экспортирует все в виде, удобном для разных контор по изготовлению деталей, кромкованию и т.п.

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

https://docs.opencutlist.org/ - Для скетчапа есть расширение OpenCutList, которое предназначено именно для решения таких вопросов

OpenCutList Cutting Diagram
OpenCutList Cutting Diagram

О, с расширением весьма интересно. Буду знать, спасибо!

Распил самое лёгкое. Нужно указать кромки, отверстия, проставить размеры. Вот это настоящий головняк.

Такую мебель на бумаге будет "спроектировать" быстрее. Или в любой рисовальной программе.

А тут даже ничего не сказано про крепления, полозья и прочую фурнитуру.

Я никогда не заказываю отверстия для конфирмата при распиле, это бессмысленно удорожает заказ, их я делаю сам и сразу по месту, поэтому не вижу смысла вносить это в проект. С фурнитурой также.

Так для себя надо знать, где и что сверлить. Подогнать точно дверцу под шкаф гораздо труднее, чем тупо выбрать размеры досок для этого шкафа.

Не сталкивался с такой проблемой. Обычно, пока задней части нет, приложил снаружи дверцу, как должна быть, зафиксировал, изнутри прикрутил петлю.

В открытом виде приставил фасад, прикрутил, отрепетировал, забыл. Кстати если от руки рисовать на бумаге, то такой стол для пк с тумбой под ТВ пеналом и антресолями был нарисован и посчитан (ну еще придуман естессно) минут за 30 с перекурами. В спец программах с нормальными БД будет естессно быстрее, но мне лень, у меня лапки)))

Так, ну, в наши то непростые времена, понятное дело, но десять то лет назад, ну икея же вовсю трудилась, предоставляя полный фарш, из этого вашего дсп...

Ладно бы, там, из цельного дуба...

Тем временем FreeCAD такой: ну да, ну да....

Несколько раз пытался и удалял его) Не мое)

Обычно дело в цветовой теме. Дело в том, что FreeCAD все сложные штуки здорово выделяет цветом, но только вот цвета подсветки от основных почти не отличаются. Я сам это узнал только когда тёмную тему включил.

А там светлая есть? О_О

Как же это близко и лампово)) Но писать кодом это конечно мощно! Тут выше написали про sketchup.

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

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

Мне sketchup тоже не зашел в свое время, я его тоже пробовал. Наверное у меня такое мышление, что код мне понятнее)


У меня кромка всегда уменьшает деталь. Т.е. работает как padding в css, сохраняя внешний размер делали. А с направляющими на ящиках - я просто делаю между ними зазор в 16мм, чтобы на предыдущий ящик положить лист дсп и следующий на своем месте. А фасады уже потом, закрывают лишние зазоры.

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

Ruby, божечки...

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

Я люблю свою работу! Я приду сюда в субботу.. Не понятно, для чего этот пост, но будь здоров.

Очень похоже на мой проект для научного общества учащихся лет 25 назад, я тогда на VB6 писал. Штука считала материал для ремонта, всякий там плинтус и обои. Была какая-то мало-мальская визуализация. Я ещё в каком-то классе школы учился.

Интересная концепция ограничивающего куба

PHP — я использую 7.2.

Судя по коду, я думал PHP 4 :)

PHP End of Life support: https://www.php.net/eol.php PHP 7.2: 30 Nov 2020

А если серьезно - то хорошее начало, лучший метод изучать что-то - это пробовать решать реальные задачи. Теория немного хромает, я бы рекомендовал изучить немного про ООП, composer.

Также, необходимо разделить логику от рендеринга. А то у вас там все смешалось

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

А логика объединенная с рендером - это принцип OpenSCAD, это иногда причиняет боль, а иногда удобнее, я взял что-то среднее оттуда, ориентируясь на собственное удобство. ООП, где все будет объектом и будет что-то типа куб->доскаСверху(), мне не зашло потому, что при этом исходный куб должен уменьшится, но так не всегда нужно, показалось что функциональное программирование тут будет проще, когда функция всегда возвращает измененный куб, а уж присваивать его той же переменной или другой - это я буду решать в зависимости от задачи.

Для не самых новых версий это правда. Но вот для ископаемых ситуация меняется на противоположную - как раз их-то и не найдёшь. Плюс стон стоит на весь интернет, когда такие вот сидельцы рыдают, что хостер насильно обновил версию пхп до минимально приемлемой и их говнокод перестал работать. Это всё равно что рекомендовать Питон 2.

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

Я 7.2 не рекомендовал, я написал ту, на которой делал сам, подразумевая, что это минимум на котором я проверял, будет ли все работать на более ранних, я не знаю. Но это не значит, что на версии 8.4 работать не будет, оно там прекрасно работает. Но вы правы, я подумал ,что это само собой разумеющееся, а на самом деле это следовало указать.

Открой рег.ру, арендуй на месяц хостинг их за 411 рублей, там доступны все версии php с 5.3 до 8.4, любые на одном хостинге для разных папок с сайтами можешь свою версию php использовать, вот mysql одной только версии они предоставляют на весь хостинг либо 5.7, либо 8.

Главное ты сам такую программу напиши, после написания покажи, а мы оценим.

Я php разработчик с 15 летним стажем, в основном работаю с проектами на битриксе, могу сказать, что огромное множество проектов до сих пор работают у компаний крупных причём на php 5.6 и php 7.2.

Картинка заглавная сделала это воскресенье, ( ᵔ▽ᵔ)_b спасибо! По поводу проектирования мебели вообще квартиры, как по мне, пока не прикрыли, blender может всё.

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

Согласен с тем, что вопрос зависимости от разработчика автором статьи решён, для себя точно. Поэтому и отметил, что блендер хорош на данном этапе. Могут и прикрыть или создать некоторые неудобства, не спорю. Но, освоив, для собственного планирования, мебели в том числе пока другого не надо. К примеру, на скрине подоконник-столешница, со всеми размерами, фасками, вырезами и т.д.

вы кучу какихто плагинов используете? помню пытался в Блендере раскладку плитки сделать - проблематично. И вообще блендер не дружит с размерами - это не сапр, неудобно чтото делать по размерам

Когда я 5 лет назад попробовал OpenSCAD, я тоже проникся. :) Даже пост написал:

После нескольких подходов к "Fusion 360", в котором я каждый раз тонул в перегруженном интерфейсе, словно маленький кораблик, решивший пересечь океан, я, вдруг, открыл для себя "OpenSCAD".

Эти ощущения похожи на те, которые вы получаете ступив на твердую землю после того, как вас укачало на волнах. К счастью, меня не успело вывернуть, ведь Fusion все равно еще понадобится. (не понадобился, пользовался потом другим)
Но вот подход к созданию [параметрических] 3D-моделей в виде последовательного описания отдельных графических примитивов меня просто вдохновил вчера!
Это просто чистое программерское удовольствие. Никаких тебе тяганий мышки по углам и прочих пиксельхантингов.

Написал, например, cylinder(d=10, h=100) - будет тебе цилиндр. Написал difference() { cylinder(d=10, h=100); cylinder(d=8, h=100); } - будет тебе труба (в хорошем смысле ).

Весь объект описывается таким образом. И все всегда будет стоять на своих местах. Как в том анекдоте про девочку и бант.

В общем, рекомендую!

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

Это футуристический дизайн. Современные дизайнеры пока ещё не доросли до его понимания.

Infrastructure as Code Mebel as Code

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

Шаг петель и нагрузку смотреть надо на сайтах производителей, зачастую там можно скачать pdf-файл с каталогом, где нарисовано сколько и на каком расстоянии надо их крепить в зависимости от веса фасада и его размеров (вес считается исходя из плотности материала, у МДФ она больше, чем у ЛДСП), там же иногда пишут зазоры.

Та же история с направляющими для ящиков, подъемными механизмами, да и вообще прочей фурнитуре — смотрим инструкции от производителя. Например, посудосушитель в базу 600мм — значит внешняя ширина корпуса (независимо от толщины ДСП 16/18мм) должна быть 600мм. Бутылочница 150 или 200мм — ширина корпуса должна быть 150 или 200мм соответственно.

Ну и еще добавлю пару мыслей от себя:

Крепеж

Крепежные элементы основные: евровинт 7х50 (он же конфирмат, можно взять еще несколько 7х70 если накосячил и 50-й стал прокручиваться), эксцентриковая стяжка (два исполнения) (см. по ссылке с поз.4). Прочность соединения ±одинаковая. На особо важных участках можно заморочиться, добавить шканты и проклеить торец в месте стыка.

Саморезы по дереву (для уголков, петель, фурнитуры и для накладной задней стенки или дна ящика из ДВП, ходовой размер 3,5х16). Гвозди мебельные для задней стенки и дна, используются наверное сейчас редко, но в целом можно.

Заглушки для эксцентриков/евровинтов есть пластиковые (выпуклые, цвета ограничены, иногда держатся не очень) и самоклеящиеся (можно иногда подобрать точно в цвет с ЛДСП, держатся хорошо, если клеить аккуратно).

Задние стенки / донца ящиков из ДВП можно как набивать/прикручивать, так и садить в паз (ширина 4мм делается на форматно-раскроечном станке, глубина около 5-10мм (не помню точно) отступ от края около 10мм) дополнительно можно зафиксировать уголком для ДВП под паз с саморезом.

Кромка

Меламиновая (утюгом которая клеится) используется наверное уже редко, также редко встречаются канты мебельные накладные и врезные.

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

Ходовые размеры ABS кромок (ширина/толщина): 19/0,4мм и 19/2мм (для 16/18 плит), 25/2мм или 35/2мм (для 22 плиты или «сэндвича» 32мм).

Кромка 0,4мм в раскрое детали не учитывается, а если толщина 2мм — придется вычитать из размера детали. Есть еще кромка толщиной 1мм, но я не работал с ней, в целом, ее можно для внутрянки использовать вместо 0,4.

Особенность кромки 2мм (для видимых лицевых частей изделия (если не закрыты фасадом) и самих фасадов) — снимается закругленная фаска (поэтому, когда делаем, например, открытый стеллаж для книг, то «утапливаем» полку на 2 мм, чтобы не было некрасивых переходов на стыке полки и стенки — т.е. если глубина стеллажа (его боковой стенки) 350мм, то глубина полки тогда будет 348мм).

Что кромить?

По ГОСТу по крайней мере детали детской мебели не должны иметь торцов без кромки (напр., стенка выдвижного ящика должна кромиться сверху (понятно дело, ее видно) и сзади (а это редко кто делает, ее не видно), а снизу (набивается ДВП) и спереди (прикручивается фасад) она не кромится.

Но по общему правилу (не по ГОСТу), что не видим, то не кромим, за исключением внешних частей, например, которые будут соприкасаться с полом или стеной, если не набиваем ДСП.

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

Неприятности с кромкой.

Иногда на светлых деталях может быть виден черный клеевой шов (зависит от оборудования и от толщины нанесенного клея).

Иногда кромка 2мм со временем отклеивается на деталях с вырезанным внутренним радиусом (обычно на столешницах) или на небольших (менее 50мм) внешних радиусах.

Отдельные замечания.

Полка из ЛДСП обычно провисает под собственным весом при ширине от 900мм (нужно дополнительное крепление по центру или поперечная стойка, или т.н. ребро/царга сзади).

Дно большого ящика следует делать из ЛДСП (или если хранить легкие предметы, то можно и из ДВП, но с дополнительной поперечной стенкой). Вес пустого и нагруженного ящика тоже учитываем при выборе направляющих (роликовые уже не подойдут).

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

Фасады из МДФ, покрытые эмалью (крашенные) лучше заказывать толщиной 19мм, а не 16. Неприятность может случиться при присадке под чашку петли — будет видна своеобразная вмятина.

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

Зарегистрируйтесь на Хабре, чтобы оставить комментарий