|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Кирпичная кладка. Как осуществить регулировку видимости в зависимости от линейного параметра?
Регистрация: 20.04.2011
Сообщений: 487
|
||
Просмотров: 2585
|
|
||||
Регистрация: 28.11.2022
Сообщений: 153
|
Наверное не "неизбежно", можно придумать и другие варианты.
Например сделать, чтобы короткий конечный блок был только один, а положение сверху или снизу ему задавать операцией отражения вручную. Можно это отражение менять, в зависимости от длины растягивающего параметра (0-250 - сверху, 250-380 - снизу, 380-510 - сверху, 510-640 - снизу... и т.д.), но тогда надо будет сделать ограничение по длине. Можно операцией массива размножать только длинные блоки (250 мм), выполненные с заливкой или маскировкой, а короткие в конце перемещать на заднем плане (наложение будет всего одно). Можно в исходном варианте со штриховкой сделать дополнительные видимости, где передний и/или задний блок отсутствуют, просто из-за формы внешней полилинии (переключаться между видимостями, где короткий блок сверху и снизу придётся вручную). |
|||
![]() |
|
||||
Регистрация: 28.11.2022
Сообщений: 153
|
Можно видимостью, тогда надо 2 разных кирпича, можно отражением или перемещением вверх-вниз одного.
Чтобы сделать зависимость одних параметров от других нужно использовать двойной выбор. В первой таблице указываются условия (в моём примере длина менее 260 и более 260, а так же включение/отключение коротких кирпичей). Во второй таблице те параметры, которые в соответствии с этим должны переключаться (в моём примере видимости). Для этого названия строчек выбора должны совпадать в 1 и 2 таблицах (причём если надо - несколько строчек может быть с одинаковым названием, и количество строк может быть разным). |
|||
![]() |
|
||||
Регистрация: 20.04.2011
Сообщений: 487
|
Цитата:
Первый функционал с изменением видимости от длины стенки получилось реализовать: Wall new.dwg Открыл для себя новые возможности. Спасибо! ![]() Осталось придумать как управлять видимостью половинок в таком продвинутом блоке |
|||
![]() |
|
||||
Регистрация: 20.04.2011
Сообщений: 487
|
Цитата:
![]() К минусам реализации подобного блока наверное можно отнести ввод огромной таблицы (хотелось бы функционал с формулами) Ну и один кирпичик дублируется через раз |
|||
![]() |
|
||||
Регистрация: 20.04.2011
Сообщений: 487
|
Итак, раскусил прелесть использования "зеркальных ручек", которые можно использовать много для чего, в том числе и для управления видимости.
Усложнил свой блок, преследуя две цели: - хотел убрать наложение полилиний внутри блока; - хотел сделать более удобным включение и выключение половинок. В итоге блок "сломался" ![]() |
|||
![]() |
|
||||
Регистрация: 28.11.2022
Сообщений: 153
|
Какая-то мешанина выходит. Не надо убирать длинный правый блок видимостью - просто добавить новый линейный параметр для управления вторым массивом (не забыть включить цепочку операций, чтобы он управлялся основным размером), иначе слишком уж много условий надо вводить.
|
|||
![]() |
|
||||
Регистрация: 28.11.2022
Сообщений: 153
|
Так нет - не надо во второй таблице прописывать условия (включения/выключения) коротких кирпичей - только их видимости и отзеркаливание правого (плюс правильно назвать строки, чтобы при нужном наборе условий из 1 таблицы активировалась только одна строка из 2 таблицы).
Кстати, если не нужно делать минимальное расстояние 250, а начинать 380, то можно не мучиться увязкой нескольких условий. Сделать отдельно выбор положения правого блока от длины и отдельно выбор видимости от включения/выключения крайних блоков. Последний раз редактировалось Demonakor, 29.11.2024 в 13:47. |
|||
![]() |
|
||||
Регистрация: 20.04.2011
Сообщений: 487
|
Demonakor, спасибо, что помогаешь!
![]() Цитата:
Я пытаюсь пойти другим, оптимальным путем. Я сделал два двойных параметра (!) В первом я регулирую зеркалирование правого кирпичика, а во втором видимость половинок. При этом, всё работает. Ну почти. Не могу понять почему, но при изменении длины стенки, видимость половинок сбрасывается, и они становятся вилимыми ------- и еще, подскажи пожалуйста: что означает запись "[260,)" и "(,260)" в твоей таблице с длинами? |
|||
![]() |
|
||||
Регистрация: 28.11.2022
Сообщений: 153
|
Цитата:
В 1 таблице второго параметра указываются все возможные комбинации положения ручек для скрытия коротких кирпичей (главное не перепутать с параметром, отзеркаливающим правый кирпич), а во второй соответствующие видимости. "Больше или равно 260" и "меньше 260". По сути это диапазон между двумя значениями с разделением в виде запятой. Ноль можно не указывать, если не указывать второе значение - значит до бесконечности. Квадратные и круглые скобки - включая и не включая само значение. |
|||
![]() |
|
||||
Регистрация: 28.11.2022
Сообщений: 153
|
Ещё поэкспериментировал - можно в таблице перечислить через запятую без скобок все нужные значения длины, тогда останется всего 2 строки.
PS: Сделал бесконечный вариант с зависимостями. Последний раз редактировалось Demonakor, 02.12.2024 в 15:13. |
|||
![]() |
|
||||
Регистрация: 20.04.2011
Сообщений: 487
|
Demonakor, ты суперпилот. Мегакруто!
![]() Очень полезный пример с формулами, спасибо! Прям так и напрашивается внутри блоков чтобы была возможность писать мини код, с доступом к свойствам примитивов в зависимости от внешних параметров. Это сильно упростит создание блоков и заметно расширит их функционал |
|||
![]() |
|
||||
Регистрация: 20.04.2011
Сообщений: 487
|
С геометрией тут всё чётко!
![]() Цитата:
Не получается забить в таблицу такие длинные строки (пришлось привлечь 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 строчки). Эх, вот если бы была возможность в таблице (!) писать формулы, было очень круто! |
|||
![]() |
|
||||
Регистрация: 28.11.2022
Сообщений: 153
|
Да, только я делал проверку на чётные/нечетные значения, но такая формула совсем уж неправильно себя ведёт с дробными значениями (если отключить шаг у расстояния).
Сделал вариант с косинусоидой для высоты H - формула даже проще вышла. Код:
Код:
Код:
|
|||
![]() |
|
||||
Регистрация: 20.04.2011
Сообщений: 487
|
Цитата:
К сожалению, не знаю с какими функциями работают формулы автокада. Я бы использовал что-то такое: Код:
L - длина кладки; V - на выходе выдает либо 0 либо 1. То есть, для 380 будет 0, для 510 - 1 и т.д. |
|||
![]() |
|
||||
Регистрация: 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. |
|||
![]() |
|
||||
Регистрация: 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. |
|||
![]() |
|
||||
Регистрация: 20.04.2011
Сообщений: 487
|
|
|||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как реализовать зависимость параметра видимости от значения атрибута? | 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 |