Малые архитектурные формы

Форум » Эксплуатация программ компании ИндорСофт » IndorCAD: Система автоматизированного проектирования
Страницы: Пред. 1 2
Малые архитектурные формы, Грамматика по малым архитектурным формам, делимся наработками
 
Денис можно распространить влияние оператора "if" на выражения, а не только на "Element".
Я хотел создать такой универсальный объект (Колодец ДП) и отключать чекбоксами ненужные промежуточные блоки. При этом должна пересчитываться высота (глубина) всей конструкции deltaH.
{Если есть Средний блок СБД-3 }
if SBD_31
begin
deltaH=deltaH+rH+0.25;
end;
И последующие элементы должны были подняться выше. Но этого не происходит.

И ещё есть ли способ расставить по трассе такие колодцы (объекты), может используя макрос ActivX по ведомости (ПК, боковое расстояние, имя объекта).
 
Цитата
{Если есть Средний блок СБД-3 }
if SBD_31
begin
deltaH=deltaH+rH+0.25;
end;

В этом случае правильным будет использовать конструкцию
if SBD_31 then
deltaH=deltaH+rH+0.25;

или

if SBD_31 then
begin
...
deltaH=deltaH+rH+0.25;
...
end
[else
begin
...
end]


Ваш вариант конструкции
if SBD_31
begin
...
end;

заставляет выполняться весь код между Begin и End, но объекты, размещённые внутри блока, будут отображаться только если условие истино (мигает или зависит от времени).
 
Алексей, вот простенький код на VBA, который создаёт объект в указанной позиции и загружает его код из файла.
Координаты по трассе (Пикет, Смещение) можно пересчитать в XY методом нужной трассы.
Также можно осуществлять поиск объекта в окрестности указанной точки.

Sub Test()
Dim App As IndorCAD.Application
Dim Prj As IndorCAD.Project


Set App = CreateObject("IndorCAD.Application")
App.TerminateOnRelease = False

Set Prj = App.NewProject
Dim Shps As IndorCAD.ArchitecturalShapes
Dim shp As IndorCAD.ArchitecturalShape
Set Shps = Prj.Layers.ActiveLayer.ArchitecturalShapes
Set shp = Shps.CreateShape(50, 55)
shp.LoadFromFile ("C:\ProgramData\IndorSoft\Media\Малые архитектурные формы\Автомобильные дороги\Шлагбаум с барьером.las")
shp.Angle = 3.1415926 / 6 ' 30°
Prj.Container.ZoomToAll
End Sub

Пример будет работать после ближайшего обновления программы.
 
Денис я опять на счет влияния оператора "if" на выражения
В 3d виде "Редактор 3D объектов" с конструкцией "if then" всё работает отлично, выставляю переключатели на 0 или 1 и моделька перестраивается.
Последний переключатель убирает из модельки трубу и гаситель.
А вот 3D-вид IndorCAD похоже не знаком с "if then" . Моделька не перестраивается или не реагирует на переключатели.
 
Цитата
А вот 3D-вид IndorCAD похоже не знаком с "if then" . Моделька не перестраивается или не реагирует на переключатели.
Алексей, спасибо, что сообщили!
"Познакомили" :)
Будет в сегодняшнем обновлении!
 
Денис добавьте в редакторе 3D-объектов запрос на сохранение изменений. При нажатии кнопки Esc на клавиатуре или при закрытии окна редактора [х] мышкой все набранные строки кода теряются. :o
 
Алексей, спасибо за информацию, поправим!
 
Денис на меня снизошло озарение :idea: . Плоские shape объекты созданные только с вертикальным смещением (см. Стрелка3D) не реагируют на угол поворота в инспекторе объектов, но если им придать совсем небольшой угол наклона - всё работает !

Выкладываю модельку Речной буксир и исправленный Экскаватор
 
Алексей, спасибо за модельки, Буксир и Экскаватор выпустим в обновления, если вы не против!
Исправление замечания с Esc уже вышло :)

