Трюк, которого не было — 2 +20


Привет, Хабр! Моя прошлая статья была встречена сообществом очень хорошо. В обсуждение зашел даже @kompas_3d чем я по-настоящему горжусь. Я решил написать небольшое продолжение.

Основной проблемой, поднимаемой в комментариях была полная бесполезность построенного мной объекта. Люди искренно пытались помочь, предлагали различные варианты... Но все тщетно. Результатом всех дискуссий стала абсолютная ясность, что пользы от этого чуть меньше чем никакой.

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

Сейф-пряжка на ремень

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

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

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

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

Преимущества параметрического построения

Если объект из предыдущей статьи я вообще не представлял, как можно построить без программирования (с учетом предполагаемой анимации), то данный объект вполне мог быть построен традиционными конструкторскими инструментами. Но я, конечно, все-равно выбрал параметрическое построение в OpenScad.

  • В основном, конечно, потому что мне это нравится. Как вы уже поняли я от всего этого тащусь.

  • Мне еще не до конца была ясна форма и размеры - ремни бывают разной ширины, оптимальная толщина должна с одной стороны обеспечивать нужный защищаемый объем, с другой стороны изделие не должно слишком выделятся и мешать, ну и хотелось вообще подобрать благоприятные глазу форму и пропорции.

  • Стало очевидно, что чертить придется две формы - объект в разогнутом виде, чтобы сделать развертку и изготовить прототип, и в полностью согнутом, чтобы проверить замыкание размеров.

  • Вследствие этого возникла идея - если ввести параметр согнутость от 0 до 1, то можно практически бесплатно получить и промежуточные состояния объекта и анимацию

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

Трюк 1. Базовая трапеция

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

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

Трюк 2. Симметрия

Еще одним очевидным свойством данного объекта является симметрия, как горизонтальная, так и вертикальная. Поэтому мы смело можем строить только четверть объекта, а все остальное получить отражением. Этот вид мухлежа широко распространен в мире САПР.

Если бы портной делал только четверть костюма и пытался его продать как целый - его бы конечно посадили в тюрьму на длительный срок. А у компьютерных проектировщиков это проходит на ура.

Трюк 3. Обратная логика построений

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

Анекдот: работника попросили нанести краской разметку на проезжую часть. За первый день он разметил 500 метров дороги, на второй день - 100 метров, на третий - всего 10. Когда начальник спросил почему падает выработка он ответил: Ну так я все дальше и дальше от банки с краской ухожу.*

Когда, поступаешь наоборот, строишь снаружи к центру - вычисления становятся более естественными. Банка с краской становится к тебе ближе.

Трюк, которого не было

Я уже завершил построения, полюбовался анимацией, поиграл различными размерами. Настала пора сделать развертку. Мне не понравилось, что на развертке некоторые линии не прорисовались. Причина этого понятна - все эти синусы, косинусы, повороты и прочие округления приводят к микронеточностям. На форму это абсолютно не влияет, но когда геометрическому ядру надо принять решение - прорисовывать линию между объектами или нет, эти неточности уже начинают сказываться. Я понял, что OpenSCADу нужно немного помочь и слегка развести края объектов на некую ничтожную величину. Без всякой задней мысли я обозначил эту микро величину как параметр. Хищно оглядел код, думая, куда бы внести нужные инъекции. Мой взгляд вдруг упал на код базовых трапеций. Всего несколько точных вставок - и цель была достигнута - все нужные прямые прорисовались. Правда прорисовались и не совсем нужные, но кашу маслом не испортишь.

Но вот какое дело - в модели появился новый параметр. Хоть он носит и технический характер, но параметром он быть не перестает. А значит им можно побаловаться. Я начал присваивать ему уже не микро, а вполне макро значения.

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

Надеюсь мне снова удалось вас немного развлечь. Код проекта доступен на GitHub

Некоторые мысли в заключение

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

Эту же статью я хочу закончить на несколько другой ноте: программистам тоже есть чему поучится у конструкторов. Если бы меня спросили какой важный принцип нужно перенести из конструирования в программирование - я бы сказал открытость, понятность и законченность конструкции.

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

