Кирпичная кладка. Как осуществить регулировку видимости в зависимости от линейного параметра?
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Динамические блоки > Кирпичная кладка. Как осуществить регулировку видимости в зависимости от линейного параметра?

Кирпичная кладка. Как осуществить регулировку видимости в зависимости от линейного параметра?

Ответ
Поиск в этой теме
Непрочитано 27.11.2024, 11:40 #1
Кирпичная кладка. Как осуществить регулировку видимости в зависимости от линейного параметра?
gumel
 
Регистрация: 20.04.2011
Сообщений: 487

Делаю динамический блок плана кирпичной кладки. На данный момент сделал три варианта этого блока, а хотелось бы сделать один.

Из скриншота всё должно быть понятно:

Нажмите на изображение для увеличения
Название: Снимок экрана 2024-11-27 150512.png
Просмотров: 250
Размер:	103.3 Кб
ID:	265647

Блок 1 - выполняется растяжение с шагом 260 мм, есть возможность регулировки видимости половинок
Блок 2 (похож на 1) - выполняется растяжение с шагом 260 мм, есть возможность регулировки видимости половинок
Блок 3 - выполняется растяжение с шагом 130 мм, но нет возможности регулировки видимости половинок (сымитировал рисование кирпичей заливкой)

Хотелось бы сделать блок с шагом растяжения 130 мм и с возможностью регулировки видимости половинок.

Функционала 1 и 2 блока достаточно для того чтобы нарисовать любую кладку (ну или почти любую). Но их неудобно применять, так например, при длине стены 640 мм нужен первый блок, при длине стены 770 - второй и т.д.
Можно ли сделать такой блок в котором автоматически изменялась видимость элементов в зависимости от значения линейного параметра? Либо быть может возможно нужно использовать параметрические зависимости?

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

Есть какие-нибудь идеи, как это изящно выполнить?

Вложения
Тип файла: dwg
DWG 2018
Динамический блок кирпичной кладки.dwg (154.0 Кб, 115 просмотров)

Просмотров: 2585
 
Непрочитано 27.11.2024, 13:22
1 | #2
Demonakor


 
Регистрация: 28.11.2022
Сообщений: 153


У меня вышло вот так
Миниатюры
Нажмите на изображение для увеличения
Название: GIF 27.11.2024 13-17-00.gif
Просмотров: 136
Размер:	379.6 Кб
ID:	265653  
Вложения
Тип файла: dwg
DWG 2013
Кладка.dwg (120.6 Кб, 79 просмотров)
Demonakor вне форума  
 
Автор темы   Непрочитано 28.11.2024, 06:19
#3
gumel


 
Регистрация: 20.04.2011
Сообщений: 487


Цитата:
Сообщение от Demonakor Посмотреть сообщение
У меня вышло вот так
Спасибо!
Очень интересно. Жалко что в таком блоке комбинации растягивания объектов и их размножения неизбежно образуют наложение линий.
gumel вне форума  
 
Непрочитано 28.11.2024, 09:25
#4
Demonakor


 
Регистрация: 28.11.2022
Сообщений: 153


Наверное не "неизбежно", можно придумать и другие варианты.
Например сделать, чтобы короткий конечный блок был только один, а положение сверху или снизу ему задавать операцией отражения вручную.
Можно это отражение менять, в зависимости от длины растягивающего параметра (0-250 - сверху, 250-380 - снизу, 380-510 - сверху, 510-640 - снизу... и т.д.), но тогда надо будет сделать ограничение по длине.
Можно операцией массива размножать только длинные блоки (250 мм), выполненные с заливкой или маскировкой, а короткие в конце перемещать на заднем плане (наложение будет всего одно).
Можно в исходном варианте со штриховкой сделать дополнительные видимости, где передний и/или задний блок отсутствуют, просто из-за формы внешней полилинии (переключаться между видимостями, где короткий блок сверху и снизу придётся вручную).
Demonakor вне форума  
 
Автор темы   Непрочитано 28.11.2024, 10:54
#5
gumel


 
Регистрация: 20.04.2011
Сообщений: 487


