Jump to content

ITK runtime property


Recommended Posts

butulec

Здравствуйте!

Вообщем есть runtime свойство у объекта, там отображаются объекты (те куда входит наш объект с определенным отношением)

Пытаемся реализовать на itk с помощью GRM_list_primary_objects_only(obj, relation_type, &numberOfObjects, &objects);

При выводе printf("numberOfObjects=%d\n", numberOfObjects); видно что объект 1 есть, но как правильно его отобразить в runtime свойстве?

Вот 

 была очень похожая проблема, но решения там нет. Может кто сталкивался, подскажите пожалуйста)

Link to post
Share on other sites


UnPinned posts
LongerSnake
// объявление функции аттрибута (получение списка заказов для УП)
int ncRequestList(METHOD_message_t* m, va_list args);

//определение
int ncRequestList(METHOD_message_t* m, va_list args) {
	va_arg(args, tag_t);
	const auto valueCount = va_arg(args, int*);
	const auto values = va_arg(args, tag_t**);
	const auto isNull = va_arg(args, logical**);
	const auto isEmpty = va_arg(args, logical**);

	const auto requests = getRequestsFromResult(m->object_tag, "Object_Revision");
	*valueCount = requests.size();
	*isNull = static_cast<logical*>(MEM_alloc(sizeof(logical) * *valueCount));
	*isEmpty = static_cast<logical*>(MEM_alloc(sizeof(logical) * *valueCount));
	*values = static_cast<tag_t*>(MEM_alloc(sizeof(tag_t) * *valueCount));
	*values = TCUtility::convertToTagArray(requests);

	return ITK_ok;
}
     //где getRequestsFromResult функция  прохожения по первичным обектам и нахождения заявок, внутри используется getPrimaryObjects
     // Преобразует вектор объектов в массив тэгов
TCObjectVector TCObject::getPrimaryObjects(const string& relation_name) const {
	TCObjectVector res = TCObjectVector();
	if (tag == NULLTAG) return res;

	tag_t relType = NULLTAG;
	ITKCALLLOG(GRM_find_relation_type(relation_name.c_str(), &relType));

	int obj_count;
	tag_t* obj_array;
	ITKCALLLOG(GRM_list_primary_objects_only(tag, relType, &obj_count, &obj_array));

	for (int i = 0; i < obj_count; i++) {
		res.push_back(TCObject(obj_array[i]));
	}

	MEM_free(obj_array);

	return res;
}
                                  
                                  
tag_t* TCUtility::convertToTagArray(const TCObjectVector& values) {
	tag_t* tag_arr = (tag_t*) MEM_alloc(values.size() * sizeof(tag_t));

	for (int i = 0; i < values.size(); i++) {
		TCObject val = values[i];
		tag_arr[i] = val.getTag();
	}

	return tag_arr;
}

 

Вот как-то примерно так реализую

 

Естественно все  классы самописные

Link to post
Share on other sites
butulec

Спасибо за пример!

Примерно так я и пытался сделать, но из за отсутствия ваших самописных классов не очень понятно некоторые моменты

 

Могли помочь, вот что у меня получилось

extern DLLAPI int getBackSolutionItem(METHOD_message_t *m, va_list args)
{

    int ifail = ITK_ok;
    va_arg(args, tag_t);
    const auto valueCount = va_arg(args, int*);
    const auto values = va_arg(args, tag_t**);
    const auto isNull = va_arg(args, logical**);
    const auto isEmpty = va_arg(args, logical**);

    *isNull = static_cast<logical*>(MEM_alloc(sizeof(logical)* *valueCount));
    *isEmpty = static_cast<logical*>(MEM_alloc(sizeof(logical)* *valueCount));
    *values = static_cast<tag_t*>(MEM_alloc(sizeof(tag_t)* *valueCount));
     
    tag_t obj = m->object_tag;   //это собственно таг ревизии
    tag_t relType = NULLTAG;
    GRM_find_relation_type("CMHasSolutionItem", &relType);
    int obj_count;
    tag_t* obj_array;

    GRM_list_primary_objects_only(obj, relType, &obj_count, &obj_array);
    tag_t* tag_arr = (tag_t*)MEM_alloc(obj_count * sizeof(tag_t));
    printf("obj_count=%d\n", obj_count);
    for (int i = 0; i < obj_count; i++) {
        tag_arr[i] = obj_array[i];
    }
    *values = tag_arr;
    MEM_free(obj_array);
 

    return ifail;
}

printf("obj_count=%d\n", obj_count); здесь выводится количество верное

и ранее я пытался WSOM_ask получить имя, оно тоже выводится, проблема именно добавить объекты в свойство 

