0 Пользователей и 1 Гость просматривают эту тему.

*

Оффлайн nideKer

  • *****
  • 2583
  • Репутация: +121/-2
  • Пол: Мужской
  • freeRide 4ever
В эту тему добрые люди постят секреты и хинты по GDL-програмированию!

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

При использовании информации на других или с других ресурсов, ссылка на источник и автора ОБЯЗАТЕЛЬНА!
« Последнее редактирование: Апреля 14, 2008, 00:15:35 от Valery W »

*

Оффлайн Valery W

  • *****
  • 5987
  • Репутация: +629/-14
  • Пол: Мужской
Иногда бывает нужно показать элемент на несколько этажей вверх или вниз. А потом подвигать его и посмотреть как он стоит на всех этих этажах. Например: расстановка вентканалов.

В ArchiCAD 10 betta появилась новая возможность, показывать элеметы не только на всех этажах (All Stories) или на этаж выше (One Story Up) или ниже (One Story Down), но и на определенных этажах.
Примерно тоже самое можно осуществить и в любой версии ArchiCAD. Если хотите сделать видимым библ. элемет на определенном количестве этажей сверху и снизу, то проделайте такую не сложную работу.

Откройте библ. элемет в GDL-редакторе.

Создайте два параметра и вкладку-заголовок (см. рис 2). Назовите эти параметры, например: show_story_up и show_story_down. Тип параметров - целое число.

Теперь откройте 2D-скрипт и в самом начале напишите вот эти строки:
IF GLOB_CH_STORY_DIST < -show_story_down OR GLOB_CH_STORY_DIST > show_story_up THEN END

В скрипте параметров можно написать такие строки:
IF show_story_up < 0 THEN PARAMETERS show_story_up = 0
IF show_story_down < 0 THEN PARAMETERS show_story_down = 0

Они исправят вас, если вы введете отрицательное значение в параметрах, что приведет к ошибке.

Сохраните библ. элемет. Работа закончена.

Теперь в окне библ. элемета (см. рис 1) укажите "Показывать на всех этажах/All Stories", а в параметрах элемента, на сколько этажей вверх или вниз.

Но есть одно "но". На этажах, где элемент не видно, будет присутствовать его первая точка. Вы можете случайно перетащить элемент в другое место (например, бегущей рамкой). Поэтому, как только вы определились с постановкой элемента, заблокируйте его.
Удачи!

 

***************************************
Поздняя Дописка.
Вот и вышла десятая версия ArchiCAD. Но в нее, по каким-то причинам, не вошла функция показа элементов на выборочных этажах, присутствующая в Бэтта-версии. Так что можно продолжать использовать этот скрипт.
« Последнее редактирование: Ноября 06, 2007, 21:18:06 от Valery W »

*

Оффлайн Valery W

  • *****
  • 5987
  • Репутация: +629/-14
  • Пол: Мужской
Много раз писал скрипт для блокировки поворота и зеркального отражения в 2D элементах.
А вот указателем сторон света не пользовался, а то бы отредактировал этот библ. элемент. И вот нашел на сайте Graphisoft\`;а такой пример. Цитирую для тех, кто пользуется библ. элементом "North Symbol" и хочет чтобы он автоматически показывал на установленный в проекте север.
Примечание: Пример дан для АС7. То же самое можно сделать в любом АС.

Цитата:
Хотите иметь на плане символ Севера, соответствующий Проектному Северу ArchiCAD`;а, который используется для вычислений солнечной тени?
Откройте 2D-объект "North Symbol 70" в GDL-редакторе. "North Symbol 70" находится в: Object Library 70/1. BASIC LIBRARY 70/1.6 2D Elements 70/Graphic Symbols 70/Signs 70
В 2D-сценарии напечатайте следующие строки в самом начале скрипта:

MUL2 1, 1-2*SYMB_MIRRORED
ROT2 GLOB_NORTH_DIR + 180*SYMB_MIRRORED - SYMB_ROTANGLE - 90

Потом сохраните и закройте "North Symbol 70".
Впоследствии Вы можете вращать и зеркалить объект, но он все равно будет указывать на Север.
Обратите внимание: после изменения ориентации Севера, необходимо сделать Rebuild, чтобы Символ показал на новое направление.



От себя добавлю: Если Вы хотите Сохранить контроль над компасом, т.е. когда ему показывать на север, а когда нет, то тогда напечатайте в 2D-сценарии вот эти строки:
IF north THEN
MUL2 1, 1-2*SYMB_MIRRORED
ROT2 GLOB_NORTH_DIR + 180*SYMB_MIRRORED - SYMB_ROTANGLE - 90
ENDIF

