Перейти к публикации

Выгрузка Family Table в модели


Chapaev

Рекомендованные сообщения

Есть деталь в различных исполнениях, отраженных в family table.

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

Подозреваю, что тут надо писать какой-то макрос, то лько не знаю как и что.

у кого-нибудь есть идеи?

Ссылка на сообщение
Поделиться на других сайтах


Знаю, это противоречит самой сути таблиц семейств

Разве? А мне казалось, наоборот, испольнения надо именно в таблице семейства делать...

Пару сотен исполнений руками выгружать

Честно говоря у меня и это сразу не получается... :g:

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

Ссылка на сообщение
Поделиться на других сайтах

Можно, наверное, размножить сам файл. Потом в каждом файле выйти на нужную конфигурацию и затем "грохнуть" family table.

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

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

Нужно, не сохранять, а Сохранять как. И давать другое имя ( не может быть одновременно двух одинаковых имен).

Для автоматизации, нужно писать приложение на Toolkit.

Ссылка на сообщение
Поделиться на других сайтах

для таких случаев я использую PERL

с его помощью генерирую мапки который и делает всю рутинную работу

Ссылка на сообщение
Поделиться на других сайтах

А можно по-подробнее?

Примерчик? :smile:

пример кода который генерирует мапки для создания партов (много пустых партов)

$file_name = <dir.txt>;open (InFile, $file_name) || die;$name_out="create_parts.pro";open (OutFile, ">$name_out");print OutFile "mapkey \$F5";while ($line=<InFile>)	{	chomp($line);	$line=~ s/^\W//;	$line=~ s/^\s+//;	$line=~ tr/[A-Z]/[a-z]/;	($Model_Name,$type)=split(/\t/,$line);	# Define model name (this block of operators remove version of file in filename)	($Model_Name,$Ext) = split(/\./,$Model_Name);#	$Ext = "prt";#	$Model_Name = $Model_Name.".".$Ext;# Define template of model	$Model_Template="amana_start_prt.prt";#	if ($type=~/^s/i)#		{#		$Model_Template="steris_inlbs_sheetmetal.prt";#		}# Create new	print OutFile " ~ Activate `main_dlg_cur` `File.psh_new`;";	print OutFile "\\\nmapkey(continued) ~ Input `new` `InputPanel1` `$Model_Name`;";	print OutFile "\\\nmapkey(continued) ~ Activate `new` `chk_use_default_template`0 ;~ Activate `new` `OK`;";# Use template	print OutFile "\\\nmapkey(continued) ~ FocusIn `new_file_opts` `psh_ok`;~ Activate `new_file_opts` `psh_browse`;";#	print OutFile "\\\nmapkey(continued) ~ Select `file_open` `Ph_list.Filelist`1  `$Model_Template`;";	print OutFile "\\\nmapkey(continued) ~ Activate `file_open` `Ph_list.Filelist`1  `$Model_Template`;";#	print OutFile "\\\nmapkey(continued) ~ FocusIn `new_file_opts` `psh_browse`;";	print OutFile "\\\nmapkey(continued) ~ Activate `new_file_opts` `chk_create_drawing`0 ;";	print OutFile "\\\nmapkey(continued) ~ Activate `new_file_opts` `psh_ok`;";	#	print OutFile "\\\nmapkey(continued) ~ Activate `main_dlg_cur` `File.psh_save`;~ Activate `file_saveas` `OK`;";	print OutFile "\\\nmapkey(continued) %-; %er;";	};close (InFile);close (OutFile);

файл исходной информации dir.txt в которой находится список файлов (не оставлять в конце пустых строк)

результат - мапки в файле create_parts.pro

в конце используется вызов уже существующих пользовательських мапки

"-" сохранить

"er" очистить (ерейз)

Ссылка на сообщение
Поделиться на других сайтах

Ух ты! Очень хорошая идея, поздравляю! :clap_1:

Думал, будет какая-нибудь интеграция ПроЕ чисто с перлом. А у Вас - просто файл мапкея на выходе.

Это даже хорошо. Генерировать можно не привязывясь к языку программирования!

Спасибо.

Ссылка на сообщение
Поделиться на других сайтах

Можно еще извратиться следующим способом (должно по идее работать в Proe2001, в WF совсем не уверен):

Кнопка "Деталь": указать на парт с выгружаемой таблицей семейств.

Кнопка "Каталог": указать на папку, куда будут выгружены детали из таблицы семейств.

В файле config.ini укажите путь к вашему bat файлу Proe.

))