Link to post
Share on other sites
butulec
extern DLLAPI int getBackSolutionItem(METHOD_message_t *m, va_list args)
{
    
    int ifail = ITK_ok;
    tag_t** values = va_arg(args, tag_t**);
    
    tag_t obj = m->object_tag;  
    tag_t relType = NULLTAG;
    int obj_count;
    tag_t* obj_array;

    GRM_find_relation_type("CMHasSolutionItem", &relType);
    GRM_list_primary_objects_only(obj, relType, &obj_count, &obj_array);

    char name[WSO_name_size_c + 1];
    char *id[WSO_name_size_c + 1];
    WSOM_ask_name(obj_array[0], name);
    WSOM_ask_id_string(obj_array[0], id);
    printf("obj_count=%d\n", obj_count);
    printf("II - %s-%s", *id, name);
    *values = static_cast<tag_t*>(MEM_alloc(sizeof(tag_t)* obj_count));
    *values = obj_array;
    MEM_free(obj_array);
   return ifail;
       
}

image.png

 

а в runtime свойстве все равно его нет, видимо 

*values = obj_array;

 

надо как то по другому

Link to post
Share on other sites
LongerSnake

А вы его в  BMIDE то сделали?

На вскидку  вроде  код  рабочий.

Link to post
Share on other sites
lexx174

вопрос закрыт

делали его классически как custom_exit

там просто он забыл параметр один получить,а так все верно

  • Нравится 1
Link to post
Share on other sites
3 часа назад, lexx174 сказал:

вопрос закрыт

делали его классически как custom_exit

там просто он забыл параметр один получить,а так все верно

Молодцы! :good: Если еще и выложите решение, то это будет полезно и другим участникам форума, которые могут столкнуться с похожей проблемой.

Link to post
Share on other sites
butulec

Да всем спасибо, действительно код который выше был с самописными классами рабочий, забыли что помимо присвоения массива надо еще присвоить количество

02.04.2021 в 11:36, LongerSnake сказал:

*valueCount = requests.size();

Вот этот момент мы упустили, но он оказался важным :D

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    No registered users viewing this page.



  • Сообщения

    • BSV1
      Это вирусы повылезали. 
    • brigval
      Если все чертежи в одном файле, то это плохая практика.
    • Blurp
      Возможно? Ты чё, родственник @romanuil ? Что значит "возможно"? Ну нарисуй на ватмане дугу и сверни этот ватман в рулон. Дуга возможно станет пространственной кривой? Это "инженеры" так рассуждают? Или дуга точно ею станет? И это понятно и школьнику. Ну-ну. Дуга, свернутая в рулон, радиус в пространстве не изменит, канеш. Ты какой-то странный. Блюрп взял твой же pdf. Сделал модель. И ты прикинь, как по его, так вполне себе похоже вышло на твою бумажную поделку. Но тут же ты пишешь, что боковые поверхности выглядят как-то не так   Там не всё нелинейно, чудик. А изделие состоит из трёх линейчатых и поэтому разворачиваемых поверхностей. Причем развернуться они могут не по отдельности, а вместе, единым куском. Что показывает соответствующая команда в SW и даже, млять, с графиком цветным. У тебя тоже с глазами не ахти? Реально в шары долбитесь на пару с @romanuil ?          
    • lexx174
      при нормальном положении дел - человек с 1й категорией будет иметь стаж не менее 6-8 лет, ведущие - еще больше.
    • Кварк
      Какой пафос еще?! Вы, два умника, компостировали мне мозг тут, говоря, что моя технология фуфло, сверла фуфло и ничего не получится. Про сверло без СОЖ тебе цитату привезти?  Я сделал и показал тебе. Все, залезь в будку, утомил.
    • AnnaUWCA
      оборонка - это отдельная тема) у нас есть релокационный пакет. Завод большой, вакансии есть не только в КБ, есть потребность также и в технологах в разные отделы
    • Fedor
      Как то попробовал, так все тело было в пупырышках из-за этого . Видно запарил плохо :) 
    • Lord
      Точно не скажу, ибо мат модели пока не придумал у процесса, но возможно изначальная дуга превращается в пространственную кривую. Естественно ни о каком смене радиуса не может быть и речи - "линия" гиба ведь по бумаге не перемещается! Если посмотреть на живой макет, то явно там всё не линейно. Это прекрасно демонстрирует лист бумаги. @Blurp советую распечатать в пропорциях твой пример и согнуть руками - уверен, боковые поверхности так выглядеть не будут.
    • Krasnoborod
      я скорее не правильно выразился, все знакомые говорят только о поворотной оси-(токарный патрон с приводом-поворотная ось), а у нас сам шпиндель поворачивается по оси "Х", если есть у кого что сказать, буду очень признателен, а вот видеоуроков пока не могу найти-все под то что мне не очень нужно...
    • Alex_Storm_73
      Сделал скрин своей беды... ну как картинку вставить????
×
×
  • Create New...