Цитата:
Сообщение от Demonakor Посмотреть сообщение
Можно это отражение менять, в зависимости от длины растягивающего параметра (0-250 - сверху, 250-380 - снизу, 380-510 - сверху, 510-640 - снизу... и т.д.)
Идея понятна. Только почему "отражение"?
Я почему-то думаю, что нужно менять видимость... только я в любом случае, не могу допетрить как это можно связать в блоке.

Сделал два варианта видимостей, с именами "1" и "2". Они отвечают за количество видимых кирпичей справа. Дальше заполнил таблицу в таком виде:
Нажмите на изображение для увеличения
Название: 111.png
Просмотров: 121
Размер:	109.0 Кб
ID:	265676

И дальше тупик.. Как связать таблицу с параметром видимости?
Вложения
Тип файла: dwg
DWG 2018
Wall.dwg (152.9 Кб, 46 просмотров)
gumel вне форума  
 
Непрочитано 28.11.2024, 12:14
#6
Demonakor


 
Регистрация: 28.11.2022
Сообщений: 153


Цитата:
Сообщение от gumel Посмотреть сообщение
Идея понятна. Только почему "отражение"?
Можно видимостью, тогда надо 2 разных кирпича, можно отражением или перемещением вверх-вниз одного.
Чтобы сделать зависимость одних параметров от других нужно использовать двойной выбор. В первой таблице указываются условия (в моём примере длина менее 260 и более 260, а так же включение/отключение коротких кирпичей). Во второй таблице те параметры, которые в соответствии с этим должны переключаться (в моём примере видимости). Для этого названия строчек выбора должны совпадать в 1 и 2 таблицах (причём если надо - несколько строчек может быть с одинаковым названием, и количество строк может быть разным).
Demonakor вне форума  
 
Автор темы   Непрочитано 28.11.2024, 13:10
#7
gumel


 
Регистрация: 20.04.2011
Сообщений: 487


Цитата:
Сообщение от Demonakor Посмотреть сообщение
Чтобы сделать зависимость одних параметров от других нужно использовать двойной выбор
даа, это точно не для средних умов.

Первый функционал с изменением видимости от длины стенки получилось реализовать:

Wall new.dwg

Открыл для себя новые возможности. Спасибо!


Осталось придумать как управлять видимостью половинок в таком продвинутом блоке
gumel вне форума  
 
Непрочитано 28.11.2024, 13:15
#8
Demonakor


 
Регистрация: 28.11.2022
Сообщений: 153


Цитата:
Сообщение от gumel Посмотреть сообщение
Осталось придумать как управлять видимостью половинок в таком продвинутом блоке
Так же, как у меня в первом примере. Создать все возможные варианты видимости и переключаться между ними.
Demonakor вне форума  
 
Автор темы   Непрочитано 29.11.2024, 05:19
#9
gumel


 
Регистрация: 20.04.2011
Сообщений: 487


Цитата:
Сообщение от Demonakor Посмотреть сообщение
Так же, как у меня в первом примере. Создать все возможные варианты видимости и переключаться между ними.
Кирпичи справа реализовал всё-таки через отражение, а через видимость реализовал отображение половинок. Стенка работает вполне неплохо.
К минусам реализации подобного блока наверное можно отнести ввод огромной таблицы (хотелось бы функционал с формулами)
Ну и один кирпичик дублируется через раз
Вложения
Тип файла: dwg
DWG 2018
Wall final.dwg (135.9 Кб, 57 просмотров)
gumel вне форума  
 
Непрочитано 29.11.2024, 11:11
#10
Demonakor


 
Регистрация: 28.11.2022
Сообщений: 153


Ну да, тут уж либо ручной ввод и предельная длина, либо наложение и бесконечность.
От оставшегося наложения легко избавится созданием двух независимых массивов для верхних и нижних кирпичей (отзеркаливаться справа будет только короткий).
Demonakor вне форума  
 
