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

NX Open создание таблицы в Drafting'е


AVetal

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

Есть ли в NX Open C++ функции для работы с таблицами в модуле Drafting?

Поиск в документации слов типа table, row, tabular ничего не дал.

Запись в журнал во время работы NX, вставка таблицы, изменение текста внутри нее, размеров и т.п., приводит только к описанию действий NX типа: Меню, Инструменты, Таблица, Вставить

journal.cxx

// ----------------------------------------------

// Menu: Insert->Tabular Note...

// ----------------------------------------------

// ----------------------------------------------

// Menu: Tools->Table->Edit

// ----------------------------------------------

// ----------------------------------------------

// Menu: ═рчрф

// ----------------------------------------------

// ----------------------------------------------

// Menu: Tools->Table->Merge Cells

// ----------------------------------------------

// ----------------------------------------------

// Menu: Tools->Journal->Stop

// ----------------------------------------------

Подозреваю, что Annotations можно сделать Таблицами.

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


Есть ли в NX Open C++ функции для работы с таблицами в модуле Drafting?

Нету

Есть в С

ищи UF_TABNOT_...

Таблица не имеет того же типа что annotation

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

UF_TABNOT нашел, а как саму таблицу инициализоровать?

Пример там нет где можно посмотреть. :wallbash: ,

Вот пример создания таблицы

double knuckled_profile_report::make_table(double offest)

