Тема: Использование массивов

В общем задумка следующая, хочу решить задачу автоматического заполнения "ведомости расхода стали".
Для этого требуется, что бы объект имел динамические паблик параметы (ПП), и вроде как это возможно.
Array (UniqueD,s,1), "Уникальный диаметр". Требуется только выполнить проверку на уникальность.
Допустим арматурный каркас имеет 4ре типа стержней, которые могут быть одного диаметра d1,d2,d3,d4...
Тогда параметр s должен быть равен 1, а если все разные... то s = 4.
Я вроде написал как я понимаю эту проверку...

function ActHeader {
    Public(
    Array(UniqueD, s, 1), "Уникальный диаметр",
        )       
}
function OnInitialization {
    if(seted == UnknownValue) {
        seted=1;
                s = 0;
        }
}
function OnMakeParameters {
        s = 0; // проблема где то здесь
    i = 1;
    While(i < 5){
        found = FALSE;
        current = d[i];
        n = 1;
        While(n < 5){
            if (UniqueD[n] == current){
                found = TRUE;
                n = 5;
            }
            else{
                n = n+1;
                found = FALSE;
            };
        };
        if (found == FALSE){
                        s = s+1;
            UniqueD[s]=current;   
        }
        i=i+1;
    };
Но возникает проблема. Перед началом каждой проверки на уникальность, надо выставить s = 0; что бы он не уходил в бесконечное количество элементов массива. Но если это сделать так как сделано у меня, то почему количество элементов массива выставляется равным нулю, и не реагирует ни на что... Если s=0; убрать из функции OnMakeParameters, то 1 раз он считает все правильно, но последующие разы...он продолжает до бесконечности растить массив UniqueD.

Re: Использование массивов

Экспортируй объект и скинь в почту мне.

Re: Использование массивов

Спасибо!!! заработало! ) сам бы не допёр...
Теперь буду думать дальше, как бы всё устроить! )

Re: Использование массивов

Можно узнать где была ошибка и как должно выглядеть

Re: Использование массивов

Евгений, Я уже не помню, что там было. Если есть возможность, ответь!

Re: Использование массивов

Ну хоть какая то активность на форуме! а то я думал что вообще все повымерли ))
Вообще я задачу так и не решил, и отложил в сторону...поэтому и отрезал этот кусок кода от рабочей части...
Вроде должно быть так...
//Вот это рабочее!!!
//    s = 0;
//    i = 1;
//    While(i < 5){
//        found = FALSE;
//        current = d[i];
//        n = i+1;
//        While(n < 5){
//            if (d[n] == current){
//                found = TRUE;
//                n = 5;
//            }
//            else{
//                n = n+1;
//                found = FALSE;
//            };
//        };
//
//        if (found == FALSE){
//            s = s+1;
//            UnikD[s]=current;   
//        }
//        i=i+1;
//    }; Вот это!!!

Re: Использование массивов

function podbor
    {       
        i= int(t/120);
           
        while(i>0)
        {   
            LoadInCache(Marka_perem, Lmax_proem, massa_pr);
            SelectInCache( "1", "kFirst" , "Lmax_proem" , "~" , L );
           
            poz[i] = i;
           
            Sost_Pr[i] = Marka_perem;
           
                       
            i=i-1;
        };
                Sost_Pr1 = Sost_Pr[1];
        Sost_Pr2 = Sost_Pr[2];
        Sost_Pr3 = Sost_Pr[3];
        Sost_Pr4 = Sost_Pr[4];
        Sost_Pr5 = Sost_Pr[5];
        Sost_Pr6 = Sost_Pr[6];
        Sost_Pr6 = Sost_Pr[7];
    };

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

Re: Использование массивов

Не в тему, на двг.ру вопрос задавали "Разные ручки и свойства объектов СПДС
Elgoritm 
В объектах спдс я не нашел возможности использовать ручки типа отзеркалить или добавить (плюсик как в выносках), не нашел ручки выбора. Для меня не понятно почему их не используют, так как программно это легко устроить. Еще очень хочется, что бы табличные переменные отображались в свойствах AutoCADа выпадающим списком. Иногда выберешь несколько десяток элементов и захочешь поменять один параметр (строковой, например название перемычки) и не можешь вспомнить с пробелом там или через тире написано.... С выподающим списком как то проще... Форумчане, подскожите, я может этого всего просто еще не нашел? Ответьте, есть ли разные ручки и возможность использования выподающего списка в свойствах для объектов СПДС? Если нет, то этот вопрос к разработчикам СПДСа.". Вот хотелось бы узнать, может кто что знает

Re: Использование массивов

Не совсем понятно как работать с таблицами внутри параметрических объектов. С помощью оператора LoadInCache мы загружаем выбранные поля из таблицы в кэш, а если таблиц несколько и имена полей совпадают то из какой таблицы тогда будут загружаться поля непонятно. С выборкой понятно в справке написано "Для обеспечения выборки из не первой таблицы необходимо модифицировать оператор SelectInCache.
Например, если необходимо выбрать из таблицы Table1 параметр dr, равный 10, то первым условием в операторе выбора из таблицы должен следовать индекс таблицы (начинается с 0)". Может как и с выборкой можно указать какую таблицу загружать?

Re: Использование массивов

Игорь, ветка была посвещена массивам...сами понимаете, что пишете "не в тему" но все равно пишете! и зачем?
На тему ручек, уже была создана ветка, и там был дан конкретный ответ на Ваш вопрос, потрудитесь зайти в соседнюю тему и прочитать.

А вот цитата из руководства по MechWizard:
Если в детали присутствует несколько таблиц, то, при совпадении наименований параметров, необходимо включить галку «Использовать имя таблицы в качестве префикса параметров» в контекстном меню соответствующей таблицы.
В этом случае обращение к параметру в скрипте будет производиться следующим образом:
<Имя таблицы>.<Имя параметра>
Например:

If (Table0.dr==Table1.Thread1) {
    …
};
Для обеспечения выборки из не первой таблицы необходимо модифицировать оператор SelectInCache.
Например, если необходимо выбрать из таблицы Table1 параметр dr, равный 10, то первым условием в операторе выбора из таблицы должно следовать название таблицы:
SelectInCache(«Table1», «kFirst», «dr», «~», 10);
Для таблицы с имененм Table0 имя таблицы можно опускать. Т.е. справедливо и то и другое выражение:

SelectInCache ("kFirst", "dr", "~", 10, "L", "~", 50);

SelectInCache ("Table0","kFirst", "dr", "~", 10, "L", "~", 50);

Re: Использование массивов

Спасибо Евгений, справку я тоже могу прочитать, но там нет всех тонкостей работы скрипта и описание дано на основные команды.

Re: Использование массивов

а про ручки, нету так нужно сделать что бы было. А то с тем функционалом что сейчас есть у параметрических объектов они не совсем удобны

Re: Использование массивов

Я согласен, что эти "продвинутые" ручки были бы очень удобны. Но при их отсутствии вполне можно заменить их теми ручками, что уже есть.
Пусть выпадающий список у вас не получится, но отзеркаливание к примеру вполне можно устроить. И получается удобно. А вместо выпадающего списка, я сделал обычное переключение между режимами...когда список небольшой - прокатывает на ура.