Автор темы   Непрочитано 29.11.2024, 11:34
#11
gumel


 
Регистрация: 20.04.2011
Сообщений: 487


Итак, раскусил прелесть использования "зеркальных ручек", которые можно использовать много для чего, в том числе и для управления видимости.

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

В итоге блок "сломался" , не могу теперь понять как собрать всё в одну кучу... Делать тройной выбор что-ли?
Вложения
Тип файла: dwg
DWG 2018
Wall not final.dwg (120.7 Кб, 57 просмотров)
gumel вне форума  
 
Непрочитано 29.11.2024, 11:43
#12
Demonakor


 
Регистрация: 28.11.2022
Сообщений: 153


Какая-то мешанина выходит. Не надо убирать длинный правый блок видимостью - просто добавить новый линейный параметр для управления вторым массивом (не забыть включить цепочку операций, чтобы он управлялся основным размером), иначе слишком уж много условий надо вводить.
Demonakor вне форума  
 
Автор темы   Непрочитано 29.11.2024, 12:28
#13
gumel


 
Регистрация: 20.04.2011
Сообщений: 487


Цитата:
Сообщение от Demonakor Посмотреть сообщение
Не надо убирать длинный правый блок видимостью - просто добавить новый линейный параметр для управления вторым массивом
Ну ок, сделал так. Видимостей стало меньше. Только всё равно что-то делаю не так...
Вложения
Тип файла: dwg
DWG 2018
Wall not final правка.dwg (157.8 Кб, 52 просмотров)
gumel вне форума  
 
Непрочитано 29.11.2024, 12:42
#14
Demonakor


 
Регистрация: 28.11.2022
Сообщений: 153


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

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

Последний раз редактировалось Demonakor, 29.11.2024 в 13:47.
Demonakor вне форума  
 
Автор темы   Непрочитано 29.11.2024, 18:09
#15
gumel


 
Регистрация: 20.04.2011
Сообщений: 487


Demonakor, спасибо, что помогаешь!

Цитата:
Сообщение от Demonakor Посмотреть сообщение
Так нет - не надо во второй таблице прописывать условия (включения/выключения) коротких кирпичей - только их видимости и отзеркаливание правого (плюс правильно назвать строки, чтобы при нужном наборе условий из 1 таблицы активировалась только одна строка из 2 таблицы).
Так, ну тогда же первая таблица будет огромной? Размерность таблицы получится как количество вариантов длин * на количество видимостей. Верно?

Я пытаюсь пойти другим, оптимальным путем.

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

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

-------

и еще, подскажи пожалуйста: что означает запись "[260,)" и "(,260)" в твоей таблице с длинами?
Вложения
Тип файла: dwg
DWG 2004
Wall почти работает.dwg (147.7 Кб, 37 просмотров)
gumel вне форума  
 
Непрочитано 30.11.2024, 03:46
#16
Demonakor


 
Регистрация: 28.11.2022
Сообщений: 153


Цитата:
Сообщение от gumel Посмотреть сообщение
Я сделал два двойных параметра (!)
В первом я регулирую зеркалирование правого кирпичика, а во втором видимость половинок.
Да, после я про это и писал. Если не нужно расстояние 250 (при котором видимостью надо скрывать верхний длинный кирпич), то в 1 таблице первого параметра выбора задаётся набор расстояний, а во 2 таблице - 2 варианта положения правого кирпича (прямо и зеркально). Последнюю версию блока не смотрел - может там остался столбец с видимостью, поэтому она сбрасывается при изменении длины?
В 1 таблице второго параметра указываются все возможные комбинации положения ручек для скрытия коротких кирпичей (главное не перепутать с параметром, отзеркаливающим правый кирпич), а во второй соответствующие видимости.

Цитата:
Сообщение от gumel Посмотреть сообщение
и еще, подскажи пожалуйста: что означает запись "[260,)" и "(,260)" в твоей таблице с длинами?
"Больше или равно 260" и "меньше 260". По сути это диапазон между двумя значениями с разделением в виде запятой. Ноль можно не указывать, если не указывать второе значение - значит до бесконечности. Квадратные и круглые скобки - включая и не включая само значение.
Demonakor вне форума  
 