{ int irc, n_rows, n_cols, num_sections, i, j, shift_row;  double pt[3];

  UF_TABNOT_section_prefs_t tabnote_section_prefs, tabnote_section_prefs_save;

  UF_TABNOT_cell_prefs_t	tabnote_cell_prefs,	tabnote_cell_prefs_save;

  tag_t work_view_tag, wcs_tag, m_tag, csys_tag;

  int mpi[100]; double mpr[70]; char rp[27+1], dp[27+1];

  UF_ATTR_value_t attr_val; char sval[UF_ATTR_MAX_STRING_LEN+1];

  double box[6], ymin, ymax;



  try

  {

  irc=UF_DRF_ask_preferences(mpi, mpr, rp, dp);

  if(irc) throw ug_err(THIS_FILE, __LINE__, irc);



  irc=UF_CSYS_ask_wcs(&wcs_tag);

  if(irc) throw ug_err(THIS_FILE, __LINE__, irc);

  irc=UF_CSYS_create_matrix(matrix, &m_tag);

  if(irc) throw ug_err(THIS_FILE, __LINE__, irc);

  irc=UF_CSYS_create_temp_csys(map(0.0,-offest,pt), m_tag, &csys_tag);

  if(irc) throw ug_err(THIS_FILE, __LINE__, irc);



  irc=UF_TABNOT_ask_default_section_prefs(&tabnote_section_prefs);

  if(irc) throw ug_err(THIS_FILE, __LINE__, irc);

  tabnote_section_prefs_save=tabnote_section_prefs;

	tabnote_section_prefs.attach_point = UF_TABNOT_attach_point_t(UF_TABNOT_attach_point_top_left);

	tabnote_section_prefs.max_height = 0L;



  irc=UF_TABNOT_ask_default_cell_prefs(&tabnote_cell_prefs);

  if(irc) throw ug_err(THIS_FILE, __LINE__, irc);

  tabnote_cell_prefs_save=tabnote_cell_prefs;

	tabnote_cell_prefs.is_vertical = false;

	tabnote_cell_prefs.nm_fit_methods = 2;

	tabnote_cell_prefs.fit_methods[0] = UF_TABNOT_fit_method_t(UF_TABNOT_fit_method_auto_size_row);

	tabnote_cell_prefs.fit_methods[1] = UF_TABNOT_fit_method_t(UF_TABNOT_fit_method_auto_size_col);

	tabnote_cell_prefs.format = UF_TABNOT_format_t(UF_TABNOT_format_text);

	tabnote_cell_prefs.horiz_just = UF_TABNOT_just_t(UF_TABNOT_just_left);

	tabnote_cell_prefs.vert_just  = UF_TABNOT_just_t(UF_TABNOT_just_middle);

	if(flag_table_line_color)

	tabnote_cell_prefs.bottom_line_cfw[0]=tabnote_cell_prefs.right_line_cfw[0]=table_line_color;

	if(flag_table_line_font)

	tabnote_cell_prefs.bottom_line_cfw[1]=tabnote_cell_prefs.right_line_cfw[1]=table_line_font;

	if(flag_table_line_width)

	tabnote_cell_prefs.bottom_line_cfw[2]=tabnote_cell_prefs.right_line_cfw[2]=table_line_width;

	tabnote_cell_prefs.text_height = mpr[44];

	if(flag_table_text_height) tabnote_cell_prefs.text_height=table_text_height;

	if(flag_table_text_color)  tabnote_cell_prefs.text_color=table_text_color;

	if(flag_table_text_width)  tabnote_cell_prefs.text_density=table_text_width;



  irc=UF_TABNOT_set_default_section_prefs(&tabnote_section_prefs);

  if(irc) throw ug_err(THIS_FILE, __LINE__, irc);

  irc=UF_TABNOT_set_default_cell_prefs(&tabnote_cell_prefs);

  if(irc) throw ug_err(THIS_FILE, __LINE__, irc);

  irc=UF_CSYS_set_wcs(csys_tag);

  if(irc) throw ug_err(THIS_FILE, __LINE__, irc);



  irc=UF_TABNOT_create(&tabnote_section_prefs, pt, &tabnote_tag);

  if(irc) throw ug_err(THIS_FILE, __LINE__, irc);

  irc=UF_TABNOT_enable_automatic_update(false);

  if(irc) throw ug_err(THIS_FILE, __LINE__, irc);



	irc=UF_TABNOT_ask_nm_rows(tabnote_tag, &n_rows);

	if(irc) throw ug_err(THIS_FILE, __LINE__, irc);

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

	{ tag_t row_tag;

	irc=UF_TABNOT_ask_nth_row(tabnote_tag, 0, &row_tag);

	if(irc) throw ug_err(THIS_FILE, __LINE__, irc);

	irc=UF_TABNOT_remove_row(row_tag);

	if(irc) throw ug_err(THIS_FILE, __LINE__, irc);

	}



	irc=UF_TABNOT_ask_nm_columns(tabnote_tag, &n_cols);

	if(irc) throw ug_err(THIS_FILE, __LINE__, irc);

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

	{ tag_t col_tag;

	irc=UF_TABNOT_ask_nth_column(tabnote_tag, 0, &col_tag);

	if(irc) throw ug_err(THIS_FILE, __LINE__, irc);

	irc=UF_TABNOT_remove_column(col_tag);

	if(irc) throw ug_err(THIS_FILE, __LINE__, irc);

	}



	n_rows=1+((int)segments.size()<table_number_of_rows?(int)segments.size():table_number_of_rows);

	i=segments.size()/(n_rows-1);

	n_cols=5*( (double)segments.size()/(n_rows-1)-i > 0 ? i+1 : i );



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

	{ tag_t row_tag;

	irc=UF_TABNOT_create_row(10.0, &row_tag);

	if(irc) throw ug_err(THIS_FILE, __LINE__, irc);

	irc=UF_TABNOT_add_row(tabnote_tag, row_tag, 0);

	if(irc) throw ug_err(THIS_FILE, __LINE__, irc);

	}



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

	{ tag_t col_tag;

	irc=UF_TABNOT_create_column(10.0, &col_tag);

	if(irc) throw ug_err(THIS_FILE, __LINE__, irc);

	irc=UF_TABNOT_add_column(tabnote_tag, col_tag, 0);

	if(irc) throw ug_err(THIS_FILE, __LINE__, irc);

	}



	std::vector < std::vector <tag_t> > vvcells;

	vvcells.reserve(n_rows);



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

	{ std::vector <tag_t> vbuff; tag_t row_tag;

	irc=UF_TABNOT_ask_nth_row(tabnote_tag, i, &row_tag);

	if(irc) throw ug_err(THIS_FILE, __LINE__, irc);

		for (j=0; j<n_cols; j++)

		{ tag_t col_tag, cell_tag;

		irc=UF_TABNOT_ask_nth_column(tabnote_tag, j, &col_tag);

		if(irc) throw ug_err(THIS_FILE, __LINE__, irc);

		irc=UF_TABNOT_ask_cell_at_row_col(row_tag, col_tag, &cell_tag);

		if(irc) throw ug_err(THIS_FILE, __LINE__, irc);

		vbuff.push_back(cell_tag);

		}

	vvcells.push_back(vbuff);

	}





	for(i=0; i<(int)vvcells.at(0).size(); i++)

	{

	  if(1 == i%5)

	  {

	  irc=UF_TABNOT_set_cell_text(vvcells[0][i], "Distance Base");

	  if(irc) throw ug_err(THIS_FILE, __LINE__, irc);

	  }

	  if(3 == i%5)

	  {

	  irc=UF_TABNOT_set_cell_text(vvcells[0][i], "Distance Top");

	  if(irc) throw ug_err(THIS_FILE, __LINE__, irc);

	  }

	  if(4 == i%5)

	  {

	  irc=UF_TABNOT_set_cell_text(vvcells[0][i], "Knuckle Angle");

	  if(irc) throw ug_err(THIS_FILE, __LINE__, irc);

	  }

	irc=UF_TABNOT_set_cell_prefs(vvcells[0][i], &tabnote_cell_prefs);

	if(irc) throw ug_err(THIS_FILE, __LINE__, irc);

	}



	int txt_prec=-1; bool txt_tr_zer=true;

	if(flag_table_text_precision)		 txt_prec   = table_text_precision;

	if(flag_table_text_keep_trail_zeroes) txt_tr_zer = table_text_keep_trail_zeroes;

	for(i=1, j=1, shift_row=-5; i<(int)table_segments.size(); i++, j++)

	{

	if((i-1)%(n_rows-1) == 0) { shift_row+=5; j=1; }

	irc=UF_TABNOT_set_cell_text(vvcells[j][shift_row+0], table_segments[i].get_index().c_str());

	if(irc) throw ug_err(THIS_FILE, __LINE__, irc);

	irc=UF_TABNOT_set_cell_text(vvcells[j][shift_row+1], table_segments[i].get_dist_base(txt_prec, txt_tr_zer).c_str());

	if(irc) throw ug_err(THIS_FILE, __LINE__, irc);

	irc=UF_TABNOT_set_cell_text(vvcells[j][shift_row+2], table_segments[i].get_index().c_str());

	if(irc) throw ug_err(THIS_FILE, __LINE__, irc);

	irc=UF_TABNOT_set_cell_text(vvcells[j][shift_row+3], table_segments[i].get_dist_top(txt_prec, txt_tr_zer).c_str());

	if(irc) throw ug_err(THIS_FILE, __LINE__, irc);

	irc=UF_TABNOT_set_cell_text(vvcells[j][shift_row+4], table_segments[i].get_angle().c_str());

	if(irc) throw ug_err(THIS_FILE, __LINE__, irc);

	}



	if(flag_table_line_color)

	{

	irc=UF_OBJ_set_color(tabnote_tag, table_line_color);

	if(irc) throw ug_err(THIS_FILE, __LINE__, irc);

	}

	if(flag_table_line_font)

	{

	irc=UF_OBJ_set_font(tabnote_tag, table_line_font);

	if(irc) throw ug_err(THIS_FILE, __LINE__, irc);

	}

	if(flag_table_line_width)

	{

	irc=UF_OBJ_set_line_width(tabnote_tag, table_line_width);

	if(irc) throw ug_err(THIS_FILE, __LINE__, irc);

	}

	if(flag_table_text_layer)

	{

	irc=UF_OBJ_set_layer(tabnote_tag, table_text_layer);

	if(irc) throw ug_err(THIS_FILE, __LINE__, irc);

	}



  irc=UF_TABNOT_enable_automatic_update(true);

  if(irc) throw ug_err(THIS_FILE, __LINE__, irc);

  irc=UF_DRAW_update_tabnot(tabnote_tag);

  if(irc) throw ug_err(THIS_FILE, __LINE__, irc);

  irc=UF_CSYS_set_wcs(wcs_tag);

  if(irc) throw ug_err(THIS_FILE, __LINE__, irc);



  irc=UF_TABNOT_ask_nm_sections(tabnote_tag, &num_sections);

  if(irc) throw ug_err(THIS_FILE, __LINE__, irc);

	attr_val.type=UF_ATTR_string; attr_val.value.string = sval;

	strcpy(sval, value_attribute_mk_type_tabnote);

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

	{ tag_t section_tag;

	irc=UF_TABNOT_ask_nth_section(tabnote_tag, i, &section_tag);

	if(irc) throw ug_err(THIS_FILE, __LINE__, irc);

	tabnote_sections.push_back(section_tag);

	irc=UF_ATTR_assign(section_tag, name_attribute_mk_type, attr_val);

	if(irc) throw ug_err(THIS_FILE, __LINE__, irc);

	}



  irc=UF_VIEW_ask_work_view(&work_view_tag);

  if(irc) throw ug_err(THIS_FILE, __LINE__, irc);

  irc=UF_VIEW_convert_to_model(work_view_tag, tabnote_tag);

  if(irc) throw ug_err(THIS_FILE, __LINE__, irc);



  irc=UF_TABNOT_set_default_section_prefs(&tabnote_section_prefs_save);

  if(irc) throw ug_err(THIS_FILE, __LINE__, irc);

  irc=UF_TABNOT_set_default_cell_prefs(&tabnote_cell_prefs_save);

  if(irc) throw ug_err(THIS_FILE, __LINE__, irc);



  irc=UF_MODL_ask_bounding_box (tabnote_sections[0], box);

  if(irc) throw ug_err(THIS_FILE, __LINE__, irc);

  ymin=box[1]; ymax=box[4];

	for(i=1; i<num_sections; i++)

	{

	irc=UF_MODL_ask_bounding_box (tabnote_sections[i], box);

	if(irc) throw ug_err(THIS_FILE, __LINE__, irc);

	if(box[1] < ymin) ymin=box[1];

	if(box[4] > ymax) ymax=box[4];

	}



  }

  catch(base_err &e) { e.trace(THIS_FILE, __LINE__); throw; }

  catch(...)		 { base_err e(THIS_FILE, __LINE__, "System error"); throw e; }

return ymax-ymin;

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

Таблице как объекту имя можно присвоить (помимо tag_t), чтоб найти его на листе (для проверки: есть ли такой объект или нет)?

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

Таблице как объекту имя можно присвоить (помимо tag_t), чтоб найти его на листе (для проверки: есть ли такой объект или нет)?

Да таблице можно присвоить имя или назначить ей строковый аттрибут

Это позволит ее найти для модификации

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

Имя получилось присвоить, проблема в перемещение таблицы в новую точку.

В UF TABNOT есть установка координат таблицы только при создании. Изменить координаты видимо можно, использовав UF DRF. Примение UF_DRF_set_origin(tabnot_tag, pt), где double pt[3] приводит к ошибке.

Только что....

проблему решил, применив вместо tabnot_tag section. Т.е. сначало ищем объект с необходимым именем и берем у него tag_t

UF_OBJ_cycle_by_name("MAIN_TABLE",&same_tab);

затем, если этот tag_t != NULL_TAG, определяем tag_t section

UF_TABNOT_ask_nth_section(same_tab, 0, &section);

и тут выставляем новые координаты:

pt[0]=x0;

pt[1]=y0;

pt[2]=0;

UF_DRF_set_origin (section, pt);

и табличка в необходимом месте, без её перестройки и без запоминания данных полей :)

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

