Недавно в очередной раз залетел на койку в больницу и от нечего делать стал думать, что, кстати, не мешало бы делать чаще. Думать, естественно, а не валяться на койке.
Так вот.
Думать стал, конечно, о ГДЛ, т.к. о женщинах уже все понял, а о выпивке в больнице даже думать противопоказано – давление поднимается, здоровье ухудшается.
Вопрос был поставлен так: почему так трудно пишутся объекты сложной геометрической формы? Как облегчить этот титанический труд? Думал долго. Целых 15 минут. На 8 минуте пришел к выводу, что надо использовать подсобный инструмент, малую механизацию, так сказать. Но где и как?
Стал рассматривать процесс программирования как многостадийный и потому блочный. На 14 минуте до меня дошло, что максимум времени требует вычисление координат точек абриса проекции.
Обоснование:
Как правило, в большинстве случаев используются различные варианты призмы, да и во всех других описаниях геометрии объектов требуется ввод координат, что трудоемко и времяемко. Именно поэтому многие поднимают правую руку (некоторые даже левую) и резко ее опускают, сопровождая это нехитрое действо несколькими вполне внятными словами, забывая надолго программирование объектов.
Таким образом, надо было как-то маломеханизировать процесс получения координат на плоскости… Что-ж… Была бы цель поставлена!
Когда-то давно написал объект «Отметка высоты». Изюминка его была в том, что он выдавал расстояние от нуля проекта до точки клика мышки. Объект был написан для того, чтоб можно было разрез или фасад объекта из его окна скопировать и перенести на план этажа, причем в любое его место и проставленные на разрезе высотные отметки не изменяли бы своего значения. Там были всякие оформительские примочки, приятный 2Д вид и прочий хлам, но самое нужное сейчас было то, что объект мог хранить вычисленное значение при перемещении его в любое место чертежа и не менял его до новой команды на замер, сохраняя свой внешний вид. Это уже стало немного греть душу, т.к. по натуре я лентяй, а тут, глядишь, уже половина дела сделана: одну координату мы уже имеем! Значительно напрягшись, я оторвал седалище от койки и пересел к столу, где за продолжительное время (около 7 минут – включая перемещение моей тушки к буке, включение, загрузку и проч. по списку) получил вторую координату… Объект стал выдавать обе координаты (Х & Y).
Вот тут я уже загрустил совсем и стал даже всхлипывать от избытка отрицательных эмоций: надо было получить вид сбоку программируемого объекта. Делать нечего… Нашел серию и врукопашную построил этот вид. На это ушло некоторое время, которое не засекал, т.к. был перерыв на обед, на общение с доктором, еще куда-то оно ушло, не припомню все. Но в итоге к вечеру отпраздновал победу стаканом кефира. Дальше все просто. На 2Д виде просто тыкаем тупо по всем точкам построения объекта (там же линии – не надо хотспоты добавлять), и прилагаемый объект выдает во всей красе координаты этих точек, которые потом вставляем во фразу призмы в 3Д скрипте. Нужно, правда, позагибать пальцы на руках и ногах, чтоб понять количество точек замеров. Не хватит – загибай у соседа, как пришлось делать мне (пришлось его привязать к койке – не мог, поросенок, понять важности процесса). Окружности и дуги превращаем в отрезки прямых с требуемым приближением к дуге по кривизне – можно поделить на 36, если вычислить всю ее длину. Тоже врукопашную, но имея оргазм от того, что не считаем вообще ничего, как это было раньше. В общем, есть разные варианты построения, но этот самый примитивный, а, значит, будет работать всегда.
Именно таким образом была сделана «Балка решетчатая 18м», которую выложил на прошлой неделе. У кого есть желание попробовать объект в действии, может добавить в него и балку 24 м. Это элементарно.
Начав думать уже не мог остановиться и понял, что прилагаемый объект может быть полезен и генпланистам, и многим другим, кому надо определить координаты объекта относительно нуля проекта. Объект, кстати, работает и как отметка высоты. Там есть переключатель режимов в окне параметров.
Всем удачи