Автор темы   Непрочитано 02.12.2024, 05:20
#17
gumel


 
Регистрация: 20.04.2011
Сообщений: 487


Цитата:
Сообщение от gumel Посмотреть сообщение
Не могу понять почему, но при изменении длины стенки, видимость половинок сбрасывается, и они становятся видимыми
О, это я сам накосячил. Всё исправил. Оказывается всё очень просто:
Вложения
Тип файла: dwg
DWG 2018
Кирпичная кладка - FINAL.dwg (117.8 Кб, 66 просмотров)
gumel вне форума  
 
Непрочитано 02.12.2024, 09:39
2 | #18
Demonakor


 
Регистрация: 28.11.2022
Сообщений: 153


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

PS: Сделал бесконечный вариант с зависимостями.
Вложения
Тип файла: dwg
DWG 2013
Кладка (зависимости).dwg (123.3 Кб, 69 просмотров)

Последний раз редактировалось Demonakor, 02.12.2024 в 15:13.
Demonakor вне форума  
 
Автор темы   Непрочитано 03.12.2024, 06:10
1 | #19
gumel


 
Регистрация: 20.04.2011
Сообщений: 487


Demonakor, ты суперпилот. Мегакруто!

Очень полезный пример с формулами, спасибо!

Прям так и напрашивается внутри блоков чтобы была возможность писать мини код, с доступом к свойствам примитивов в зависимости от внешних параметров. Это сильно упростит создание блоков и заметно расширит их функционал
gumel вне форума  
 
Непрочитано 03.12.2024, 08:35
#20
elovkov

ПОС наше всё
 
Регистрация: 06.08.2009
Симферополь
Сообщений: 287


Надо еще шовчик учесть, чтобы друг на друга складывать)
__________________
Умное лицо это еще не признак ума. Все глупости на земле делаются именно с этим выражением лица
elovkov вне форума  
 
Автор темы   Непрочитано 03.12.2024, 08:42
#21
gumel


 
Регистрация: 20.04.2011
Сообщений: 487


Цитата:
Сообщение от elovkov Посмотреть сообщение
Надо еще шовчик учесть, чтобы друг на друга складывать)
С геометрией тут всё чётко!


Цитата:
Сообщение от Demonakor Посмотреть сообщение
Ещё поэкспериментировал - можно в таблице перечислить через запятую без скобок все нужные значения длины, тогда останется всего 2 строки
Насчёт этой фишки. Судя по всему, есть какое-то ограничение по длине строки.

Не получается забить в таблицу такие длинные строки (пришлось привлечь excel для их составления ):

380,640,900,1160,1420,1680,1940,2200,2460,2720,2980,3240,3500,3760,4020,4280,4540,4800,5060,5320,5580,5840,6100,6360,6620,6880,7140,7400,7660,7920,8180,8440,8700,8960,9220,9480,9740,10000
510,770,1030,1290,1550,1810,2070,2330,2590,2850,3110,3370,3630,3890,4150,4410,4670,4930,5190,5450,5710,5970,6230,6490,6750,7010,7270,7530,7790,8050,8310,8570,8830,9090,9350,9610,9870

Но сделать конечно можно (я сделал не 2, а 4 строчки). Эх, вот если бы была возможность в таблице (!) писать формулы, было очень круто!
Вложения
Тип файла: dwg
DWG 2018
Кирпичная кладка - FINAL new.dwg (135.0 Кб, 56 просмотров)
gumel вне форума  
 
Непрочитано 03.12.2024, 09:26
#22
Demonakor


 
Регистрация: 28.11.2022
Сообщений: 153