А исключительно для тех, кто читает эту тему (!) даю доступ к ещё неофициальной функции для тестирования.
Работает на сборках 6648+.
В ярлык запуска добавляем -Cars3D (кто понимает о чём речь), и на вкладке Проект изучаем новые инструменты.
Работают достаточно просто.
О результатах тестирования прошу сообщать, если не сложно :)
 
Денис по Cars3D надо разрешить трафику появлятся на траекториях со своей текущей скоростью, а не с разрешенной. Сейчас при съезде на траекторию с меньшей скоростью трафик изменяет скорость мгновенно. Пускай даже трафик порождается с рандомной скоростью и плавно изменяет её до разрешенной. Принятие решения на съезд нужно делать заранее (включить поворотник и плавно снизить скорость). Перед точкой слияния нужно оценить безопасность вливания в поток с текущей скоростью (остановиться или увеличить скорость), включить поворотник .
 
Алексей, при съезде с траектории имея набранную разрешённую скорость на другую, на которой разрешена меньшая скорость, автомобиль начинает замедляться с разрешённым для него замедлением.
Также в данный момент авто "видят" едущие впереди (пока по этой же траектории!) с меньшей скоростью автомобили и притормаживает перед ними (можно включить "упрощённое отображение" и по цвету "кирпича" понимать, разгоняется он, тормозит или движется с постоянной скоростью).
А вот на тему "уступить дорогу" и прочее... будем думать, по мере возможности.
Задел сделан - это главное. Логику можно накручивать дальше.
Это лучше, чем просто движение с постоянной скоростью без возможности съезда и вливания в другой поток.
 
Денис, при вставке 3d малых арх. форм, сделайте чтоб объектам присваивалась абсолютная отметка из активной поверхности.
Я так сделал в макросе:

'если под объектом есть поверхность
If Layers.Layers(UserForm2.ComboBox2.ListIndex).CalculateZbyXY(X, Y, -777, False) <> -777 Then
'установить Z отметку из поверхности
ArchitecturalShape.AbsoluteZ = Layers.Layers(UserForm2.ComboBox2.ListIndex).CalculateZbyXY(X, Y, 0, False)
End If

Очень удобно. Понятно куда стал объект. А сейчас по умолчанию отметка 0,00 и если пользователь выбирает Z-отметку Абсолютная то в 3d-виде объект улетает на 0,00.
А можете сделать чтоб интерактивно отображались отметки Абсолютные и Относительные? При изменении Абсолютной менялась Относительная и наоборот.


Выкладываю баржу к речному буксиру.
Будьте здоровы!!!
 
Цитата
А можете сделать чтоб интерактивно отображались отметки Абсолютные и Относительные? При изменении Абсолютной менялась Относительная и наоборот.
Алексей, можем, сделано!
Начнёт работать при первой модификации отметки.

Цитата
Выкладываю баржу к речному буксиру.
Включили в обновления.
Спасибо!
 
Алексей, на всякий случай...
Цитата
If Layers.Layers(UserForm2.ComboBox2.ListIndex).CalculateZbyXY(X, Y, -777, False) <> -777 Then

Здесь последним параметром надёжнее поставить True.
В этом случае если триангуляция ещё не была построена в памяти (а строится она "по требованию"), то она будет принудительно построена, и вы получите отметку поверхности.
При использовании False (если триангуляция ещё не была построена, поскольку никто её не требовал), вам вернётся -777.

Многократные вызовы с True не затормозят работу. Триангуляция построится при первом запросе, а при последующих будет использоваться построенная, пока не поменяются исходные данные для построения триангуляции (Точки, Структурные линии, Трассы, формирующие поверхность в этот слой и т.п.).
 
Нет здесь я просто вставляю объекты. Если при вставке объекта запустится построение триангуляции это будет неожиданно. Может на построение триангуляции потребуется много времени. Или я что то не так понимаю (триангуляция есть, но не загружена в память?).
Алгоритм такой: Вставляем объект, проверяем есть ли под ним активная триангуляция, если есть присваиваем объекту абсолютную отметку из активной триангуляции, если нет - абсолютная отметка = 0,00 (у вас кстати 100,00 хотя этого сразу не видно). Почему вы так не делаете? Натыкал объектов и они сразу с отметками, не надо их выделять и передергивать относительную отметку для определения абсолютной.
 
