Форум ArchiCAD и BIM по-русски - CADstudio.ru

ARCHICAD => Библиотеки. Библиотечные элементы. GDL => GDL-программирование => Тема начата: nideKer от Января 26, 2012, 21:22:35

Название: Предложение цикла FOR - TO - NEXT
Отправлено: nideKer от Января 26, 2012, 21:22:35
Есть 2Д элемент тиражированный скриптом:
FOR I=1 TO N
ADD2 A,0
FRAGMENT2 ALL,1
NEXT I
DEL N


Народ подскажите как сделать так чтоб когда тянешь за хотспотину на этаже:
1. мой фрагмент не растягивался пропорционально - а добавлялось количество этих самых фрагментов
2. растягивание происходило только вдоль одной оси (X соответственно)

За ранее спасибо!
Название: Re: Предложение цикла FOR - TO - NEXT
Отправлено: lsr от Января 27, 2012, 11:57:48
Возникает вопрос о размере фрагмента и с каким шагом его тиражировать, нужен ли зазор?
Приращение цикла =A? Ошибка? Ведь A - это максимум

Вероятно цикл должен быть равным символу, ну и плюс зазор если надо.
N= int(A/L) !L-длина символа
 И я бы поместил add2 после фрагмента, а так ты сразу сдвигаешь, хотя конечно смотря какой фрагмент
Название: Re: Предложение цикла FOR - TO - NEXT
Отправлено: nideKer от Января 27, 2012, 12:19:42
Возникает вопрос о размере фрагмента и с каким шагом его тиражировать, нужен ли зазор?
Приращение цикла =A? Ошибка? Ведь A - это максимум
:) А - это и есть ширина моего элемента (без зазора).
И я бы поместил add2 после фрагмента, а так ты сразу сдвигаешь, хотя конечно смотря какой фрагмент
Да - это однозначно - сенксЪ!

Сережа я собственно и хотел бы чтоб мой библ был по аналогу твоего ограждения,  когда тянешь за угловую хотспотину в плане чтоб мой библ состоящий из  фрагментов не растягивался пропорционально - "а добавлялось количество этих самых фрагментов" и растягивание происходило только вдоль одной оси (X соответственно)
Название: Re: Предложение цикла FOR - TO - NEXT
Отправлено: lsr от Января 27, 2012, 14:28:13
У тебя размер символа (то что сидит во фрагменте) не может быть больше габарита - A     число шагов - n=A/L 
Вот накидал разные варианты- с не фиксированным зазором, с фиксированным , без зазора. Думаю тебе нужен второй вариант, в библе он по умолччанию сохранен.
Название: Re: Предложение цикла FOR - TO - NEXT
Отправлено: Sahasg552 от Декабря 14, 2012, 08:39:13
возник еще такого рода вопрос. имеется определенный элемент, например цилиндр, за хотспот его можно увеличивать по длине и нужно сделать так, что после достижении определенной длины, возьмем например 100 мм, цилиндр смещается вправо на размер ширины, и при этом за хотспот его все еще можно тянуть увеличивая размер. я пробовал с помощью if размер циллиндра >100 then и дальше прописывал смещение, но из этого вышло то, что на втором скрине... буду рад любой помощи.
Название: Re: Предложение цикла FOR - TO - NEXT
Отправлено: SABRUS от Декабря 21, 2012, 12:28:22
некогда проверить, но IMHO:
1. размер цилиндра должен быть параметром(не переменной)
2. птом В основном скрипте
if GLOB_MODPAR_NAME = "длина_цилиндра" then
if "длина_цилиндра">100 then
offset="ширина_стержня"
endif
endif
3. В 2d(3d) скрипте:
Add2 0, +(-)offset
(AddY 0, +(-)offset)

