1. Пользоваться форумом на планшетах и телефонах стало удобнее благодаря Tapatalk

И снова MEL

Тема в разделе "Maya", создана пользователем Paul Sidorov, 22 ноя 2001.

Модераторы: Dark™, Skif
  1. Paul Sidorov

    Paul Sidorov Мастер

    С нами с:
    22.03.2001
    Сообщения:
    332
    Симпатии:
    0
    Баллы:
    98
    Делаю Duplicate surface curve для Trim edge, рождается много кривых. Их необходимо приаттачить дркг к другу, НО только в тех местах, где они имеют смежные вершины, образуя законченный элемент, как, используя массив, написать скрипт, чтобы не выполнять более ста операций attach?
    NB
    Как правило, смежные вершины двух кривых каждого элемента это начало одной и конец другой кривой, соответственно. Однако, количество подобных кривых всегда разное. Кроме того, все кривые, каждого элемента имеют последовательные порядковые номера.
    Спасибо.
     
  2. Guest

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

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

    Paul Sidorov Мастер

    С нами с:
    22.03.2001
    Сообщения:
    332
    Симпатии:
    0
    Баллы:
    98
    Попробуй сам сделать то, что сказал, и подумай насколько это совпадает с тем, что нужно.
    ПОВТОРЯЮ!
    Меня интересует КАК указать Мауа аттачитьТОЛЬКО кривые со СМЕЖНЫМИ ВЕРШИНАМИ!
    Было бы все так просто, я бы сюда не пошел.
     
  5. Ruslan_3D

    Ruslan_3D Активный участник

    С нами с:
    06.09.2001
    Сообщения:
    352
    Симпатии:
    0
    Баллы:
    13
    Я думаю что тебе надо заняться немного математикой: написать скрипт, который будет обегать все вершины кривых и сравнивать расстояния между ними по формуле расстояния между двумя точками в пронстранстве. Если расстояние между ними будет меньшше указанного, то тогда считать названия этих кривых и затем их аттачить. Понимаю сказать легко, а сделать ... Но я бы начал с этого
     
  6. Paul Sidorov

    Paul Sidorov Мастер

    С нами с:
    22.03.2001
    Сообщения:
    332
    Симпатии:
    0
    Баллы:
    98
    Дело в том, что координаты вершин скорее всего совпадают абсолютно: там где заканчивается одна кривая, начинается другая, это же - trim edge curves. Поэтому, наверное, вернее будет заставить программу не проверять все вершины, а соединять только те, координаты которых полностью совпадают. Видимо нужно выяснить как и где хранятся эти данные. Ведь если есть координаты самих кривых, должен же быть некий подмассив, хранящий координаты ее точек. Только я пока не знаю где искать. Вот. А насчет математики, мне проще будет прицепить все кривые вручную, чем осваивать то, что люди учат по нескольку лет. Долго это, вот я к чему. Спасибо.
     
  7. Guest

    sposob kotorij ja predlagaju - diletantskij , no eto rabotaet
    select all trim edges and export selection as IGES
    open IGES in Rhinoceros ( est takoi NURBS modeler )
    slect all , join , rebuild curves i menaj kolichestvo CV , poka vid curve ne budet teba udovletvorat
    export v IGES
    v Maya - import
     
  8. Guest

    Привет, Kvazymode
    Может тебе поможет команда pointOnCurve?
    Если ее применить с запросом на координаты точек с максимальным и с минимальным значением parameter (для нормализованной параметризации эти значения 1 и 0 соответственно ) - вот и получатся концы кривой.
    А уж как их сравнивать ты и сам, наверное, знаешь.

    удачи,
    Алексей Гусев
     
  9. Guest

    Вот же любители автогеном гланды вырезать через сами знаете через что...Если уж так хочется, чтобы не проверить координаты первых и последних точек? Зачем же pointOnCurveInfo..
    Тем более с большой долей вероятности массив результирующих кривых будет упорядочен как надо....Хотя не факт, но было бы странно, если бы это было не так.....
     
  10. Paul Sidorov

    Paul Sidorov Мастер

    С нами с:
    22.03.2001
    Сообщения:
    332
    Симпатии:
    0
    Баллы:
    98
    Если уж ты действительно знаешь, что нужно делать, может поделишься опытом? Вот как, например, указать в скрипте, что нужно аттачить только кривые с совпадающими координатами pointOnCurve? Или, как вообще указать эти координаты, на худой конец? Проблема еще и в том, что следующую кривую, нужно аттачить к полученной кривой. Т. е. соединяя конец кривой A с началом кривой B, получается некая кривая Х, к концу которой нужно аттачить начало кривой С, но только, если координаты конца Х совпадают с координатами начала С, в противном случае, конец С приаттачить к началу D. Возможно, правильный скрипт, должен выглядеть так ((А attach В ) = Х) и все это attach к С. Вот меня интересует как ПРАВИЛЬНО написать это уравнение, чтобы оно действовало и для других кривых пока не кончится массив. Чтобы можно было просто перебить начальный и конечный номера. Если бы я знал, где это прочитать, я бы уже давно прочитал, но у меня нет времени искать эту информацию сейчас. Я так или иначе все равно докопаюсь до истины, но я надеялся, что есть люди, которые это уже знают, и могут помочь. ПОЭТОМУ Я БЫ ОЧЕНЬ ПОПРОСИЛ НЕ ПРОСТО ДЕМОНСТРИРОВАТЬ, СВОИ, НЕ СОМНЕВАЮСЬ, ГЛУБОКИЕ, ЗНАНИЯ, А ОКАЗАТЬ РЕАЛЬНУЮ ПОМОЩЬ. Может снизойдешь? Буду очень признателен.
    Искренне твой, мастер вырезания автогеном, сам знаешь чего, через сам
    знаешь что:).
     
  11. Guest

    Привет, Kvazymode
    Извини, что я не дождался ответа Злыдня,
    и вместо пререканий - набросал шаблон базового алгоритма аттача группы кривых.
    Комментарии см. ниже

    vector $all_points[]= "insert search proc here"; // находим координаты крайних
    // точек кривых (In и Out points)
    int $all_count=size($all_points);
    $i=1;
    int $where_new_Out=0;
    vector $current_Out=$all_points[1]; // принимаем ее за конец первой кривой
    int $moreExist=true; // есть ли чего искать? Да, пока есть
    while ($moreExist)
    {
    $i++;
    if ($i==$where_new_Out) $i++; // если нашли сами себя - пропускаем

    if ($curr_Out == $all_points[$i]) //нашли чей-то совпадающий InPoint
    {
    $where_new_Out=($i%2==1)?($i-1):($i+1); // нашли index нового OutPoint
    $curr_Out==$all_points[$where_new_Out]; // его координаты
    attach_Procedure($i); // передаем индекс In точки найденной кривой
    $i=-1; // цикл сначала :(
    }
    if ($i>$all_count-1) $moreExist=false; // искать больше нечего
    }
    Прим:
    я подразумеваю,что создан массив кривых (например,$all_curves[]), координаты крайних точек которых хранятся попарно и последовательно в $all_points[],
    а так же в attach_Procedure() предварительно надо определить индекс второй их аттачиваемых кривых (простым делением индекса InPoint на 2), приаттачить один раз к первой,может быть убить историю, и в дальнейшем аттачить только к результирующей кривой, можно даже не передавать данные о новой созданной кривой обратно в цикл, а просто получать индекс новой и аттачить. Координаты краев после этого в режиме connect и blend(c bias 0.5) не изменятся. Поэтому в attach_Procedure() только один параметр.

    Алгоритм не оптимальный из-за многократного прохождения цикла $i c 0, но для частного случая мне кажется пройдет. По уму, конечно хорошо бы создать массив неопрошеных кривых и, уменьшая его на кажном этапе цикла, искать только в нем.

    удачи
    Алексей Гусев
     
  12. Guest

    похоже, зря не дождался.... Я вот попробовал смоделировать упомянутую ситуацию и так и не смог добиться того, чтобы при дублицировании трим эджей получающиеся кривые были отселектированы в порядке, который требовал бы потом измения при эттаче...Уж если duplicatedCurve1, то она потом без проблем аттачится с duplicatedCurve2 и конец первой всегда совпадает с началом второй и так далее. Вообщем - то это естественно, поскольку , если выбрать все триммингованые эджи, дублицированные кривые создаются не абы как, а в соответствие с направлением обхода границы триммингованной области...Поэтому, похоже, с этим перебором совпадающих точек "работа проделана большая, но бессмысленная". А уж получить массив дублицированных кривых ....Ну уж селекшен лист-то.....
     
  13. Guest

    Привет, Злыдень

    Согласен, скорее всего, можно было и не заморачиваться, но
    позволь я тебе кое-что объясню:
    Многие люди науки,
    (к коим я себя так же причисляю как программист по образованию)
    имеют профессиональный интерес, если хочешь, даже спортивный интерес решить конкретную задачу, уже имеющую простое но неэлегантное решение, более универсальным способом, применимым ко многим похожим задачам,
    просто потому, что эта "бессмысленная", на первый взгляд, работа - является постоянной необходимой составляющей профессионального роста.
    Разве тебя не удивляет - почему ув. г. Забелин катит квадратное на страницах Реанимации, делает скриптами подобие динамики жесткий тел, строит гофрированные шланги сриптами, expression-ами??? Меня это нисколько не удивляет. Он постоянно растет и приобретает опыт, в отличие от многих, которые построили этот шланг revolve-ом, или запустили симуляцию динамики.
    Вдвойне хорошо если подобная его (и многих других старателей науки) работа применяется и оплачивается. Но она не пропала и не "бессмысленная" даже без этого.
    Поэтому, пусть для решения данной задачи была бы даже в Майа кнопка "Smart attach multiple curves", не перевелись бы люди стремящиеся написать это сами.

    удачи
    Алексей Гусев
     
  14. Paul Sidorov

    Paul Sidorov Мастер

    С нами с:
    22.03.2001
    Сообщения:
    332
    Симпатии:
    0
    Баллы:
    98
    Извини за фамильярность.
    Вот это то, что называется конкретный ответ на конкретный вопрос.
    Обязательно попробую.
    У меня основная беда, что я - гуманитарий, задачу я сформулировать могу, но программистских знаний пока не хвататет. Я слово "массив" то, неделю назад узнал.
    Еще раз спасибо. :)
     
  15. Guest

    К моему глубочайшему сожалению, но люди науки ( прогаммистов можно с очень большой натяжкой отнести к ним, скорее они все-таки ближе к инженерному составу.Если возникнет необходимость, могу аргументировать последнее утверждение более развернуто...) при решении задачи обязательно учитывают ее условие, то есть начальные данные. Это во многом помогает достичь простого, а следовательно, эффективного метода решения. (О двух основных методологических составляющих теории познания анализе и синтезе я уж напоминать не буду, хорошо?). Напоминаю, что по условию задачи, кривые, которые должны были быть саттачены возникли не просто так, а как результат дублирования триммированных эджей. В результате небольшого исследования я установил, что в таком случае кривые обладают следующим свойством - НАЧАЛО следующей СОВПАДАЕТ с КОНЦОМ предыдущей и более того, в селекшен листе они уже оказываются упорядочены в нужной последовательности. Поэтому, весь алгоритм решения поставленной задачи можно поместить в две строки
    - получить массив имен сдуплицированных кривых командой `ls -sl`;
    - первую кривую из списка саттачить со второй
    результат саттачить с третьей
    и так далее, пока кривые в селекшен листе не кончатся (это реализуется с помощью цикла, как ты, наверное, знаешь...)
    - все
    Именно это называется "научным подходом" и, если угодно, эффективным решением поставленной задачи

    Никакой анализ первых и последних точек и их совпадения в пространстве не нужен, потому что он (см условие) не приведет к переупорядочиванию списка кривых...Поэтому весь программизм который ты продемонстрировал, наверно, крут, но для решения данной задачи имеет нулевую эффективность.
    Ты решал ДРУГУЮ задачу, согласен, более общую, но ДРУГУЮ...А точнее, ты решал ту часть задачи, которая напрочь отсутствовала в условии..
    Это довольно слабо согласуется с претензией на научный подход, поскольку одним из основных принципов научного мышления является хорошо известный принцип минимализации мышления -"бритва Оккама", который звучит примерно следующим образом : "Не изобретай числа сущностей сверх необходимого", или более вульгарно - "Трудно найти черную кошку в темной комнате, особенно если ее там нет". Именно настойчивый поиск такой кошки и был тобой продемонстрирован...

    Перефразируя финал одного известного анекдота " ты трудоспособен - это плюс, но невнимателен - это минус" или про голову, которая не дает покоя рукам, здесь аналогия может и грубее, зато "позапоминалистей"

    Ссылка на деятельность г.Забелина вообще неуместна, поскольку я уверен (и пусть кто-нибудь попробует мою уверенность покол@!#$), что все его изыскания не являются "плодом болезненного воображения" и результатом "спортивного интереса" (это вообще глупость и к науке не имеет никакого отношения), а имеют под собой вполне конкретную практическую базу из проблем, которые возникали в его работе...Не надо путать процесс вырезания гланд автогеном и поиск инструмента для забивания гвоздей, отличного от микроскопа...
    И, кстати, что это за история, в которой ты на одном из семинаров якобы от своего имени докладывал результаты вышеупомянутого Забелина полученные им на год раньше? Я что-то слышал об этом, но деталей не знаю.
     
  16. Paul Sidorov

    Paul Sidorov Мастер

    С нами с:
    22.03.2001
    Сообщения:
    332
    Симпатии:
    0
    Баллы:
    98
    Я же русским языком сказал: нужен конкретный скрипт. Если ты так уверен, что можешь оптимизировать уже существующий подход, ты не держи в себе, ты поделись. НАПИШИ ЭТОТ СР@НЫЙ СКРИПТ КАК ТЫ ЕГО ВИДИШЬ!!!
    Понимаешь, когда нужно забить гвоздь, гораздо больше толку от того кто нашел молоток со сломанной ручкой, нежели от того, кто может красочно описать пневматический агрегат BOSCH для забивания гвоздей. Втсань на мое место и представь, что ты работаешь в Maya полгода, а программирование для тебя - китайская грамота. Ты сам смог бы себя понять?
    Я сейчас ломаю голову над скриптом algous'а и, пока у меня не сказать чтобы много чего получилось, и подозреваю, что половина моих проблем от незнания элементарных вещей, например синтаксиса. Куда, например, вставлять имена duplicatedCurve'ов, где указать количество элементов массива и куда этот массив потом вставить? Вот есть у меня 243 duplicatedCurve их надо приаттачить как я уже сказал, (кстати ты прав: в selection list они идут строго по порядку, только не все соединяются между собой, наприер: квадрат, в нем другой квадрат) если для тебя это - две строки, ну напиши ты их, тебе жалко что ли? Если жалко то так и скажи, мол я - крутой, вы все - лохи, поэтому идите на @#$, никому я помогать не буду, подыхайте сами. Хотя, я думал, что форум существует для того, чтобы сильные помогали слабым. Для тебя что ценнее, чтобы на земле было больше тех, кто про тебя думает хоршо или тех кто про тебя думает такое, что вслух и не скажешь? :)
    Искренне ваш, Kvazymode.
     
  17. Guest

    Мне кажется, мы немного по-разному понимаем слово помощь...Можно поймать рыбу и накормить голодного, а можно научить голодного ловить рыбу - тогда он не сдохнет от голода и без помощника. Скрипт я писать не буду, по крайней мере "за здорово живешь", а подтолкнуть к решению задачи - завсегда.
    Теперь относительно твоей ситуации. Раз ты не очень хорошо знаком с программированием имеет смысл не углу@!#$ться в дебри, а написать скрипт для случая попроще, но работающий и без особых алгоритмических изысков. Например, ты дублицируешь все трим эджи чехом, в этом случае в селекшен листе ты получаешь список имен кривых в правильном порядке, но это единый список для всех получающихся контуров. И тогда к описанному мной алгоритму придется добавлять алгоритм разделения единого списка на "связанные области" ( а не переупорядочивания всех кривых, что делает Алексей). Может быть дублицировать не вообще все эджи зараз, а последовательно для каждой связанной границы?и Получившийся односвязный список аттачить скриптом? Да, работы больше, но ведь и скрипт будет попроще, пока сделаешь его - разберешся в основных принципах, хотя бы в синтаксисе.
    Но уж если очень хочется такой анализ проделать, то советую сходить на ХайЭнд, там найти вопросы и ответы по MELу Брайана Эверта. Там есть и как определить число контрольных точек у кривой, и как получить их координаты и вообще довольно много простых но очень полезных новичку примеров...
    Вот такие вот дела...
     
  18. Guest

    Я не хочу далее продолжать эту тему, хотя бы потому,
    что очевидно - ты меня не понимаешь, или упорно не хочешь понять...
    Ты ,видно, бесконечно будешь писать "твой труд бесполезен", "эффективность нулевая", что бы я не сказал.
    А так же ты все равно не увидишь всех моих работ, как дипломных, так и последипломных чтобы судить обо мне хотябы немножечко объективно.
    К тому же форум посвящен обсуждению не личностей, а проблем.
    Данная проблема действительно имеет простое решение.
    А то, что я написал - забудь , как бесполезный труд.

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

    P.S. Может Kvazimode конкретный ответ напишешь?

    Алексей Гусев
     
  19. Guest

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

    О проблемах. Самая колоссальная проблема, которая существует сама по себе как примета времени, но особенно ярко проявляется на этом форуме. Я называю это явление "ламерством", но может быть более точно - лень, как результат легко доступной халявы. Софт - на халяву, ладно, могу понять российскую бедность, Так ведь и все остальное - тоже на халяву. Лень мозгой пошевелить - дайте мне все на блюдечке с голубой каемочкой, да побыстрее, да в рот положи, да разжуй, а то мне некогда....Дабы еще мозгой пошевелить, так даже читать не хотят, а гонору...И форум, к сожалению, всячески поощряет такое мировоззрение...Ах, пожелейте бедняжет, ах, что, сами такими не были...А эти бедняжки еще и хамят, потому как ничего другого не умеют и это единственная защита их гипертрофированного самомнения..."Форум, как заповедник Шариковых"... А как насчет "без труда не вынешь рыбку из пруда"? И прочее?
    Вот это - действительно проблема - отсеять всю шелупонь, которая крутится вокруг компьютерной графики. "потому что мне сказали, что майа - крутая прога..."
     
  20. Paul Sidorov

    Paul Sidorov Мастер

    С нами с:
    22.03.2001
    Сообщения:
    332
    Симпатии:
    0
    Баллы:
    98
    "Ламер" - слово придуманное посредственными программистами, для того, чтобы хоть как-нибудь выделиться из общей массы.

    Многоуважаемый, необыкновенно умный и образованный в лучших колледжах и университетах старого света, всегда платящий
    только наличными баксами и только за лицензионный софт, Злыдень! Раз уж вы так любите говорить о науке, то великий Ньютон, например, говорил: если я и могу дотянуться до звезд, то только потому, что стою на плечах гигантов
    прошлого. К сожалению, в условиях нашей чудной российской действительности, далеко не все желающие могут получить то
    образование, которое хотели бы. И никто не виноват, что в нашей системе этого самого образования, даже нет такого раздела, как art'n'sciences, который отвечает за подготовку специалистов в области копьютерной графики. Зато, вот таких идейных "борцов" за чистоту светлого образа российского видеодизайна, хоть отбавляй. "Отсеять шелупонь", как сказано! "Без труда не вынешь..." компьютерная графика может себя поздравить: теперь она обзавелась своим собственным Макаренко и отсеивателем шелупони, в одном лице, и как же это мы раньше без вас обходились... А вот еще
    раньше такая фраза была "Понаехали тут, Москва же не резиновая!". Тоже рекомендую взять на вооружение, потому что истоки такого отношения одни и те же. Ну повезло тебе, ну умеешь ты больше других, ну радуйся, используй знания, зарабатывай бабки, и благодари Господа, что вот так у тебя все удачно сложилось. Нет, нам нужно еще непременно перед другими повыдрючиваться. У вас, молодой человек с девушками, что ли, не ладится? Не от большого ума такие вещи происходят, а от скрытого комплекса неполноценности, и по молодости. (И если не избавиться от этого сейчас, то
    закомплексованный юнец переродится, простите, в г@внистого дядьку. Вы же, как я понял, мните себя по меньшей мере, профессором реображенским). И форум-то вам не угодил, как же: ты тут ходишь, надутый как индюк, мол круче всех, а у тебя на глазах, другой такой же, только нормальный, делится сокровенным неизвестно с кем. Так давайте запретим все форумы и конферренции, семинары, не дай бог, там кто-нибудь выступит и расскажет то, что знаем только мы. Извините, уважаемый Злыдень, но, когда я вижу, как человек ревниво бережет свои знания, напрашивается простой вывод: берегут то, чего мало. К вопросу о ламерах: если есть время, зайдите на www.lorien.ru, это сайт фирмы, где я работаю. (В разделе "команда", можете прочесть про вашего покорного слугу, в миру Павла Сидорова) Это я еще к тому, что не стоит считать себя проницательнее, нежели вы есть на самом деле. Если я не умею программировать, это еще не значит, что я вчера с ветки слез. Просто профессионально в Maya работаю немногим более полугода, это правда. И вопрос мой, согласитесь не про то "как, типа, в Мауа, матириал атражэния назначить". Вы бы хоть полюбопытствовали, кому китайские поговорки пересказываете, мой мудрый Злыдень. Русским языком сказал: нет времени. Все равно придется разобраться, как разобрался уже во многом, но какой смысл изобретать велосипед, когда можно использовать уже имеющийся опыт? Кстати, будь вы действительно так внимательны, как про себя думаете, то обратили бы внимание, что на форумах люди грубо делятся на три категории: праздные браузеры, которые просто смотрят, активные участники - эти в основном и делятся информацией, каждый, заметьте, на своем уровне - и гиперактивные бездельники, которых крайне много, и суются они, куда ни попадя, со своими "мудрыми" замечаниями. Как вы сами думаете, действительно умный, и всесторонне развитый человек, которым вы себя несомненно считаете, потратит столько времени на то, чтобы во всех красках расписать, как он НЕ собиратеся никому помогать? Ведь для этого нужно зайти на ненавистный форум, просмотреть вопросы (все ответы на которые вы, конечно же, знаете) и сочинить ответы. И все во имя чего? Я и сам нередко натыкаюсь на всевозможные глупые темы, но сидеть и строчить язвительные абзацы, чтобы кто-то, на другом конце страны, прочтя все это сказал: Ну и м@#да-а-ак! Какой-то странный поступок для такого мудрого и прозорливого отсеивателя шелупони и пр. Понимаете, я почему так говорю, потому что всевозможных "специалистов", сильных только на язык, я видел предостаточно. И трачу сейчас я свое, действительно, дорогое время, просто чтобы спокойно уснуть. Вообще не следовало бы, но я далеко не хрестианин по натуре, точнее я, конечно, могу подставить другую щеку, но щеки у меня быстро кончаются, так что вам не повезло. Ведь я справшивал тех, кто действительно знает, а не тех, кто думает, что знает все. А поэтому, сделайте одолжение, найдите себе более благодарную аудиторию, которая будет восхищаться вашими необыкновенными воспитательно-педагогическими навыками, и освободите меня от своего бесполезного присутствия в моей теме.
    Заранее благодарен.
    Искренне ваш, Квазимодо.
     
Модераторы: Dark™, Skif

Поделиться этой страницей