Я уже говорил, что мой отец - авиационный инженер. Несмотря на возраст, он старается идти в ногу со временем. На его столе - вполне современный компьютер, которым он вполне хорошо пользуется. Но иногда он мне задает вопросы, на которые я не могу ответить, а только краснею. Почему в каждой новой версии Windows все меняется и ничего не найти на прежних местах. Почему файлы в папках отображаются по-разному и этим совершенно невозможно управлять. Почему в папке "Мои документы" документы лучше не хранить. Почему, чтобы отправить письмо, нужно посмотреть тонну рекламы. Почему при поиске ответа на достаточно определенный вопрос Интернет выдает 300 000 сайтов с одинаковой информацией, которая одинаково бесполезна. Почему в Скайпе нет нормального списка контактов и отовсюду лезут эмодзи и странно работают статусы. И масса других вопросов, включая стандартные - почему все тормозит и глючит. Если вы читали книгу "Психбольница в руках у пациентов", то вам станет примерно понятно содержание наших разговоров.

Хотя прямых ответов у меня нет, но у меня есть некоторые соображения на этот счет.

Какое-то время я работал на заводе. И однажды спросил у отца, почему в авиационном двигателе некоторые детали делают на головном предприятии, а некоторые изготавливают в филиалах. По какому принципу делается разделение? Наверное некоторые детали особо ответственные, а некоторые не очень. Он мне ответил без пафоса, как-то буднично, без стремления донести какую-то сверх истину. Но эти слова сильно врезались мне в память. Он сказал: "Понимаешь, Миша, в авиационном двигателе неответственных деталей не бывает."

Думаю, когда ИТ-индустрия будет также относится к тому, что она делает - все встанет на свои места.




