Перейти к содержанию

Блоги

Популярные записи

  • dows

    Как из ARCHICAD сохранить BIM-модель в формате IFC, чтобы в nanoCAD Инженерный BIM пришли помещения?

    От dows

    Часто возникает вопрос со стороны пользователей: Почему из ARCHICAD не приходят помещения? И чаще всего архитекторы забывают отображать помещения в 3D модели при сохранении IFC. Ниже укрупненные шаги, как все-таки подготовить корректные IFC из ARCHICAD. Хотя в общем виде схема универсальна для любых других архитектурных BIM-систем. Итак...   Со стороны ARCHICAD процесс достаточно простой: 1. Замоделировать модель с проработкой помещений (помещения = Зоны, какие параметры задаются
    • 0 комментариев
    • 241 просмотр

Блоги нашего сообщества

  1. В продолжение этого урока "Отзеркаливание текста в параметрическом объекте"

    Работать будем с получившимся объектом в предыдущем уроке и будем его упрощать и дорабатывать.

    На самом деле, действий не так много придётся совершить =) Благодаря случайности обратил внимание, что у всех объектов разница углов между vecDirection и осью oZ, и vecPlane и осью o Z будет всегда равна 90 градусов. Только у неотзеркаленых она положительная,А у отзеркаленых - отрицательная

    Давайте проверим это и добавим два параметра в наш объект:

    	rAngleZ1, "Угол Z (Direction)", 
    	rAngleZ2, "Угол Z (Plane)", 

    Так же добавим их в функцию MirrorObject:

    	rAngleZ1 = angleTwoPi(vecDirection,oZ);
    	rAngleZ2 = angleTwoPi(vecPlane,oZ);

    и закомментируем наши rAngleX и rAngleY в функции MirrorObject, чтобы не производилось отзеркаливание объекта.

    Достаём объект из базы, поворачиваем его всячески и зеркалим, убеждаясь в словах выше:

    Спойлер

     

    Видим, что по-мимо углов в 90 и -90 градусов присутствует углы в -270 и 270 градусов соответственно, причина этому то, что когда величина угла достигает 360 градусов она сбрасывается на 0,  и получается, что 10-280=-270,но при этом 370-280=90.

    Не забываем отразить это в нашем коде.

    Для удобства в  функции MirrorObject добавим переменную a равную a=rAngleZ1-rAngleZ2

    Пишем в функции MirrorObject:

    	rAngleZ1 = angleTwoPi(vecDirection,oZ);
    	rAngleZ2 = angleTwoPi(vecPlane,oZ);
    	a=rAngleZ1-rAngleZ2;
    	if(a==-90 || a==270)
    	{
    		vecDirection=-vecDirection;
    	}

    Теперь наш объект зеркалится обратно, но остаётся проблема с поворотом текста

    Для поворота текста будем работать с переменной rAngleY, "Угол Y", поэтому надо её расскомментировать.

    Теперь обновляем наши объекты и определяем уже не точные значения, а промежуток, в котором нам надо развернуть текст на 180 градусов.

    У меня он получился от  90<rAngleY<=270

    Исходя из этого, обновляем нашу функцию следующим образом, тем самым приводя её к итоговому виду

    	rAngleY = angleTwoPi(oY,vecPlane);
    	rAngleZ1 = angleTwoPi(vecDirection,oZ);
    	rAngleZ2 = angleTwoPi(vecPlane,oZ);
    	a=rAngleZ1-rAngleZ2;
    	sTextAngle=0;
    	if(a==-90 || a==270)
    	{
    		vecDirection=-vecDirection;
    	}
    	if(rAngleY>90 && rAngleY<=270)
    	{
    		sTextAngle=180;
    	}

     

    Обновляем наши объекты и наслаждаемся результатом =)

    Как результат наших доработок можно отметить не только более изящный код, но и отсутствие привязок к определенному углу поворота объекта - теперь даже при повороте на условные 37.93 градуса и отзеркаливание, наш объект всё равно корректно отобразит имеющийся текст.

  2. A.Kudrjashov
    Последняя публикация

    <Каталог>

    <nanoCAD. Программирование и автоматизация>
     

    (Перевод стаей о типах LISP из Справки к AutoCAD 2015 и дополнительная информация специфичная для nanoCAD)

     

    Integer

    AutoCAD 2015. LISP. About Integers

    Integer - это целые числа, которые не содержат десятичной точки. Для хранения целых чисел используется 32 бита. 31 бит используется для хранения числа а один бит для хранения знака числа. Диапазон целых чисел в целом находится в пределах +/- 2^31 или (от - 2 147 483 648 до 2 147 483 647). Как утверждается в Справке к AutoLISP AutoCAD 2015, в некоторых функциях значения Integer интерпретируются как 16-битные чиста в пределах от - 32 678 до 32 677.

     

    Однако, практика показывает, что на данный момент не всё так однозначно.

     

    Например, если в nanoCAD выполнить присвоение переменной числа 2 147 483 647, то вместо ожидаемого максимально возможного целого числа, получим действительное число (REAL). А, при последующем добавлении к нему единицы значение данного действительного числа будет увеличиваться в положительную сторону. При этом, если мы инициируем переменную значением 2 147 483 646, то получим правильную верхнюю границу INT в 2 147 483 647 и переход к отрицательным значениям при последующем прибавлении 1 (единицы).

    Спойлер

    image.png.d7d30f699180e6287f6d5fcfde1195f5.png

     

    Но, если мы инициируем переменную не числом 2 147 483 647, а выражением (setq xInt (- (expt 2 31) 1)), что, казалось бы, должно привести к аналогичному результату, результат получим совершенно другой.

    Спойлер

    image.png.24d723debb4be9f6dbd922f2522a2818.png

     

    Более того, оказывается, что в AutoCAD 2015 и в nanoCAD 20.1 "граница" между INT и REAL в случае выполнения вышеупомянутых арифметических операций и оценке типа переменной при помощи функции type выглядит несколько по разному.

    AutoCAD:

    Спойлер

    image.png.cd01163655f28a3c4710ff12b6c13663.png

     

    nanoCAD:

    Спойлер

    image.png.c4d3859424c04540cfa7d5d3db419ec1.png

     

    Предполагается, что, в случае превышения результата арифметических операций над INT, результат автоматически приводится к REAL. Однако, практика показывает, что это не всегда верно. Рассмотрим две операции сложения и умножения вида:
    1) 384 758 647 * 12 = 4 617 103 764

    2) 384 758 647 + 4 232 345 117 = 4 617 103 764

    Предполагается, что операции будут эквивалентными, но в действительности получаем:

    Спойлер

    image.png.eb02717afa79e0b70a83df521a012f84.png

     

    Резюме. Для корректной работы с целыми числами необходимо быть полностью уверенным, что их значения не выйдут за границы целочисленных значений LISP. Если есть сомнения, то лучше использовать действительные (REAL) числа, осознано преобразовывая их обратно к целочисленным значениям, в случае использования функций, работающих только с INT. Да, это трудоёмко и не всегда удобно, однако, позволит избежать непредсказуемых ошибок преобразования типов, как описанных выше, так и не описанных.

     

    Real

    AutoCAD 2015. LISP. About Reals

    REAL - это действительные числа с десятичной точкой. Числа в диапазоне от -1 до 1 могут содержать 0 (ноль) слева от десятичной точки.

    Значения REAL занимают 64 бита и соответствуют типу double в Си.

    Границы допустимых значений типа REAL примерно от 4.94 x 10-324 до 1.79 x 10308.

    Спойлер

    image.png.b5f6f274fa03663251d2f1914358383e.png

     

    При выходе за эти границы, будет получено значение "Infinity" (бесконечность) или 0.0 (ноль).

     

    Поскольку представленные десятичные числа имеют одинарную точность, то Машинный эпсилон (наименьшее положительное число) ε, при котором не распознаются два числа a и b:

    1 < a/b < 1+ε,  

    ε ≈ 5,96 x 10-8.

     

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

    Спойлер

    image.png.0da6b5eece2dc24fee3dc7487dc71144.png

     

    Поскольку в AutoLISP как AutoCAD, так и nanoCAD отсутствуют функции округления из Common LISP, типа round или trancate, прикладываю файл с функциями от Lee Mac.

    http://www.lee-mac.com/round.html

    LM_round.lsp

     

    Что нужно знать про арифметику с плавающей запятой

     

    List

    AutoCAD 2015. LISP. About Lists

    AutoCAD 2015. LISP. About Point Lists

    AutoCAD 2015. LISP. About Dotted Pairs

     

    List - это базовый тип LISP, представляющий собой Списки атомарных элементов и других списков.

     

    Функции, используемые для получения доступа к элементам списков:

    Спойлер

    image.png.b423940c638345f061049ecf45a97bb9.png

     

    Для получения доступа к координатам 2D и 3D точек в точечных списках рекомендуется обращаться не через функцию nth, а через функции: car - для доступа к первой координате, cadr - для доступа ко второй координате и caddr - для доступа к третьей координате.

     

    Функции car и cdr могут последовательно комбинироваться и обеспечивать доступ к атомарным элементам и вложенным спискам иерархического списочного дерева до 4-го уровня вложенности.

    car, cdr .... cddddr

     

    About Entity Context and Coordinate Transform Data

     

     

     

    Обсуждение на форуме.

    2020-10-14 LISP в nanoCAD 20.1
    https://forum.nanocad.ru/index.php?/topic/11617-lisp-v-nanocad-201/&tab=comments#comment-74317

     

     

  3. У вас уже есть готовый проект, выполненный в nanoCAD Механика? Или вы готовы спроектировать 3D-модель или написать отзыв/обзор на программу? Мы ждем ваших конкурсных работ, ведь призы действительно серьезные. В конкурсе нет ограничений: участвовать могут как опытные специалисты, так и студенты.

     

    Что вы можете выиграть?

    Apple Watch, Apple AirPods, Яндекс.Станция мини, фирменные толстовки и футболки nanoCAD.*

     

    Занявшие 1-е место в каждой номинации получат локальную годовую лицензию nanoCAD Plus с модулями nanoCAD Механика и «3D-моделирование и зависимости». Если победитель выступает от лица компании, то такой компании будут предоставлены специальные условия на приобретение лицензии на платформу nanoCAD Plus и указанные модули.

     

    Как принять участие?

    *C полными условиями конкурса можно ознакомиться на сайте nanocad.ru.

     

    Когда подведем итоги? КОНКУРС ПРОДЛЕН
    Конкурсные работы принимаются до 1 февраля 2021.
    Победители во всех номинациях будут объявлены после 1 марта 2021.

     

    pngkit_gears-png_129737.png

     

     

  4. При подготовке задания на проектирование для смежных групп в проектной организации помимо словесной формулировки часто требуется приложить графическое изображение. Прикладывать файл с полным комплектом чертежей во многих случаях нецелесообразно. Разумно будет передать небольшой фрагмент графической информации.


    Для подобных задач в nanoCAD Plus с модулем СПДС есть утилита Экспортировать в файл (SPEXPORTTOFILE). Она позволяет сохранить в файл выбранные объекты чертежа и оформить для них формат и основную надпись (штамп). Читайте дальше

  5. Часто возникает вопрос со стороны пользователей: Почему из ARCHICAD не приходят помещения? И чаще всего архитекторы забывают отображать помещения в 3D модели при сохранении IFC. Ниже укрупненные шаги, как все-таки подготовить корректные IFC из ARCHICAD. Хотя в общем виде схема универсальна для любых других архитектурных BIM-систем. Итак...

     

    Со стороны ARCHICAD процесс достаточно простой:

    1. Замоделировать модель с проработкой помещений (помещения = Зоны, какие параметры задаются для помещений, такие и сохранятся потом в IFC).

    2. Перейти в 3D пространство с отображением зон. Можно отображать поэтажно, можно всю модель - тут как удобнее вам. Если архитектор не знает как в 3D отобразить зоны, то это документация. Либо вот скриншот:

    image.png

     

    3. Сохранить как IFC из 3D окна. В простейшем случае сделать просто Файл\Сохранить как..., выбрать формат IFC и настроить два параметра - Сохранять то, что отображается в 3D + Сохранять через транслятор "Точный экспорт геометрии":

    image.png

     

    В более сложных случаях там можно десятки параметров настроить: полноту передачи информационных данных, формат IFC, папка сохранения. В идеале можно настроить так, что из ARCHICAD будет сохранять в один клик не только один IFC, а куча данных - DWG, Excel таблицы, PDF, IFC по этажам, BIMx модель и т.д. - функция называется Публикатор. Но тут точно надо читать документацию и думать, что хочешь получить - в рамках краткого ответа на форуме тут не описать все возможности.

×
×
  • Создать...