А как редактировать найденную таблицу?

делаю вот так:

UF_OBJ_cycle_by_name("TABLE",&finded_table);

	if(finded_table!=NULL_TAG)

	{

		 uc1601("Табл был найден",1);

		 i =  UF_TABNOT_ask_nth_row(finded_table,1,&row);		

	}

	if(i == 0)

	{

		  uc1601("Получили row",1);		

	}

	else

	{

		uc1601("ошибка",1); 

	}
Получаю первым сообщение "табл был найден", а вторым "ошибка"

вчем проблема, :wallbash:

подскажите пожалуйста.

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

int UF_OBJ_ask_type_and_subtype

(

tag_t object_id, 

int * type, 

int * subtype 

)



int UF_TABNOT_ask_nm_rows

(

tag_t tabnote, 

int * nm_rows 

)



int UF_get_fail_message

(

int fail_code, 

char message [ 133 ] 

)

Попробуй перевести код ошибки в текст

Посмотри сколько строк в таблице и есть ли там 2 строки

Посмотри действительно ли эта таблица

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

nut888 Спасибо

Проблема была решена:

Изначально я задавал имя таблице вручную, т.е. тык п.км св-ва, ->общие имя. Думал что задаю имя таблице, а оказалось неизвестно чему.

задал имя через UF_OBJ_set_name и все стало работать.

