Добрый день Юра,

 

Посылаю тебе исходные коды программы, которая удаляет неиспользуемые фасеты, которые созданы в модуле обработки.

 

Эту проблему мне описали ваши технологи-программисты во время нашего последнего визита на КНААПО.

 

 

============НАЧАЛО КОДА========================

 

/*****************************************************************************

**

** Программа delete_unuse_facet_bodies.c

**

** Описание:

**     Удаляет все фасетные тела созданные в модуле обработки из файла детали.

** Разработчик: Чиж Олег

** Email: Oleg.Chizh@siemens.com

** Версия: 1.0

*****************************************************************************/

 

/* Файлы включения */

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <malloc.h>

 

#include <uf.h>

#include <uf_ui.h>

#include <uf_cfi.h>

#include <uf_obj.h>

#include <uf_object_types.h>

#include <uf_modl.h>

#include <uf_part.h>

#include <uf_attr.h>

#include <uf_curve.h>

#include <uf_csys.h>

#include <uf_disp.h>

 

#define UF_CALL(X) (report_error( __FILE__, __LINE__, #X, (X)))

 

static int report_error( char *file, int line, char *call, int irc)

{

   if(irc)

   {

      char err[133], msg[133];

 

      sprintf(msg, "*** ERROR code %d at line %d in %s:\n+++ ",

         irc, line, file);

      UF_get_fail_message(irc, err);

      UF_print_syslog(msg, FALSE);

      UF_print_syslog(err, FALSE);

      UF_print_syslog("\n", FALSE);

      UF_print_syslog(call, FALSE);

      UF_print_syslog(";\n", FALSE);

      if(!UF_UI_open_listing_window())

      {

         UF_UI_write_listing_window(msg);

         UF_UI_write_listing_window(err);

         UF_UI_write_listing_window("\n");

         UF_UI_write_listing_window(call);

         UF_UI_write_listing_window(";\n");

      }

   }

   return(irc);

}

 

/*****************************************************************************

**  Метод запуска

*****************************************************************************/

/*  Для запуска этой программы используйте

**      "File->Execute UG/Open->User Function..." */

extern DllExport void ufusr( char *parm, int *returnCode, int rlen )

{

   int count = 0, i;

   int type, subtype;

   char tmp_str[256+1] = "";

   tag_t *facet_to_delete;

   tag_t part_tag, object = NULL_TAG;

  

/*  Инициализация API */

    if(UF_CALL(UF_initialize()))

    {

/* Ошибка инициализации */

        return;

    }

/* Запрашиваем тег отображаемой детали */

   part_tag = UF_PART_ask_display_part();

/* Резервируем память для первого элемента массива тегов */

   facet_to_delete = (tag_t *) malloc(sizeof(tag_t));

/* Запускаем цикл по всем объектам в детали и формируем массив фасетных тел.

ЗАМАЧАНИЕ: Этот массив необходимо создать по причине того, что в этом цикле

нельзя сразу удалять объекты, так как алоритм работы этой функции предусматривает

ссылку на предидущий объект, и если мы его удаляем, цикл заканчивается */

    while((object = UF_OBJ_cycle_all(part_tag, object)) != NULL_TAG)

   {

/* Запрашивает тип и подтип объекта */

      UF_OBJ_ask_type_and_subtype(object, &type, &subtype);

/* Если тип == фасетное тело */

      if(type == UF_faceted_model_type) {

/* Записываем его в массив */

         facet_to_delete[count] = object;

/* Уваличиваем счетчик количества фасетов в массиве */

         count++;

/* Перераспределяем память массива фасетных тел */

         facet_to_delete = (tag_t *) realloc(facet_to_delete, sizeof(tag_t)*(count+1));

      }

   }

/* Запускаем цикл для удаления фасетных тел */

   for(i = 0; i < count; i++)

   {

      UF_CALL(UF_OBJ_delete_object(facet_to_delete[i]));

   }

/* Освобождаем память */

   free(facet_to_delete);

/* Выходим из API */

    UF_CALL(UF_terminate());

}

 

/*****************************************************************************

**  Утилиты

*****************************************************************************/

/* Выгружаем програму из памяти при окончании приложения */

extern int ufusr_ask_unload(void)

{

    return(UF_UNLOAD_IMMEDIATELY);

}

 

============НАЧАЛО КОДА========================

 

С уважением,

 

 

Oleg Chizh
CAD/CAM Consultant

Siemens Automation and Drives
UGS PLM Software

Krasnopresnenskaya nab., 12, office 504B
123610 Moscow
Russian Federation
Tel:    ++7 495 967 07 73
Fax:    ++7 495 967 07 75
Mobile: ++7 916 652 81 47
WWW:
www.siemens.com/ugs
E-mail: Oleg.Chizh@siemens.com

 

Hosted by uCoz