А в окне Параметры создайте новый параметр. Установите тип параметра - Boolian (Если у Вас все русифицировано, то тип может называться - Истинное значение. Короче, это тип где ставится галочка - Да/Нет, On/Off ). Назовите параметр - north. Дайте ему коментарий, например: Sensitive Symbol или Север как в проекте. Переместите параметр на первую строчку.
Сохраните и закройте "North Symbol".

Все.

У кого это первый опыт - наслаждайтесь содеяным.
« Последнее редактирование: Ноября 06, 2007, 21:16:08 от Valery W »

*

Оффлайн macksim

  • **
  • 30
  • Репутация: +6/-0
Все здорово.
Одна поправка: начиная с 8-ки команда
MUL2 1, 1-2*SYMB_MIRRORED, помещенная в 2D-скрипт, отрабатываться не будет. Ее нужно поместить в master-скрипт. Столкнулся с этим явлением после перехода на АС 8.1.
А вот, кстати, мой вариант решения:
!---------------------
! bAutoNorth - буль
!---------------------

! В MASTER-script:
===========!! \"Защита от отзеркаливания\" ============
IF SYMB_MIRRORED THEN MUL2 -1, 1
===================================================!!

! В 2D-script:
=============!! \"Автоустановка севера\" ==============
IF bAutoNorth THEN ROT2-90+GLOB_NORTH_DIR-SYMB_ROTANGLE
===================================================!!

*

Оффлайн Valery W

  • *****
  • 5987
  • Репутация: +629/-14
  • Пол: Мужской
Я проверял работоспособность в АС9. Все Окей. Может у тебя где-то ошибка? Проверь еще раз.

*

Оффлайн macksim

  • **
  • 30
  • Репутация: +6/-0
Обижаете, барин :) Видно же, что никакой ошибки в скрипте нет.
А в 9-ке действительно можно без мастер-скрипта обойтись - только что проверил... Просто я работаю в 8.1, а там все мои элементы, написанные в 7-ке, где подобная конструкция применялась, преспокойно зеркалились, не обращая внимания на мои окрики. Пришлось переписывать.
Поскольку 9-ка на движке 8-ке сделана - я и сделал, как видим, поспешный вывод.

*

Оффлайн Valery W

  • *****
  • 5987
  • Репутация: +629/-14
  • Пол: Мужской
Возможно, кому-нибудь понадобится следующий б.элемент-пример.
Показывает параметры шрифта. Можно смотреть какие шрифты "кривые", т.е. не имеют полный набор параметров, таких как отступ снизу и высоту стиля(строки).
А для тех кто изучает GDL, скрипт покажет как запрашиваются эти параметры. Значения запрошенных параметров можно использовать для програмирования рамки или подложки для текстов и др. Для простоты чтения, весь скрипт находится в окне "Основной скрипт".
« Последнее редактирование: Октября 14, 2010, 19:22:23 от Valery W »

*

Оффлайн ALAKK

  • *****
  • 625
  • Репутация: +55/-7
  • Пол: Мужской
  • Он спорил с модером...
Что-ж... Куда народ, туда и ...я. Позвольте и мне приобщиться.
Речь пойдет о массивах, переменных и внутренних ресурсах АС для организации данных. Цель реплики - показать как можно использовать встроенные элементы АС для достижения результатов. Сразу оговорюсь, что прилагаемые примеры не являются полностью работоспособными версиями, многое в них вырезано (или не дописано пока) для упрощения понимания. Еще хочу заметить, что для пояснения своих мыслей мне придется сравнивать коды различных производителей (а может и нет - как фишка ляжет) с тем, что предлагаю я, так что прошу не обижаться.
Все началось с возни с установкой сортамента от SNOG. Чтобы он работал, пришлось переустановить АС на английскую версию и постоянно видеть перед собой буржуйские буквы. В моем возрасте это уже вредно. Стал соображать: а почему такое происходит и как этого избежать?
Пример 1. Серия 1.020-1/87 Диафрагмы жесткости.
Для организации хранения данных создана своего рода виртуальная база данных, которая заложена в описываемые массивы. Массивы имеют свои свойства - можете ознакомиться -  и размеры. Где хранится (физически) база данных мне выяснить не удалось. Главное то, что с таким подходом к организации данных можно полностью или частично избежать общения с винтом, а это огромное ускорение работы кода. Выборка данных из таблиц производится стандартным способом. Есть одна маленькая фишка: поиск ссылочного индекса массива при полном отсутствии такового. Обратите внимание на цикл FOR....next. Он там один - не ошибетесь.
Обратите внимание на способ определения переменных: от этого зависит видимость переменных из подпрограмм. При предложенном способе нет необходимости в определении (поиске значения) переменных в скриптах разного уровня - см. библиотеку Титова: как там работают плиты перекрытия. При таком подходе код получается лаконичный и, в связи с этим, быстро работающим.
Обратите внимание на типы данных в массивах. Можно поэкспериментировать с перьями, размерами и проч. типами. Собственно типы данных в массивах и диктуют такю структуру этой виртуальной базы.
Если бы уважаемый SNOG (честь ему и хвала за его труд) применил такую организацию данных - не было бы проблем с версиями АС.
Еще одно преимущество: АС видит эти элементы с любого места винта. Нет небходимости как-то их организовывать в базе библиотек.
Пример 2. Всем надоевшая отметка высоты.
Предложенный подход позволил организовать отметку, которая запоминает свой замер и хранит его внутри себя до отмены. Внешне это выглятит тамк, будто объект при активации/деактивации checkbox производит замер своего положения отностиельно 0 проекта. Если этот объект ActiveX не активировать, то отметку можно таскать куда угодно, копировать и с маслом есть, но своего значения она не изменит. Это полезно тем, кто вставляет разрезы в план этажа. Приходится тыкать в него 2 раза  - просто в составе АС не нашел элемента ActiveX, который запускал бы исходный код на выполнение с первого раза.
Обратите внимание на определение переменных - опять же видимость/невидимость.
Вот вроде и все. Пойду возьму пивка и подожду комментов аксакалов. Приветствуются любые, кроме оскорбительных.
Кстати. Все это написано в 10 версии АС. Соответственно использован и его компилятор. Написанная и откомпилированная таким образом отметка высоты в 8.1 не работает, хотя исходный код был сделан именно в 8.1. Видимо уже совсем другой интерпретатор...