:)

Ссылка на сообщение
Поделиться на других сайтах
  • 9 месяцев спустя...

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

#include <stdio.h>

#include <stdlib.h>

#include <uf.h>

#include <uf_ui.h>

#include <uf_curve.h>

#include <uf_drf.h>

#include <uf_disp.h>

#include <uf_obj.h>

#include <string.h>

#include <uf_object_types.h>

#include <uf_tabnot.h>

#include <uf_disp.h>

#include <uf_view.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);

/*NOTE:UF_PRINT_SYSLOG IS NEW IN V18*/

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);

}

static void do_ugopen_api(void)

{

tag_t view_tag,tabular_note,cell,col,row;

int response;

double screen_pos[3]={0};

double origin[3]={0};

char template_name[133]="123_metric.prt"

int a[2]={0,0};

UF_UI_specify_screen_position(

"Input center",

NULL,

NULL,

screen_pos,

&view_tag,

&response );

origin[0]=screen_pos[0];

origin[1]=screen_pos[1];

UF_CALL(UF_TABNOT_create_from_template(template_name,origin,&tabular_note));

UF_CALL(UF_TABNOT_ask_nth_row(tabular_note,a[0],&row));

UF_CALL(UF_TABNOT_ask_nth_column(tabular_note,a[1],&col));

UF_CALL(UF_TABNOT_ask_cell_at_row_col(row,col,&cell));

UF_CALL(UF_TABNOT_set_cell_text(cell,"UXU"));

UF_CALL(UF_TABNOT_update(tabular_note));

}