Алексей, в обычных проектах поверхность слоя ЦММ почти всегда построена.
Она либо сама отображается на плане,
либо горизонтали отображаются (а для вычисления горизонталей нужна поверхность),
либо есть трассы, которые базируются на этой поверхности (она является чёрной для них),
либо ещё чего-то.

Поверхность слоя "Проект" строится также по требованию. Как только она нужна, так сразу построится.

Когда вставляете новый объект, ему по умолчанию выставляется относительная отметка = 0.0.
Какой бы там ни была поверхность.
 
Выкладываю опору в виде фермы для дорожных знаков

Денис, что то не работает дистанция для скрытия объектов
coord
Dist = [10, 0.7, 0.3]; //дистанция скрытия объекта от 10 м, от 0.7*10м плохое качество, от 0.3*10м отличное качество
elements
!Dist beam {$"Раскос"} Dr [ 0, k+f+0, 0.01] rel [0.666, 0, 0.5] truba 8;
Хотел скрыть обрешетку опор на большом удалении. Когда я делал самосвал дистанция работала, а когда заканчивал экскаватор - уже нет.

И ещё
var
h {$Высота, м} = 3.40 2.4 7.4 {$Digits=1; Step=0.5};
можно сделать чтоб заданный шаг (Step=0.5) отсчитывался не от целого значения, а от минимального заданного 2.4 или текущего
Мне нужен такой ряд значений h= 2.4 2.6 2.9 3.1 3.4 3.6 3.9 4.4 4.9 5.4 5.9 6.4 6.9 7.4
 
Алексей, да, спасибо за обнаруженную ошибку.
Дистанция для скрытия не работала, если описание объекта находилось в блоке begin ... end;
Ошибку исправили, на вашем примере работает.
Со свежим обновлением будет!

По вариантам значений подумаем над синтаксисом...
Как я понял, нужно чтобы было так: вводить нельзя - только выбирать из списка.
 
Цитата
: вводить нельзя - только выбирать из списка.
Это не обязательно. Чтоб шаг приращения работал от текущего значения.
 
Алексей, решили вопрос.
Пример описания переменных с выпадающим списком:
L {$Длина, м} = 10 {$Digits=1;Min=0.5;Max=100;Step=1;Order=1;Values=1,2,3.5,6.0}; // Список рекомендуемых значений для списка, но можно вводить любые от Min до Max
H {$Высота, м} = 3 {$Digits=1;Order=2;Fixed=1,2,3.5,6.0}; // Жёстко фиксированный список возможных значений
 
Выкладываю щиток с разметкой 2.7.1 или 2.7.2

Денис, а можно обновленную инструкцию для редактора малых архитектурных форм.
У меня что то не работает. Например изменилось описание оператора IF, теперь условие надо брать в скобки.
Доступ к координатам .X .Y .Z не работает
coord
Point = [100, 0.7, 0.1]

A=Point.X будет ошибка
щиток 271.png (9.33 КБ)
 
Доступ к .X, .Y, .Z починили.

Поправили логику работы условий.
На самом деле есть 2 варианта использования оператора if:

1. Конструкция вида if <LogicalExpression> then ... [else ...], которая исполняется в зависимости от выражения. И генерирует либо не генерирует примитивы в зависимости от условия.
Характерный признак этой конструкции - наличие then после условия.

2. if <Condition> <Primitive>, которая в любом случае добавляет примитив, но запоминает, что для его отображения необходимо выполнение простого условия Condition.
Характерный признак этой конструкции - одиночное условие (НЕ ВЫРАЖЕНИЕ), описанное в секции 'condition' и отсутствие 'then' после одиночного условия.

Была оплошность в ходе разбора кода объекта.
Теперь эти две ситуации различаются компилятором более корректно.

Алексей, спасибо за замечания!
Страницы: Пред. 1 2
Читают тему (гостей: 1)