Название: Re: Предложение цикла FOR - TO - NEXT
Отправлено: Sahasg552 от Декабря 22, 2012, 18:40:28
что-то не получается у меня..
видимо совсем еще зеленый я для таких дел.. я понимаю, конечно, это будет наглостью, но я хотел бы попросить Вас сделать по-возможности этот элемент, а я уже поковырялся/поразбирался бы в коде на примере. был бы Вам очень признателен!
Название: Re: Предложение цикла FOR - TO - NEXT
Отправлено: SABRUS от Декабря 22, 2012, 22:22:39
кагбе чтобы что то делать надо понимать что именно делать, иначе...
обьясните что именно вы хотите, а дальше посмотрим.
Название: Re: Предложение цикла FOR - TO - NEXT
Отправлено: Sahasg552 от Декабря 22, 2012, 23:43:46
сори за неясность =) в общем нужен элемент - цилиндр, с определенным диаметром. цилиндр должен увеличиваться в длине посредством хотспотов, причем по достижении рубежа в 100 мм цилиндр смещается вверх на ширину диаметра и продолжает увеличиваться дальше, пока не достигнет еще 100 мм рубежа, после чего цилиндр смещается на ширину диаметра вниз и т.д. 
должно получиться как на 1-м скрине, который я выложил. я так подозреваю, что нужно действовать при помощи функции FOR i и NEXT i, но как, пока не разобрался. Насчет offset искал в справке, нашел только про смещение штриховок, по теме ничего нужного не нашел. спасибо за отклик =)
Название: Re: Предложение цикла FOR - TO - NEXT
Отправлено: ValeriyP от Декабря 23, 2012, 10:59:32
 .


сори за неясность =) в общем нужен элемент - цилиндр, с определенным диаметром. цилиндр должен увеличиваться в длине посредством хотспотов, причем по достижении рубежа в 100 мм цилиндр смещается вверх на ширину диаметра и продолжает увеличиваться дальше, пока не достигнет еще 100 мм рубежа, после чего цилиндр смещается на ширину диаметра вниз и т.д.
должно получиться как на 1-м скрине, который я выложил. я так подозреваю, что нужно действовать при помощи функции FOR i и NEXT i, но как, пока не разобрался. Насчет offset искал в справке, нашел только про смещение штриховок, по теме ничего нужного не нашел. спасибо за отклик =)


 ( FOR i и NEXT i,    )   =   FOR  Z=1  TO N  STEP 1

                                            ADDz   H  

                                             NEXT   Z  
           
 Попробую по прстому... для чайников без умных слов ( прошу извинения у многоуважаемой публики ) 
это нефункции.  Это команда  цикла.  Где 
  FOR......  - начало цикла... просто значит что начался цикл.  
  N -  параметр ( количество элементов в цикле ).... можно вставить функцию которая вычислит это количество- например из   " общей длинны". но число дожно получаться целым, иначе будет чёрте что.  Для  того чтою этого небыло, в мастер скрипт нужно ввести границы значений. ( построй профиль с помощью профелера и посмотри как это делается )
 STEP   -    шаг изменения переменной цикла. можно не писать- в этом случае он будет = 1
 H -             параметр ( " размер" цикла- то есть дистанция через которую он повторяется )  .... можно вставить функцию для его вычисления.
 NEXT   Z - конец цикла.... просто значит что закончился  цикл.  


 Исходя из вышеперечисленного можно сделать вывод- построить искомое весьма сложно- из за многих противоречий в функциях по вычислению значений параметров. ( для одного элемента это не очень сложно, для двух примитивов- пипец - смещаются координаты )
 Я проковырялся пол  часа   и плюнул. Можно поставить секущую плоскость с координатами значений параметра  "длинны"  и отсекать всё лишнее. Либо попробовать работать не с примитивами а с призмами-   координаты которых относительно нуля  заданны  при их построении.  В общем задачка на тему как высшей математике- поиграйтесь с  функциями. Я  вышку просто ненавидел.... может кто то любит больше и возьмётся. Для себя же какого то практического применения в решении данного  вопроса- просто не вижу.

    Спасибо за внимание

   
Название: Re: Предложение цикла FOR - TO - NEXT
Отправлено: Valery W от Декабря 24, 2012, 10:09:09
Вот Вам пример.
Даю 2D-скрипт. Аналогично делается и 3D-скрипт.
  A - длина всего элемента.
_A - это длина отрезка.
  B - толщина отрезка
_________________________________________________________
_A = 0.1
n = INT (A/_A)

FOR i=1 TO n
   ADD2 0, -B*(i/2=INT(i/2))
      GOSUB 1
   ADD2 _A, 0
   DEL 1*(i/2=INT(i/2)), NTR() -1
NEXT i

ADD2 0, -B*(i/2=INT(i/2))

_A = A-(n*_A)
IF _A > 0 THEN GOSUB 1
END

1:
FILL gs_Fill_type
   POLY2_B 5, 2, gs_fill_pen, gs_back_pen,
             0, B/2, 1,
            _A, B/2, 1,
            _A,-B/2, 1,
             0,-B/2, 1,
             0, B/2,-1
RETURN
_________________________________________________________