Ссылка на сообщение
Поделиться на других сайтах

Кстати, уважаемые скачавшие, отпишитесь по возможности пожалуйста насколько работоспособна программка (особенно в WildFire), поскольку тестить нет возможности.

Ссылка на сообщение
Поделиться на других сайтах

2 Olivaw: работает, но только с простыми таблицами семейств.

А мне нужно - чтоб с внутринними подтаблицами любой степени вложенности работал.

Запустил на такой - он выгрузил первую модельку и послал меня лесом :)

Ссылка на сообщение
Поделиться на других сайтах

А мне нужно - чтоб с внутринними подтаблицами любой степени вложенности работал.

Это наверное не проблема. Вот версия выгрузки с вложенными подсемействами. Ограничения на глубину вложенности - нет, ограничения на количество исполнений всего - 2147483647 ))

Опять-таки, в WildFire проверять Вам.

ext.zip

Ссылка на сообщение
Поделиться на других сайтах

работает, только почему-то выгружает первую модель из подсемейства и всё.

Ссылка на сообщение
Поделиться на других сайтах

работает, только почему-то выгружает первую модель из подсемейства и всё.

Давай любой парт с подсемействами, посмотрю внимательнее. И версия WF какая?

Ссылка на сообщение
Поделиться на других сайтах

