вторник, 22 ноября 2016 г.

Размер по двум точкам на 3D виде (по мотивам Easy4smart :)

Дима Чубрик уже давно как написал про измерение расстояния между двумя произвольными точками при помощи адаптивного семейства:



Вот только он предлагает узнавать расстояние при помощи блокировки 3D-вида и установки марок... Но как-то это печально. Я хочу видеть расстояние сразу после того, как его измерил!

За дальнейшими исследованиями прошу под кат.



Мы будем использовать инструмент "Текст модели". Кто не знал - этот элемент может выводить не только фиксированный текст, но и связывать значение с каким-либо текстовым параметром семейства:


Создаем семейство обычной "Типовой модели", добавляем туда этот текст модели (можно задать глубину, шрифт, размер). Создаем текстовый параметр "Длина текст" и связываем с ним "Текст модели" как на картинке

Всё это интересно, но длина - это длина, а текст - это текст. Конвертировать число в текст Ревит не умеет!
(я надеюсь, что программисты Автодеска сейчас посыпают голову пеплом!)
Да, я создам параметр "Длина" - но теперь надо как-то текст связать с числом.



Воспользуемся таблицами выбора. Как мы знаем - можно заставить их искать число и выводить текст. Но тут другая беда. Если мы хотим измерять длину до 100 метров с точностью до 1мм - в таблице будет сто тысяч строк!
Никогда не делал такие таблицы выбора, но подозреваю, что Ревиту (а скорее уже Экселю) такое будет не по вкусу!
Уменьшить точность до 50мм? Ну это как-то не по-инженерному.

Сделаем хитрее. Разделим длину на два числа: количество метров и количество миллиметров:
КолвоМетры = rounddown(Длина / 1000мм)
КолвоМиллиметры = round((Длина - КолвоМетры*1000мм)/1мм)

Миллиметров в метре не больше тысячи, значит, достаточно сделать таблицу выбора на 1000 строк:


Добавляем таблицу выбора в семейство, прописываем формулы:
МетрыТекст = size_lookup(Table, "", "м", КолвоМетры * 1 мм)
МиллиметрыТекст = size_lookup(Tablem, "", "мм", КолвоМиллиметры * 1 мм)

Далее установим два "Текста модели": левый с выравниванием вправо, правый - с выравниванием влево. Совместим их так, чтобы они выглядели как одно число. Связываем значения текста: левый - метры, правый - миллиметры.


Но нет, что-то не то! Почему 3035мм превратились в 335?

Неудивительно: 3035мм - это 3м и 35мм, вот и получается 335.

Очевидно - для миллиметров нужна другая таблица выбора:

Теперь 3035мм выглядят как 3035:


Но мне и этого мало! Если длина менее 1000мм - вместо "750" выводится "0750". Хорошо, отключим "Текст модели" с "Метрами", если количество метров равно 0. Дополнительно я еще сделал так, чтобы длина менее 100мм миллиметров выводилась без нулей в начале.
Вот что получилось в итоге:


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


Дальше дело техники: создаем "Адаптивное семейство" на базе двух точек, добавляем "Параметр для отчета", загружаем ранее созданное семейство и связываем параметр "Длина" с этим параметром для отчета:


Для красоты я еще добавил стрелочки и регулировку размера текста. Загружаем и проверяем в проекте:



А вот пробую измерять большое расстояние:

Такие дела.

Ссылка на скачивание семейства: яндекс, гугл. Устанавливать через кнопку "Компонент".



Комментариев нет:

Отправить комментарий