Комментарии (20):

  1. saipr
    /#24972318 / +1

    программистам тоже есть чему поучится у конструкторов

    Точно также как есть чему поучиться у хорошего повара.

    • GospodinKolhoznik
      /#24972444 / +4

      И вот эта функция приложения, которой не было в ТЗ - комплимент от шефа!

      • ABHuman
        /#24972638 / +2

        Ага, а вон те два бага, вовсе не баги, а фичи, т.е. с одного края у вас прожарка rare, а с другого well done, хоть блюдо и одно.

  2. dravor
    /#24972350

    Пожалуй, в Solvespace это можно было бы сделать быстрее и осталась бы возможность через несколько лет вносить правки не-программистам.

    • headfire
      /#24972428

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

  3. ABHuman
    /#24972410 / +1

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

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

    П.С. и конечно же проектирование, моделирование и конструирование свалено в кучу.

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

    • headfire
      /#24972460 / +1

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

      Насчет пластика - я не уверен. Я вижу это изделие именно из металла. Более того - думаю, что было бы прикольно его предоставлять в несогнутом виде. Линии сгиба нужно обозначить, частично убрав с них материал (типа пунктирных прорезей). Это же прикольно самому согнуть такую штуку. Типа 3D-пазла.

      • ABHuman
        /#24972652

        Если самому можно без проблем согнуть такую штуку, то и разогнуть её не составит труда, а это уже потеря практичности. Впрочем, ваша идея - вам и решать. И удачи в их генерации.

        • Mingun
          /#24972708

          Согнуть самому — не означает же, что гнуть нужно руками. А в поезде, да на человеке, в зажим эту штуку не очень-то засунешь.

          • ABHuman
            /#24972736

            А чем нужно тогда гнуть? А почему тогда и не самому изготовить сразу?

            Сейчас по домам полно проводов с зарядками, а верстака или ручного гибочного станка днём с огнём не найти.

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

          • headfire
            /#24972980

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

  4. ciuafm
    /#24973096

    С трудом прочитал основную часть, но понравилось окончание.

    По поводу изделия - я вижу изготовление из меди или латуни/бронзы. Так чтобы можно было пропаять швы. Защёлка пластиной выглядит не очень - лучше пластиковый или силиконовый картридж вставляемый внутрь.

    • headfire
      /#24973486

      Да, спасибо. Интересная идея!

  5. Daddy_Cool
    /#24974514

    У чертежа нет скрытых слоев
    Ха! Там по другому. У меня был готовый чертеж во Fusion, я хотел изменить всего лишь один размер... выясилось, что все размеры друг на друга так завязаны, что придется перерисовать почти всё.
    Сейчас занят переносом конструкции с бумажного чертежа в сеткогенератор - выяснилось, что некоторые размеры заданы так, что надо решить тригонометрическую задачку чтобы это повторить.

    • headfire
      /#24974602 / +2

      Да, отличный пример. Что касается Fusion - то это уже продукт ИТ-мышления со всеми вытекающими последствиями:) Что касается бумажных чертежей - в том как заданы размеры, скрывается суть конструкции. Если Вы не против - я немного порассуждаю.

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

      Проблема в том, что одна и та же геометрическая форма может возникнуть на чертеже вследствие совершенно разных конструкторских решений. Например, вы видите на чертеже равносторонний треугольник. Что в этой форме важно для того чтобы конструкция заработала. Возможно, то, что все стороны равны и с этих сторон к ним что-то примыкает. Тогда конструктор обозначит размеры сторон в явном виде (И вам придется решать некую геометрическую задачу, чтобы восстановить форму). Возможно решающим для конструкции является угол в 60 градусов. Тогда будет указан угол и для восстановления формы вам придется решать некую тригонометрическую проблему. (Если вы увидите равносторонний треугольник, на котором нанесены три осевые линии - значит это какая-то секретная разработка с треугольным сухарем - лучше с этим не связываться :)

      Если погрузится еще больше в философский сумрак, то станет понятно следующее. Конструкторы на чертежах избегают избыточности, так же как программисты избегают избыточности в коде. Поэтому размеров как правило задается ровно столько, сколько нужно, чтобы восстановить форму. Необязательные размеры тоже есть, но они специально помечаются звездочкой, чтобы не путались под ногами и ими для восстановления формы пользоваться нельзя. (Это как комментарии в программном коде). Так как размеров - самый минимум, то процесс восстановления формы по чертежу практически всегда связан с решением тех или иных геометрических задач. (Естественно, когда у вас чертеж представляет несколько прямоугольников задача восстановления формы вырождается в простое складывание и вычитание размеров)

      Извините, что был многословен, но проблема действительно интересная и затрагивает многие фундаментальные вещи.

      • Daddy_Cool
        /#24974624

        Да! С этим я столкнулся и понял. Даже для проектирование вроде простой вещи типа корпуса требуется продумать всё на несколько шагов вперед.

  6. dyadyaSerezha
    /#24976322

    Почему файлы в папках отображаются по-разному и этим совершенно невозможно упуправлять.

    Поподробнне можно?

    Насчёт скайпа, надо просто перестать им пользоваться.

    Насчёт металлического кармана на ремень.... А вы пробовали стальные доспехи делать? Мне кажется, козплейщики оценили бы вас гораздо больше) А лично я бы просто купил готовую матерчатую сумку-карман на ремень/пояс, благо их сейчас море.

    • headfire
      /#24976486

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

      Скайп относится к такого рода программам, которые ставят не только потому, что они нравятся, или не нравятся. Часто это обусловлено тем, что что стоит у людей с которыми ты собираешься общаться. У меня в телефоне (я уверен, что и у большинства) - четыре мессенджера. У каждого свой протокол и они между собой не совместимы. Это позор для ИТ-индустрии. Тут один товарищ на Хабре от отчаяния поставил на уведомления голосовые отрывки и теперь при поступлении сообщения его телефон орет название мессенджера:)

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

  7. Karlson_rwa
    /#24976982

    Не нашел в статье информации о полезном объеме. Сколько туда можно чего-то засунуть?

    Такой вариант удобнее, меньше привлекает внимание.
    image
    А в вашем случае слишком много острых кромок, даже если после гибки делать галтовку. ИМХО. Такое изделие лучше отливать. Из той же бронзы, например.

    • headfire
      /#24977516

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