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

Выгрузка 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 пользователей

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




  • Сообщения

    • Greenston
      в 2016-2017 версии FC было доступно много постов (потом их убрали). Их можно найти +- тут: \Program Files\Delcam\FeatureCAM 2016\Posts\Mill\5-Axis В том числе и на дмг. Ну без гарантий, канеш
    • Alexey8107
      Да, я написал При этом, после сбоя не помогает возврат в реф. А если задать систему координат заготовки то корректоры на инструмент становятся неверными. Возможно бред, но примерно так и есть. С другими станками такой проблемы нет. А с этим почему то каждый раз.
    • BSV1
      Еще забыли сообщить, где такое счастье расположено и как туды написАть.    ЗЫ И еще бы поменьше пионерского задора.
    • Greenston
      @Beliko у Вас пост написан на 2 канала (видимо, на 2 револьверные головы). Каждый канал чаще всего постпроцессируется в отдельный файл уп (но бывает и в один файл, как на Окумах). Надо либо пост править в 1 канал, либо искать одноканальный пост. И вообще лучше сначала спросить, на станке 1 револьверная голова?
    • maxx2000
      @ANT0N1DZE держи недостающее, выбери на свой вкус 
    • IgP
      Я прямо противоположного мнения. Это говорят те кто начинает в нём работать сами(без фундаментального обучения), после другого CADa. Но потом у них мнение меняется на противоположное. Этим заявлением, вы меня сильно огорчили (Слышал я как Windchill работает, и видел ваши вопросы выше - они меня повергали в ступор ..) а дальше то вы чего понаписали ... бред, вчера начали - увидели и давай помои поливать ... ну, флаг вам в руки ... про CAD продукты от отечественных разработчиков, просто намекну ...
    • Kelny
      Заменить на исходные, при замене первого компонента (ЗАМЕНИТЬ КОМПОНЕНТЫ) выбрат галочку ВСЕ.   Лучше весь день потерять, а потом за пять минут долететь. ... Крылья, крылья, тьфу... главное хвост (С)   Не переделаете сейчас, придётся потом не только передедывать, но и вспоминать как должно быть правильно и почему одинаковое не одинаково.
    • ANT0N1DZE
      В разделе "мы предлагаем" забыли самое интересное. 
    • brigval
      Детали по вашим чертежам в ведомость покупных изделий не вносятся.
    • malvi.dp
      В спецификации солида никак, только навести порядок и заменить одинаковые по параметрам детали, тогда они отобразятся под одной позицией с правильными количеством. Если это очень долго - сохранить спецификацию в Эксель, отсортировать и вручную сделать как нужно.
×
×
  • Создать...