Это был "аскетичный" вид скрипта.
Ниже более простой.
_________________________________________________________
FILL gs_Fill_type
_A = 0.1
n = INT (A/_A)

FOR i=1 TO n
   IF i/2=INT(i/2) THEN
      ADD2 0, -B
   ENDIF

      POLY2_B 5, 2, gs_fill_pen, gs_back_pen,
                0, B/2, 1,
               _A, B/2, 1,
               _A,-B/2, 1,
                0,-B/2, 1,
                0, B/2,-1
  
   ADD2 _A, 0
   IF i/2=INT(i/2) THEN
      DEL 2
      ADD2 _A, 0
   ENDIF
NEXT i

IF i/2=INT(i/2) THEN
   ADD2 0, -B
ENDIF

_A = A-(n*_A)

IF _A > 0 THEN
   POLY2_B 5, 2, gs_fill_pen, gs_back_pen,
             0, B/2, 1,
            _A, B/2, 1,
            _A,-B/2, 1,
             0,-B/2, 1,
             0, B/2,-1
ENDIF
_________________________________________________________
Название: Re: Предложение цикла FOR - TO - NEXT
Отправлено: ValeriyP от Декабря 24, 2012, 10:35:33
Цитировать
Вот Вам пример как это сделать без секущих плоскостей.
Даю 2D-скрипт. Аналогично делается и 3D-скрипт.
Подход   научный- спасибо пригодится.
 
Название: Re: Предложение цикла FOR - TO - NEXT
Отправлено: SIMFF от Марта 17, 2013, 14:36:10
Коллеги, прошу помощи:
Пишу для себя Таблицу в GDL, хотелось бы сделать выделение строк таблицы штриховкой, через одну строку.
Как применить цикл приращения с шагом через строку, желание выразил картинкой (см. под кнопкой)
 
Извините, вам запрещён просмотр содержимого спойлеров.
Использовал следующую команду (см. под кнопкой), но результата не получил, посмотрите, подскажите... что дописать, что изменить
 
Извините, вам запрещён просмотр содержимого спойлеров.
Чтобы Вам не "ковыряться" с самого начала, прикладываю свой файл GDL
https://www.dropbox.com/s/sjr0w0zm87yj748/TABL_SH.rar (https://www.dropbox.com/s/sjr0w0zm87yj748/TABL_SH.rar)
Название: Re: Предложение цикла FOR - TO - NEXT
Отправлено: Valery W от Марта 17, 2013, 19:42:09
Если нужно, чтобы цикл выполнялся через два шага, то зачем писать STEP 1 вместо STEP 2?
Если нужно, чтобы штриховка начиналась со строки соответствующей шагу, то зачем задавать у нее начальные точки по координате Y равные 0?
Скопируйте свой результат из окна "Полный 2D-вид" в окно "2D-символ" и растащите штриховку, чтобы увидеть какие габариты у них вы получили. Или можно задать процентный тип штриховки, чтобы увидеть их послойно. Кстати, в параметрах для штриховки вы задали перо 0, что не допустимо, если не хотите постоянно получать сообщение об ошибке.

Если мне не удалось своими вопросами привести вас к правильному решению, то можете его подсмотреть в скрытом тексте.
Извините, вам запрещён просмотр содержимого спойлеров.
Название: Re: Предложение цикла FOR - TO - NEXT
Отправлено: SIMFF от Марта 17, 2013, 21:52:00
Valery W (http://cadstudio.ru/forum/index.php?action=profile;u=9465), спасибо за помощь. Все получилось.
Но понять, из ваших вопросов - НЕ понял, сделал все механически, потом вник и разобрался..
А вот это -
Скопируйте свой
результат из окна "Полный 2D-вид" в окно "2D-символ" и растащите
штриховку, чтобы увидеть какие габариты у них вы получили. Или можно
задать процентный тип штриховки, чтобы увидеть их послойно.
.....совсем не понятно
Если можно, более развернуто поясните.
Название: Re: Предложение цикла FOR - TO - NEXT
Отправлено: Valery W от Марта 18, 2013, 19:50:59
Чё-то и мне не понятно, что может быть не понятно. Вроде расписал все по пунктам, что делать.
Или не понятно зачем это делать?
Для того, чтобы визуально и тактильно прочувствовать, что написали скриптом. Вот для чего.
Название: Re: Предложение цикла FOR - TO - NEXT
Отправлено: ValeriyP от Июля 21, 2014, 23:09:51
Очень нужна команда цикла по радиусу для 3д скрипт.
Заранее большое спасибо.