Роюсь в ProToolkit User`s Guide, вот наткнулся на раздел о таблицах семейств, в конце - есть примерчик, по сути то, что мне нужно.

Только я не понимаю, как его в исполняемую прогу превратить :g:

Кто-нибудь в этом разбирается?

Example 1: Writing a Family Table to a File

The following example shows how to use the Pro/TOOLKIT

functions to write the contents of a family table to a file.

/*----------------------------------------------------------------*\

Application data

\*----------------------------------------------------------------*/

typedef struct userdata {

FILE *fp; /* file pointer */

ProFaminstance *fam_inst; /* family table instance */

ProFamtable fam_table; /* family table */

} UserData;

9 - 6 Pro/TOOLKIT User’s Guide

/*================================================================*\

FUNCTION: UserFamtableInstAct()

PURPOSE: Action function for ProFamtableInstanceVisit()

\*================================================================*/

ProError UserFamtableInstAct (

ProFaminstance *instance, /* In */

ProError filt_status, /* In */

ProAppData appdata) /* In */

Core: Family Tables

{

UserData *data = (UserData *) appdata;

int status;

ProCharName inst_name;

ProError UserFamtableItemAct();

ProFamtable *p_table = &data->fam_table;

/*----------------------------------------------------------------*\

Add the instance handle to the data.

\*----------------------------------------------------------------*/

data->fam_inst = instance;

/*----------------------------------------------------------------*\

Print the instance name in the family table file.

\*----------------------------------------------------------------*/

ProWstringToString (inst_name, instance->name);

fprintf (data->fp, "\nInstance name: %s\n", inst_name);

/*----------------------------------------------------------------*\

Visit each family table item.

\*----------------------------------------------------------------*/

status = ProFamtableCheck (p_table);

status = ProFamtableItemVisit (p_table,

(ProFamtableItemAction)UserFamtableItemAct, NULL, data);

return (0);

}

/*================================================================*\

FUNCTION: UserFamtableItemAct()

PURPOSE: Action function for ProFamtableItemVisit()

\*================================================================*/

ProError UserFamtableItemAct (

ProFamtableItem *fam_item, /* In */

ProError filt_status, /* In */

ProAppData appdata) /* In */

{

UserData *data = (UserData *) appdata;

ProCharName item_name, string_val;

char str1[PRO_NAME_SIZE];

int status;

ProParamvalue item_val;

int lock_status;

/*----------------------------------------------------------------*\

Get the name of the current table item (column).

\*----------------------------------------------------------------*/

ProWstringToString (item_name, fam_item->string);

Core: Family Tables 9 - 7

/*----------------------------------------------------------------*\

For the current instance, get the value of the current

table item.

\*----------------------------------------------------------------*/

status = ProFaminstanceValueGet (data->fam_inst, fam_item,

&item_val);

switch (item_val.type)

{

case PRO_PARAM_DOUBLE:

sprintf (str1, "%lf", item_val.value.d_val);

break;

case PRO_PARAM_STRING:

ProWstringToString (string_val, item_val.value.s_val);

sprintf (str1, "%s", string_val);

break;

case PRO_PARAM_INTEGER:

sprintf (str1, "%d", item_val.value.i_val);

break;

case PRO_PARAM_BOOLEAN:

sprintf (str1, "%d", item_val.value.l_val);

break;

case PRO_PARAM_NOTE_ID:

sprintf (str1, "%s", "PRO_PARAM_NOTE_ID");

break;

case PRO_PARAM_VOID:

sprintf (str1, "%s", "PRO_PARAM_VOID");

break;

default:

sprintf (str1, "%s", "No value.");

break;

}

fprintf (data->fp, "\tItem : %s \tValue: %s\n", item_name, str1);

return (0);

}

/*================================================================*\

FUNCTION: UserFamtable()

PURPOSE: Example function using the family table functions

\*================================================================*/

ProError UserFamtable (ProMdl model)

{

ProError UserFamtableInstAct();

ProFileName msgfile, wfname;

ProFamtable *p_famtable;

ProCharName fname;

int status;

UserData UsrData;

ProStringToWstring (msgfile, "testmsg.txt");

9 - 8 Pro/TOOLKIT User’s Guide

/*----------------------------------------------------------------*\

Retrieve the model's family table and add it to the user data.

\*----------------------------------------------------------------*/

status = ProFamtableInit (model, p_famtable);

UsrData.fam_table = *p_famtable;

/*----------------------------------------------------------------*\

Check the family table.

\*----------------------------------------------------------------*/

Core: Family Tables

status = ProFamtableCheck (p_famtable);

if (status == PRO_TK_E_NOT_FOUND)

{

ProMessageDisplay (msgfile, "TEST %0s", "The family table

does not exist.");

return (PRO_TK_E_NOT_FOUND);

}

/*----------------------------------------------------------------*\

Open a file for the family table data.

\*----------------------------------------------------------------*/

UsrData.fp = (FILE *) ProUtilGenFilePtr (model, ".ftb", fname,

"w+");

fprintf (UsrData.fp, "\nFamily table filename: %s\n",fname);

/*----------------------------------------------------------------*\

Visit each instance in the family table.

\*----------------------------------------------------------------*/

status = ProFamtableInstanceVisit (p_famtable,

(ProFamtableInstanceAction)UserFamtableInstAct, NULL,

(ProAppData)&UsrData);

/*----------------------------------------------------------------*\

Close the family table file.

\*----------------------------------------------------------------*/

fclose (UsrData.fp);

/*----------------------------------------------------------------*\

Display the family table.

\*----------------------------------------------------------------*/

ProStringToWstring (wfname, fname);

status = ProInfoWindowDisplay (wfname, NULL, NULL);

return (0);

}

Ссылка на сообщение
Поделиться на других сайтах

выслал, попробуйте

На основании высланного парта вот версия под структуру таблицы семейств WF4; в начале создаются файлы акселераторов для последующего автооткрытия - дождитесь окончания работы Proe.

Проверьте также на других деталях.

Указанный пример из Pro/Toolkit записывает не парты из таблицы семейств в отдельные парты, а таблицу семейств в текстовый файл. Pro/Toolkit вообще замечательная вещь, но если можно обойтись без него, то лучше обойтись без него ))

extwf.zip

Изменено пользователем Olivaw
Ссылка на сообщение
Поделиться на других сайтах

отлично работает, спасибо!

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

Ссылка на сообщение
Поделиться на других сайтах

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

Ссылка на сообщение
Поделиться на других сайтах

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

Самое простое что можно сделать - еще одну кнопочку типа "убить акселераторы", нажав на которую они удалятся. Если такой вариант устроит.

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

Да хоть в Excel или Word ))

Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.
Примечание: вашему сообщению потребуется утверждение модератора, прежде чем оно станет доступным.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.




×
×
  • Создать...