Цитата:
Сообщение от gumel Посмотреть сообщение
Очень полезный пример с формулами
Да, только я делал проверку на чётные/нечетные значения, но такая формула совсем уж неправильно себя ведёт с дробными значениями (если отключить шаг у расстояния).
Сделал вариант с косинусоидой для высоты H - формула даже проще вышла.
Код:
[Выделить все]
120+(cos((L-250)*180/130)+1)*65
Можно её усложнить, если добавить проверку на положительные/отрицательные значения (в данном блоке с шагом в размере это всё не важно, но для понимания его работы было полезно).
Код:
[Выделить все]
trunc(atan(COS)/90+1)*120+(1-trunc(atan(COS)/90+1))*250
где COS - переменная
Код:
[Выделить все]
cos((L-380)*90/65)
Миниатюры
Нажмите на изображение для увеличения
Название: GIF 03.12.2024 9-12-57.gif
Просмотров: 48
Размер:	810.3 Кб
ID:	265753  
Demonakor вне форума  
 
Автор темы   Непрочитано 03.12.2024, 10:32
#23
gumel


 
Регистрация: 20.04.2011
Сообщений: 487


Цитата:
Сообщение от Demonakor Посмотреть сообщение
Сделал вариант с косинусоидой для высоты H - формула даже проще вышла.
Да, забавно выходит. Очень наглядна работа формулы ))

К сожалению, не знаю с какими функциями работают формулы автокада. Я бы использовал что-то такое:

Код:
[Выделить все]
  V := (L div 130) mod 2;
, где:
L - длина кладки;
V - на выходе выдает либо 0 либо 1.

То есть, для 380 будет 0, для 510 - 1 и т.д.
gumel вне форума  
 
Непрочитано 03.12.2024, 10:52
#24
Demonakor


 
Регистрация: 28.11.2022
Сообщений: 153


Вроде вот всё, что работает в формулах:

sin(угол)
Синус угла

cos(угол)
Косинус угла

tang(угол)
Тангенс угла

asin(веществ)
Арксинус числа; значение аргумента должно быть в пределах от -1 до 1

acos(веществ)
Арккосинус числа; значение аргумента должно быть в пределах от -1 до 1

atan(веществ)
Арктангенс числа

ln(веществ)
Натуральный логарифм числа

log(веществ)
Десятичный логарифм числа

exp(веществ)
Натуральная экспонента числа

exp10(веществ)
Десятичная экспонента числа

sqr(веществ)
Квадрат числа

sqrt(веществ)
Квадратный корень числа (неотрицательного)

abs(веществ)
Абсолютная величина числа (модуль)

round(веществ)
Число, округленное до ближайшего целого

trunc(веществ)
Целая часть числа

r2d(угол)
Преобразование угла из радиан в градусы. Например, r2d(pi) преобразует pi радиан в 180 градусов

d2r(угол)
Преобразование угла из градусов в радианы. Например, d2r(180) преобразует угол 180 градусов в радианы и возвращает значение, равное константе pi

pi
Константа "пи"

Table(XXX).A1
Ссылка на ячейку A1 в таблице с номером XXX (узнать через "поле")


Плюс формулы для имитации условий (это те, которые я придумал - может есть варианты и проще):

Функция ЕСЛИ
A*a+B*b
где A - первое условие, a - значение при его выполнении; B - второе условие, b - значение при его выполнении

Функция И
trunc((A+B+...+N)/n)*z
где A...N - условия; n - количество условий; z - значение при выполнении всех условий

Функция ИЛИ
1-trunc(abs((A+B+...+N)/n-1))*z
где A...N - условия; n - количество условий; z - значение при выполнении хоть одного условия

Условия:

1 - если X=Y, 0 - если X>Y или X<Y
-trunc(abs(atan(X-Y)/90)-1)

1 - если X>Y или X=Y, 0 - если X<Y
trunc(atan(X-Y)/90+1)

1 - если X<Y или X=Y, 0 - если X>Y
1-trunc(atan(X-Y)/90+1)-trunc(abs(atan(X-Y)/90)-1)

1 - если X<Y, 0 - если X>Y или X=Y
1-trunc(atan(X-Y)/90+1)

1 - если X>Y, 0 - если X<Y или X=Y
trunc(atan(X-Y)/90+1)+trunc(abs(atan(X-Y)/90)-1)