void ufusr(char *param, int *retcode, int param_len)

{

if (!UF_CALL(UF_initialize()))

{

do_ugopen_api();

UF_CALL(UF_terminate());

}

}

int ufusr_ask_unload(void)

{

return (UF_UNLOAD_IMMEDIATELY);

}

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

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

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

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

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

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

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

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

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

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

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




  • Сообщения

    • Viktor2004
      если один блок старой версии, а другой новой, они будут не совместимы по протоколу
    • Sivolap36
      Доброго времени суток. Задались задачей подключения дополнительного привода. На станке установлен привод Ветта на три оси и шпиндель, управляется соответственно по шине FSSB. Стойка Oi-MF Plus. Нашли на торговых площадках привод Альфа на три оси, подключили постоянку к Бетта приводу, оптику, 24 вольт кабель. Конфигурируем 1023 ( Х=1, У=2, Z=3, А=4) , параметры 987 естественно установлено 4 оси, параметры 24000 тоже прописаны, пробовали и вручную и автоматом. Но проблема в том, что стойка не видит этот привод, нет ли подводных камней работы оптики на Бетта и Альфах? Мануал поконфигурации FSSB полностью прошерстили. Прилагаю фото приводов и настройки шины когда все четко работает без дополнтельного блока                
    • maxx2000
      @Andrey.V построить эквидистанту к поверхности или набору поверхностей и их объединить? 
    • gudstartup
      не хватает правильного hdd ведь совместимость идет не только на логическом т.е программном но и на аппаратном уровне. у ата устройств есть команда dev id по которой при необходимости загрузчик может получить информацию об устройстве а у вас там логически диск а физически все равно cf карта rfr nbg ecnhjqcndf и если ему не фиолетово то загружаться он не будет.  более новые системы прекрасно работают с ssd а вот ваши древние всегда преподносят сюрпризы совместимости.
    • Andrey.V
      Можно, но уходит много времени и не всегда это получается. Хотелось бы выделить и нажать кнопку объединить 
    • joolis1
      Большое спасибо, помогло 
    • FUH
      Добрый день!   У меня станок Reckermann RBZ-1320-ALPHA.   ЧПУ HEIDENHAIN TNC426.   Хотел заменить HDD. Снял образ с пропуском bad-блоков HD Clone и записывал на разные варианты 1) mSata 16Gb через переходник mSata-ide 2) CF карты 4Гб и 16Гб (2шт) через переходник 2xCF-ide   Станок загрузить с копий не удалось. С hdd висит Loader 3.0 секунд 10-15 и загружается, с моих ssd висит бесконечно.   Но если всунуть пустую CF карту, то предлагает восстановить и на этом висит. Ждал больше часа.   А если отказаться от восстановления то появляется меню из 6ти пунктов, где можно выполнить форматирование, которое завершается успешно и для 4гб и для 16гб. Создаются 3 пустых раздела. Для 16гб по 2гб, а для 4гб - 2гб, 166мб и 1,67гб. Из под Windows они распознаются как RAW, а из под Linux как FAT16. Пробовал скопировать на них файлы, все равно висит на Loader 3.0   Для извлечения диска приходится каждый раз снимать разбирать блок. HDD там в металлической корзинке и подвешен на резиночках. С CF удобнее - можно снять на месте. Уже думаю вывести ide-шлейф наружу для быстрой замены.   Что ему не хватает? Уж вроде при форматировании в стойке и закидывании файлов с пока еще работающего диска все должно работать? Все файлы с оригинала копируются, получается их не затронули bad-блоки.
    • fantom.ul
    • warriorzor
      На наших стойках сохранение по-другому: RI F пуск И вывод проги соответственно RI S пуск  
    • Fedor
×
×
  • Создать...