ЗЫ Если кому-то не стало скучно от сказанного - предлагаю обсудить эту технологию. Это именно технология - ничего нового я не придумал.
« Последнее редактирование: Марта 19, 2007, 03:05:34 от Valery W »

*

Оффлайн Valery W

  • *****
  • 5987
  • Репутация: +629/-14
  • Пол: Мужской
=====================================================
Отступление
Я, до недавнего времени, избегал использовать массивы, потому что считал, что их невозможно редактировать. Думал, что если сделать ошибку с занесением данных, то потом, чтобы исправить одно значение, придется переписывать весь массив заново.
Оказалось, все гораздо просто. При выделении переменной с массивом активируется кнопка "Установить" в верхней части окна списка параметров. Надо нажать на нее и можно безболезненно редактировать массив.
Возможно, кто-то тоже не знал. Теперь знайте.

=====================================================

Хороший пример (№1) работы с массивами. С тех пор как я понял как редактировать массивы, я немного научился работать с ними. И вижу что в примере №1 можно упростить скрипт параметров, используя только один цикл и убрать половину параметров-массивов за счет их объединения.
Если же обсуждать способы хранения данных (внутри элемента или снаружи), то тут, я думаю, можно создать отдельную тему, поскольку она будет большой. Уже заготовил небольшое исследование по этому вопросу.

Пример №2 неудачный. В нем, описанное свойство (изменять или нет значение), не зависит от манипуляций с checkbox. Достаточно открыть элемент для просмотра параметров и кликнуть OK. После можно видеть, что перемещенная на плане отметка, обновила значение своего положения.
В твоем элементе отметки, перезапись значения не зависит от написанного скрипта и происходит всегда, в предусмотренных разработчиками случаях. Это когда с элементом производят действия отражающиеся на его структуре (например, растягивание) . Начиная с 9-й версии добавлен еще один пункт регенерации, при подтверждении изменений в окне настройки (OK) и установки на план. Они это сделали после того, как столкнулись с тем, что маркеры элементов показывающие их координаты не работали в момент установки на плант.

Принцип работы кнопки, который ты хотел получить, можно сделать как в прикрепленном ниже примере.
« Последнее редактирование: Марта 19, 2007, 04:37:45 от Valery W »

*

Оффлайн ALAKK

  • *****
  • 625
  • Репутация: +55/-7
  • Пол: Мужской
  • Он спорил с модером...
В примере 2 ты немного не разобрался.
Открытие окна параметров и его последующее закрытие без изменений активирует событие (не подходит этот термин для бейсика - но все же) полного исполнения кода. По сути checkbox есть аналог открытию/закрытию окна.
Сам же пример был включен для ознакомления только как пример динамического обмена данными с массивом. Если в примере 1 есть неизменяемая реляционная база, то во втором все с точностью до наоборот.

*

ab

вопрос к профи в GSM
можно ли создать библ который будет размещаться в плане этажа
и собирать сумму площадей из зон с одинаковым ID

нужна наводка, дальше можно разработать более расширенный и параметрически настраиваемый библ элемент, вплоть до готовых таблиц

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

*

Оффлайн ALAKK

  • *****
  • 625
  • Репутация: +55/-7
  • Пол: Мужской
  • Он спорил с модером...
Вот так рождаются нездоровые сенсации... :'( :p
« Последнее редактирование: Апреля 01, 2007, 20:23:14 от ALAKK »