Причём trunc() оказывается работает не так, как ЦЕЛОЕ() в Excel, так как он симметричен относительно 0. То есть ЦЕЛОЕ(0.9)=0; ЦЕЛОЕ(-0.9)=-1; trunc(0.9)=trunc(-0.9)=0

Последний раз редактировалось Demonakor, 03.12.2024 в 11:01.
Demonakor вне форума  
 
Автор темы   Непрочитано 03.12.2024, 11:19
#25
gumel


 
Регистрация: 20.04.2011
Сообщений: 487


TRUNC вроде просто отбрасывает дробную часть
gumel вне форума  
 
Непрочитано 03.12.2024, 13:41
#26
Demonakor


 
Регистрация: 28.11.2022
Сообщений: 153


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

Тригонометрические функции
cos()
sin()
tan()
acos()
asin()
atan()

Гиперболические тригонометрические функции
cosh()
sinh()
tanh()
acosh()
asinh()
atanh()

Знаковая функция (для отрицательных -1; для нуля 0; для положительных 1)
sign()

Натуральная/десятичная экспонента числа
exp()
exp10()

Число, округленное до меньшего
floor()

Число, округленное до большего
ceil()

Число, округленное до ближайшего целого
round()

Целая часть числа (положительные округляет до меньшего; отрицательные округляет до большего)
trunc()

Абсолютная величина числа (модуль)
abs()

Максимальное/минимальное значение X или Y
max(X;Y)
min(X;Y)

Натуральный/десятичный логарифм
ln()
log()

Квадратный корень
sqrt()

X в степени Y (аналог X^Y)
pow(X;Y)

r2d()
d2r()

Константы "Пи" и "е"
pi
e


С новыми операциями формулы для условий вышли проще.

Функция ЕСЛИ
A*a
где A - условие, a - значение при его выполнении

Функция И
floor((A+B+...+N)/n)*z
где A...N - условия; n - количество условий; z - значение при выполнении всех условий

Функция ИЛИ
sign(A+B+...+N)*z
где A...N - условия; z - значение при выполнении хоть одного условия

Условия для параметров:

1 - если X=Y, 0 - если X>Y или X<Y
1-abs(sign(X-Y))

1 - если X>Y или X=Y, 0 - если X<Y
sign(sign(X-Y)+1)

1 - если X<Y или X=Y, 0 - если X>Y
-sign(sign(X-Y)-1)

1 - если X>Y, 0 - если X<Y или X=Y
max(0;sign(X-Y))

1 - если X<Y, 0 - если X>Y или X=Y
-min(0;sign(X-Y))

Последний раз редактировалось Demonakor, 03.12.2024 в 15:09.
Demonakor вне форума  
 
Автор темы   Непрочитано 04.12.2024, 08:09
#27
gumel


 
Регистрация: 20.04.2011
Сообщений: 487


Цитата:
Сообщение от Demonakor Посмотреть сообщение
С новыми операциями формулы для условий вышли проще.
Ну да. Но всё равно их маловато и приходится чудить..

Простая "паскалевская" запись V := (L div 130) mod 2;
превратится в что-то такое V = ceil(floor(L/130)/2) - floor(floor(L/130)/2)
gumel вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Динамические блоки > Кирпичная кладка. Как осуществить регулировку видимости в зависимости от линейного параметра?



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как реализовать зависимость параметра видимости от значения атрибута? rostyan Динамические блоки 4 17.07.2021 23:02
Как устроена свисающая кирпичная кладка в данном случае ,какое армирование (норматив)? Сергулька515 Каменные и армокаменные конструкции 0 30.07.2018 17:27
Кирпичная кладка с уширенным швом: в какой части к ней применяется Свод правил СП 15.13330.2012? Хрюндель Каменные и армокаменные конструкции 10 31.01.2018 21:51
Управление параметром видимости дин. блока через sheetset custom properties Red Nova AutoCAD 12 25.06.2008 13:44
фигурная кирпичная кладка stepnoi Прочее. Архитектура и строительство 83 10.05.2007 10:56