*

SergeyAB

Хочу сказать по поводу обновления обьекта через изменение его параметров...
Есть вот такие соображения:
Следует различать 2 различных этапа работы с обьектом через его интерфейс,а именно:

1. Заходим в панельку обьекта - окно модальное, работает gdl-компилятор и интерактивный-интерфейс-интерпретатор(реализованный на функциях обрабатывающих сообщения от окна), все события направляемые этому окну описаны для отдельного класса - а именно для класса "интерфейс gdl-обьекта", никакой работы по включению изменений в базу данных не происходит, драйвер плана тоже "отдыхает", вызвав функцию "интерфейс выделенного обьекта", ждет возвращаемых функцией значений, в окошечке работают property sheet`;s обьекта, просмотр миниатюрный и т.д.
Далее по поводу этого этапа - в самом начале любой книжки по gdl описывается порядок выполнения скриптов обьекта, вроде все начинается с мастер-скрипта, или скрипта с началом MASTER_GDL, точно не скажу надо смотреть...ВАЖНО: есть приоритет выполнения скриптов, НО переназначая любой параметр ПРОКРУЧИВАЮТСЯ ВСЕ СКРИПТЫ ОБЬЕКТА которых коснулось изменение(такая информация числится за ИНТЕРАКТИВНЫМ интерпретатором языка gdl), а функция собирает информацию о возвращаемых значениях (как-то отображать объект иль нет, и че вааще делать по ОК?) как-только жманаем по ОК начинается 2-ой этап, если изменения параметров привели к ПРОКРУТКЕ ОСНОВНОГО скрипта объекта он перерисуется на плане автоматом,а отсюда важное следствие - важно уметь построить основной скрипт чтобы он цеплялся требуемым параметром...

2.Щелкаем ОК, окно закрывается, основному окну документа передается сообщение "по_изменению параметров_выделенного обьекта", работает соответствующая функция уже ARCHICAD PLAN DRIVER, которая в неизвестном мне порядке :
- отображает обьект в соответствии с возвращенными значениями
- переписывает данные по свойствам объекта в АС BD,
- ну и меняет курсор на часики...

соображения основаны на личном опыте написания скриптов...и не являются 100% догмой...

*

Оффлайн SABRUS

  • ***
  • 212
  • Репутация: +44/-1
  • лучше день потерять...
Re: Библиотека "секретов" по GDL-программированию!
« Ответ #13 : Августа 06, 2012, 16:37:48 »
опять пишу в эту тему, на этот раз с вопросом.
Есть 3Д композиция, сформированная 3д скриптом, как получить с этой композиции 2Д горизонтальные сечения на высотах определяемых пользователем?

Пример:

Есть этаж в отметках 0-20м есть колонна высотой 3 м, низ на отм. +1.0м. на высоте 0-1м сечение колонны круг, на высоте 1-2 м - квадрат и 2-3 соотв. треугольник. Выбираю в параметре "Высота сечения" допустим 2,1м и вижу в плане квадрат. Круг квадрат и треугольник - это условно, реальная задача не подразумевает возможности использования 2Д фрагментов и команды Fragment2 ....Хочу с одного 3д элемента размещать нужное мне количество сечений, причем компоновать их в 2Д через активные хотспоты отвечающие за начало координат этих сечений...по сути все просто, если речь идет о видах получаемых Project2 , вопрос в том как получать сечения?

Команда Project2 дает только виды - сбоку слева, справа, сверху и т.д., а нужны именно сечения...
Использовать этажи - неудобно, в одном проекте может быть несколько таких элементов - и привязка к этажам неудобна...

Решение с пересохранением 3Д формы в "лежащий на плане объект" - читал, интересует возможность решения в рамках программирования на ГДЛ.

Это тоже прочитал - не та ситуация:
http://cadstudio.ru/forum/index.php/topic,11684.15.html
- тут обсуждается возможность обрезки ....либо всей ЗД композиции через скобки Cutplane-CutEnd, либо использование отображения на релевантных этажах...


« Последнее редактирование: Августа 06, 2012, 16:58:19 от SergeyAB »

*

Оффлайн Valery W

  • *****
  • 5987
  • Репутация: +629/-14
  • Пол: Мужской
Re: Библиотека "секретов" по GDL-программированию!
« Ответ #14 : Августа 06, 2012, 17:09:22 »
Это тоже прочитал - не та ситуация:
http://cadstudio.ru/forum/index.php/topic,11684.15.html
- тут обсуждается возможность обрезки ....либо всей ЗД композиции через скобки Cutplane-CutEnd, либо использование отображения на релевантных этажах...

Именно та ситуация. Там рассказано как Cutplane-CutEnd работает только для вывода сечения в 2D-окне, а не всей модели в 3D.

 

Похожие темы

  Тема / Автор